@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.
- package/README.md +24 -5
- package/dist/cli/index.js +2284 -194
- package/dist/index.cjs +50 -12
- package/dist/index.js +50 -12
- package/dist/motion/index.cjs +12 -0
- package/dist/motion/index.d.cts +7 -0
- package/dist/motion/index.d.ts +7 -0
- package/dist/motion/index.js +12 -0
- package/dist/registry/index.cjs +4 -4
- package/dist/registry/index.js +4 -4
- package/dist/tokens/index.cjs +34 -8
- package/dist/tokens/index.d.cts +23 -1
- package/dist/tokens/index.d.ts +23 -1
- package/dist/tokens/index.js +34 -8
- package/package.json +6 -1
- package/registry/blocks/about-approach-stack-cards/AboutApproachStackCards.tsx +305 -0
- package/registry/blocks/about-approach-stack-cards/index.ts +9 -0
- package/registry/blocks/about-bento/AboutBento.tsx +442 -0
- package/registry/blocks/about-bento/index.ts +9 -0
- package/registry/blocks/about-collage-hero/AboutCollageHero.tsx +285 -0
- package/registry/blocks/about-collage-hero/index.ts +8 -0
- package/registry/blocks/about-color-bento/AboutColorBento.tsx +235 -0
- package/registry/blocks/about-color-bento/index.ts +6 -0
- package/registry/blocks/about-culture-masonry/AboutCultureMasonry.tsx +305 -0
- package/registry/blocks/about-culture-masonry/index.ts +9 -0
- package/registry/blocks/about-headline-photos/AboutHeadlinePhotos.tsx +270 -0
- package/registry/blocks/about-headline-photos/index.ts +8 -0
- package/registry/blocks/about-impact-stats-band/AboutImpactStatsBand.test.tsx +45 -0
- package/registry/blocks/about-impact-stats-band/AboutImpactStatsBand.tsx +348 -0
- package/registry/blocks/about-impact-stats-band/index.ts +9 -0
- package/registry/blocks/about-letter-card/AboutLetterCard.tsx +403 -0
- package/registry/blocks/about-letter-card/index.ts +9 -0
- package/registry/blocks/about-mission-statement-hero/AboutMissionStatementHero.tsx +282 -0
- package/registry/blocks/about-mission-statement-hero/index.ts +8 -0
- package/registry/blocks/about-numbered-rows/AboutNumberedRows.tsx +289 -0
- package/registry/blocks/about-numbered-rows/index.ts +7 -0
- package/registry/blocks/about-split-panel/AboutSplitPanel.tsx +247 -0
- package/registry/blocks/about-split-panel/index.ts +8 -0
- package/registry/blocks/about-spotlight/AboutSpotlight.tsx +260 -0
- package/registry/blocks/about-spotlight/index.ts +7 -0
- package/registry/blocks/about-statement-band/AboutStatementBand.tsx +236 -0
- package/registry/blocks/about-statement-band/index.ts +7 -0
- package/registry/blocks/about-story-photos/AboutStoryPhotos.test.tsx +12 -0
- package/registry/blocks/about-story-photos/AboutStoryPhotos.tsx +252 -0
- package/registry/blocks/about-story-photos/index.ts +8 -0
- package/registry/blocks/about-story-snapshots/AboutStorySnapshots.tsx +239 -0
- package/registry/blocks/about-story-snapshots/index.ts +8 -0
- package/registry/blocks/about-type-stack/AboutTypeStack.tsx +205 -0
- package/registry/blocks/about-type-stack/index.ts +6 -0
- package/registry/blocks/about-values-connector-list/AboutValuesConnectorList.tsx +316 -0
- package/registry/blocks/about-values-connector-list/index.ts +7 -0
- package/registry/blocks/about-values-focus/AboutValuesFocus.tsx +303 -0
- package/registry/blocks/about-values-focus/index.ts +8 -0
- package/registry/blocks/about-values-spotlight/AboutValuesSpotlight.tsx +265 -0
- package/registry/blocks/about-values-spotlight/index.ts +8 -0
- package/registry/blocks/auth-centered-card-sign-in/AuthCenteredCardSignIn.tsx +373 -0
- package/registry/blocks/auth-centered-card-sign-in/index.ts +9 -0
- package/registry/blocks/auth-check-your-email/AuthCheckYourEmail.tsx +366 -0
- package/registry/blocks/auth-check-your-email/index.ts +7 -0
- package/registry/blocks/auth-forgot-password/AuthForgotPassword.tsx +265 -0
- package/registry/blocks/auth-forgot-password/index.ts +8 -0
- package/registry/blocks/auth-locked-session-re-authenticate/AuthLockedSessionReAuthenticate.tsx +305 -0
- package/registry/blocks/auth-locked-session-re-authenticate/index.ts +8 -0
- package/registry/blocks/auth-magic-link-request/AuthMagicLinkRequest.tsx +336 -0
- package/registry/blocks/auth-magic-link-request/index.ts +8 -0
- package/registry/blocks/auth-minimal-centered-sign-in/AuthMinimalCenteredSignIn.tsx +261 -0
- package/registry/blocks/auth-minimal-centered-sign-in/index.ts +8 -0
- package/registry/blocks/auth-multi-step-sign-up-wizard/AuthMultiStepSignUpWizard.tsx +460 -0
- package/registry/blocks/auth-multi-step-sign-up-wizard/index.ts +8 -0
- package/registry/blocks/auth-otp-verification/AuthOtpVerification.tsx +348 -0
- package/registry/blocks/auth-otp-verification/index.ts +7 -0
- package/registry/blocks/auth-passkey-sign-in/AuthPasskeySignIn.tsx +294 -0
- package/registry/blocks/auth-passkey-sign-in/index.ts +8 -0
- package/registry/blocks/auth-password-changed/AuthPasswordChanged.tsx +239 -0
- package/registry/blocks/auth-password-changed/index.ts +8 -0
- package/registry/blocks/auth-phone-number-sign-in/AuthPhoneNumberSignIn.tsx +402 -0
- package/registry/blocks/auth-phone-number-sign-in/index.ts +10 -0
- package/registry/blocks/auth-photo-background-sign-in/AuthPhotoBackgroundSignIn.tsx +398 -0
- package/registry/blocks/auth-photo-background-sign-in/index.ts +10 -0
- package/registry/blocks/auth-profile-setup-onboarding/AuthProfileSetupOnboarding.tsx +420 -0
- package/registry/blocks/auth-profile-setup-onboarding/index.ts +7 -0
- package/registry/blocks/auth-qr-device-login/AuthQrDeviceLogin.tsx +303 -0
- package/registry/blocks/auth-qr-device-login/index.ts +7 -0
- package/registry/blocks/auth-reset-password/AuthResetPassword.tsx +313 -0
- package/registry/blocks/auth-reset-password/index.ts +7 -0
- package/registry/blocks/auth-sign-in-error-state/AuthSignInErrorState.tsx +419 -0
- package/registry/blocks/auth-sign-in-error-state/index.ts +9 -0
- package/registry/blocks/auth-sign-up-benefits-column/AuthSignUpBenefitsColumn.tsx +481 -0
- package/registry/blocks/auth-sign-up-benefits-column/index.ts +10 -0
- package/registry/blocks/auth-sign-up-password-strength/AuthSignUpPasswordStrength.tsx +511 -0
- package/registry/blocks/auth-sign-up-password-strength/index.ts +8 -0
- package/registry/blocks/auth-social-first-sign-in/AuthSocialFirstSignIn.tsx +337 -0
- package/registry/blocks/auth-social-first-sign-in/index.ts +9 -0
- package/registry/blocks/auth-split-photo-sign-in/AuthSplitPhotoSignIn.tsx +472 -0
- package/registry/blocks/auth-split-photo-sign-in/index.ts +11 -0
- package/registry/blocks/auth-split-testimonial-sign-up/AuthSplitTestimonialSignUp.tsx +548 -0
- package/registry/blocks/auth-split-testimonial-sign-up/index.ts +11 -0
- package/registry/blocks/auth-tabbed-sign-in-sign-up/AuthTabbedSignInSignUp.tsx +566 -0
- package/registry/blocks/auth-tabbed-sign-in-sign-up/index.ts +11 -0
- package/registry/blocks/auth-team-invite-accept/AuthTeamInviteAccept.tsx +372 -0
- package/registry/blocks/auth-team-invite-accept/index.ts +9 -0
- package/registry/blocks/auth-two-factor-authenticator/AuthTwoFactorAuthenticator.tsx +333 -0
- package/registry/blocks/auth-two-factor-authenticator/index.ts +7 -0
- package/registry/blocks/auth-two-factor-method-chooser/AuthTwoFactorMethodChooser.tsx +290 -0
- package/registry/blocks/auth-two-factor-method-chooser/index.ts +8 -0
- package/registry/blocks/auth-waitlist-early-access/AuthWaitlistEarlyAccess.tsx +430 -0
- package/registry/blocks/auth-waitlist-early-access/index.ts +11 -0
- package/registry/blocks/blog-cards-alongside.test.tsx +176 -0
- package/registry/blocks/blog-cards-author-spotlight/BlogCardsAuthorSpotlight.tsx +342 -0
- package/registry/blocks/blog-cards-author-spotlight/index.ts +6 -0
- package/registry/blocks/blog-cards-bento-editorial-grid/BlogCardsBentoEditorialGrid.tsx +345 -0
- package/registry/blocks/blog-cards-bento-editorial-grid/index.ts +7 -0
- package/registry/blocks/blog-cards-browse.test.tsx +367 -0
- package/registry/blocks/blog-cards-classic-3-up-grid/BlogCardsClassic3UpGrid.tsx +287 -0
- package/registry/blocks/blog-cards-classic-3-up-grid/index.ts +7 -0
- package/registry/blocks/blog-cards-compact-4-up-thumb-grid/BlogCardsCompact4UpThumbGrid.tsx +265 -0
- package/registry/blocks/blog-cards-compact-4-up-thumb-grid/index.ts +7 -0
- package/registry/blocks/blog-cards-dark-editorial-feature/BlogCardsDarkEditorialFeature.tsx +287 -0
- package/registry/blocks/blog-cards-dark-editorial-feature/index.ts +6 -0
- package/registry/blocks/blog-cards-featured-two-up/BlogCardsFeaturedTwoUp.tsx +295 -0
- package/registry/blocks/blog-cards-featured-two-up/index.ts +7 -0
- package/registry/blocks/blog-cards-features.test.tsx +183 -0
- package/registry/blocks/blog-cards-filter-sidebar-results/BlogCardsFilterSidebarResults.tsx +582 -0
- package/registry/blocks/blog-cards-filter-sidebar-results/index.ts +6 -0
- package/registry/blocks/blog-cards-grids.test.tsx +110 -0
- package/registry/blocks/blog-cards-hairline-text-index/BlogCardsHairlineTextIndex.tsx +193 -0
- package/registry/blocks/blog-cards-hairline-text-index/index.ts +7 -0
- package/registry/blocks/blog-cards-journal-bento/BlogCardsJournalBento.tsx +409 -0
- package/registry/blocks/blog-cards-journal-bento/index.ts +8 -0
- package/registry/blocks/blog-cards-latest-popular-split/BlogCardsLatestPopularSplit.tsx +258 -0
- package/registry/blocks/blog-cards-latest-popular-split/index.ts +7 -0
- package/registry/blocks/blog-cards-lead-ranked-picks/BlogCardsLeadRankedPicks.tsx +276 -0
- package/registry/blocks/blog-cards-lead-ranked-picks/index.ts +6 -0
- package/registry/blocks/blog-cards-left-thumb-row-cards/BlogCardsLeftThumbRowCards.tsx +288 -0
- package/registry/blocks/blog-cards-left-thumb-row-cards/index.ts +7 -0
- package/registry/blocks/blog-cards-lists.test.tsx +93 -0
- package/registry/blocks/blog-cards-magazine-cover-story/BlogCardsMagazineCoverStory.tsx +326 -0
- package/registry/blocks/blog-cards-magazine-cover-story/index.ts +6 -0
- package/registry/blocks/blog-cards-newsletter-latest/BlogCardsNewsletterLatest.tsx +291 -0
- package/registry/blocks/blog-cards-newsletter-latest/index.ts +6 -0
- package/registry/blocks/blog-cards-numbered-reading-list/BlogCardsNumberedReadingList.tsx +275 -0
- package/registry/blocks/blog-cards-numbered-reading-list/index.ts +7 -0
- package/registry/blocks/blog-cards-overlay-photo-trio/BlogCardsOverlayPhotoTrio.tsx +279 -0
- package/registry/blocks/blog-cards-overlay-photo-trio/index.ts +7 -0
- package/registry/blocks/blog-cards-post-carousel-with-controls/BlogCardsPostCarouselWithControls.tsx +257 -0
- package/registry/blocks/blog-cards-post-carousel-with-controls/index.ts +6 -0
- package/registry/blocks/blog-cards-pull-quote-feature/BlogCardsPullQuoteFeature.tsx +245 -0
- package/registry/blocks/blog-cards-pull-quote-feature/index.ts +6 -0
- package/registry/blocks/blog-cards-related-posts-strip/BlogCardsRelatedPostsStrip.tsx +247 -0
- package/registry/blocks/blog-cards-related-posts-strip/index.ts +6 -0
- package/registry/blocks/blog-cards-search-chips-results/BlogCardsSearchChipsResults.tsx +473 -0
- package/registry/blocks/blog-cards-search-chips-results/index.ts +6 -0
- package/registry/blocks/blog-cards-split-feature/BlogCardsSplitFeature.tsx +214 -0
- package/registry/blocks/blog-cards-split-feature/index.ts +6 -0
- package/registry/blocks/careers/careers.test.tsx +414 -0
- package/registry/blocks/careers/careers.tsx +391 -0
- package/registry/blocks/careers/index.ts +27 -0
- package/registry/blocks/careers-about-card-role-list/CareersAboutCardRoleList.tsx +235 -0
- package/registry/blocks/careers-about-card-role-list/index.ts +8 -0
- package/registry/blocks/careers-featured-role-spotlight/CareersFeaturedRoleSpotlight.tsx +271 -0
- package/registry/blocks/careers-featured-role-spotlight/index.ts +8 -0
- package/registry/blocks/careers-no-open-roles-empty-state/CareersNoOpenRolesEmptyState.tsx +330 -0
- package/registry/blocks/careers-no-open-roles-empty-state/index.ts +8 -0
- package/registry/blocks/careers-open-roles-hairline-list/CareersOpenRolesHairlineList.tsx +320 -0
- package/registry/blocks/careers-open-roles-hairline-list/index.ts +6 -0
- package/registry/blocks/careers-open-vacancies-table/CareersOpenVacanciesTable.tsx +493 -0
- package/registry/blocks/careers-open-vacancies-table/index.ts +6 -0
- package/registry/blocks/careers-perks-benefits/CareersPerksBenefits.tsx +181 -0
- package/registry/blocks/careers-perks-benefits/index.ts +8 -0
- package/registry/blocks/careers-role-cards-grid/CareersRoleCardsGrid.tsx +405 -0
- package/registry/blocks/careers-role-cards-grid/index.ts +6 -0
- package/registry/blocks/careers-role-detail-page/CareersRoleDetailPage.tsx +541 -0
- package/registry/blocks/careers-role-detail-page/index.ts +10 -0
- package/registry/blocks/careers-role-detail-panel/CareersRoleDetailPanel.tsx +255 -0
- package/registry/blocks/careers-role-detail-panel/index.ts +6 -0
- package/registry/blocks/careers-roles-by-department/CareersRolesByDepartment.tsx +242 -0
- package/registry/blocks/careers-roles-by-department/index.ts +7 -0
- package/registry/blocks/careers-roles-list-accordion-expanded/CareersRolesListAccordionExpanded.tsx +558 -0
- package/registry/blocks/careers-roles-list-accordion-expanded/index.ts +9 -0
- package/registry/blocks/contact-us/contact-us.test.tsx +239 -0
- package/registry/blocks/contact-us/contact-us.tsx +989 -0
- package/registry/blocks/contact-us/index.ts +34 -0
- package/registry/blocks/contact-us-bento-grid/ContactUsBentoGrid.tsx +304 -0
- package/registry/blocks/contact-us-bento-grid/index.ts +5 -0
- package/registry/blocks/contact-us-bento-grid.test.tsx +102 -0
- package/registry/blocks/contact-us-book-a-call/ContactUsBookACall.tsx +403 -0
- package/registry/blocks/contact-us-book-a-call/index.ts +7 -0
- package/registry/blocks/contact-us-book-a-call.test.tsx +134 -0
- package/registry/blocks/contact-us-classic-centered/ContactUsClassicCentered.tsx +199 -0
- package/registry/blocks/contact-us-classic-centered/index.ts +6 -0
- package/registry/blocks/contact-us-dark-statement/ContactUsDarkStatement.tsx +218 -0
- package/registry/blocks/contact-us-dark-statement/index.ts +6 -0
- package/registry/blocks/contact-us-editorial-and-address-card/ContactUsEditorialAndAddressCard.tsx +212 -0
- package/registry/blocks/contact-us-editorial-and-address-card/index.ts +6 -0
- package/registry/blocks/contact-us-editorial-statement/ContactUsEditorialStatement.tsx +205 -0
- package/registry/blocks/contact-us-editorial-statement/index.ts +6 -0
- package/registry/blocks/contact-us-form-contact-methods/ContactUsFormContactMethods.tsx +272 -0
- package/registry/blocks/contact-us-form-contact-methods/index.ts +6 -0
- package/registry/blocks/contact-us-form-with-faq/ContactUsFormWithFaq.tsx +383 -0
- package/registry/blocks/contact-us-form-with-faq/index.ts +7 -0
- package/registry/blocks/contact-us-form-with-faq.test.tsx +161 -0
- package/registry/blocks/contact-us-forms.test.tsx +333 -0
- package/registry/blocks/contact-us-global-offices-table/ContactUsGlobalOfficesTable.tsx +301 -0
- package/registry/blocks/contact-us-global-offices-table/index.ts +5 -0
- package/registry/blocks/contact-us-global-offices-table.test.tsx +100 -0
- package/registry/blocks/contact-us-grand-headline-form/ContactUsGrandHeadlineForm.tsx +180 -0
- package/registry/blocks/contact-us-grand-headline-form/index.ts +6 -0
- package/registry/blocks/contact-us-hours-and-availability/ContactUsHoursAndAvailability.tsx +412 -0
- package/registry/blocks/contact-us-hours-and-availability/index.ts +5 -0
- package/registry/blocks/contact-us-hours-and-availability.test.tsx +123 -0
- package/registry/blocks/contact-us-hq-feature/ContactUsHqFeature.tsx +281 -0
- package/registry/blocks/contact-us-hq-feature/index.ts +5 -0
- package/registry/blocks/contact-us-hq-feature.test.tsx +102 -0
- package/registry/blocks/contact-us-map-split/ContactUsMapSplit.tsx +211 -0
- package/registry/blocks/contact-us-map-split/index.ts +5 -0
- package/registry/blocks/contact-us-map-split.test.tsx +70 -0
- package/registry/blocks/contact-us-named-owners/ContactUsNamedOwners.tsx +324 -0
- package/registry/blocks/contact-us-named-owners/index.ts +6 -0
- package/registry/blocks/contact-us-named-owners.test.tsx +116 -0
- package/registry/blocks/contact-us-newsletter-combo/ContactUsNewsletterCombo.tsx +363 -0
- package/registry/blocks/contact-us-newsletter-combo/index.ts +6 -0
- package/registry/blocks/contact-us-newsletter-combo.test.tsx +165 -0
- package/registry/blocks/contact-us-office-cards/ContactUsOfficeCards.tsx +235 -0
- package/registry/blocks/contact-us-office-cards/index.ts +5 -0
- package/registry/blocks/contact-us-office-cards.test.tsx +71 -0
- package/registry/blocks/contact-us-oversized-wordmark/ContactUsOversizedWordmark.tsx +222 -0
- package/registry/blocks/contact-us-oversized-wordmark/index.ts +6 -0
- package/registry/blocks/contact-us-photo-and-dark-panel/ContactUsPhotoAndDarkPanel.tsx +185 -0
- package/registry/blocks/contact-us-photo-and-dark-panel/index.ts +6 -0
- package/registry/blocks/contact-us-photo-forms.test.tsx +311 -0
- package/registry/blocks/contact-us-pitch-and-inquiry/ContactUsPitchAndInquiry.tsx +202 -0
- package/registry/blocks/contact-us-pitch-and-inquiry/index.ts +6 -0
- package/registry/blocks/contact-us-rtl.test.tsx +105 -0
- package/registry/blocks/contact-us-ruled-split-form/ContactUsRuledSplitForm.tsx +214 -0
- package/registry/blocks/contact-us-ruled-split-form/index.ts +6 -0
- package/registry/blocks/contact-us-social-rail/ContactUsSocialRail.tsx +270 -0
- package/registry/blocks/contact-us-social-rail/index.ts +7 -0
- package/registry/blocks/contact-us-social-rail.test.tsx +121 -0
- package/registry/blocks/contact-us-split-photo-dark/ContactUsSplitPhotoDark.tsx +185 -0
- package/registry/blocks/contact-us-split-photo-dark/index.ts +6 -0
- package/registry/blocks/contact-us-support-channels/ContactUsSupportChannels.tsx +267 -0
- package/registry/blocks/contact-us-support-channels/index.ts +5 -0
- package/registry/blocks/contact-us-support-channels.test.tsx +81 -0
- package/registry/blocks/data-table/DataTable.test.tsx +1 -34
- package/registry/blocks/data-table/DataTable.tsx +0 -139
- package/registry/blocks/data-table/index.ts +1 -8
- package/registry/blocks/error-state-access-denied-403/ErrorStateAccessDenied403.tsx +324 -0
- package/registry/blocks/error-state-access-denied-403/index.ts +10 -0
- package/registry/blocks/error-state-broken-trail-breadcrumb/ErrorStateBrokenTrailBreadcrumb.tsx +179 -0
- package/registry/blocks/error-state-broken-trail-breadcrumb/index.ts +8 -0
- package/registry/blocks/error-state-centered-minimal/ErrorStateCenteredMinimal.tsx +119 -0
- package/registry/blocks/error-state-centered-minimal/index.ts +7 -0
- package/registry/blocks/error-state-colour-field-scatter/ErrorStateColourFieldScatter.tsx +144 -0
- package/registry/blocks/error-state-colour-field-scatter/index.ts +7 -0
- package/registry/blocks/error-state-countdown-redirect/ErrorStateCountdownRedirect.tsx +272 -0
- package/registry/blocks/error-state-countdown-redirect/index.ts +7 -0
- package/registry/blocks/error-state-dark-spotlight/ErrorStateDarkSpotlight.tsx +156 -0
- package/registry/blocks/error-state-dark-spotlight/index.ts +7 -0
- package/registry/blocks/error-state-display-numeral-split/ErrorStateDisplayNumeralSplit.tsx +156 -0
- package/registry/blocks/error-state-display-numeral-split/index.ts +8 -0
- package/registry/blocks/error-state-editorial-photo-split/ErrorStateEditorialPhotoSplit.tsx +156 -0
- package/registry/blocks/error-state-editorial-photo-split/index.ts +8 -0
- package/registry/blocks/error-state-empty-search-results/ErrorStateEmptySearchResults.tsx +243 -0
- package/registry/blocks/error-state-empty-search-results/index.ts +6 -0
- package/registry/blocks/error-state-error-card-panel/ErrorStateErrorCardPanel.tsx +213 -0
- package/registry/blocks/error-state-error-card-panel/index.ts +7 -0
- package/registry/blocks/error-state-full-bleed-photo/ErrorStateFullBleedPhoto.tsx +130 -0
- package/registry/blocks/error-state-full-bleed-photo/index.ts +8 -0
- package/registry/blocks/error-state-ghost-watermark/ErrorStateGhostWatermark.tsx +115 -0
- package/registry/blocks/error-state-ghost-watermark/index.ts +7 -0
- package/registry/blocks/error-state-helpful-links-list/ErrorStateHelpfulLinksList.tsx +185 -0
- package/registry/blocks/error-state-helpful-links-list/index.ts +8 -0
- package/registry/blocks/error-state-illustrated-empty-state/ErrorStateIllustratedEmptyState.tsx +201 -0
- package/registry/blocks/error-state-illustrated-empty-state/index.ts +7 -0
- package/registry/blocks/error-state-layered-badge-centered/ErrorStateLayeredBadgeCentered.tsx +138 -0
- package/registry/blocks/error-state-layered-badge-centered/index.ts +7 -0
- package/registry/blocks/error-state-light-editorial/ErrorStateLightEditorial.tsx +126 -0
- package/registry/blocks/error-state-light-editorial/index.ts +7 -0
- package/registry/blocks/error-state-maintenance-mode/ErrorStateMaintenanceMode.tsx +255 -0
- package/registry/blocks/error-state-maintenance-mode/index.ts +6 -0
- package/registry/blocks/error-state-marquee-404-band/ErrorStateMarquee404Band.tsx +316 -0
- package/registry/blocks/error-state-marquee-404-band/index.ts +7 -0
- package/registry/blocks/error-state-offline-state/ErrorStateOfflineState.tsx +188 -0
- package/registry/blocks/error-state-offline-state/index.ts +7 -0
- package/registry/blocks/error-state-photo-collage-scatter/ErrorStatePhotoCollageScatter.tsx +224 -0
- package/registry/blocks/error-state-photo-collage-scatter/index.ts +8 -0
- package/registry/blocks/error-state-popular-pages-grid/ErrorStatePopularPagesGrid.tsx +195 -0
- package/registry/blocks/error-state-popular-pages-grid/index.ts +9 -0
- package/registry/blocks/error-state-recovery-bento/ErrorStateRecoveryBento.tsx +274 -0
- package/registry/blocks/error-state-recovery-bento/index.ts +7 -0
- package/registry/blocks/error-state-search-recovery/ErrorStateSearchRecovery.tsx +173 -0
- package/registry/blocks/error-state-search-recovery/index.ts +7 -0
- package/registry/blocks/error-state-server-error-500/ErrorStateServerError500.tsx +277 -0
- package/registry/blocks/error-state-server-error-500/index.ts +9 -0
- package/registry/blocks/error-state-sitemap-columns/ErrorStateSitemapColumns.tsx +192 -0
- package/registry/blocks/error-state-sitemap-columns/index.ts +9 -0
- package/registry/blocks/error-state-split-colour-panel/ErrorStateSplitColourPanel.tsx +156 -0
- package/registry/blocks/error-state-split-colour-panel/index.ts +7 -0
- package/registry/blocks/error-state-support-escalation-band/ErrorStateSupportEscalationBand.tsx +186 -0
- package/registry/blocks/error-state-support-escalation-band/index.ts +8 -0
- package/registry/blocks/error-state-terminal-console/ErrorStateTerminalConsole.tsx +208 -0
- package/registry/blocks/error-state-terminal-console/index.ts +8 -0
- package/registry/blocks/faq-accent-active-card/FaqAccentActiveCard.tsx +186 -0
- package/registry/blocks/faq-accent-active-card/index.ts +1 -0
- package/registry/blocks/faq-category-chip-grid/FaqCategoryChipGrid.tsx +425 -0
- package/registry/blocks/faq-category-chip-grid/index.ts +8 -0
- package/registry/blocks/faq-category-columns/FaqCategoryColumns.tsx +248 -0
- package/registry/blocks/faq-category-columns/index.ts +8 -0
- package/registry/blocks/faq-chat-thread/FaqChatThread.tsx +273 -0
- package/registry/blocks/faq-chat-thread/index.ts +7 -0
- package/registry/blocks/faq-classic-centered/FaqClassicCentered.tsx +190 -0
- package/registry/blocks/faq-classic-centered/index.ts +7 -0
- package/registry/blocks/faq-contact-cta-card/FaqContactCtaCard.tsx +229 -0
- package/registry/blocks/faq-contact-cta-card/index.ts +9 -0
- package/registry/blocks/faq-dark-panel/FaqDarkPanel.tsx +186 -0
- package/registry/blocks/faq-dark-panel/index.ts +1 -0
- package/registry/blocks/faq-featured-question/FaqFeaturedQuestion.tsx +221 -0
- package/registry/blocks/faq-featured-question/index.ts +1 -0
- package/registry/blocks/faq-grouped-sections/FaqGroupedSections.tsx +266 -0
- package/registry/blocks/faq-grouped-sections/index.ts +8 -0
- package/registry/blocks/faq-help-hero-popular/FaqHelpHeroPopular.tsx +212 -0
- package/registry/blocks/faq-help-hero-popular/index.ts +7 -0
- package/registry/blocks/faq-masonry-cards/FaqMasonryCards.tsx +268 -0
- package/registry/blocks/faq-masonry-cards/index.ts +7 -0
- package/registry/blocks/faq-media-split/FaqMediaSplit.tsx +197 -0
- package/registry/blocks/faq-media-split/index.ts +8 -0
- package/registry/blocks/faq-mono-index/FaqMonoIndex.tsx +247 -0
- package/registry/blocks/faq-mono-index/index.ts +1 -0
- package/registry/blocks/faq-newsletter-close/FaqNewsletterClose.tsx +314 -0
- package/registry/blocks/faq-newsletter-close/index.ts +8 -0
- package/registry/blocks/faq-numbered-editorial/FaqNumberedEditorial.tsx +190 -0
- package/registry/blocks/faq-numbered-editorial/index.ts +1 -0
- package/registry/blocks/faq-search-categories/FaqSearchCategories.tsx +312 -0
- package/registry/blocks/faq-search-categories/index.ts +8 -0
- package/registry/blocks/faq-sidebar-nav/FaqSidebarNav.tsx +390 -0
- package/registry/blocks/faq-sidebar-nav/index.ts +8 -0
- package/registry/blocks/faq-soft-filled-rows/FaqSoftFilledRows.tsx +209 -0
- package/registry/blocks/faq-soft-filled-rows/index.ts +1 -0
- package/registry/blocks/faq-split-sticky/FaqSplitSticky.tsx +205 -0
- package/registry/blocks/faq-split-sticky/index.ts +7 -0
- package/registry/blocks/faq-support-channels/FaqSupportChannels.tsx +266 -0
- package/registry/blocks/faq-support-channels/index.ts +8 -0
- package/registry/blocks/faq-support-stats/FaqSupportStats.tsx +242 -0
- package/registry/blocks/faq-support-stats/index.ts +8 -0
- package/registry/blocks/faq-table-compact/FaqTableCompact.tsx +220 -0
- package/registry/blocks/faq-table-compact/index.ts +1 -0
- package/registry/blocks/faq-tabs-by-topic/FaqTabsByTopic.tsx +347 -0
- package/registry/blocks/faq-tabs-by-topic/index.ts +8 -0
- package/registry/blocks/faq-topic-tiles/FaqTopicTiles.tsx +254 -0
- package/registry/blocks/faq-topic-tiles/index.ts +7 -0
- package/registry/blocks/faq-two-column-grid/FaqTwoColumnGrid.tsx +256 -0
- package/registry/blocks/faq-two-column-grid/index.ts +7 -0
- package/registry/blocks/faq-uppercase-dense/FaqUppercaseDense.tsx +213 -0
- package/registry/blocks/faq-uppercase-dense/index.ts +1 -0
- package/registry/blocks/features/features.tsx +164 -0
- package/registry/blocks/features/index.ts +12 -0
- package/registry/blocks/features-accordion-photo/FeaturesAccordionPhoto.tsx +149 -0
- package/registry/blocks/features-accordion-photo/index.ts +7 -0
- package/registry/blocks/features-colour-block-cards/FeaturesColourBlockCards.tsx +118 -0
- package/registry/blocks/features-colour-block-cards/index.ts +8 -0
- package/registry/blocks/features-compact-icon-index/FeaturesCompactIconIndex.tsx +136 -0
- package/registry/blocks/features-compact-icon-index/index.ts +7 -0
- package/registry/blocks/features-compare-panels-chat-answer/FeaturesComparePanelsChatAnswer.tsx +346 -0
- package/registry/blocks/features-compare-panels-chat-answer/index.ts +8 -0
- package/registry/blocks/features-editorial-photo-split/FeaturesEditorialPhotoSplit.tsx +118 -0
- package/registry/blocks/features-editorial-photo-split/index.ts +7 -0
- package/registry/blocks/features-expanding-step-cards/FeaturesExpandingStepCards.tsx +300 -0
- package/registry/blocks/features-expanding-step-cards/index.ts +7 -0
- package/registry/blocks/features-feature-checklist-columns/FeaturesFeatureChecklistColumns.tsx +158 -0
- package/registry/blocks/features-feature-checklist-columns/index.ts +7 -0
- package/registry/blocks/features-feature-list-thumbnails/FeaturesFeatureListThumbnails.tsx +137 -0
- package/registry/blocks/features-feature-list-thumbnails/index.ts +7 -0
- package/registry/blocks/features-full-bleed-photo-banner/FeaturesFullBleedPhotoBanner.tsx +116 -0
- package/registry/blocks/features-full-bleed-photo-banner/index.ts +7 -0
- package/registry/blocks/features-icon-card-grid/FeaturesIconCardGrid.tsx +120 -0
- package/registry/blocks/features-icon-card-grid/index.ts +7 -0
- package/registry/blocks/features-icon-titled-preview-rail/FeaturesIconTitledPreviewRail.tsx +321 -0
- package/registry/blocks/features-icon-titled-preview-rail/index.ts +7 -0
- package/registry/blocks/features-icons-numbers.test.tsx +107 -0
- package/registry/blocks/features-interactive.test.tsx +175 -0
- package/registry/blocks/features-media-rail/FeaturesMediaRail.tsx +119 -0
- package/registry/blocks/features-media-rail/index.ts +7 -0
- package/registry/blocks/features-notched-photo-columns/FeaturesNotchedPhotoColumns.tsx +209 -0
- package/registry/blocks/features-notched-photo-columns/index.ts +7 -0
- package/registry/blocks/features-numbered-feature-rows/FeaturesNumberedFeatureRows.tsx +107 -0
- package/registry/blocks/features-numbered-feature-rows/index.ts +7 -0
- package/registry/blocks/features-numbered-steps-floating-cards/FeaturesNumberedStepsFloatingCards.tsx +324 -0
- package/registry/blocks/features-numbered-steps-floating-cards/index.ts +8 -0
- package/registry/blocks/features-perforated-photo-strip/FeaturesPerforatedPhotoStrip.tsx +218 -0
- package/registry/blocks/features-perforated-photo-strip/index.ts +7 -0
- package/registry/blocks/features-photo-bento/FeaturesPhotoBento.tsx +160 -0
- package/registry/blocks/features-photo-bento/index.ts +8 -0
- package/registry/blocks/features-photo-carousel/FeaturesPhotoCarousel.tsx +249 -0
- package/registry/blocks/features-photo-carousel/index.ts +7 -0
- package/registry/blocks/features-photo-collage/FeaturesPhotoCollage.tsx +143 -0
- package/registry/blocks/features-photo-collage/index.ts +7 -0
- package/registry/blocks/features-photo-feature-chips/FeaturesPhotoFeatureChips.tsx +125 -0
- package/registry/blocks/features-photo-feature-chips/index.ts +7 -0
- package/registry/blocks/features-photo-led.test.tsx +177 -0
- package/registry/blocks/features-photo-tabs-panel/FeaturesPhotoTabsPanel.tsx +197 -0
- package/registry/blocks/features-photo-tabs-panel/index.ts +7 -0
- package/registry/blocks/features-portrait-photo-cards-link-row/FeaturesPortraitPhotoCardsLinkRow.tsx +202 -0
- package/registry/blocks/features-portrait-photo-cards-link-row/index.ts +7 -0
- package/registry/blocks/features-product-in-use.test.tsx +188 -0
- package/registry/blocks/features-showcase-card-pair/FeaturesShowcaseCardPair.tsx +161 -0
- package/registry/blocks/features-showcase-card-pair/index.ts +7 -0
- package/registry/blocks/features-solid-colour-cards/FeaturesSolidColourCards.tsx +264 -0
- package/registry/blocks/features-solid-colour-cards/index.ts +7 -0
- package/registry/blocks/features-split-photo-icon-list/FeaturesSplitPhotoIconList.tsx +117 -0
- package/registry/blocks/features-split-photo-icon-list/index.ts +7 -0
- package/registry/blocks/features-stat-feature-band/FeaturesStatFeatureBand.tsx +114 -0
- package/registry/blocks/features-stat-feature-band/index.ts +7 -0
- package/registry/blocks/features-tinted-product-bento/FeaturesTintedProductBento.tsx +252 -0
- package/registry/blocks/features-tinted-product-bento/index.ts +7 -0
- package/registry/blocks/footer/footer.test.tsx +253 -0
- package/registry/blocks/footer/footer.tsx +554 -0
- package/registry/blocks/footer/index.ts +31 -0
- package/registry/blocks/footer-accordion-sitemap/FooterAccordionSitemap.tsx +260 -0
- package/registry/blocks/footer-accordion-sitemap/index.ts +7 -0
- package/registry/blocks/footer-bars.test.tsx +121 -0
- package/registry/blocks/footer-bento-tile/FooterBentoTile.tsx +331 -0
- package/registry/blocks/footer-bento-tile/index.ts +6 -0
- package/registry/blocks/footer-big-question-cta/FooterBigQuestionCta.tsx +250 -0
- package/registry/blocks/footer-big-question-cta/index.ts +6 -0
- package/registry/blocks/footer-big-type-link-stack/FooterBigTypeLinkStack.tsx +275 -0
- package/registry/blocks/footer-big-type-link-stack/index.ts +6 -0
- package/registry/blocks/footer-brand-panel-split/FooterBrandPanelSplit.tsx +163 -0
- package/registry/blocks/footer-brand-panel-split/index.ts +6 -0
- package/registry/blocks/footer-brand.test.tsx +608 -0
- package/registry/blocks/footer-careers-culture/FooterCareersCulture.tsx +297 -0
- package/registry/blocks/footer-careers-culture/index.ts +7 -0
- package/registry/blocks/footer-centered-brand-minimal/FooterCenteredBrandMinimal.tsx +121 -0
- package/registry/blocks/footer-centered-brand-minimal/index.ts +6 -0
- package/registry/blocks/footer-commerce.test.tsx +208 -0
- package/registry/blocks/footer-community-events/FooterCommunityEvents.tsx +263 -0
- package/registry/blocks/footer-community-events/index.ts +8 -0
- package/registry/blocks/footer-community.test.tsx +309 -0
- package/registry/blocks/footer-contact-first/FooterContactFirst.tsx +242 -0
- package/registry/blocks/footer-contact-first/index.ts +7 -0
- package/registry/blocks/footer-contact.test.tsx +285 -0
- package/registry/blocks/footer-controls.test.tsx +78 -0
- package/registry/blocks/footer-cta-band-columns/FooterCtaBandColumns.tsx +225 -0
- package/registry/blocks/footer-cta-band-columns/index.ts +6 -0
- package/registry/blocks/footer-cta.test.tsx +445 -0
- package/registry/blocks/footer-dashboard-slim-bar/FooterDashboardSlimBar.tsx +148 -0
- package/registry/blocks/footer-dashboard-slim-bar/index.ts +6 -0
- package/registry/blocks/footer-docs-page/FooterDocsPage.tsx +261 -0
- package/registry/blocks/footer-docs-page/index.ts +9 -0
- package/registry/blocks/footer-ecommerce-mega/FooterEcommerceMega.tsx +289 -0
- package/registry/blocks/footer-ecommerce-mega/index.ts +6 -0
- package/registry/blocks/footer-floating-demo-card/FooterFloatingDemoCard.tsx +261 -0
- package/registry/blocks/footer-floating-demo-card/index.ts +6 -0
- package/registry/blocks/footer-four-column-directory/FooterFourColumnDirectory.tsx +104 -0
- package/registry/blocks/footer-four-column-directory/index.ts +6 -0
- package/registry/blocks/footer-giant-wordmark/FooterGiantWordmark.tsx +252 -0
- package/registry/blocks/footer-giant-wordmark/index.ts +6 -0
- package/registry/blocks/footer-image-backed-brand/FooterImageBackedBrand.tsx +251 -0
- package/registry/blocks/footer-image-backed-brand/index.ts +6 -0
- package/registry/blocks/footer-index-numbered-columns/FooterIndexNumberedColumns.tsx +236 -0
- package/registry/blocks/footer-index-numbered-columns/index.ts +7 -0
- package/registry/blocks/footer-inline-preferences/FooterInlinePreferences.tsx +164 -0
- package/registry/blocks/footer-inline-preferences/index.ts +7 -0
- package/registry/blocks/footer-legal-first-slim/FooterLegalFirstSlim.tsx +174 -0
- package/registry/blocks/footer-legal-first-slim/index.ts +6 -0
- package/registry/blocks/footer-legal.test.tsx +180 -0
- package/registry/blocks/footer-local-business/FooterLocalBusiness.tsx +258 -0
- package/registry/blocks/footer-local-business/index.ts +7 -0
- package/registry/blocks/footer-marquee-strip/FooterMarqueeStrip.tsx +244 -0
- package/registry/blocks/footer-marquee-strip/index.ts +6 -0
- package/registry/blocks/footer-multi-region/FooterMultiRegion.tsx +310 -0
- package/registry/blocks/footer-multi-region/index.ts +7 -0
- package/registry/blocks/footer-newsletter-split/FooterNewsletterSplit.tsx +255 -0
- package/registry/blocks/footer-newsletter-split/index.ts +6 -0
- package/registry/blocks/footer-product-family-switcher/FooterProductFamilySwitcher.tsx +241 -0
- package/registry/blocks/footer-product-family-switcher/index.ts +7 -0
- package/registry/blocks/footer-service-promise-band/FooterServicePromiseBand.tsx +237 -0
- package/registry/blocks/footer-service-promise-band/index.ts +7 -0
- package/registry/blocks/footer-single-line-bar/FooterSingleLineBar.tsx +107 -0
- package/registry/blocks/footer-single-line-bar/index.ts +6 -0
- package/registry/blocks/footer-sitemap.test.tsx +390 -0
- package/registry/blocks/footer-split-hairline-micro/FooterSplitHairlineMicro.tsx +100 -0
- package/registry/blocks/footer-split-hairline-micro/index.ts +6 -0
- package/registry/blocks/footer-support-contact/FooterSupportContact.tsx +204 -0
- package/registry/blocks/footer-support-contact/index.ts +7 -0
- package/registry/blocks/footer-trust-compliance/FooterTrustCompliance.tsx +234 -0
- package/registry/blocks/footer-trust-compliance/index.ts +7 -0
- package/registry/blocks/footer-two-row-compact/FooterTwoRowCompact.tsx +124 -0
- package/registry/blocks/footer-two-row-compact/index.ts +6 -0
- package/registry/blocks/footer-two-tier-doormat/FooterTwoTierDoormat.tsx +232 -0
- package/registry/blocks/footer-two-tier-doormat/index.ts +8 -0
- package/registry/blocks/footer-utility.test.tsx +406 -0
- package/registry/blocks/footer-wide-sitemap-mega/FooterWideSitemapMega.tsx +227 -0
- package/registry/blocks/footer-wide-sitemap-mega/index.ts +6 -0
- package/registry/blocks/gallery-album-cards/GalleryAlbumCards.tsx +243 -0
- package/registry/blocks/gallery-album-cards/index.ts +8 -0
- package/registry/blocks/gallery-before-after-compare/GalleryBeforeAfterCompare.tsx +269 -0
- package/registry/blocks/gallery-before-after-compare/index.ts +7 -0
- package/registry/blocks/gallery-contact-sheet-wall/GalleryContactSheetWall.tsx +299 -0
- package/registry/blocks/gallery-contact-sheet-wall/index.ts +9 -0
- package/registry/blocks/gallery-culture-photo-grid/GalleryCulturePhotoGrid.tsx +203 -0
- package/registry/blocks/gallery-culture-photo-grid/index.ts +8 -0
- package/registry/blocks/gallery-dark-cinema-wall/GalleryDarkCinemaWall.tsx +180 -0
- package/registry/blocks/gallery-dark-cinema-wall/index.ts +7 -0
- package/registry/blocks/gallery-editorial-split/GalleryEditorialSplit.tsx +188 -0
- package/registry/blocks/gallery-editorial-split/index.ts +8 -0
- package/registry/blocks/gallery-featured-thumb-rail/GalleryFeaturedThumbRail.tsx +397 -0
- package/registry/blocks/gallery-featured-thumb-rail/index.ts +8 -0
- package/registry/blocks/gallery-filmstrip-carousel/GalleryFilmstripCarousel.tsx +384 -0
- package/registry/blocks/gallery-filmstrip-carousel/index.ts +8 -0
- package/registry/blocks/gallery-filter-tabs-grid/GalleryFilterTabsGrid.tsx +403 -0
- package/registry/blocks/gallery-filter-tabs-grid/index.ts +9 -0
- package/registry/blocks/gallery-full-bleed-slider/GalleryFullBleedSlider.tsx +309 -0
- package/registry/blocks/gallery-full-bleed-slider/index.ts +8 -0
- package/registry/blocks/gallery-horizontal-scroll-rail/GalleryHorizontalScrollRail.tsx +300 -0
- package/registry/blocks/gallery-horizontal-scroll-rail/index.ts +8 -0
- package/registry/blocks/gallery-hover-caption-cards/GalleryHoverCaptionCards.tsx +244 -0
- package/registry/blocks/gallery-hover-caption-cards/index.ts +8 -0
- package/registry/blocks/gallery-hover-index-list/GalleryHoverIndexList.tsx +253 -0
- package/registry/blocks/gallery-hover-index-list/index.ts +9 -0
- package/registry/blocks/gallery-lightbox-viewer/GalleryLightboxViewer.tsx +329 -0
- package/registry/blocks/gallery-lightbox-viewer/index.ts +7 -0
- package/registry/blocks/gallery-masonry-gallery/GalleryMasonryGallery.tsx +251 -0
- package/registry/blocks/gallery-masonry-gallery/index.ts +7 -0
- package/registry/blocks/gallery-mosaic-statement-tile/GalleryMosaicStatementTile.tsx +159 -0
- package/registry/blocks/gallery-mosaic-statement-tile/index.ts +8 -0
- package/registry/blocks/gallery-photo-bento/GalleryPhotoBento.tsx +166 -0
- package/registry/blocks/gallery-photo-bento/index.ts +8 -0
- package/registry/blocks/gallery-photo-spotlight/GalleryPhotoSpotlight.tsx +305 -0
- package/registry/blocks/gallery-photo-spotlight/index.ts +9 -0
- package/registry/blocks/gallery-scattered-collage/GalleryScatteredCollage.tsx +286 -0
- package/registry/blocks/gallery-scattered-collage/index.ts +9 -0
- package/registry/blocks/gallery-social-feed-strip/GallerySocialFeedStrip.tsx +288 -0
- package/registry/blocks/gallery-social-feed-strip/index.ts +8 -0
- package/registry/blocks/gallery-timeline-gallery/GalleryTimelineGallery.tsx +243 -0
- package/registry/blocks/gallery-timeline-gallery/index.ts +8 -0
- package/registry/blocks/gallery-video-gallery/GalleryVideoGallery.tsx +362 -0
- package/registry/blocks/gallery-video-gallery/index.ts +8 -0
- package/registry/blocks/hero-annotated-object/HeroAnnotatedObject.tsx +310 -0
- package/registry/blocks/hero-annotated-object/index.ts +10 -0
- package/registry/blocks/hero-arc-gallery/HeroArcGallery.tsx +244 -0
- package/registry/blocks/hero-arc-gallery/index.ts +9 -0
- package/registry/blocks/hero-bento-split/HeroBentoSplit.tsx +266 -0
- package/registry/blocks/hero-bento-split/index.ts +9 -0
- package/registry/blocks/hero-brand-color-block/HeroBrandColorBlock.tsx +259 -0
- package/registry/blocks/hero-brand-color-block/index.ts +8 -0
- package/registry/blocks/hero-colour-stage/HeroColourStage.tsx +292 -0
- package/registry/blocks/hero-colour-stage/index.ts +8 -0
- package/registry/blocks/hero-component-pattern/HeroComponentPattern.tsx +248 -0
- package/registry/blocks/hero-component-pattern/index.ts +9 -0
- package/registry/blocks/hero-curved-media-rail/HeroCurvedMediaRail.tsx +272 -0
- package/registry/blocks/hero-curved-media-rail/index.ts +8 -0
- package/registry/blocks/hero-duo-card/HeroDuoCard.tsx +210 -0
- package/registry/blocks/hero-duo-card/index.ts +8 -0
- package/registry/blocks/hero-editorial-arch/HeroEditorialArch.tsx +226 -0
- package/registry/blocks/hero-editorial-arch/index.ts +10 -0
- package/registry/blocks/hero-editorial-triptych/HeroEditorialTriptych.tsx +252 -0
- package/registry/blocks/hero-editorial-triptych/index.ts +9 -0
- package/registry/blocks/hero-floating-integrations/HeroFloatingIntegrations.tsx +454 -0
- package/registry/blocks/hero-floating-integrations/index.ts +11 -0
- package/registry/blocks/hero-framed-full-bleed/HeroFramedFullBleed.tsx +226 -0
- package/registry/blocks/hero-framed-full-bleed/index.ts +9 -0
- package/registry/blocks/hero-framed-studio-card/HeroFramedStudioCard.tsx +264 -0
- package/registry/blocks/hero-framed-studio-card/index.ts +8 -0
- package/registry/blocks/hero-illustration-split/HeroIllustrationSplit.tsx +200 -0
- package/registry/blocks/hero-illustration-split/index.ts +8 -0
- package/registry/blocks/hero-inline-image-headline/HeroInlineImageHeadline.tsx +305 -0
- package/registry/blocks/hero-inline-image-headline/index.ts +8 -0
- package/registry/blocks/hero-masked-type-reveal/HeroMaskedTypeReveal.tsx +323 -0
- package/registry/blocks/hero-masked-type-reveal/index.ts +9 -0
- package/registry/blocks/hero-motion.test.tsx +185 -0
- package/registry/blocks/hero-orbit-track/HeroOrbitTrack.tsx +238 -0
- package/registry/blocks/hero-orbit-track/index.ts +8 -0
- package/registry/blocks/hero-photo-constellation/HeroPhotoConstellation.tsx +228 -0
- package/registry/blocks/hero-photo-constellation/index.ts +8 -0
- package/registry/blocks/hero-scramble-decode/HeroScrambleDecode.tsx +381 -0
- package/registry/blocks/hero-scramble-decode/index.ts +7 -0
- package/registry/blocks/hero-shape-grid/HeroShapeGrid.tsx +279 -0
- package/registry/blocks/hero-shape-grid/index.ts +8 -0
- package/registry/blocks/hero-split-band-headline/HeroSplitBandHeadline.tsx +242 -0
- package/registry/blocks/hero-split-band-headline/index.ts +8 -0
- package/registry/blocks/hero-split-flap-counters/HeroSplitFlapCounters.tsx +323 -0
- package/registry/blocks/hero-split-flap-counters/index.ts +8 -0
- package/registry/blocks/hero-studio-mosaic/HeroStudioMosaic.tsx +332 -0
- package/registry/blocks/hero-studio-mosaic/index.ts +9 -0
- package/registry/blocks/hero-textured-dark/HeroTexturedDark.tsx +378 -0
- package/registry/blocks/hero-textured-dark/index.ts +10 -0
- package/registry/blocks/hero-twin-panels/HeroTwinPanels.tsx +231 -0
- package/registry/blocks/hero-twin-panels/index.ts +9 -0
- package/registry/blocks/hero-velocity-marquee/HeroVelocityMarquee.tsx +392 -0
- package/registry/blocks/hero-velocity-marquee/index.ts +8 -0
- package/registry/blocks/hero-video-in-type/HeroVideoInType.tsx +374 -0
- package/registry/blocks/hero-video-in-type/index.ts +9 -0
- package/registry/blocks/hero-video-spotlight/HeroVideoSpotlight.tsx +292 -0
- package/registry/blocks/hero-video-spotlight/index.ts +9 -0
- package/registry/blocks/hero-wave-band/HeroWaveBand.tsx +309 -0
- package/registry/blocks/hero-wave-band/index.ts +8 -0
- package/registry/blocks/how-it-works/how-it-works.tsx +330 -0
- package/registry/blocks/how-it-works/index.ts +28 -0
- package/registry/blocks/how-it-works-accordion-steps/HowItWorksAccordionSteps.tsx +213 -0
- package/registry/blocks/how-it-works-accordion-steps/index.ts +7 -0
- package/registry/blocks/how-it-works-center-spine-timeline/HowItWorksCenterSpineTimeline.tsx +200 -0
- package/registry/blocks/how-it-works-center-spine-timeline/index.ts +7 -0
- package/registry/blocks/how-it-works-column-panels/HowItWorksColumnPanels.tsx +299 -0
- package/registry/blocks/how-it-works-column-panels/index.ts +6 -0
- package/registry/blocks/how-it-works-contained-timeline/HowItWorksContainedTimeline.tsx +223 -0
- package/registry/blocks/how-it-works-contained-timeline/index.ts +8 -0
- package/registry/blocks/how-it-works-diagonal-photo-collage/HowItWorksDiagonalPhotoCollage.tsx +170 -0
- package/registry/blocks/how-it-works-diagonal-photo-collage/index.ts +7 -0
- package/registry/blocks/how-it-works-fanned-dissolve-cards/HowItWorksFannedDissolveCards.tsx +258 -0
- package/registry/blocks/how-it-works-fanned-dissolve-cards/index.ts +8 -0
- package/registry/blocks/how-it-works-full-bleed-step-panel/HowItWorksFullBleedStepPanel.tsx +319 -0
- package/registry/blocks/how-it-works-full-bleed-step-panel/index.ts +7 -0
- package/registry/blocks/how-it-works-grids.test.tsx +292 -0
- package/registry/blocks/how-it-works-interactive.test.tsx +262 -0
- package/registry/blocks/how-it-works-numbered-editorial-rows/HowItWorksNumberedEditorialRows.tsx +177 -0
- package/registry/blocks/how-it-works-numbered-editorial-rows/index.ts +7 -0
- package/registry/blocks/how-it-works-numbered-instruction-panels/HowItWorksNumberedInstructionPanels.tsx +226 -0
- package/registry/blocks/how-it-works-numbered-instruction-panels/index.ts +6 -0
- package/registry/blocks/how-it-works-numbered-photo-steps/HowItWorksNumberedPhotoSteps.tsx +150 -0
- package/registry/blocks/how-it-works-numbered-photo-steps/index.ts +7 -0
- package/registry/blocks/how-it-works-orbital-process/HowItWorksOrbitalProcess.tsx +317 -0
- package/registry/blocks/how-it-works-orbital-process/index.ts +7 -0
- package/registry/blocks/how-it-works-overlay-numeral-cards/HowItWorksOverlayNumeralCards.tsx +145 -0
- package/registry/blocks/how-it-works-overlay-numeral-cards/index.ts +7 -0
- package/registry/blocks/how-it-works-phase-line/HowItWorksPhaseLine.tsx +147 -0
- package/registry/blocks/how-it-works-phase-line/index.ts +8 -0
- package/registry/blocks/how-it-works-photo-bento-steps/HowItWorksPhotoBentoSteps.tsx +178 -0
- package/registry/blocks/how-it-works-photo-bento-steps/index.ts +7 -0
- package/registry/blocks/how-it-works-photo-rail-progress/HowItWorksPhotoRailProgress.tsx +231 -0
- package/registry/blocks/how-it-works-photo-rail-progress/index.ts +7 -0
- package/registry/blocks/how-it-works-pill-timeline/HowItWorksPillTimeline.tsx +181 -0
- package/registry/blocks/how-it-works-pill-timeline/index.ts +8 -0
- package/registry/blocks/how-it-works-rounded-cards-device-crop/HowItWorksRoundedCardsDeviceCrop.tsx +286 -0
- package/registry/blocks/how-it-works-rounded-cards-device-crop/index.ts +6 -0
- package/registry/blocks/how-it-works-six-card-grid/HowItWorksSixCardGrid.tsx +385 -0
- package/registry/blocks/how-it-works-six-card-grid/index.ts +6 -0
- package/registry/blocks/how-it-works-split-feature-band/HowItWorksSplitFeatureBand.tsx +316 -0
- package/registry/blocks/how-it-works-split-feature-band/index.ts +6 -0
- package/registry/blocks/how-it-works-split-photo-step-list/HowItWorksSplitPhotoStepList.tsx +179 -0
- package/registry/blocks/how-it-works-split-photo-step-list/index.ts +7 -0
- package/registry/blocks/how-it-works-stacked-media-text/HowItWorksStackedMediaText.tsx +310 -0
- package/registry/blocks/how-it-works-stacked-media-text/index.ts +8 -0
- package/registry/blocks/how-it-works-step-tabs-photo-panel/HowItWorksStepTabsPhotoPanel.tsx +245 -0
- package/registry/blocks/how-it-works-step-tabs-photo-panel/index.ts +7 -0
- package/registry/blocks/how-it-works-tall-visual-rail/HowItWorksTallVisualRail.tsx +349 -0
- package/registry/blocks/how-it-works-tall-visual-rail/index.ts +7 -0
- package/registry/blocks/how-it-works-timelines.test.tsx +265 -0
- package/registry/blocks/how-it-works-vertical-timeline-card/HowItWorksVerticalTimelineCard.tsx +169 -0
- package/registry/blocks/how-it-works-vertical-timeline-card/index.ts +8 -0
- package/registry/blocks/how-it-works-visual-steps.test.tsx +368 -0
- package/registry/blocks/logo-cloud-bento-logo-wall/LogoCloudBentoLogoWall.tsx +159 -0
- package/registry/blocks/logo-cloud-bento-logo-wall/index.ts +7 -0
- package/registry/blocks/logo-cloud-bordered-cell-grid/LogoCloudBorderedCellGrid.tsx +132 -0
- package/registry/blocks/logo-cloud-bordered-cell-grid/index.ts +7 -0
- package/registry/blocks/logo-cloud-centered-caption-row/LogoCloudCenteredCaptionRow.tsx +141 -0
- package/registry/blocks/logo-cloud-centered-caption-row/index.ts +7 -0
- package/registry/blocks/logo-cloud-contained-card/LogoCloudContainedCard.tsx +106 -0
- package/registry/blocks/logo-cloud-contained-card/index.ts +7 -0
- package/registry/blocks/logo-cloud-dark-logo-wall/LogoCloudDarkLogoWall.tsx +123 -0
- package/registry/blocks/logo-cloud-dark-logo-wall/index.ts +7 -0
- package/registry/blocks/logo-cloud-divider-rule-row/LogoCloudDividerRuleRow.tsx +156 -0
- package/registry/blocks/logo-cloud-divider-rule-row/index.ts +7 -0
- package/registry/blocks/logo-cloud-editorial-eyebrow-split/LogoCloudEditorialEyebrowSplit.tsx +121 -0
- package/registry/blocks/logo-cloud-editorial-eyebrow-split/index.ts +7 -0
- package/registry/blocks/logo-cloud-enterprise-wall/LogoCloudEnterpriseWall.tsx +114 -0
- package/registry/blocks/logo-cloud-enterprise-wall/index.ts +7 -0
- package/registry/blocks/logo-cloud-flanked-heading/LogoCloudFlankedHeading.tsx +162 -0
- package/registry/blocks/logo-cloud-flanked-heading/index.ts +8 -0
- package/registry/blocks/logo-cloud-grid-closing-cta/LogoCloudGridClosingCta.tsx +173 -0
- package/registry/blocks/logo-cloud-grid-closing-cta/index.ts +8 -0
- package/registry/blocks/logo-cloud-heading-grid/LogoCloudHeadingGrid.tsx +124 -0
- package/registry/blocks/logo-cloud-heading-grid/index.ts +7 -0
- package/registry/blocks/logo-cloud-heading-left-grid-right/LogoCloudHeadingLeftGridRight.tsx +172 -0
- package/registry/blocks/logo-cloud-heading-left-grid-right/index.ts +8 -0
- package/registry/blocks/logo-cloud-logo-metric-tiles/LogoCloudLogoMetricTiles.tsx +159 -0
- package/registry/blocks/logo-cloud-logo-metric-tiles/index.ts +8 -0
- package/registry/blocks/logo-cloud-logo-quote-cards/LogoCloudLogoQuoteCards.tsx +162 -0
- package/registry/blocks/logo-cloud-logo-quote-cards/index.ts +8 -0
- package/registry/blocks/logo-cloud-logo-testimonial-strip/LogoCloudLogoTestimonialStrip.tsx +159 -0
- package/registry/blocks/logo-cloud-logo-testimonial-strip/index.ts +8 -0
- package/registry/blocks/logo-cloud-named-integration-cards/LogoCloudNamedIntegrationCards.tsx +186 -0
- package/registry/blocks/logo-cloud-named-integration-cards/index.ts +9 -0
- package/registry/blocks/logo-cloud-pyramid-row-stack/LogoCloudPyramidRowStack.tsx +156 -0
- package/registry/blocks/logo-cloud-pyramid-row-stack/index.ts +7 -0
- package/registry/blocks/logo-cloud-quote-panel-grid/LogoCloudQuotePanelGrid.tsx +177 -0
- package/registry/blocks/logo-cloud-quote-panel-grid/index.ts +8 -0
- package/registry/blocks/logo-cloud-scatter-field/LogoCloudScatterField.tsx +190 -0
- package/registry/blocks/logo-cloud-scatter-field/index.ts +8 -0
- package/registry/blocks/logo-cloud-side-label-rail/LogoCloudSideLabelRail.tsx +139 -0
- package/registry/blocks/logo-cloud-side-label-rail/index.ts +7 -0
- package/registry/blocks/logo-cloud-stat-rail-above-grid/LogoCloudStatRailAboveGrid.tsx +173 -0
- package/registry/blocks/logo-cloud-stat-rail-above-grid/index.ts +8 -0
- package/registry/blocks/logo-cloud-tabbed-industry-filter/LogoCloudTabbedIndustryFilter.tsx +200 -0
- package/registry/blocks/logo-cloud-tabbed-industry-filter/index.ts +8 -0
- package/registry/blocks/navbar/index.ts +22 -11
- package/registry/blocks/navbar/navbar.test.tsx +42 -0
- package/registry/blocks/navbar/navbar.tsx +455 -0
- package/registry/blocks/navbar-active-action-with-border/NavbarActiveActionWithBorder.tsx +120 -0
- package/registry/blocks/navbar-active-action-with-border/index.ts +6 -0
- package/registry/blocks/navbar-active-action-with-round/NavbarActiveActionWithRound.tsx +120 -0
- package/registry/blocks/navbar-active-action-with-round/index.ts +6 -0
- package/registry/blocks/navbar-centered-floating/NavbarCenteredFloating.tsx +121 -0
- package/registry/blocks/navbar-centered-floating/index.ts +6 -0
- package/registry/blocks/navbar-default/NavbarDefault.tsx +102 -0
- package/registry/blocks/navbar-default/index.ts +6 -0
- package/registry/blocks/navbar-e-commerce/NavbarECommerce.tsx +212 -0
- package/registry/blocks/navbar-e-commerce/index.ts +6 -0
- package/registry/blocks/navbar-extended-at-top/NavbarExtendedAtTop.tsx +155 -0
- package/registry/blocks/navbar-extended-at-top/index.ts +7 -0
- package/registry/blocks/navbar-multiple-action/NavbarMultipleAction.tsx +133 -0
- package/registry/blocks/navbar-multiple-action/index.ts +6 -0
- package/registry/blocks/navbar-multiple-icon/NavbarMultipleIcon.tsx +132 -0
- package/registry/blocks/navbar-multiple-icon/index.ts +6 -0
- package/registry/blocks/navbar-rounded/NavbarRounded.tsx +140 -0
- package/registry/blocks/navbar-rounded/index.ts +6 -0
- package/registry/blocks/navbar-rounded-small/NavbarRoundedSmall.tsx +143 -0
- package/registry/blocks/navbar-rounded-small/index.ts +6 -0
- package/registry/blocks/navbar-small/NavbarSmall.tsx +142 -0
- package/registry/blocks/navbar-small/index.ts +6 -0
- package/registry/blocks/navbar-with-centered-logo/NavbarWithCenteredLogo.tsx +118 -0
- package/registry/blocks/navbar-with-centered-logo/index.ts +6 -0
- package/registry/blocks/navbar-with-cta-button/NavbarWithCtaButton.tsx +131 -0
- package/registry/blocks/navbar-with-cta-button/index.ts +6 -0
- package/registry/blocks/navbar-with-dropdown/NavbarWithDropdown.tsx +118 -0
- package/registry/blocks/navbar-with-dropdown/index.ts +6 -0
- package/registry/blocks/navbar-with-icon-indicator-avatar/NavbarWithIconIndicatorAvatar.tsx +85 -0
- package/registry/blocks/navbar-with-icon-indicator-avatar/index.ts +6 -0
- package/registry/blocks/navbar-with-search-input/NavbarWithSearchInput.tsx +90 -0
- package/registry/blocks/navbar-with-search-input/index.ts +6 -0
- package/registry/blocks/navbar-with-submenu/NavbarWithSubmenu.tsx +156 -0
- package/registry/blocks/navbar-with-submenu/index.ts +6 -0
- package/registry/blocks/page-header/PageHeader.tsx +5 -9
- package/registry/blocks/pricing/index.ts +20 -0
- package/registry/blocks/pricing/pricing.test.tsx +82 -0
- package/registry/blocks/pricing/pricing.tsx +343 -0
- package/registry/blocks/pricing-comparison-matrix/PricingComparisonMatrix.tsx +336 -0
- package/registry/blocks/pricing-comparison-matrix/index.ts +10 -0
- package/registry/blocks/pricing-plan-picker-summary/PricingPlanPickerSummary.tsx +399 -0
- package/registry/blocks/pricing-plan-picker-summary/index.ts +8 -0
- package/registry/blocks/pricing-plan-spotlight/PricingPlanSpotlight.tsx +281 -0
- package/registry/blocks/pricing-plan-spotlight/index.ts +7 -0
- package/registry/blocks/pricing-tiers/PricingTiers.tsx +264 -0
- package/registry/blocks/pricing-tiers/index.ts +8 -0
- package/registry/blocks/pricing-two-plan-compare/PricingTwoPlanCompare.tsx +187 -0
- package/registry/blocks/pricing-two-plan-compare/index.ts +7 -0
- package/registry/blocks/social-proof/index.ts +36 -0
- package/registry/blocks/social-proof/social-proof.test.tsx +504 -0
- package/registry/blocks/social-proof/social-proof.tsx +759 -0
- package/registry/blocks/social-proof-app-review-row/SocialProofAppReviewRow.tsx +168 -0
- package/registry/blocks/social-proof-app-review-row/index.ts +7 -0
- package/registry/blocks/social-proof-arch-portrait-quote/SocialProofArchPortraitQuote.tsx +114 -0
- package/registry/blocks/social-proof-arch-portrait-quote/index.ts +6 -0
- package/registry/blocks/social-proof-avatar-selector-row/SocialProofAvatarSelectorRow.tsx +276 -0
- package/registry/blocks/social-proof-avatar-selector-row/index.ts +7 -0
- package/registry/blocks/social-proof-benefit-title-cards/SocialProofBenefitTitleCards.tsx +182 -0
- package/registry/blocks/social-proof-benefit-title-cards/index.ts +8 -0
- package/registry/blocks/social-proof-bracket-framed-quote/SocialProofBracketFramedQuote.tsx +120 -0
- package/registry/blocks/social-proof-bracket-framed-quote/index.ts +6 -0
- package/registry/blocks/social-proof-case-study-row/SocialProofCaseStudyRow.tsx +210 -0
- package/registry/blocks/social-proof-case-study-row/index.ts +7 -0
- package/registry/blocks/social-proof-centered-logo-spotlight/SocialProofCenteredLogoSpotlight.tsx +103 -0
- package/registry/blocks/social-proof-centered-logo-spotlight/index.ts +6 -0
- package/registry/blocks/social-proof-classic-trio-grid/SocialProofClassicTrioGrid.tsx +138 -0
- package/registry/blocks/social-proof-classic-trio-grid/index.ts +7 -0
- package/registry/blocks/social-proof-dark-editorial-split/SocialProofDarkEditorialSplit.tsx +111 -0
- package/registry/blocks/social-proof-dark-editorial-split/index.ts +6 -0
- package/registry/blocks/social-proof-giant-quote-duo/SocialProofGiantQuoteDuo.tsx +156 -0
- package/registry/blocks/social-proof-giant-quote-duo/index.ts +8 -0
- package/registry/blocks/social-proof-highlighted-phrase-spotlight/SocialProofHighlightedPhraseSpotlight.tsx +130 -0
- package/registry/blocks/social-proof-highlighted-phrase-spotlight/index.ts +7 -0
- package/registry/blocks/social-proof-overlay-photo-quote/SocialProofOverlayPhotoQuote.tsx +111 -0
- package/registry/blocks/social-proof-overlay-photo-quote/index.ts +7 -0
- package/registry/blocks/social-proof-persona-pillars/SocialProofPersonaPillars.tsx +253 -0
- package/registry/blocks/social-proof-persona-pillars/index.ts +7 -0
- package/registry/blocks/social-proof-progress-carousel/SocialProofProgressCarousel.tsx +249 -0
- package/registry/blocks/social-proof-progress-carousel/index.ts +8 -0
- package/registry/blocks/social-proof-proof-bento/SocialProofProofBento.tsx +218 -0
- package/registry/blocks/social-proof-proof-bento/index.ts +6 -0
- package/registry/blocks/social-proof-spotlight-carousel/SocialProofSpotlightCarousel.tsx +212 -0
- package/registry/blocks/social-proof-spotlight-carousel/index.ts +7 -0
- package/registry/blocks/social-proof-staggered-columns/SocialProofStaggeredColumns.tsx +227 -0
- package/registry/blocks/social-proof-staggered-columns/index.ts +7 -0
- package/registry/blocks/social-proof-stat-story-cards/SocialProofStatStoryCards.tsx +218 -0
- package/registry/blocks/social-proof-stat-story-cards/index.ts +7 -0
- package/registry/blocks/social-proof-tinted-panel-portrait/SocialProofTintedPanelPortrait.tsx +130 -0
- package/registry/blocks/social-proof-tinted-panel-portrait/index.ts +7 -0
- package/registry/blocks/social-proof-tweet-wall/SocialProofTweetWall.tsx +179 -0
- package/registry/blocks/social-proof-tweet-wall/index.ts +7 -0
- package/registry/blocks/social-proof-vertical-column-wall/SocialProofVerticalColumnWall.tsx +220 -0
- package/registry/blocks/social-proof-vertical-column-wall/index.ts +7 -0
- package/registry/blocks/social-proof-video-story-cards/SocialProofVideoStoryCards.tsx +177 -0
- package/registry/blocks/social-proof-video-story-cards/index.ts +7 -0
- package/registry/blocks/social-proof-workplace-portrait-stories/SocialProofWorkplacePortraitStories.tsx +320 -0
- package/registry/blocks/social-proof-workplace-portrait-stories/index.ts +7 -0
- package/registry/blocks/team/index.ts +21 -0
- package/registry/blocks/team/team-classes.test.ts +35 -0
- package/registry/blocks/team/team.tsx +315 -0
- package/registry/blocks/team-annotated-portrait-lineup/TeamAnnotatedPortraitLineup.tsx +310 -0
- package/registry/blocks/team-annotated-portrait-lineup/index.ts +8 -0
- package/registry/blocks/team-annotated-portrait-lineup/team-annotated-portrait-lineup.test.tsx +71 -0
- package/registry/blocks/team-compact-directory-rows/TeamCompactDirectoryRows.tsx +190 -0
- package/registry/blocks/team-compact-directory-rows/compact-directory-rows.test.tsx +40 -0
- package/registry/blocks/team-compact-directory-rows/index.ts +7 -0
- package/registry/blocks/team-department-tabs-directory/TeamDepartmentTabsDirectory.tsx +414 -0
- package/registry/blocks/team-department-tabs-directory/department-tabs-directory.test.tsx +87 -0
- package/registry/blocks/team-department-tabs-directory/index.ts +10 -0
- package/registry/blocks/team-founder-spotlight/TeamFounderSpotlight.tsx +176 -0
- package/registry/blocks/team-founder-spotlight/index.ts +8 -0
- package/registry/blocks/team-founder-spotlight/team-founder-spotlight.test.tsx +70 -0
- package/registry/blocks/team-grid-backdrop-roster/TeamGridBackdropRoster.tsx +234 -0
- package/registry/blocks/team-grid-backdrop-roster/grid-backdrop-roster.test.tsx +72 -0
- package/registry/blocks/team-grid-backdrop-roster/index.ts +8 -0
- package/registry/blocks/team-hairline-grid/TeamHairlineGrid.tsx +190 -0
- package/registry/blocks/team-hairline-grid/hairline-grid.test.tsx +49 -0
- package/registry/blocks/team-hairline-grid/index.ts +1 -0
- package/registry/blocks/team-leadership-grid/TeamLeadershipGrid.tsx +183 -0
- package/registry/blocks/team-leadership-grid/index.ts +7 -0
- package/registry/blocks/team-leadership-grid/team-leadership-grid.test.tsx +38 -0
- package/registry/blocks/team-member-carousel/TeamMemberCarousel.tsx +178 -0
- package/registry/blocks/team-member-carousel/index.ts +7 -0
- package/registry/blocks/team-member-carousel/team-member-carousel.test.tsx +58 -0
- package/registry/blocks/team-member-table/TeamMemberTable.tsx +184 -0
- package/registry/blocks/team-member-table/index.ts +7 -0
- package/registry/blocks/team-member-table/member-table.test.tsx +43 -0
- package/registry/blocks/team-meta-profile-cards/TeamMetaProfileCards.tsx +155 -0
- package/registry/blocks/team-meta-profile-cards/index.ts +7 -0
- package/registry/blocks/team-meta-profile-cards/team-meta-profile-cards.test.tsx +29 -0
- package/registry/blocks/team-overlay-portrait-cards/TeamOverlayPortraitCards.tsx +145 -0
- package/registry/blocks/team-overlay-portrait-cards/index.ts +7 -0
- package/registry/blocks/team-overlay-portrait-cards/team-overlay-portrait-cards.test.tsx +49 -0
- package/registry/blocks/team-portrait-wall/TeamPortraitWall.tsx +131 -0
- package/registry/blocks/team-portrait-wall/index.ts +1 -0
- package/registry/blocks/team-portrait-wall/portrait-wall.test.tsx +45 -0
- package/registry/blocks/team-split-intro-member-rail/TeamSplitIntroMemberRail.tsx +203 -0
- package/registry/blocks/team-split-intro-member-rail/index.ts +7 -0
- package/registry/blocks/team-split-intro-member-rail/split-intro-member-rail.test.tsx +52 -0
- package/registry/blocks/team-we-re-hiring-cta/TeamWeReHiringCta.tsx +192 -0
- package/registry/blocks/team-we-re-hiring-cta/index.ts +7 -0
- package/registry/blocks/team-we-re-hiring-cta/we-re-hiring-cta.test.tsx +44 -0
- package/registry/blocks/video-call/index.ts +53 -0
- package/registry/blocks/video-call/video-call-around.test.tsx +427 -0
- package/registry/blocks/video-call/video-call-before.test.tsx +438 -0
- package/registry/blocks/video-call/video-call-hero.test.tsx +236 -0
- package/registry/blocks/video-call/video-call-stages.test.tsx +477 -0
- package/registry/blocks/video-call/video-call.test.tsx +794 -0
- package/registry/blocks/video-call/video-call.tsx +1282 -0
- package/registry/blocks/video-call-ai-meeting-recap/VideoCallAiMeetingRecap.tsx +466 -0
- package/registry/blocks/video-call-ai-meeting-recap/index.ts +9 -0
- package/registry/blocks/video-call-call-controls-dock/VideoCallCallControlsDock.tsx +211 -0
- package/registry/blocks/video-call-call-controls-dock/index.ts +6 -0
- package/registry/blocks/video-call-call-ended-summary/VideoCallCallEndedSummary.tsx +464 -0
- package/registry/blocks/video-call-call-ended-summary/index.ts +10 -0
- package/registry/blocks/video-call-call-with-side-panel/VideoCallCallWithSidePanel.tsx +357 -0
- package/registry/blocks/video-call-call-with-side-panel/index.ts +6 -0
- package/registry/blocks/video-call-captions-reactions/VideoCallCaptionsReactions.tsx +467 -0
- package/registry/blocks/video-call-captions-reactions/index.ts +10 -0
- package/registry/blocks/video-call-grid-gallery-call/VideoCallGridGalleryCall.tsx +312 -0
- package/registry/blocks/video-call-grid-gallery-call/index.ts +6 -0
- package/registry/blocks/video-call-hero-call-mockup/VideoCallHeroCallMockup.tsx +349 -0
- package/registry/blocks/video-call-hero-call-mockup/index.ts +7 -0
- package/registry/blocks/video-call-incoming-call/VideoCallIncomingCall.tsx +336 -0
- package/registry/blocks/video-call-incoming-call/index.ts +7 -0
- package/registry/blocks/video-call-join-link-dial-in/VideoCallJoinLinkDialIn.tsx +409 -0
- package/registry/blocks/video-call-join-link-dial-in/index.ts +9 -0
- package/registry/blocks/video-call-pre-join-lobby/VideoCallPreJoinLobby.tsx +345 -0
- package/registry/blocks/video-call-pre-join-lobby/index.ts +7 -0
- package/registry/blocks/video-call-screen-share-stage/VideoCallScreenShareStage.tsx +379 -0
- package/registry/blocks/video-call-screen-share-stage/index.ts +7 -0
- package/registry/blocks/video-call-speaker-filmstrip/VideoCallSpeakerFilmstrip.tsx +303 -0
- package/registry/blocks/video-call-speaker-filmstrip/index.ts +6 -0
- package/registry/blocks/video-call-upcoming-meetings/VideoCallUpcomingMeetings.tsx +349 -0
- package/registry/blocks/video-call-upcoming-meetings/index.ts +7 -0
- package/registry/blocks/video-call-waiting-room-knock/VideoCallWaitingRoomKnock.tsx +412 -0
- package/registry/blocks/video-call-waiting-room-knock/index.ts +7 -0
- package/registry/text-props-undefined.test.tsx +3 -26
- package/registry/ui/accordion/accordion.test.tsx +320 -0
- package/registry/ui/accordion/accordion.tsx +353 -0
- package/registry/ui/accordion/index.ts +15 -0
- package/registry/ui/alert/alert.test.tsx +325 -0
- package/registry/ui/alert/alert.tsx +384 -0
- package/registry/ui/alert/index.ts +10 -0
- package/registry/ui/alert-dialog/alert-dialog.test.tsx +396 -0
- package/registry/ui/alert-dialog/alert-dialog.tsx +423 -0
- package/registry/ui/alert-dialog/index.ts +21 -0
- package/registry/ui/avatar/avatar.test.tsx +2 -2
- package/registry/ui/avatar/avatar.tsx +3 -7
- package/registry/ui/breadcrumb/breadcrumb.test.tsx +305 -0
- package/registry/ui/breadcrumb/breadcrumb.tsx +205 -0
- package/registry/ui/breadcrumb/index.ts +11 -0
- package/registry/ui/button/button.test.tsx +353 -40
- package/registry/ui/button/button.tsx +304 -30
- package/registry/ui/calendar/calendar.test.tsx +192 -0
- package/registry/ui/calendar/calendar.tsx +405 -0
- package/registry/ui/calendar/index.ts +1 -0
- package/registry/ui/carousel/carousel.test.tsx +720 -0
- package/registry/ui/carousel/carousel.tsx +554 -0
- package/registry/ui/carousel/index.ts +11 -0
- package/registry/ui/checkbox/checkbox.test.tsx +318 -2
- package/registry/ui/checkbox/checkbox.tsx +253 -67
- package/registry/ui/checkbox/index.ts +1 -1
- package/registry/ui/content-carousel/content-carousel.test.tsx +303 -0
- package/registry/ui/content-carousel/content-carousel.tsx +180 -0
- package/registry/ui/content-carousel/index.ts +8 -0
- package/registry/ui/date-picker/date-picker.test.tsx +216 -0
- package/registry/ui/date-picker/date-picker.tsx +461 -0
- package/registry/ui/date-picker/index.ts +8 -0
- package/registry/ui/dialog/dialog.test.tsx +438 -0
- package/registry/ui/dialog/dialog.tsx +533 -0
- package/registry/ui/dialog/index.ts +20 -0
- package/registry/ui/dropdown-menu/dropdown-menu.test.tsx +502 -0
- package/registry/ui/dropdown-menu/dropdown-menu.tsx +627 -0
- package/registry/ui/dropdown-menu/index.ts +32 -0
- package/registry/ui/fasla-logo/fasla-logo.tsx +101 -0
- package/registry/ui/fasla-logo/index.ts +1 -0
- package/registry/ui/input/index.ts +10 -1
- package/registry/ui/input/input.test.tsx +251 -44
- package/registry/ui/input/input.tsx +311 -40
- package/registry/ui/input-number/index.ts +1 -0
- package/registry/ui/input-number/input-number.test.tsx +302 -0
- package/registry/ui/input-number/input-number.tsx +398 -0
- package/registry/ui/input-otp/index.ts +7 -0
- package/registry/ui/input-otp/input-otp.test.tsx +299 -0
- package/registry/ui/input-otp/input-otp.tsx +279 -0
- package/registry/ui/pagination/index.ts +12 -0
- package/registry/ui/pagination/pagination.test.tsx +330 -0
- package/registry/ui/pagination/pagination.tsx +336 -0
- package/registry/ui/progress/index.ts +8 -0
- package/registry/ui/progress/progress.test.tsx +168 -0
- package/registry/ui/progress/progress.tsx +165 -0
- package/registry/ui/select/index.ts +12 -1
- package/registry/ui/select/select.test.tsx +505 -0
- package/registry/ui/select/select.tsx +658 -56
- package/registry/ui/sheet/index.ts +19 -0
- package/registry/ui/sheet/sheet.test.tsx +411 -0
- package/registry/ui/sheet/sheet.tsx +496 -0
- package/registry/{blocks → ui}/sidebar/index.ts +10 -5
- package/registry/ui/sidebar/sidebar.test.tsx +224 -0
- package/registry/ui/sidebar/sidebar.tsx +754 -0
- package/registry/ui/slider/index.ts +8 -0
- package/registry/ui/slider/slider.test.tsx +231 -0
- package/registry/ui/slider/slider.tsx +319 -0
- package/registry/ui/social-icons/index.ts +1 -0
- package/registry/ui/social-icons/social-icons.tsx +284 -0
- package/registry/ui/steps/index.ts +16 -0
- package/registry/ui/steps/steps.test.tsx +435 -0
- package/registry/ui/steps/steps.tsx +571 -0
- package/registry/ui/switch/switch.tsx +3 -2
- package/registry/ui/tabs/index.ts +4 -0
- package/registry/ui/tabs/tabs.test.tsx +576 -0
- package/registry/ui/tabs/tabs.tsx +324 -112
- package/registry/ui/textarea/index.ts +1 -1
- package/registry/ui/textarea/textarea.test.tsx +294 -0
- package/registry/ui/textarea/textarea.tsx +329 -56
- package/registry/ui/tooltip/index.ts +14 -0
- package/registry/ui/tooltip/tooltip.test.tsx +301 -0
- package/registry/ui/tooltip/tooltip.tsx +409 -0
- package/registry.json +9702 -139
- package/tailwind-preset.ts +2 -2
- package/registry/blocks/navbar/Navbar.test.tsx +0 -12
- package/registry/blocks/navbar/Navbar.tsx +0 -175
- package/registry/blocks/sidebar/Sidebar.test.tsx +0 -39
- package/registry/blocks/sidebar/Sidebar.tsx +0 -212
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import { ArrowRight, ArrowUpRight } from "lucide-react"
|
|
5
|
+
import { cn } from "../../../src/lib/utils"
|
|
6
|
+
import { buttonVariants } from "../../ui/button/button"
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* Figma: `Hero` (46552:249264), Type=Wave Band Hero.
|
|
10
|
+
*
|
|
11
|
+
* A centred pitch over a band of colour: a pill announcing the project is
|
|
12
|
+
* open source, with a link to its code, the headline, a paragraph and two
|
|
13
|
+
* buttons. Under them two `success` sleeves sweep in from the edges and meet
|
|
14
|
+
* at a handshake, a cut-out photo, each sleeve ending in a `foreground` cuff
|
|
15
|
+
* with two buttons. A short caption rides each sleeve, tilted with it. A
|
|
16
|
+
* trust strip closes the block: a line about the customers and a row of
|
|
17
|
+
* text wordmarks, under a 1px rule.
|
|
18
|
+
*
|
|
19
|
+
* Desktop draws the band 1440 × 480 across the block's full width, starting
|
|
20
|
+
* 24px above the foot of the buttons, with the strip laid over its lower
|
|
21
|
+
* part. Tablet draws it at half that size, 720 × 240, between the copy and
|
|
22
|
+
* the strip. Mobile scales the same drawing to about 39%, centred and cut at
|
|
23
|
+
* the content's edges, drops the captions, stacks the buttons at full width
|
|
24
|
+
* and puts the wordmarks under the line, wrapping.
|
|
25
|
+
*
|
|
26
|
+
* The navigation row Figma draws above the copy (the Weavely wordmark, five
|
|
27
|
+
* links, "Sign in" and "Talk to sales") is left out: a hero is not a navbar.
|
|
28
|
+
* The 152px Figma leaves above the pill is mostly that row; without it the
|
|
29
|
+
* copy starts 96px down on Desktop, 64 on Tablet and 32 on Mobile.
|
|
30
|
+
*
|
|
31
|
+
* Wider than Figma's 1440, the band keeps its drawing at 1440 and its two
|
|
32
|
+
* sleeves run on, flat, to the block's edges, so they never stop mid-page.
|
|
33
|
+
*
|
|
34
|
+
* In Arabic the drawing mirrors: the sleeves, the cuffs and the captions
|
|
35
|
+
* swap sides, and the captions tilt the other way. The photo moves with the
|
|
36
|
+
* drawing but is never flipped. The arrows point left; numbers stay left to
|
|
37
|
+
* right.
|
|
38
|
+
*
|
|
39
|
+
* Sized by the block's own width, not the window's: the section is a query
|
|
40
|
+
* container. Mobile is the base; `[@container(min-width:48rem)]:` is Figma's
|
|
41
|
+
* Tablet (768) and `[@container(min-width:90rem)]:` its Desktop, from 1440px:
|
|
42
|
+
* the width Figma draws it at, and the switch every Hero block shares, so
|
|
43
|
+
* Tablet's layout covers 768 to 1439.
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
export interface HeroWaveBandAction {
|
|
47
|
+
label: React.ReactNode
|
|
48
|
+
href: string
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface HeroWaveBandPhoto {
|
|
52
|
+
src: string
|
|
53
|
+
/** Describes the photo. Pass "" for a purely decorative one. */
|
|
54
|
+
alt: string
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface HeroWaveBandCopy {
|
|
58
|
+
/** The pill's first part, in `success`. The pill is hidden when this is empty. */
|
|
59
|
+
announcement: React.ReactNode
|
|
60
|
+
/** The link at the pill's end, with an arrow. Hidden when null. */
|
|
61
|
+
announcementAction: HeroWaveBandAction | null
|
|
62
|
+
/** The headline, an `h1`. A line break in the string breaks the line. */
|
|
63
|
+
headline: React.ReactNode
|
|
64
|
+
/** The paragraph under the headline. */
|
|
65
|
+
description: React.ReactNode
|
|
66
|
+
/** The solid button. */
|
|
67
|
+
primaryAction: HeroWaveBandAction
|
|
68
|
+
/** The outline button beside it, with an arrow. Hidden when null. */
|
|
69
|
+
secondaryAction: HeroWaveBandAction | null
|
|
70
|
+
/**
|
|
71
|
+
* The captions on the sleeves, start side first. Figma shows two. Tablet
|
|
72
|
+
* and Desktop only.
|
|
73
|
+
*/
|
|
74
|
+
captions: [React.ReactNode, React.ReactNode]
|
|
75
|
+
/** The line at the start of the trust strip. */
|
|
76
|
+
trustStatement: React.ReactNode
|
|
77
|
+
/** The customer names set as wordmarks at its end. Figma shows four. */
|
|
78
|
+
wordmarks: React.ReactNode[]
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Figma's copy, English and Arabic. */
|
|
82
|
+
const COPY: Record<"en" | "ar", HeroWaveBandCopy> = {
|
|
83
|
+
en: {
|
|
84
|
+
announcement: "WE’RE OPEN SOURCE",
|
|
85
|
+
announcementAction: { label: "See the source", href: "#source" },
|
|
86
|
+
headline: "Project management,\nmade for working together.",
|
|
87
|
+
description:
|
|
88
|
+
"From the first idea to the finish line. Bring issues, sprints, and roadmaps into one calm workspace your whole team can call home.",
|
|
89
|
+
primaryAction: {
|
|
90
|
+
label: (
|
|
91
|
+
<>
|
|
92
|
+
Get started in <bdi dir="ltr">30</bdi> seconds
|
|
93
|
+
</>
|
|
94
|
+
),
|
|
95
|
+
href: "#get-started",
|
|
96
|
+
},
|
|
97
|
+
secondaryAction: { label: "Book a demo", href: "#demo" },
|
|
98
|
+
captions: ["No credit card. No chaos.", "Great things take a team."],
|
|
99
|
+
trustStatement: (
|
|
100
|
+
<>
|
|
101
|
+
A shared workspace for <bdi dir="ltr">1,000+</bdi> ambitious teams.
|
|
102
|
+
</>
|
|
103
|
+
),
|
|
104
|
+
wordmarks: ["Corvane", "Tessaro", "Oblique", "Marloe"],
|
|
105
|
+
},
|
|
106
|
+
ar: {
|
|
107
|
+
announcement: "مفتوح المصدر",
|
|
108
|
+
announcementAction: { label: "اطّلع على الشيفرة", href: "#source" },
|
|
109
|
+
headline: "إدارة المشاريع\nصُممت للعمل معًا.",
|
|
110
|
+
description:
|
|
111
|
+
"من الفكرة الأولى حتى خط النهاية. اجمع المهام والدورات وخطط الطريق في مساحة عمل هادئة يعتبرها فريقك كله بيته.",
|
|
112
|
+
primaryAction: {
|
|
113
|
+
label: (
|
|
114
|
+
<>
|
|
115
|
+
ابدأ في <bdi dir="ltr">30</bdi> ثانية
|
|
116
|
+
</>
|
|
117
|
+
),
|
|
118
|
+
href: "#get-started",
|
|
119
|
+
},
|
|
120
|
+
secondaryAction: { label: "احجز عرضًا", href: "#demo" },
|
|
121
|
+
captions: ["بلا بطاقة ائتمان، وبلا فوضى.", "الأشياء العظيمة تحتاج إلى فريق."],
|
|
122
|
+
trustStatement: (
|
|
123
|
+
<>
|
|
124
|
+
مساحة عمل مشتركة لأكثر من <bdi dir="ltr">1,000</bdi> فريق طموح.
|
|
125
|
+
</>
|
|
126
|
+
),
|
|
127
|
+
wordmarks: ["كروان", "رواق", "مرآة", "أفق"],
|
|
128
|
+
},
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/*
|
|
132
|
+
* Figma's sleeves and cuffs, in the band's own 1440 × 480 frame (Desktop's
|
|
133
|
+
* size; Tablet and Mobile scale it). Each sleeve ends in a straight cut at
|
|
134
|
+
* the block's edge; `RUN_ON` carries that cut on, flat, past 1440.
|
|
135
|
+
*/
|
|
136
|
+
const START_SLEEVE =
|
|
137
|
+
"M 0 1.0926 C 150 -8.9389 330 51.2502 570 134.5117 L 515 290 C 322 217.7732 132 219.7795 0 249.874 L 0 1.0926 Z"
|
|
138
|
+
const END_SLEEVE =
|
|
139
|
+
"M 0 180.7385 C 207 152.3077 366 37.5692 570 0 L 570 264 C 365 349.2923 185 314.7692 40 330 L 0 180.7385 Z"
|
|
140
|
+
const START_CUFF = "M 3.9335 0 L 50.1085 0.3422 L 50.1085 151.3421 L 0.0001 151.7607 L 3.9335 0 Z"
|
|
141
|
+
const END_CUFF = "M 0 0 L 52.0847 0.1416 L 52.4019 145.5595 L 0 144.982 L 0 0 Z"
|
|
142
|
+
const RUN_ON = 4000
|
|
143
|
+
|
|
144
|
+
export interface HeroWaveBandProps
|
|
145
|
+
extends Omit<React.HTMLAttributes<HTMLElement>, "title">,
|
|
146
|
+
Partial<HeroWaveBandCopy> {
|
|
147
|
+
/** Which language the default copy is in. The page's `dir` sets the direction. */
|
|
148
|
+
locale?: "en" | "ar"
|
|
149
|
+
/**
|
|
150
|
+
* The handshake where the sleeves meet: a cut-out on a transparent
|
|
151
|
+
* background, so the band shows around it. None by default: a `muted`
|
|
152
|
+
* box of the same size holds its place.
|
|
153
|
+
* @default none: a `muted` placeholder
|
|
154
|
+
*/
|
|
155
|
+
photo?: HeroWaveBandPhoto
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export function HeroWaveBand({
|
|
159
|
+
locale = "en",
|
|
160
|
+
announcement,
|
|
161
|
+
announcementAction,
|
|
162
|
+
headline,
|
|
163
|
+
description,
|
|
164
|
+
primaryAction,
|
|
165
|
+
secondaryAction,
|
|
166
|
+
captions,
|
|
167
|
+
trustStatement,
|
|
168
|
+
wordmarks,
|
|
169
|
+
photo,
|
|
170
|
+
className,
|
|
171
|
+
...props
|
|
172
|
+
}: HeroWaveBandProps) {
|
|
173
|
+
const copy = COPY[locale]
|
|
174
|
+
const headingId = React.useId()
|
|
175
|
+
const pill = announcement ?? copy.announcement
|
|
176
|
+
const pillAction = announcementAction === undefined ? copy.announcementAction : announcementAction
|
|
177
|
+
const primary = primaryAction ?? copy.primaryAction
|
|
178
|
+
const secondary = secondaryAction === undefined ? copy.secondaryAction : secondaryAction
|
|
179
|
+
const [startCaption, endCaption] = captions ?? copy.captions
|
|
180
|
+
const names = wordmarks ?? copy.wordmarks
|
|
181
|
+
|
|
182
|
+
return (
|
|
183
|
+
<section
|
|
184
|
+
aria-labelledby={headingId}
|
|
185
|
+
className={cn("[container-type:inline-size] overflow-hidden bg-background", className)}
|
|
186
|
+
{...props}
|
|
187
|
+
>
|
|
188
|
+
{/*
|
|
189
|
+
* The section's colour fills the whole width; its content does not.
|
|
190
|
+
* From Tablet up to Desktop the content keeps Figma's Tablet width,
|
|
191
|
+
* 720px inside 24px padding, and centres, so a wide container shows
|
|
192
|
+
* Figma's Tablet layout rather than a stretched one.
|
|
193
|
+
*/}
|
|
194
|
+
<div className="mx-auto flex w-full max-w-[1440px] [@container(min-width:48rem)]:max-w-[48rem] [@container(min-width:90rem)]:max-w-[1440px] flex-col gap-10 px-4 py-8 [@container(min-width:48rem)]:gap-12 [@container(min-width:48rem)]:px-6 [@container(min-width:48rem)]:py-16 [@container(min-width:90rem)]:gap-0 [@container(min-width:90rem)]:px-16 [@container(min-width:90rem)]:pb-[30px] [@container(min-width:90rem)]:pt-24">
|
|
195
|
+
<div className="flex w-full flex-col items-center gap-[22px] text-center [@container(min-width:90rem)]:mx-auto [@container(min-width:90rem)]:max-w-[1040px]">
|
|
196
|
+
{pill ? (
|
|
197
|
+
<p className="inline-flex items-center gap-4 rounded-full px-[15px] py-2 text-xxs font-medium ring-1 ring-inset ring-success">
|
|
198
|
+
<span className="whitespace-nowrap text-foreground">{pill}</span>
|
|
199
|
+
{pillAction ? (
|
|
200
|
+
<a
|
|
201
|
+
href={pillAction.href}
|
|
202
|
+
className="relative inline-flex items-center gap-0.5 whitespace-nowrap rounded-sm text-foreground before:absolute before:-inset-x-1 before:-inset-y-3 [outline:none] hover:underline hover:underline-offset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring"
|
|
203
|
+
>
|
|
204
|
+
{pillAction.label}
|
|
205
|
+
<ArrowUpRight size={10} strokeWidth={1.5} absoluteStrokeWidth aria-hidden className="[&:dir(rtl)]:-scale-x-100" />
|
|
206
|
+
</a>
|
|
207
|
+
) : null}
|
|
208
|
+
</p>
|
|
209
|
+
) : null}
|
|
210
|
+
<h1
|
|
211
|
+
id={headingId}
|
|
212
|
+
className="whitespace-pre-line text-balance text-3xl font-medium text-foreground [@container(min-width:48rem)]:text-4xl [@container(min-width:90rem)]:text-5xl"
|
|
213
|
+
>
|
|
214
|
+
{headline ?? copy.headline}
|
|
215
|
+
</h1>
|
|
216
|
+
<p className="text-balance text-base text-muted-foreground [@container(min-width:48rem)]:text-lg [@container(min-width:90rem)]:max-w-[650px]">
|
|
217
|
+
{description ?? copy.description}
|
|
218
|
+
</p>
|
|
219
|
+
{/* Figma pads the buttons 3px further down than the rest of the column. */}
|
|
220
|
+
<div className="flex w-full flex-col gap-3 pt-[3px] [@container(min-width:48rem)]:w-auto [@container(min-width:48rem)]:flex-row">
|
|
221
|
+
<a href={primary.href} className={buttonVariants({ size: "lg", radius: "rounded" })}>
|
|
222
|
+
{primary.label}
|
|
223
|
+
</a>
|
|
224
|
+
{secondary ? (
|
|
225
|
+
<a href={secondary.href} className={buttonVariants({ variant: "outline", tone: "primary", size: "lg", radius: "rounded" })}>
|
|
226
|
+
{secondary.label}
|
|
227
|
+
<ArrowRight aria-hidden strokeWidth={1.5} absoluteStrokeWidth className="[&:dir(rtl)]:-scale-x-100" />
|
|
228
|
+
</a>
|
|
229
|
+
) : null}
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
|
|
233
|
+
{/*
|
|
234
|
+
* The band. Its drawing is one 1440 × 480 frame (3:1) that scales
|
|
235
|
+
* with its width: the content's full width on Tablet, 171% of it on
|
|
236
|
+
* Mobile, centred and cut at the content's edges as Figma cuts it,
|
|
237
|
+
* and a fixed 1440px on Desktop. There the band starts 24px above
|
|
238
|
+
* the buttons' foot and takes only 377px of the column, so the trust
|
|
239
|
+
* strip lies over its lower part; the section crops what runs past
|
|
240
|
+
* its bottom edge, as Figma does.
|
|
241
|
+
*/}
|
|
242
|
+
<div className="pointer-events-none relative flex items-start justify-center overflow-hidden [@container(min-width:90rem)]:-mt-6 [@container(min-width:90rem)]:h-[377px] [@container(min-width:90rem)]:overflow-visible">
|
|
243
|
+
<div className="relative aspect-[3/1] w-[171.43%] shrink-0 [@container(min-width:48rem)]:w-full [@container(min-width:90rem)]:w-[1440px]">
|
|
244
|
+
<div className="absolute start-[29.375%] top-[22.708%] h-[75.833%] w-[40.417%] overflow-hidden bg-muted">
|
|
245
|
+
{photo ? (
|
|
246
|
+
<img src={photo.src} alt={photo.alt} decoding="async" className="absolute inset-0 size-full object-cover" />
|
|
247
|
+
) : null}
|
|
248
|
+
</div>
|
|
249
|
+
|
|
250
|
+
<svg
|
|
251
|
+
aria-hidden
|
|
252
|
+
viewBox="0 0 1440 480"
|
|
253
|
+
className="absolute inset-0 size-full overflow-visible [&:dir(rtl)]:-scale-x-100"
|
|
254
|
+
>
|
|
255
|
+
<g className="fill-success">
|
|
256
|
+
<g transform="translate(-20 42)">
|
|
257
|
+
<path d={START_SLEEVE} />
|
|
258
|
+
<rect x={-RUN_ON} y={1.0926} width={RUN_ON + 1} height={248.7814} />
|
|
259
|
+
</g>
|
|
260
|
+
<g transform="translate(900 0)">
|
|
261
|
+
<path d={END_SLEEVE} />
|
|
262
|
+
<rect x={569} y={0} width={RUN_ON} height={264} />
|
|
263
|
+
</g>
|
|
264
|
+
</g>
|
|
265
|
+
<g className="fill-foreground">
|
|
266
|
+
<path d={START_CUFF} transform="translate(543.896 181.668) rotate(18)" />
|
|
267
|
+
<path d={END_CUFF} transform="translate(851.167 199.146) rotate(-14.8)" />
|
|
268
|
+
</g>
|
|
269
|
+
<g className="fill-background">
|
|
270
|
+
<circle cx={530} cy={306} r={6} />
|
|
271
|
+
<circle cx={524} cy={322} r={6} />
|
|
272
|
+
<circle cx={878.485} cy={205.344} r={6} />
|
|
273
|
+
<circle cx={883.485} cy={220.344} r={6} />
|
|
274
|
+
</g>
|
|
275
|
+
</svg>
|
|
276
|
+
|
|
277
|
+
{/*
|
|
278
|
+
* Tilted with their sleeves, from the start corner of each line.
|
|
279
|
+
* In Arabic they swap sides and tilt the other way.
|
|
280
|
+
*/}
|
|
281
|
+
<p className="absolute start-[6.667%] top-[38.542%] hidden origin-top-left -rotate-[9deg] whitespace-nowrap text-xs text-foreground dark:text-success-foreground [&:dir(rtl)]:origin-top-right [&:dir(rtl)]:rotate-[9deg] [@container(min-width:48rem)]:block [@container(min-width:90rem)]:text-2xl">
|
|
282
|
+
{startCaption}
|
|
283
|
+
</p>
|
|
284
|
+
<p className="absolute start-[75.694%] top-[33.542%] hidden origin-top-left rotate-[10deg] whitespace-nowrap text-xs text-foreground dark:text-success-foreground [&:dir(rtl)]:origin-top-right [&:dir(rtl)]:-rotate-[10deg] [@container(min-width:48rem)]:block [@container(min-width:90rem)]:text-2xl">
|
|
285
|
+
{endCaption}
|
|
286
|
+
</p>
|
|
287
|
+
</div>
|
|
288
|
+
</div>
|
|
289
|
+
|
|
290
|
+
<div className="relative flex flex-col border-t border-border pt-5 [@container(min-width:48rem)]:flex-row [@container(min-width:48rem)]:items-center [@container(min-width:48rem)]:justify-between [@container(min-width:48rem)]:gap-6">
|
|
291
|
+
<p className="text-pretty text-xs text-muted-foreground">{trustStatement ?? copy.trustStatement}</p>
|
|
292
|
+
<ul className="flex flex-wrap items-center gap-x-[46px] gap-y-3 [@container(min-width:48rem)]:shrink-0 [@container(min-width:48rem)]:flex-nowrap">
|
|
293
|
+
{names.map((name, index) => (
|
|
294
|
+
<li key={index} className="whitespace-nowrap text-lg font-semibold text-muted-foreground [@container(min-width:48rem)]:text-xl">
|
|
295
|
+
{name}
|
|
296
|
+
</li>
|
|
297
|
+
))}
|
|
298
|
+
</ul>
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
</section>
|
|
302
|
+
)
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* The default copy, English and Arabic, as `locale` picks it. Spread it to
|
|
307
|
+
* change a few strings and keep the rest.
|
|
308
|
+
*/
|
|
309
|
+
export const heroWaveBandCopy = COPY
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import { cn } from "../../../src/lib/utils"
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* Figma: `How it Works` (42334:294272). The parts every `how-it-works-*` block
|
|
8
|
+
* is built from, one per thing the Figma set repeats: the section and its
|
|
9
|
+
* 1248px column, the eyebrow line, the plain hairline, a run of figures that
|
|
10
|
+
* keeps its order in Arabic, and the helpers that play a block's motion once.
|
|
11
|
+
*
|
|
12
|
+
* Mobile first, and sized by the block's own width, not the window's, as the
|
|
13
|
+
* Careers and Pricing blocks are: the section is a query container, so a block
|
|
14
|
+
* lays out for the room it is given, such as a docs preview narrower than the
|
|
15
|
+
* screen. The base classes are Figma's Mobile (360, 296px of content);
|
|
16
|
+
* `[@container(min-width:40rem)]:` is its Tablet, from 640px of content
|
|
17
|
+
* (Figma's Tablet, 768 less its padding), and `[@container(min-width:64rem)]:`
|
|
18
|
+
* its Desktop, from 1024px of content. The section's own padding still follows
|
|
19
|
+
* the window, since an element can't query itself. The page's `dir` sets the
|
|
20
|
+
* direction; nothing here takes one.
|
|
21
|
+
*
|
|
22
|
+
* Where the code differs from Figma, for every Type in the set:
|
|
23
|
+
*
|
|
24
|
+
* - Separator: the code library has no Separator component yet, so the 1px
|
|
25
|
+
* hairline is `HowItWorksRule`, a line in the `border` token. Replace it with
|
|
26
|
+
* Separator once that is built.
|
|
27
|
+
* - Motion plays once, when the block enters the view. Nothing is tied to the
|
|
28
|
+
* scroll position, pinned, cycled on a timer, autoplayed or looped for good:
|
|
29
|
+
* a loop in Figma runs a few times and rests, and under
|
|
30
|
+
* `prefers-reduced-motion` a block renders its finished state. See each
|
|
31
|
+
* Type's own comment for what it dropped from its Figma motion card.
|
|
32
|
+
* - A scrim over a photo stays dark, and the text on it light, in Light and in
|
|
33
|
+
* Dark, as Gallery does it, so white text stays readable on the photo.
|
|
34
|
+
* Figma's `custom/black` and `custom/white` flip in Dark; here they are
|
|
35
|
+
* `background-inverse` and `foreground-inverse`, pinned as Gallery pins them.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
export type HowItWorksLocale = "en" | "ar"
|
|
39
|
+
|
|
40
|
+
export interface HowItWorksSectionProps extends React.HTMLAttributes<HTMLElement> {
|
|
41
|
+
/** The id of the heading that names the section. */
|
|
42
|
+
labelledBy?: string
|
|
43
|
+
/** Classes for the 1248px column inside the padding. */
|
|
44
|
+
contentClassName?: string
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Figma's section: `theme/background`, padding 96 on Desktop, 64 on Tablet and
|
|
49
|
+
* 32 on phones, a 1248px column and 48px between its parts.
|
|
50
|
+
*/
|
|
51
|
+
export const HowItWorksSection = React.forwardRef<HTMLElement, HowItWorksSectionProps>(function HowItWorksSection(
|
|
52
|
+
{ labelledBy, className, contentClassName, children, ...props },
|
|
53
|
+
ref
|
|
54
|
+
) {
|
|
55
|
+
return (
|
|
56
|
+
<section ref={ref} aria-labelledby={labelledBy} className={cn("[container-type:inline-size] bg-background p-8 md:p-16 lg:p-24", className)} {...props}>
|
|
57
|
+
<div className={cn("mx-auto flex w-full max-w-[1248px] flex-col gap-12", contentClassName)}>{children}</div>
|
|
58
|
+
</section>
|
|
59
|
+
)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
/** A photo a block shows: its file and what it shows. Pass `alt=""` for a purely decorative one. */
|
|
63
|
+
export interface HowItWorksPhoto {
|
|
64
|
+
src: string
|
|
65
|
+
alt: string
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* A photo filling its box, cropped to fit. The box (`relative`, a `muted`
|
|
70
|
+
* fill and `overflow-hidden`) is the caller's; without a photo it stays a
|
|
71
|
+
* quiet `muted` placeholder.
|
|
72
|
+
*/
|
|
73
|
+
export function HowItWorksImage({ photo, className }: { photo?: HowItWorksPhoto; className?: string }) {
|
|
74
|
+
if (!photo) return null
|
|
75
|
+
return <img src={photo.src} alt={photo.alt} loading="lazy" decoding="async" draggable={false} className={cn("absolute inset-0 size-full object-cover", className)} />
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The dark scrim under white text on a photo: Figma's stack of flat black
|
|
80
|
+
* layers, one over the whole photo and three stronger over its lower part, so
|
|
81
|
+
* the foot is about 70% black and the top about 28%. Each layer is `base-black`
|
|
82
|
+
* at a fixed strength, the same in Light and in Dark. Inside a `group`, hovering
|
|
83
|
+
* deepens the whole stack. Place it between the photo and the text.
|
|
84
|
+
*/
|
|
85
|
+
export function HowItWorksScrim({ className }: { className?: string }) {
|
|
86
|
+
return (
|
|
87
|
+
<span aria-hidden="true" className={cn("pointer-events-none absolute inset-0", className)}>
|
|
88
|
+
<span className="absolute inset-0 bg-base-black/[0.28] transition-colors duration-[250ms] group-hover:bg-base-black/[0.42] motion-reduce:transition-none" />
|
|
89
|
+
<span className="absolute inset-x-0 bottom-0 h-3/5 bg-base-black/20" />
|
|
90
|
+
<span className="absolute inset-x-0 bottom-0 h-2/5 bg-base-black/25" />
|
|
91
|
+
<span className="absolute inset-x-0 bottom-0 h-1/4 bg-base-black/30" />
|
|
92
|
+
</span>
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface HowItWorksHeaderProps extends Omit<React.HTMLAttributes<HTMLElement>, "title"> {
|
|
97
|
+
/** The id the section's `aria-labelledby` points at. */
|
|
98
|
+
headingId: string
|
|
99
|
+
/** The small line above the heading. Hidden when empty. */
|
|
100
|
+
eyebrow?: React.ReactNode
|
|
101
|
+
/** The section's heading, an `h2`. */
|
|
102
|
+
heading: React.ReactNode
|
|
103
|
+
/** The line under the heading. Hidden when empty. */
|
|
104
|
+
description?: React.ReactNode
|
|
105
|
+
/** Classes for the eyebrow, the heading and the line: how a Type recolours them on its own surface. */
|
|
106
|
+
eyebrowClassName?: string
|
|
107
|
+
headingClassName?: string
|
|
108
|
+
descriptionClassName?: string
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The left-aligned header most Types open with: an eyebrow, a heading (3XL on
|
|
113
|
+
* phones, 4XL on Tablet, 5XL on Desktop) and a line, 12px apart.
|
|
114
|
+
*/
|
|
115
|
+
export function HowItWorksHeader({ headingId, eyebrow, heading, description, eyebrowClassName, headingClassName, descriptionClassName, className, children, ...props }: HowItWorksHeaderProps) {
|
|
116
|
+
return (
|
|
117
|
+
<header className={cn("flex w-full flex-col items-start gap-3", className)} {...props}>
|
|
118
|
+
{eyebrow ? <HowItWorksEyebrow className={eyebrowClassName}>{eyebrow}</HowItWorksEyebrow> : null}
|
|
119
|
+
<h2 id={headingId} className={cn("text-3xl font-semibold text-foreground [@container(min-width:40rem)]:text-4xl [@container(min-width:64rem)]:text-5xl", headingClassName)}>
|
|
120
|
+
{heading}
|
|
121
|
+
</h2>
|
|
122
|
+
{description ? <p className={cn("max-w-[720px] text-base text-muted-foreground", descriptionClassName)}>{description}</p> : null}
|
|
123
|
+
{children}
|
|
124
|
+
</header>
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* The small line above a heading: `XS/Medium` in `primary`, set in capitals
|
|
130
|
+
* with 8% tracking. Arabic has no capitals and joins its letters, so in RTL
|
|
131
|
+
* the tracking is dropped.
|
|
132
|
+
*/
|
|
133
|
+
export function HowItWorksEyebrow({ children, className }: { children: React.ReactNode; className?: string }) {
|
|
134
|
+
return <p className={cn("text-xs font-medium uppercase tracking-[0.08em] text-primary [&:dir(rtl)]:tracking-normal", className)}>{children}</p>
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Figma's `Separator`: a 1px `border` line across its container. The code
|
|
139
|
+
* library has no Separator component yet; swap this for it once it does.
|
|
140
|
+
*/
|
|
141
|
+
export function HowItWorksRule({ className }: { className?: string }) {
|
|
142
|
+
return <div role="presentation" className={cn("w-full border-t border-border", className)} />
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** The theme colours a glow can take. Each is a token, never a raw colour. */
|
|
146
|
+
export type HowItWorksGlowTone = "chart-1" | "chart-2" | "chart-3" | "chart-4" | "chart-5" | "info" | "success" | "warning" | "destructive"
|
|
147
|
+
|
|
148
|
+
const GLOW_TONES: Record<HowItWorksGlowTone, string> = {
|
|
149
|
+
"chart-1": "bg-chart-1",
|
|
150
|
+
"chart-2": "bg-chart-2",
|
|
151
|
+
"chart-3": "bg-chart-3",
|
|
152
|
+
"chart-4": "bg-chart-4",
|
|
153
|
+
"chart-5": "bg-chart-5",
|
|
154
|
+
info: "bg-info",
|
|
155
|
+
success: "bg-success",
|
|
156
|
+
warning: "bg-warning",
|
|
157
|
+
destructive: "bg-destructive",
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export interface HowItWorksGlowProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
161
|
+
tone: HowItWorksGlowTone
|
|
162
|
+
/** How solid the shape is, 0 to 1. Figma sets 0.4 to 0.55. */
|
|
163
|
+
strength?: number
|
|
164
|
+
/** The blur radius in px. 32 by default; Stacked Media + Text sets 28, which matches Figma's render of its pictures. */
|
|
165
|
+
blur?: number
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* A soft blurred shape of colour for a background: an ellipse in a theme
|
|
170
|
+
* token, blurred and thinned to `strength`. Figma's 64px layer blur is a
|
|
171
|
+
* Gaussian radius, which CSS spells as half that: `blur(32px)`. Place it with `style` or
|
|
172
|
+
* classes inside a box that clips (`overflow-hidden`). It carries no meaning,
|
|
173
|
+
* so it is hidden from screen readers.
|
|
174
|
+
*/
|
|
175
|
+
export function HowItWorksGlow({ tone, strength = 0.5, blur, className, style, ...props }: HowItWorksGlowProps) {
|
|
176
|
+
return (
|
|
177
|
+
<span
|
|
178
|
+
aria-hidden="true"
|
|
179
|
+
className={cn("pointer-events-none absolute rounded-[50%]", blur === undefined && "blur-[32px]", GLOW_TONES[tone], className)}
|
|
180
|
+
style={{ opacity: strength, ...(blur === undefined ? null : { filter: `blur(${blur}px)` }), ...style }}
|
|
181
|
+
{...props}
|
|
182
|
+
/>
|
|
183
|
+
)
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* A run that keeps its left-to-right order inside Arabic text: a time such as
|
|
188
|
+
* `09:00`, a figure, a code. Western digits stay Western in Figma's Arabic.
|
|
189
|
+
*/
|
|
190
|
+
export function HowItWorksLtr({ children, className }: { children: React.ReactNode; className?: string }) {
|
|
191
|
+
return (
|
|
192
|
+
<bdi dir="ltr" className={cn("whitespace-nowrap", className)}>
|
|
193
|
+
{children}
|
|
194
|
+
</bdi>
|
|
195
|
+
)
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* A line with figures in it, such as "12 دقيقة" or "Locks again in 30
|
|
200
|
+
* seconds": each run of digits is set in its own left-to-right isolate, so a
|
|
201
|
+
* figure keeps its order and the words around it keep theirs. Anything but a
|
|
202
|
+
* string passes through untouched.
|
|
203
|
+
*/
|
|
204
|
+
export function HowItWorksFigures({ children }: { children: React.ReactNode }) {
|
|
205
|
+
if (typeof children !== "string") return <>{children}</>
|
|
206
|
+
const parts = children.split(/(\d[\d.,:%]*)/)
|
|
207
|
+
if (parts.length === 1) return <>{children}</>
|
|
208
|
+
return (
|
|
209
|
+
<>
|
|
210
|
+
{parts.map((part, index) =>
|
|
211
|
+
index % 2 === 1 ? (
|
|
212
|
+
<HowItWorksLtr key={index}>{part}</HowItWorksLtr>
|
|
213
|
+
) : (
|
|
214
|
+
<React.Fragment key={index}>{part}</React.Fragment>
|
|
215
|
+
)
|
|
216
|
+
)}
|
|
217
|
+
</>
|
|
218
|
+
)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/** The stroke Figma gives every Lucide icon in the set: 1.5px at any size. Spread it onto an icon. */
|
|
222
|
+
export const HOW_IT_WORKS_ICON = { strokeWidth: 1.5, absoluteStrokeWidth: true } as const
|
|
223
|
+
|
|
224
|
+
/** Figma's ease-out: fast at the start, a soft settle. */
|
|
225
|
+
export const EASE_OUT = "cubic-bezier(0, 0, 0.2, 1)"
|
|
226
|
+
|
|
227
|
+
/** Whether the visitor asked for less motion. False where there are no media queries. */
|
|
228
|
+
export function prefersReducedMotion() {
|
|
229
|
+
return typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/** Anything a block's entrance starts that can be stopped: a Web Animation, or a count that steps by hand. */
|
|
233
|
+
export type Cancellable = { cancel(): void }
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Counts a figure up from 0 to `value` over `duration` ms, writing into the
|
|
237
|
+
* text node it already has, and leaves the final value in place. Returns a
|
|
238
|
+
* handle that stops it and restores the value.
|
|
239
|
+
*/
|
|
240
|
+
export function countUp(element: HTMLElement, value: number, duration = 500, delay = 0): Cancellable {
|
|
241
|
+
const text = element.firstChild
|
|
242
|
+
const final = String(value)
|
|
243
|
+
let frame = 0
|
|
244
|
+
let timer = 0
|
|
245
|
+
const finish = () => {
|
|
246
|
+
if (text) text.nodeValue = final
|
|
247
|
+
}
|
|
248
|
+
const start = () => {
|
|
249
|
+
const began = performance.now()
|
|
250
|
+
const step = (now: number) => {
|
|
251
|
+
const t = Math.min(1, (now - began) / duration)
|
|
252
|
+
if (text) text.nodeValue = String(Math.round(value * t))
|
|
253
|
+
if (t < 1) frame = requestAnimationFrame(step)
|
|
254
|
+
}
|
|
255
|
+
frame = requestAnimationFrame(step)
|
|
256
|
+
}
|
|
257
|
+
if (text) text.nodeValue = "0"
|
|
258
|
+
timer = window.setTimeout(start, delay)
|
|
259
|
+
return {
|
|
260
|
+
cancel() {
|
|
261
|
+
window.clearTimeout(timer)
|
|
262
|
+
cancelAnimationFrame(frame)
|
|
263
|
+
finish()
|
|
264
|
+
},
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Plays a block's entrance once, when it first comes into view. `play` gets
|
|
270
|
+
* the block's root and returns what it started; those are cancelled when the
|
|
271
|
+
* block unmounts. Nothing plays under reduced motion, which leaves
|
|
272
|
+
* the block in its finished state, nor where the browser has no Web
|
|
273
|
+
* Animations or no IntersectionObserver.
|
|
274
|
+
*/
|
|
275
|
+
export function useRevealOnEnter(root: React.RefObject<HTMLElement | null>, play: (node: HTMLElement) => Cancellable[], threshold = 0.2) {
|
|
276
|
+
const playRef = React.useRef(play)
|
|
277
|
+
playRef.current = play
|
|
278
|
+
React.useLayoutEffect(() => {
|
|
279
|
+
const node = root.current
|
|
280
|
+
if (!node || typeof node.animate !== "function" || typeof IntersectionObserver === "undefined") return
|
|
281
|
+
if (prefersReducedMotion()) return
|
|
282
|
+
let animations: Cancellable[] = []
|
|
283
|
+
const observer = new IntersectionObserver(
|
|
284
|
+
(entries) => {
|
|
285
|
+
if (!entries.some((entry) => entry.isIntersecting)) return
|
|
286
|
+
observer.disconnect()
|
|
287
|
+
animations = playRef.current(node)
|
|
288
|
+
},
|
|
289
|
+
{ threshold }
|
|
290
|
+
)
|
|
291
|
+
observer.observe(node)
|
|
292
|
+
return () => {
|
|
293
|
+
observer.disconnect()
|
|
294
|
+
animations.forEach((animation) => animation.cancel())
|
|
295
|
+
}
|
|
296
|
+
}, [root, threshold])
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/** Every element a block marked `data-reveal="name"`, in document order. */
|
|
300
|
+
export function revealTargets(node: HTMLElement, name: string) {
|
|
301
|
+
return Array.from(node.querySelectorAll<HTMLElement>(`[data-reveal="${name}"]`))
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Starts one entrance: the element rests in its natural state, so the
|
|
306
|
+
* keyframes name where it comes from. `fill: "backwards"` holds the first
|
|
307
|
+
* frame through the delay.
|
|
308
|
+
*/
|
|
309
|
+
export function enter(element: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions = {}): Animation {
|
|
310
|
+
return element.animate(keyframes, { duration: 400, easing: EASE_OUT, fill: "backwards", ...options })
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/** Rises 8px while fading in: the entrance most blocks give their cards and lines. */
|
|
314
|
+
export const RISE: Keyframe[] = [
|
|
315
|
+
{ opacity: 0, transform: "translateY(8px)" },
|
|
316
|
+
{ opacity: 1, transform: "none" },
|
|
317
|
+
]
|
|
318
|
+
|
|
319
|
+
/** Pops from nothing past full size and back, as Figma's markers and tiles do. */
|
|
320
|
+
export const POP: Keyframe[] = [
|
|
321
|
+
{ opacity: 0, transform: "scale(0)" },
|
|
322
|
+
{ opacity: 1, transform: "scale(1.15)", offset: 0.7 },
|
|
323
|
+
{ opacity: 1, transform: "scale(1)" },
|
|
324
|
+
]
|
|
325
|
+
|
|
326
|
+
/** Draws a line from its start: the track, a rule, a bar growing along its inline axis. */
|
|
327
|
+
export const GROW_X: Keyframe[] = [{ transform: "scaleX(0)" }, { transform: "scaleX(1)" }]
|
|
328
|
+
|
|
329
|
+
/** Draws a line down from its top. */
|
|
330
|
+
export const GROW_Y: Keyframe[] = [{ transform: "scaleY(0)" }, { transform: "scaleY(1)" }]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export {
|
|
2
|
+
countUp,
|
|
3
|
+
EASE_OUT,
|
|
4
|
+
enter,
|
|
5
|
+
GROW_X,
|
|
6
|
+
GROW_Y,
|
|
7
|
+
HowItWorksEyebrow,
|
|
8
|
+
HowItWorksFigures,
|
|
9
|
+
HowItWorksGlow,
|
|
10
|
+
HowItWorksHeader,
|
|
11
|
+
HowItWorksImage,
|
|
12
|
+
HowItWorksLtr,
|
|
13
|
+
HowItWorksRule,
|
|
14
|
+
HowItWorksScrim,
|
|
15
|
+
HowItWorksSection,
|
|
16
|
+
POP,
|
|
17
|
+
prefersReducedMotion,
|
|
18
|
+
revealTargets,
|
|
19
|
+
RISE,
|
|
20
|
+
useRevealOnEnter,
|
|
21
|
+
type Cancellable,
|
|
22
|
+
type HowItWorksGlowProps,
|
|
23
|
+
type HowItWorksHeaderProps,
|
|
24
|
+
type HowItWorksPhoto,
|
|
25
|
+
type HowItWorksGlowTone,
|
|
26
|
+
type HowItWorksLocale,
|
|
27
|
+
type HowItWorksSectionProps,
|
|
28
|
+
} from "./how-it-works"
|