@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/CHANGELOG.md +36 -0
- package/README.md +207 -2
- package/dist/client.cjs +459 -0
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +142 -3
- package/dist/client.d.ts +142 -3
- package/dist/client.js +453 -0
- package/dist/client.js.map +1 -1
- package/dist/index.cjs +758 -552
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +104 -78
- package/dist/index.d.ts +104 -78
- package/dist/index.js +752 -553
- package/dist/index.js.map +1 -1
- package/dist/{full-invoice-fields-DMX0sjPG.d.cts → page-links-C0nXQzAW.d.cts} +105 -2
- package/dist/{full-invoice-fields-DMX0sjPG.d.ts → page-links-C0nXQzAW.d.ts} +105 -2
- package/package.json +4 -4
package/dist/index.d.cts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { ShopErrorCode, AcademyCourseDetail, AcademyLessonPreview, PageDetail, PageListItem, ProfessionalField, ShopProductListItem, ShopProductTrustIcon, ShopProductTrustItem, TrustBadgeType, TrustBadge, Review,
|
|
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 './
|
|
9
|
-
export { b as
|
|
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
|
|
1736
|
-
*
|
|
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,
|
|
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,
|
|
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 './
|
|
9
|
-
export { b as
|
|
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
|
|
1736
|
-
*
|
|
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,
|
|
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 };
|