@reblu/site-blocks 0.33.0 → 0.35.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/dist/index.d.cts CHANGED
@@ -1,12 +1,12 @@
1
- import { ShopErrorCode, AcademyCourseDetail, AcademyLessonPreview, PageDetail, PageListItem, ProfessionalField, ShopProductListItem, ShopProductTrustIcon, ShopProductTrustItem, TrustBadgeType, TrustBadge, Review, BlockType, PageBlock, ResolvedEmbed, BeforeAfterData, CardIcon, IconCardsData, ImageTextData, ShopFacets, AcademyInstructorPublic, AcademyCategoryPublic, AcademyCatalogFiltersPublic, ShopBundleComponent, ShopStaffAutoDiscount, ShopOrder, ShopCheckoutDeliveryConfig, ShopCheckoutCopy, ShopFulfillmentInput, ShopQuote, ShopCheckoutInput, AcademyCheckoutRequest, Config, ShopOrderInvoice } from '@reblu/site-contracts';
1
+ import { ShopErrorCode, AcademyCourseDetail, AcademyLessonPreview, PageDetail, PageListItem, ProfessionalField, ShopProductListItem, ShopProductTrustIcon, ShopProductTrustItem, TrustBadgeType, TrustBadge, Review, BeforeAfterData, CardIcon, IconCardsData, ImageTextData, ShopFacets, AcademyInstructorPublic, AcademyCategoryPublic, AcademyCatalogFiltersPublic, ShopBundleComponent, ShopStaffAutoDiscount, ShopOrder, ShopCheckoutDeliveryConfig, ShopCheckoutCopy, ShopFulfillmentInput, ShopQuote, ShopCheckoutInput, AcademyCheckoutRequest, Config, ShopOrderInvoice } from '@reblu/site-contracts';
2
2
  export { DATA_REQUEST_TYPES } from '@reblu/site-contracts';
3
3
  import { FaqItem } from './seo.cjs';
4
4
  export { FaqPageJsonLd, MarkdownToPlainTextOptions, buildFaqPageJsonLd, collectFaqItems, markdownToPlainText } from './seo.cjs';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
6
  import * as React$1 from 'react';
7
7
  import { ReactNode, ComponentType, FormEvent } from 'react';
8
- import { H as HeadingLevel, a as FullInvoiceValue } from './full-invoice-fields-DMX0sjPG.cjs';
9
- export { b as CheckoutTermsAcceptance, c as CheckoutTermsAcceptanceProps, C as CheckoutTermsCopy, D as DEFAULT_INVOICE_COUNTRIES, E as EMPTY_FULL_INVOICE_VALUE, d as FullInvoiceErrors, e as FullInvoiceFields, F as FullInvoiceFieldsLabels, f as FullInvoiceFieldsProps, g as FullInvoiceIdType, i as isOverSimplifiedInvoiceCap, s as shopIssuesInvoices, t as toCheckoutInvoiceFields, h as toCheckoutTermsFields } from './full-invoice-fields-DMX0sjPG.cjs';
8
+ import { H as HeadingLevel, a as FullInvoiceValue } from './page-links-C0nXQzAW.cjs';
9
+ export { B as BlockRendererProps, b as CanonicalBlockType, c as CheckoutTermsAcceptance, d as CheckoutTermsAcceptanceProps, C as CheckoutTermsCopy, D as DEFAULT_INVOICE_COUNTRIES, E as EMPTY_FULL_INVOICE_VALUE, e as FullInvoiceErrors, f as FullInvoiceFields, F as FullInvoiceFieldsLabels, g as FullInvoiceFieldsProps, h as FullInvoiceIdType, L as LinkFilterOption, i as PageBlocks, j as PageBlocksComponents, k as PageBlocksProps, P as PageLinkRef, R as RenderableBlock, l as filterByLink, m as isOverSimplifiedInvoiceCap, n as linkFilterOptions, o as linkKey, s as shopIssuesInvoices, t as toCheckoutInvoiceFields, p as toCheckoutTermsFields } from './page-links-C0nXQzAW.cjs';
10
10
 
11
11
  declare function readingTime(content: string | null | undefined): number | null;
12
12
 
@@ -367,6 +367,53 @@ interface CoursePurchaseTermsProps {
367
367
  }
368
368
  declare function CoursePurchaseTerms({ course, heading, headingLevel, headingId, labels, className, headingClassName, listClassName, }: CoursePurchaseTermsProps): react_jsx_runtime.JSX.Element | null;
369
369
 
370
+ type Schedule = NonNullable<AcademyCourseDetail['schedule']>;
371
+ type Session = Schedule['sessions'][number];
372
+ /** Texts of {@link CourseSchedule}; replace any of them in the SITE's language. */
373
+ interface CourseScheduleLabels {
374
+ /** The modality line. */
375
+ modality: Record<Schedule['modality'], ReactNode>;
376
+ /** Title of the list of dates. */
377
+ dates: ReactNode;
378
+ /** Title of the place of an in-person course. */
379
+ place: ReactNode;
380
+ /** One date: receives the session, its time zone and the `locale` prop. */
381
+ session: (session: Session, timeZone: string, locale: string) => ReactNode;
382
+ }
383
+ declare const DEFAULT_COURSE_SCHEDULE_LABELS: CourseScheduleLabels;
384
+ /**
385
+ * `CourseSchedule` — the drop-in for the dates and place of an in-person or
386
+ * webinar course (`client.academy.bySlug()` → `schedule`, REB-1363), which
387
+ * the buyer must see before paying: the modality, each date in the tenant's
388
+ * time zone, the place of an in-person course and the tenant's notes.
389
+ *
390
+ * Server Component, RSC-safe: no hooks, no state, no `'use client'`.
391
+ *
392
+ * Renders NOTHING when the course has no schedule (any other modality) or
393
+ * against an API that predates it. The default copy is Spanish; pass
394
+ * `labels` (and `locale` for the dates) to replace it.
395
+ */
396
+ interface CourseScheduleProps {
397
+ /** The field of `AcademyCourseDetail` this block reads. */
398
+ course: Partial<Pick<AcademyCourseDetail, 'schedule'>>;
399
+ /** Optional section heading, e.g. «Fechas y lugar». */
400
+ heading?: ReactNode;
401
+ /** Level of `heading`. Defaults to `2`. */
402
+ headingLevel?: HeadingLevel;
403
+ /** `id` of the heading element (the section's `aria-labelledby`). */
404
+ headingId?: string;
405
+ labels?: Partial<CourseScheduleLabels>;
406
+ /** BCP 47 locale of the dates. Defaults to `es-ES`. */
407
+ locale?: string;
408
+ /** Classes for the outer element (added to its `space-y-3` layout). */
409
+ className?: string;
410
+ /** Classes for the heading; REPLACE the default `text-lg font-semibold`. */
411
+ headingClassName?: string;
412
+ /** Classes for the body text; REPLACE the default `text-sm`. */
413
+ bodyClassName?: string;
414
+ }
415
+ declare function CourseSchedule({ course, heading, headingLevel, headingId, labels, locale, className, headingClassName, bodyClassName, }: CourseScheduleProps): react_jsx_runtime.JSX.Element | null;
416
+
370
417
  /**
371
418
  * `LegalDocument` — the drop-in for a legal page the tenant writes in nexus
372
419
  * (`client.legal.get()`: `legalNotice`, `withdrawalPolicy`, `privacyPolicy`,
@@ -547,6 +594,57 @@ interface ProfileCardProps {
547
594
  }
548
595
  declare function ProfileCard({ name, role, imageUrl, specialties, bio, fields, href, className, }: ProfileCardProps): react_jsx_runtime.JSX.Element;
549
596
 
597
+ /**
598
+ * REB-1100 — drop-ins for the page links of `client.pages.get(slug)`:
599
+ *
600
+ * - `LinkedPagesGrid` over `page.links` (the pages this page picked, e.g. a
601
+ * profile's areas) or `page.relatedPages` (derived: the pages of those
602
+ * areas, or the pages that belong to this one);
603
+ * - `TeamGrid` over `page.team` (derived: the team profiles linked to this
604
+ * page or to the pages it belongs to).
605
+ *
606
+ * Both render nothing for an empty or absent list, so a SITE can drop them in
607
+ * before the API emits the fields. Token-driven, RSC-safe.
608
+ */
609
+ interface LinkedPageCardItem {
610
+ slug: string;
611
+ title: string;
612
+ excerpt?: string | null;
613
+ coverImageUrl?: string | null;
614
+ category?: {
615
+ name: string;
616
+ slug: string;
617
+ } | null;
618
+ }
619
+ interface LinkedPagesGridProps<T extends LinkedPageCardItem = LinkedPageCardItem> {
620
+ pages: T[] | null | undefined;
621
+ /** Builds a card's href. Defaults to `/{slug}`. */
622
+ pageHref?: (page: T) => string;
623
+ /** Optional `<h2>` above the grid, e.g. «Áreas». */
624
+ heading?: string;
625
+ className?: string;
626
+ }
627
+ declare function LinkedPagesGrid<T extends LinkedPageCardItem>({ pages, pageHref, heading, className, }: LinkedPagesGridProps<T>): react_jsx_runtime.JSX.Element | null;
628
+ interface TeamGridMember {
629
+ slug: string;
630
+ title: string;
631
+ role?: string | null;
632
+ coverImageUrl?: string | null;
633
+ category?: {
634
+ name: string;
635
+ slug: string;
636
+ } | null;
637
+ }
638
+ interface TeamGridProps<T extends TeamGridMember = TeamGridMember> {
639
+ members: T[] | null | undefined;
640
+ /** Builds a member's profile href. Omit to render non-linking cards. */
641
+ memberHref?: (member: T) => string;
642
+ /** Optional `<h2>` above the grid, e.g. «Equipo». */
643
+ heading?: string;
644
+ className?: string;
645
+ }
646
+ declare function TeamGrid<T extends TeamGridMember>({ members, memberHref, heading, className, }: TeamGridProps<T>): react_jsx_runtime.JSX.Element | null;
647
+
550
648
  /**
551
649
  * `ProfessionalFields` — the tenant-defined professional fields of a team
552
650
  * profile (REB-1099), e.g. a registration number, as a `<dl>`.
@@ -832,78 +930,6 @@ interface ReviewsProps {
832
930
  }
833
931
  declare function Reviews({ reviews, heading, headingId, headingLevel, notice, noticePosition, linkLabel, newWindowLabel, locale, className, headingClassName, gridClassName, cardClassName, noticeClassName, }: ReviewsProps): react_jsx_runtime.JSX.Element | null;
834
932
 
835
- /**
836
- * REB-850 — `PageBlocks`: the shared renderer for a page's registry blocks
837
- * (`PageDetail.blocks`, REB-75), so a SITE stops hand-writing its own.
838
- *
839
- * A SERVER COMPONENT by default: no hooks, no `'use client'`, reachable from the
840
- * RSC-safe root entry (`test/rsc-safety.test.ts` renders it under
841
- * `--conditions=react-server`).
842
- *
843
- * Each block is wrapped in a `<section>` carrying the parent section's
844
- * mirrored fields (REB-849): `heading`, `backgroundColor` and `cta`. The body
845
- * comes from a per-type renderer that the `components` map can replace.
846
- *
847
- * Fail-closed rules:
848
- * • an unknown `blockType` renders nothing (the whole section) and never throws;
849
- * • an embed whose `resolved` is `null`/absent renders nothing — no heading,
850
- * no dead link;
851
- * • deprecated alias types (`doctor_embed`, `specialty_embed` — REB-852)
852
- * render through their generic type's renderer (`profile_embed`, `page_embed`).
853
- */
854
- type DeprecatedAlias = 'doctor_embed' | 'specialty_embed';
855
- /** Block types a renderer is registered under — deprecated aliases resolve to these. */
856
- type CanonicalBlockType = Exclude<BlockType, DeprecatedAlias>;
857
- type EmbedType = 'page_embed' | 'profile_embed';
858
- type WireTypesOf<T extends CanonicalBlockType> = T extends 'profile_embed' ? 'profile_embed' | 'doctor_embed' : T extends 'page_embed' ? 'page_embed' | 'specialty_embed' : T;
859
- /**
860
- * The block a renderer for `T` receives — including its deprecated alias, and
861
- * with `resolved` guaranteed non-null for embeds (unresolved ones never render).
862
- */
863
- type RenderableBlock<T extends CanonicalBlockType> = T extends EmbedType ? Extract<PageBlock, {
864
- blockType: WireTypesOf<T>;
865
- }> & {
866
- resolved: ResolvedEmbed;
867
- } : Extract<PageBlock, {
868
- blockType: WireTypesOf<T>;
869
- }>;
870
- interface BlockRendererProps<T extends CanonicalBlockType> {
871
- block: RenderableBlock<T>;
872
- /** Level for headings INSIDE the block — one below the section heading when there is one. */
873
- headingLevel: HeadingLevel;
874
- /** Builds an embed's href (the `embedHref` prop, or the default `/${slug}`). */
875
- embedHref: (resolved: ResolvedEmbed) => string;
876
- /**
877
- * REB-1268 — set only for block types that draw the SECTION heading
878
- * themselves (`image_text`, whose heading sits beside the image): the id the
879
- * section's `aria-labelledby` points at. `headingLevel` is then the section
880
- * heading's own level. Undefined for every other block type.
881
- */
882
- headingId?: string;
883
- }
884
- /** Per-block-type renderer overrides, keyed by canonical type. */
885
- type PageBlocksComponents = Partial<{
886
- [T in CanonicalBlockType]: ComponentType<BlockRendererProps<T>>;
887
- }>;
888
- interface PageBlocksProps {
889
- blocks: readonly PageBlock[] | null | undefined;
890
- /** Replace the body renderer of any block type. */
891
- components?: PageBlocksComponents;
892
- /** Level of each section heading. Default `2` (the page title is the `h1`). */
893
- headingLevel?: HeadingLevel;
894
- /** Href for an embedded page. Default `/${resolved.slug}`. */
895
- embedHref?: (resolved: ResolvedEmbed) => string;
896
- /**
897
- * Namespace for the section heading ids (`aria-labelledby` targets). Pass a
898
- * distinct value when one document renders `PageBlocks` more than once with
899
- * overlapping blocks. Sanitised to a valid IDREF. Default `'page-block'`.
900
- */
901
- idPrefix?: string;
902
- className?: string;
903
- sectionClassName?: string;
904
- }
905
- declare function PageBlocks({ blocks, components, headingLevel, embedHref, idPrefix, className, sectionClassName, }: PageBlocksProps): react_jsx_runtime.JSX.Element | null;
906
-
907
933
  /**
908
934
  * REB-1265..1268 — drop-in components for the content blocks a tenant
909
935
  * authors in the nexus page editor. Each one takes the block's `data` fields
@@ -1732,8 +1758,8 @@ declare function quoteRequiresDelivery(quote: Pick<ShopQuote, 'lines'> | null |
1732
1758
  * The quote and checkout body fields for the delivery choice. Home delivery
1733
1759
  * carries the address (blank optional fields left out); pickup the point. With
1734
1760
  * no choice (a cart with nothing to ship) it still sends home delivery: the
1735
- * server records no delivery for such a cart, and the request stays on the
1736
- * current contract (REB-1227).
1761
+ * server records no delivery for such a cart. (Since REB-1227 the server reads
1762
+ * a missing choice on a cart that ships as home delivery, address required.)
1737
1763
  *
1738
1764
  * Pass `requiresDelivery` (`quoteRequiresDelivery(quote)`): when the cart
1739
1765
  * ships nothing the choice block is hidden and the address stays blank, so no
@@ -1921,4 +1947,4 @@ interface OrderInvoiceLinkProps {
1921
1947
  }
1922
1948
  declare function OrderInvoiceLink({ invoice, labels, className }: OrderInvoiceLinkProps): react_jsx_runtime.JSX.Element | null;
1923
1949
 
1924
- export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, ArbitrationBadge, type ArbitrationBadgeProps, BeforeAfterPairs, type BeforeAfterPairsProps, type BlockRendererProps, CARD_ICON_NAMES, type CanonicalBlockType, CardIconSvg, type CartAdjustmentLine, CartAdjustmentsNotice, type CartAdjustmentsNoticeLabels, type CartAdjustmentsNoticeProps, CartLineIncludes, type CartLineIncludesEntry, type CartLineIncludesProps, type CartLineItemView, CartLineList, type CartLineListLabels, type CartLineListProps, CartSummary, type CartSummaryLabels, type CartSummaryProps, type CheckoutAddressErrors, type CheckoutAddressValue, type CheckoutAppliedDiscount, type CheckoutContactErrors, type CheckoutContactValues, CheckoutDeliveryChoice, type CheckoutDeliveryChoiceLabels, type CheckoutDeliveryChoiceProps, CheckoutForm, type CheckoutFormLabels, type CheckoutFormProps, CheckoutLoginPrompt, type CheckoutLoginPromptLabels, type CheckoutLoginPromptProps, CheckoutPayAction, type CheckoutPayActionProps, CheckoutQuoteNotice, type CheckoutQuoteNoticeInput, type CheckoutQuoteNoticeLabels, type CheckoutQuoteNoticeProps, type CheckoutQuoteNoticeReason, CheckoutQuoteSummary, type CheckoutQuoteSummaryLabels, type CheckoutQuoteSummaryProps, ChipList, type ChipListProps, type ContactInterest, ContactInterestField, type ContactInterestFieldProps, CourseCatalogFilters, type CourseCatalogFiltersActive, type CourseCatalogFiltersHrefs, type CourseCatalogFiltersLabels, type CourseCatalogFiltersProps, type CourseCatalogPriceBand, CourseDescription, type CourseDescriptionProps, CoursePurchaseTerms, type CoursePurchaseTermsLabels, type CoursePurchaseTermsProps, DEFAULT_BEFORE_AFTER_LABELS, DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS, DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS, DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS, DEFAULT_COURSE_CATALOG_FILTERS_LABELS, DEFAULT_COURSE_PRICE_BANDS, DEFAULT_COURSE_PURCHASE_TERMS_LABELS, DEFAULT_LESSON_PREVIEW_LABELS, DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE, DEFAULT_SHOP_ERROR_MESSAGES, DEFAULT_SHOP_PRICE_BANDS, DEFAULT_TRUST_BADGE_HEADINGS, DEFAULT_TRUST_BADGE_TYPE_ORDER, DEFAULT_TRUST_ICONS, EMPTY_CHECKOUT_ADDRESS, FaqAccordion, type FaqAccordionProps, FaqItem, FullInvoiceValue, HeadingLevel, IconCardGrid, type IconCardGridProps, ImageTextSplit, type ImageTextSplitProps, LegalDocument, type LegalDocumentProps, LessonPreview, type LessonPreviewLabels, type LessonPreviewProps, type MarkdownImageOptions, MarkdownRenderer, type MarkdownRendererProps, OrderConfirmation, type OrderConfirmationLabels, type OrderConfirmationOrder, type OrderConfirmationProps, type OrderConfirmationStatus, OrderInvoiceLink, type OrderInvoiceLinkLabels, type OrderInvoiceLinkProps, PageBlocks, type PageBlocksComponents, type PageBlocksProps, PageCardGrid, type PageCardGridProps, ParentPage, type ParentPageProps, ProductCard, type ProductCardProps, ProductTrustItems, type ProductTrustItemsProps, ProfessionalFields, type ProfessionalFieldsProps, ProfileCard, type ProfileCardProps, type RenderableBlock, Reviews, type ReviewsProps, SafeHtml, type SafeHtmlProps, type ShareUrls, type ShopFilterPriceBand, ShopFilters, type ShopFiltersActive, type ShopFiltersHrefs, type ShopFiltersLabels, type ShopFiltersProps, Specialty, type SpecialtyProps, Treatment, type TreatmentProps, TrustBadges, type TrustBadgesProps, type TrustIconComponent, type TrustIconProps, buildShareUrls, bundleComponentsToIncludes, checkoutQuoteNotice, courseSellsAsGuest, defaultCheckoutFulfillment, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isCheckoutDeliveryComplete, markdownToSafeHtml, quoteRequiresDelivery, readingTime, sanitizeHtml, shouldRenderShopFilters, toAcademyCheckoutInvoiceFields, toCheckoutFulfillmentFields };
1950
+ export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, ArbitrationBadge, type ArbitrationBadgeProps, BeforeAfterPairs, type BeforeAfterPairsProps, CARD_ICON_NAMES, CardIconSvg, type CartAdjustmentLine, CartAdjustmentsNotice, type CartAdjustmentsNoticeLabels, type CartAdjustmentsNoticeProps, CartLineIncludes, type CartLineIncludesEntry, type CartLineIncludesProps, type CartLineItemView, CartLineList, type CartLineListLabels, type CartLineListProps, CartSummary, type CartSummaryLabels, type CartSummaryProps, type CheckoutAddressErrors, type CheckoutAddressValue, type CheckoutAppliedDiscount, type CheckoutContactErrors, type CheckoutContactValues, CheckoutDeliveryChoice, type CheckoutDeliveryChoiceLabels, type CheckoutDeliveryChoiceProps, CheckoutForm, type CheckoutFormLabels, type CheckoutFormProps, CheckoutLoginPrompt, type CheckoutLoginPromptLabels, type CheckoutLoginPromptProps, CheckoutPayAction, type CheckoutPayActionProps, CheckoutQuoteNotice, type CheckoutQuoteNoticeInput, type CheckoutQuoteNoticeLabels, type CheckoutQuoteNoticeProps, type CheckoutQuoteNoticeReason, CheckoutQuoteSummary, type CheckoutQuoteSummaryLabels, type CheckoutQuoteSummaryProps, ChipList, type ChipListProps, type ContactInterest, ContactInterestField, type ContactInterestFieldProps, CourseCatalogFilters, type CourseCatalogFiltersActive, type CourseCatalogFiltersHrefs, type CourseCatalogFiltersLabels, type CourseCatalogFiltersProps, type CourseCatalogPriceBand, CourseDescription, type CourseDescriptionProps, CoursePurchaseTerms, type CoursePurchaseTermsLabels, type CoursePurchaseTermsProps, CourseSchedule, type CourseScheduleLabels, type CourseScheduleProps, DEFAULT_BEFORE_AFTER_LABELS, DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS, DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS, DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS, DEFAULT_COURSE_CATALOG_FILTERS_LABELS, DEFAULT_COURSE_PRICE_BANDS, DEFAULT_COURSE_PURCHASE_TERMS_LABELS, DEFAULT_COURSE_SCHEDULE_LABELS, DEFAULT_LESSON_PREVIEW_LABELS, DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE, DEFAULT_SHOP_ERROR_MESSAGES, DEFAULT_SHOP_PRICE_BANDS, DEFAULT_TRUST_BADGE_HEADINGS, DEFAULT_TRUST_BADGE_TYPE_ORDER, DEFAULT_TRUST_ICONS, EMPTY_CHECKOUT_ADDRESS, FaqAccordion, type FaqAccordionProps, FaqItem, FullInvoiceValue, HeadingLevel, IconCardGrid, type IconCardGridProps, ImageTextSplit, type ImageTextSplitProps, LegalDocument, type LegalDocumentProps, LessonPreview, type LessonPreviewLabels, type LessonPreviewProps, type LinkedPageCardItem, LinkedPagesGrid, type LinkedPagesGridProps, type MarkdownImageOptions, MarkdownRenderer, type MarkdownRendererProps, OrderConfirmation, type OrderConfirmationLabels, type OrderConfirmationOrder, type OrderConfirmationProps, type OrderConfirmationStatus, OrderInvoiceLink, type OrderInvoiceLinkLabels, type OrderInvoiceLinkProps, PageCardGrid, type PageCardGridProps, ParentPage, type ParentPageProps, ProductCard, type ProductCardProps, ProductTrustItems, type ProductTrustItemsProps, ProfessionalFields, type ProfessionalFieldsProps, ProfileCard, type ProfileCardProps, Reviews, type ReviewsProps, SafeHtml, type SafeHtmlProps, type ShareUrls, type ShopFilterPriceBand, ShopFilters, type ShopFiltersActive, type ShopFiltersHrefs, type ShopFiltersLabels, type ShopFiltersProps, Specialty, type SpecialtyProps, TeamGrid, type TeamGridMember, type TeamGridProps, Treatment, type TreatmentProps, TrustBadges, type TrustBadgesProps, type TrustIconComponent, type TrustIconProps, buildShareUrls, bundleComponentsToIncludes, checkoutQuoteNotice, courseSellsAsGuest, defaultCheckoutFulfillment, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isCheckoutDeliveryComplete, markdownToSafeHtml, quoteRequiresDelivery, readingTime, sanitizeHtml, shouldRenderShopFilters, toAcademyCheckoutInvoiceFields, toCheckoutFulfillmentFields };
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- import { ShopErrorCode, AcademyCourseDetail, AcademyLessonPreview, PageDetail, PageListItem, ProfessionalField, ShopProductListItem, ShopProductTrustIcon, ShopProductTrustItem, TrustBadgeType, TrustBadge, Review, BlockType, PageBlock, ResolvedEmbed, BeforeAfterData, CardIcon, IconCardsData, ImageTextData, ShopFacets, AcademyInstructorPublic, AcademyCategoryPublic, AcademyCatalogFiltersPublic, ShopBundleComponent, ShopStaffAutoDiscount, ShopOrder, ShopCheckoutDeliveryConfig, ShopCheckoutCopy, ShopFulfillmentInput, ShopQuote, ShopCheckoutInput, AcademyCheckoutRequest, Config, ShopOrderInvoice } from '@reblu/site-contracts';
1
+ import { ShopErrorCode, AcademyCourseDetail, AcademyLessonPreview, PageDetail, PageListItem, ProfessionalField, ShopProductListItem, ShopProductTrustIcon, ShopProductTrustItem, TrustBadgeType, TrustBadge, Review, BeforeAfterData, CardIcon, IconCardsData, ImageTextData, ShopFacets, AcademyInstructorPublic, AcademyCategoryPublic, AcademyCatalogFiltersPublic, ShopBundleComponent, ShopStaffAutoDiscount, ShopOrder, ShopCheckoutDeliveryConfig, ShopCheckoutCopy, ShopFulfillmentInput, ShopQuote, ShopCheckoutInput, AcademyCheckoutRequest, Config, ShopOrderInvoice } from '@reblu/site-contracts';
2
2
  export { DATA_REQUEST_TYPES } from '@reblu/site-contracts';
3
3
  import { FaqItem } from './seo.js';
4
4
  export { FaqPageJsonLd, MarkdownToPlainTextOptions, buildFaqPageJsonLd, collectFaqItems, markdownToPlainText } from './seo.js';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
6
  import * as React$1 from 'react';
7
7
  import { ReactNode, ComponentType, FormEvent } from 'react';
8
- import { H as HeadingLevel, a as FullInvoiceValue } from './full-invoice-fields-DMX0sjPG.js';
9
- export { b as CheckoutTermsAcceptance, c as CheckoutTermsAcceptanceProps, C as CheckoutTermsCopy, D as DEFAULT_INVOICE_COUNTRIES, E as EMPTY_FULL_INVOICE_VALUE, d as FullInvoiceErrors, e as FullInvoiceFields, F as FullInvoiceFieldsLabels, f as FullInvoiceFieldsProps, g as FullInvoiceIdType, i as isOverSimplifiedInvoiceCap, s as shopIssuesInvoices, t as toCheckoutInvoiceFields, h as toCheckoutTermsFields } from './full-invoice-fields-DMX0sjPG.js';
8
+ import { H as HeadingLevel, a as FullInvoiceValue } from './page-links-C0nXQzAW.js';
9
+ export { B as BlockRendererProps, b as CanonicalBlockType, c as CheckoutTermsAcceptance, d as CheckoutTermsAcceptanceProps, C as CheckoutTermsCopy, D as DEFAULT_INVOICE_COUNTRIES, E as EMPTY_FULL_INVOICE_VALUE, e as FullInvoiceErrors, f as FullInvoiceFields, F as FullInvoiceFieldsLabels, g as FullInvoiceFieldsProps, h as FullInvoiceIdType, L as LinkFilterOption, i as PageBlocks, j as PageBlocksComponents, k as PageBlocksProps, P as PageLinkRef, R as RenderableBlock, l as filterByLink, m as isOverSimplifiedInvoiceCap, n as linkFilterOptions, o as linkKey, s as shopIssuesInvoices, t as toCheckoutInvoiceFields, p as toCheckoutTermsFields } from './page-links-C0nXQzAW.js';
10
10
 
11
11
  declare function readingTime(content: string | null | undefined): number | null;
12
12
 
@@ -367,6 +367,53 @@ interface CoursePurchaseTermsProps {
367
367
  }
368
368
  declare function CoursePurchaseTerms({ course, heading, headingLevel, headingId, labels, className, headingClassName, listClassName, }: CoursePurchaseTermsProps): react_jsx_runtime.JSX.Element | null;
369
369
 
370
+ type Schedule = NonNullable<AcademyCourseDetail['schedule']>;
371
+ type Session = Schedule['sessions'][number];
372
+ /** Texts of {@link CourseSchedule}; replace any of them in the SITE's language. */
373
+ interface CourseScheduleLabels {
374
+ /** The modality line. */
375
+ modality: Record<Schedule['modality'], ReactNode>;
376
+ /** Title of the list of dates. */
377
+ dates: ReactNode;
378
+ /** Title of the place of an in-person course. */
379
+ place: ReactNode;
380
+ /** One date: receives the session, its time zone and the `locale` prop. */
381
+ session: (session: Session, timeZone: string, locale: string) => ReactNode;
382
+ }
383
+ declare const DEFAULT_COURSE_SCHEDULE_LABELS: CourseScheduleLabels;
384
+ /**
385
+ * `CourseSchedule` — the drop-in for the dates and place of an in-person or
386
+ * webinar course (`client.academy.bySlug()` → `schedule`, REB-1363), which
387
+ * the buyer must see before paying: the modality, each date in the tenant's
388
+ * time zone, the place of an in-person course and the tenant's notes.
389
+ *
390
+ * Server Component, RSC-safe: no hooks, no state, no `'use client'`.
391
+ *
392
+ * Renders NOTHING when the course has no schedule (any other modality) or
393
+ * against an API that predates it. The default copy is Spanish; pass
394
+ * `labels` (and `locale` for the dates) to replace it.
395
+ */
396
+ interface CourseScheduleProps {
397
+ /** The field of `AcademyCourseDetail` this block reads. */
398
+ course: Partial<Pick<AcademyCourseDetail, 'schedule'>>;
399
+ /** Optional section heading, e.g. «Fechas y lugar». */
400
+ heading?: ReactNode;
401
+ /** Level of `heading`. Defaults to `2`. */
402
+ headingLevel?: HeadingLevel;
403
+ /** `id` of the heading element (the section's `aria-labelledby`). */
404
+ headingId?: string;
405
+ labels?: Partial<CourseScheduleLabels>;
406
+ /** BCP 47 locale of the dates. Defaults to `es-ES`. */
407
+ locale?: string;
408
+ /** Classes for the outer element (added to its `space-y-3` layout). */
409
+ className?: string;
410
+ /** Classes for the heading; REPLACE the default `text-lg font-semibold`. */
411
+ headingClassName?: string;
412
+ /** Classes for the body text; REPLACE the default `text-sm`. */
413
+ bodyClassName?: string;
414
+ }
415
+ declare function CourseSchedule({ course, heading, headingLevel, headingId, labels, locale, className, headingClassName, bodyClassName, }: CourseScheduleProps): react_jsx_runtime.JSX.Element | null;
416
+
370
417
  /**
371
418
  * `LegalDocument` — the drop-in for a legal page the tenant writes in nexus
372
419
  * (`client.legal.get()`: `legalNotice`, `withdrawalPolicy`, `privacyPolicy`,
@@ -547,6 +594,57 @@ interface ProfileCardProps {
547
594
  }
548
595
  declare function ProfileCard({ name, role, imageUrl, specialties, bio, fields, href, className, }: ProfileCardProps): react_jsx_runtime.JSX.Element;
549
596
 
597
+ /**
598
+ * REB-1100 — drop-ins for the page links of `client.pages.get(slug)`:
599
+ *
600
+ * - `LinkedPagesGrid` over `page.links` (the pages this page picked, e.g. a
601
+ * profile's areas) or `page.relatedPages` (derived: the pages of those
602
+ * areas, or the pages that belong to this one);
603
+ * - `TeamGrid` over `page.team` (derived: the team profiles linked to this
604
+ * page or to the pages it belongs to).
605
+ *
606
+ * Both render nothing for an empty or absent list, so a SITE can drop them in
607
+ * before the API emits the fields. Token-driven, RSC-safe.
608
+ */
609
+ interface LinkedPageCardItem {
610
+ slug: string;
611
+ title: string;
612
+ excerpt?: string | null;
613
+ coverImageUrl?: string | null;
614
+ category?: {
615
+ name: string;
616
+ slug: string;
617
+ } | null;
618
+ }
619
+ interface LinkedPagesGridProps<T extends LinkedPageCardItem = LinkedPageCardItem> {
620
+ pages: T[] | null | undefined;
621
+ /** Builds a card's href. Defaults to `/{slug}`. */
622
+ pageHref?: (page: T) => string;
623
+ /** Optional `<h2>` above the grid, e.g. «Áreas». */
624
+ heading?: string;
625
+ className?: string;
626
+ }
627
+ declare function LinkedPagesGrid<T extends LinkedPageCardItem>({ pages, pageHref, heading, className, }: LinkedPagesGridProps<T>): react_jsx_runtime.JSX.Element | null;
628
+ interface TeamGridMember {
629
+ slug: string;
630
+ title: string;
631
+ role?: string | null;
632
+ coverImageUrl?: string | null;
633
+ category?: {
634
+ name: string;
635
+ slug: string;
636
+ } | null;
637
+ }
638
+ interface TeamGridProps<T extends TeamGridMember = TeamGridMember> {
639
+ members: T[] | null | undefined;
640
+ /** Builds a member's profile href. Omit to render non-linking cards. */
641
+ memberHref?: (member: T) => string;
642
+ /** Optional `<h2>` above the grid, e.g. «Equipo». */
643
+ heading?: string;
644
+ className?: string;
645
+ }
646
+ declare function TeamGrid<T extends TeamGridMember>({ members, memberHref, heading, className, }: TeamGridProps<T>): react_jsx_runtime.JSX.Element | null;
647
+
550
648
  /**
551
649
  * `ProfessionalFields` — the tenant-defined professional fields of a team
552
650
  * profile (REB-1099), e.g. a registration number, as a `<dl>`.
@@ -832,78 +930,6 @@ interface ReviewsProps {
832
930
  }
833
931
  declare function Reviews({ reviews, heading, headingId, headingLevel, notice, noticePosition, linkLabel, newWindowLabel, locale, className, headingClassName, gridClassName, cardClassName, noticeClassName, }: ReviewsProps): react_jsx_runtime.JSX.Element | null;
834
932
 
835
- /**
836
- * REB-850 — `PageBlocks`: the shared renderer for a page's registry blocks
837
- * (`PageDetail.blocks`, REB-75), so a SITE stops hand-writing its own.
838
- *
839
- * A SERVER COMPONENT by default: no hooks, no `'use client'`, reachable from the
840
- * RSC-safe root entry (`test/rsc-safety.test.ts` renders it under
841
- * `--conditions=react-server`).
842
- *
843
- * Each block is wrapped in a `<section>` carrying the parent section's
844
- * mirrored fields (REB-849): `heading`, `backgroundColor` and `cta`. The body
845
- * comes from a per-type renderer that the `components` map can replace.
846
- *
847
- * Fail-closed rules:
848
- * • an unknown `blockType` renders nothing (the whole section) and never throws;
849
- * • an embed whose `resolved` is `null`/absent renders nothing — no heading,
850
- * no dead link;
851
- * • deprecated alias types (`doctor_embed`, `specialty_embed` — REB-852)
852
- * render through their generic type's renderer (`profile_embed`, `page_embed`).
853
- */
854
- type DeprecatedAlias = 'doctor_embed' | 'specialty_embed';
855
- /** Block types a renderer is registered under — deprecated aliases resolve to these. */
856
- type CanonicalBlockType = Exclude<BlockType, DeprecatedAlias>;
857
- type EmbedType = 'page_embed' | 'profile_embed';
858
- type WireTypesOf<T extends CanonicalBlockType> = T extends 'profile_embed' ? 'profile_embed' | 'doctor_embed' : T extends 'page_embed' ? 'page_embed' | 'specialty_embed' : T;
859
- /**
860
- * The block a renderer for `T` receives — including its deprecated alias, and
861
- * with `resolved` guaranteed non-null for embeds (unresolved ones never render).
862
- */
863
- type RenderableBlock<T extends CanonicalBlockType> = T extends EmbedType ? Extract<PageBlock, {
864
- blockType: WireTypesOf<T>;
865
- }> & {
866
- resolved: ResolvedEmbed;
867
- } : Extract<PageBlock, {
868
- blockType: WireTypesOf<T>;
869
- }>;
870
- interface BlockRendererProps<T extends CanonicalBlockType> {
871
- block: RenderableBlock<T>;
872
- /** Level for headings INSIDE the block — one below the section heading when there is one. */
873
- headingLevel: HeadingLevel;
874
- /** Builds an embed's href (the `embedHref` prop, or the default `/${slug}`). */
875
- embedHref: (resolved: ResolvedEmbed) => string;
876
- /**
877
- * REB-1268 — set only for block types that draw the SECTION heading
878
- * themselves (`image_text`, whose heading sits beside the image): the id the
879
- * section's `aria-labelledby` points at. `headingLevel` is then the section
880
- * heading's own level. Undefined for every other block type.
881
- */
882
- headingId?: string;
883
- }
884
- /** Per-block-type renderer overrides, keyed by canonical type. */
885
- type PageBlocksComponents = Partial<{
886
- [T in CanonicalBlockType]: ComponentType<BlockRendererProps<T>>;
887
- }>;
888
- interface PageBlocksProps {
889
- blocks: readonly PageBlock[] | null | undefined;
890
- /** Replace the body renderer of any block type. */
891
- components?: PageBlocksComponents;
892
- /** Level of each section heading. Default `2` (the page title is the `h1`). */
893
- headingLevel?: HeadingLevel;
894
- /** Href for an embedded page. Default `/${resolved.slug}`. */
895
- embedHref?: (resolved: ResolvedEmbed) => string;
896
- /**
897
- * Namespace for the section heading ids (`aria-labelledby` targets). Pass a
898
- * distinct value when one document renders `PageBlocks` more than once with
899
- * overlapping blocks. Sanitised to a valid IDREF. Default `'page-block'`.
900
- */
901
- idPrefix?: string;
902
- className?: string;
903
- sectionClassName?: string;
904
- }
905
- declare function PageBlocks({ blocks, components, headingLevel, embedHref, idPrefix, className, sectionClassName, }: PageBlocksProps): react_jsx_runtime.JSX.Element | null;
906
-
907
933
  /**
908
934
  * REB-1265..1268 — drop-in components for the content blocks a tenant
909
935
  * authors in the nexus page editor. Each one takes the block's `data` fields
@@ -1732,8 +1758,8 @@ declare function quoteRequiresDelivery(quote: Pick<ShopQuote, 'lines'> | null |
1732
1758
  * The quote and checkout body fields for the delivery choice. Home delivery
1733
1759
  * carries the address (blank optional fields left out); pickup the point. With
1734
1760
  * no choice (a cart with nothing to ship) it still sends home delivery: the
1735
- * server records no delivery for such a cart, and the request stays on the
1736
- * current contract (REB-1227).
1761
+ * server records no delivery for such a cart. (Since REB-1227 the server reads
1762
+ * a missing choice on a cart that ships as home delivery, address required.)
1737
1763
  *
1738
1764
  * Pass `requiresDelivery` (`quoteRequiresDelivery(quote)`): when the cart
1739
1765
  * ships nothing the choice block is hidden and the address stays blank, so no
@@ -1921,4 +1947,4 @@ interface OrderInvoiceLinkProps {
1921
1947
  }
1922
1948
  declare function OrderInvoiceLink({ invoice, labels, className }: OrderInvoiceLinkProps): react_jsx_runtime.JSX.Element | null;
1923
1949
 
1924
- export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, ArbitrationBadge, type ArbitrationBadgeProps, BeforeAfterPairs, type BeforeAfterPairsProps, type BlockRendererProps, CARD_ICON_NAMES, type CanonicalBlockType, CardIconSvg, type CartAdjustmentLine, CartAdjustmentsNotice, type CartAdjustmentsNoticeLabels, type CartAdjustmentsNoticeProps, CartLineIncludes, type CartLineIncludesEntry, type CartLineIncludesProps, type CartLineItemView, CartLineList, type CartLineListLabels, type CartLineListProps, CartSummary, type CartSummaryLabels, type CartSummaryProps, type CheckoutAddressErrors, type CheckoutAddressValue, type CheckoutAppliedDiscount, type CheckoutContactErrors, type CheckoutContactValues, CheckoutDeliveryChoice, type CheckoutDeliveryChoiceLabels, type CheckoutDeliveryChoiceProps, CheckoutForm, type CheckoutFormLabels, type CheckoutFormProps, CheckoutLoginPrompt, type CheckoutLoginPromptLabels, type CheckoutLoginPromptProps, CheckoutPayAction, type CheckoutPayActionProps, CheckoutQuoteNotice, type CheckoutQuoteNoticeInput, type CheckoutQuoteNoticeLabels, type CheckoutQuoteNoticeProps, type CheckoutQuoteNoticeReason, CheckoutQuoteSummary, type CheckoutQuoteSummaryLabels, type CheckoutQuoteSummaryProps, ChipList, type ChipListProps, type ContactInterest, ContactInterestField, type ContactInterestFieldProps, CourseCatalogFilters, type CourseCatalogFiltersActive, type CourseCatalogFiltersHrefs, type CourseCatalogFiltersLabels, type CourseCatalogFiltersProps, type CourseCatalogPriceBand, CourseDescription, type CourseDescriptionProps, CoursePurchaseTerms, type CoursePurchaseTermsLabels, type CoursePurchaseTermsProps, DEFAULT_BEFORE_AFTER_LABELS, DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS, DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS, DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS, DEFAULT_COURSE_CATALOG_FILTERS_LABELS, DEFAULT_COURSE_PRICE_BANDS, DEFAULT_COURSE_PURCHASE_TERMS_LABELS, DEFAULT_LESSON_PREVIEW_LABELS, DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE, DEFAULT_SHOP_ERROR_MESSAGES, DEFAULT_SHOP_PRICE_BANDS, DEFAULT_TRUST_BADGE_HEADINGS, DEFAULT_TRUST_BADGE_TYPE_ORDER, DEFAULT_TRUST_ICONS, EMPTY_CHECKOUT_ADDRESS, FaqAccordion, type FaqAccordionProps, FaqItem, FullInvoiceValue, HeadingLevel, IconCardGrid, type IconCardGridProps, ImageTextSplit, type ImageTextSplitProps, LegalDocument, type LegalDocumentProps, LessonPreview, type LessonPreviewLabels, type LessonPreviewProps, type MarkdownImageOptions, MarkdownRenderer, type MarkdownRendererProps, OrderConfirmation, type OrderConfirmationLabels, type OrderConfirmationOrder, type OrderConfirmationProps, type OrderConfirmationStatus, OrderInvoiceLink, type OrderInvoiceLinkLabels, type OrderInvoiceLinkProps, PageBlocks, type PageBlocksComponents, type PageBlocksProps, PageCardGrid, type PageCardGridProps, ParentPage, type ParentPageProps, ProductCard, type ProductCardProps, ProductTrustItems, type ProductTrustItemsProps, ProfessionalFields, type ProfessionalFieldsProps, ProfileCard, type ProfileCardProps, type RenderableBlock, Reviews, type ReviewsProps, SafeHtml, type SafeHtmlProps, type ShareUrls, type ShopFilterPriceBand, ShopFilters, type ShopFiltersActive, type ShopFiltersHrefs, type ShopFiltersLabels, type ShopFiltersProps, Specialty, type SpecialtyProps, Treatment, type TreatmentProps, TrustBadges, type TrustBadgesProps, type TrustIconComponent, type TrustIconProps, buildShareUrls, bundleComponentsToIncludes, checkoutQuoteNotice, courseSellsAsGuest, defaultCheckoutFulfillment, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isCheckoutDeliveryComplete, markdownToSafeHtml, quoteRequiresDelivery, readingTime, sanitizeHtml, shouldRenderShopFilters, toAcademyCheckoutInvoiceFields, toCheckoutFulfillmentFields };
1950
+ export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, ArbitrationBadge, type ArbitrationBadgeProps, BeforeAfterPairs, type BeforeAfterPairsProps, CARD_ICON_NAMES, CardIconSvg, type CartAdjustmentLine, CartAdjustmentsNotice, type CartAdjustmentsNoticeLabels, type CartAdjustmentsNoticeProps, CartLineIncludes, type CartLineIncludesEntry, type CartLineIncludesProps, type CartLineItemView, CartLineList, type CartLineListLabels, type CartLineListProps, CartSummary, type CartSummaryLabels, type CartSummaryProps, type CheckoutAddressErrors, type CheckoutAddressValue, type CheckoutAppliedDiscount, type CheckoutContactErrors, type CheckoutContactValues, CheckoutDeliveryChoice, type CheckoutDeliveryChoiceLabels, type CheckoutDeliveryChoiceProps, CheckoutForm, type CheckoutFormLabels, type CheckoutFormProps, CheckoutLoginPrompt, type CheckoutLoginPromptLabels, type CheckoutLoginPromptProps, CheckoutPayAction, type CheckoutPayActionProps, CheckoutQuoteNotice, type CheckoutQuoteNoticeInput, type CheckoutQuoteNoticeLabels, type CheckoutQuoteNoticeProps, type CheckoutQuoteNoticeReason, CheckoutQuoteSummary, type CheckoutQuoteSummaryLabels, type CheckoutQuoteSummaryProps, ChipList, type ChipListProps, type ContactInterest, ContactInterestField, type ContactInterestFieldProps, CourseCatalogFilters, type CourseCatalogFiltersActive, type CourseCatalogFiltersHrefs, type CourseCatalogFiltersLabels, type CourseCatalogFiltersProps, type CourseCatalogPriceBand, CourseDescription, type CourseDescriptionProps, CoursePurchaseTerms, type CoursePurchaseTermsLabels, type CoursePurchaseTermsProps, CourseSchedule, type CourseScheduleLabels, type CourseScheduleProps, DEFAULT_BEFORE_AFTER_LABELS, DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS, DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS, DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS, DEFAULT_COURSE_CATALOG_FILTERS_LABELS, DEFAULT_COURSE_PRICE_BANDS, DEFAULT_COURSE_PURCHASE_TERMS_LABELS, DEFAULT_COURSE_SCHEDULE_LABELS, DEFAULT_LESSON_PREVIEW_LABELS, DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE, DEFAULT_SHOP_ERROR_MESSAGES, DEFAULT_SHOP_PRICE_BANDS, DEFAULT_TRUST_BADGE_HEADINGS, DEFAULT_TRUST_BADGE_TYPE_ORDER, DEFAULT_TRUST_ICONS, EMPTY_CHECKOUT_ADDRESS, FaqAccordion, type FaqAccordionProps, FaqItem, FullInvoiceValue, HeadingLevel, IconCardGrid, type IconCardGridProps, ImageTextSplit, type ImageTextSplitProps, LegalDocument, type LegalDocumentProps, LessonPreview, type LessonPreviewLabels, type LessonPreviewProps, type LinkedPageCardItem, LinkedPagesGrid, type LinkedPagesGridProps, type MarkdownImageOptions, MarkdownRenderer, type MarkdownRendererProps, OrderConfirmation, type OrderConfirmationLabels, type OrderConfirmationOrder, type OrderConfirmationProps, type OrderConfirmationStatus, OrderInvoiceLink, type OrderInvoiceLinkLabels, type OrderInvoiceLinkProps, PageCardGrid, type PageCardGridProps, ParentPage, type ParentPageProps, ProductCard, type ProductCardProps, ProductTrustItems, type ProductTrustItemsProps, ProfessionalFields, type ProfessionalFieldsProps, ProfileCard, type ProfileCardProps, Reviews, type ReviewsProps, SafeHtml, type SafeHtmlProps, type ShareUrls, type ShopFilterPriceBand, ShopFilters, type ShopFiltersActive, type ShopFiltersHrefs, type ShopFiltersLabels, type ShopFiltersProps, Specialty, type SpecialtyProps, TeamGrid, type TeamGridMember, type TeamGridProps, Treatment, type TreatmentProps, TrustBadges, type TrustBadgesProps, type TrustIconComponent, type TrustIconProps, buildShareUrls, bundleComponentsToIncludes, checkoutQuoteNotice, courseSellsAsGuest, defaultCheckoutFulfillment, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isCheckoutDeliveryComplete, markdownToSafeHtml, quoteRequiresDelivery, readingTime, sanitizeHtml, shouldRenderShopFilters, toAcademyCheckoutInvoiceFields, toCheckoutFulfillmentFields };