@reblu/site-blocks 0.28.0 → 0.30.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,4 +1,4 @@
1
- import { ShopErrorCode, AcademyCourseDetail, AcademyLessonPreview, PageDetail, PageListItem, ProfessionalField, ShopProductListItem, ShopProductTrustIcon, ShopProductTrustItem, TrustBadgeType, TrustBadge, BlockType, PageBlock, ResolvedEmbed, ShopFacets, AcademyInstructorPublic, AcademyCategoryPublic, AcademyCatalogFiltersPublic, ShopStaffAutoDiscount, ShopOrder, ShopBillingInput, ShopCheckoutInput, Config, ShopOrderInvoice } from '@reblu/site-contracts';
1
+ import { ShopErrorCode, AcademyCourseDetail, AcademyLessonPreview, PageDetail, PageListItem, ProfessionalField, ShopProductListItem, ShopProductTrustIcon, ShopProductTrustItem, TrustBadgeType, TrustBadge, BlockType, PageBlock, ResolvedEmbed, ShopFacets, AcademyInstructorPublic, AcademyCategoryPublic, AcademyCatalogFiltersPublic, ShopBundleComponent, ShopStaffAutoDiscount, ShopOrder, ShopBillingInput, ShopCheckoutInput, ShopCheckoutDeliveryConfig, ShopCheckoutCopy, ShopFulfillmentInput, ShopQuote, 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';
@@ -1069,7 +1069,34 @@ interface CartLineListLabels {
1069
1069
  unitPriceSuffix: string;
1070
1070
  /** REB-837 — default copy for `notice={true}`. */
1071
1071
  cancelledNotice: string;
1072
+ /** REB-1208 — the summary of the per-line `lineIncludes` disclosure. */
1073
+ includesSummary: string;
1072
1074
  }
1075
+ /** REB-1208 — one row of a line's «Qué incluye» detail. */
1076
+ interface CartLineIncludesEntry {
1077
+ label: React.ReactNode;
1078
+ value: React.ReactNode;
1079
+ }
1080
+ interface CartLineIncludesProps {
1081
+ entries: CartLineIncludesEntry[];
1082
+ /** An optional full-width note under the entries (e.g. a condition of use). */
1083
+ note?: React.ReactNode;
1084
+ className?: string;
1085
+ }
1086
+ /**
1087
+ * `CartLineIncludes` — drop-in body for `CartLineList`'s `lineIncludes`
1088
+ * (REB-1208): a term/description list of what a line includes, built by the
1089
+ * SITE from the product's own data (its custom-field values, or
1090
+ * `bundleComponentsToIncludes(product.bundleComponents)`). Renders nothing
1091
+ * when there are no entries and no note.
1092
+ */
1093
+ declare function CartLineIncludes({ entries, note, className }: CartLineIncludesProps): react_jsx_runtime.JSX.Element | null;
1094
+ /**
1095
+ * REB-1208 — maps `ShopProductDetail.bundleComponents` (already on the
1096
+ * contract) to `CartLineIncludes` entries: each component's name and its
1097
+ * quantity, in the `x{quantity}` form `OrderConfirmation` uses.
1098
+ */
1099
+ declare function bundleComponentsToIncludes(components: readonly ShopBundleComponent[]): CartLineIncludesEntry[];
1073
1100
  interface CartLineListProps {
1074
1101
  items: CartLineItemView[];
1075
1102
  onQuantityChange?: (productId: string, variantId: string | null | undefined, quantity: number) => void;
@@ -1093,12 +1120,19 @@ interface CartLineListProps {
1093
1120
  * `null`/`undefined` for lines without one.
1094
1121
  */
1095
1122
  lineMessage?: (item: CartLineItemView) => React.ReactNode;
1123
+ /**
1124
+ * REB-1208 — what a line includes, shown under it in a collapsed
1125
+ * «Qué incluye» disclosure (`labels.includesSummary`). Return the content
1126
+ * (usually `<CartLineIncludes entries={…} />`), or `null`/`undefined` for
1127
+ * lines with nothing to show. Omit the prop to render no disclosure.
1128
+ */
1129
+ lineIncludes?: (item: CartLineItemView) => React.ReactNode;
1096
1130
  labels?: Partial<CartLineListLabels>;
1097
1131
  currencyCode?: string;
1098
1132
  locale?: string;
1099
1133
  className?: string;
1100
1134
  }
1101
- declare function CartLineList({ items, onQuantityChange, onRemove, liveMessage, notice, lineMessage, labels, currencyCode, locale, className, }: CartLineListProps): react_jsx_runtime.JSX.Element;
1135
+ declare function CartLineList({ items, onQuantityChange, onRemove, liveMessage, notice, lineMessage, lineIncludes, labels, currencyCode, locale, className, }: CartLineListProps): react_jsx_runtime.JSX.Element;
1102
1136
 
1103
1137
  /**
1104
1138
  * `CartSummary` — presentational price breakdown (REB-829): subtotal,
@@ -1547,6 +1581,198 @@ interface FullInvoiceFieldsProps {
1547
1581
  }
1548
1582
  declare function FullInvoiceFields({ value, onChange, overCap, issuesInvoices, errors, countries, labels, className, }: FullInvoiceFieldsProps): react_jsx_runtime.JSX.Element | null;
1549
1583
 
1584
+ /** The shipping address fields the buyer types (country defaults server-side). */
1585
+ interface CheckoutAddressValue {
1586
+ firstName: string;
1587
+ lastName: string;
1588
+ street: string;
1589
+ postalCode: string;
1590
+ city: string;
1591
+ region: string;
1592
+ }
1593
+ type CheckoutAddressErrors = Partial<Record<keyof CheckoutAddressValue, string>>;
1594
+ declare const EMPTY_CHECKOUT_ADDRESS: CheckoutAddressValue;
1595
+ /** SDK texts of {@link CheckoutDeliveryChoice}; the option names come from the tenant. */
1596
+ interface CheckoutDeliveryChoiceLabels {
1597
+ legend: string;
1598
+ free: string;
1599
+ pickupPointsLegend: string;
1600
+ addressLegend: string;
1601
+ firstName: string;
1602
+ lastName: string;
1603
+ street: string;
1604
+ postalCode: string;
1605
+ city: string;
1606
+ region: string;
1607
+ }
1608
+ declare const DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS: CheckoutDeliveryChoiceLabels;
1609
+ interface CheckoutDeliveryChoiceProps {
1610
+ /** `ShopConfig.delivery`. */
1611
+ delivery: ShopCheckoutDeliveryConfig;
1612
+ /** `ShopConfig.checkout` — the tenant's option names. */
1613
+ copy: Pick<ShopCheckoutCopy, 'shippingOptionLabel' | 'pickupOptionLabel'>;
1614
+ /** The current choice; start from {@link defaultCheckoutFulfillment}. */
1615
+ value: ShopFulfillmentInput | null;
1616
+ onChange: (value: ShopFulfillmentInput) => void;
1617
+ address: CheckoutAddressValue;
1618
+ onAddressChange: (value: CheckoutAddressValue) => void;
1619
+ addressErrors?: CheckoutAddressErrors;
1620
+ /** A delivery error from checkout or the quote (e.g. `PICKUP_LOCATION_INVALID`). */
1621
+ error?: string | null;
1622
+ /** The last quote: its home delivery cost wins over the flat cost (free over the threshold). */
1623
+ quote?: Pick<ShopQuote, 'fulfillment' | 'shipping'> | null;
1624
+ /** `false` for a cart with nothing to ship (see {@link quoteRequiresDelivery}): renders nothing. */
1625
+ requiresDelivery?: boolean;
1626
+ labels?: Partial<CheckoutDeliveryChoiceLabels>;
1627
+ currencyCode?: string;
1628
+ locale?: string;
1629
+ /** Prefix of the element ids and radio names (one choice per page). @default 'checkout-delivery' */
1630
+ id?: string;
1631
+ className?: string;
1632
+ }
1633
+ /**
1634
+ * `CheckoutDeliveryChoice` (REB-1197) — how the order reaches the buyer,
1635
+ * chosen before paying: home delivery (with the shipping address, stored on
1636
+ * the order) or free pickup at one of the tenant's pickup points. Only the
1637
+ * methods the tenant offers (`ShopConfig.delivery.methods`) are shown, with
1638
+ * the tenant's names; home delivery shows its cost and the estimated delivery
1639
+ * term; each pickup point its address, opening hours and ready-in text, all
1640
+ * edited in nexus. Fully controlled, no hooks (RSC-safe root entry); send {@link toCheckoutFulfillmentFields}
1641
+ * with the quote and the checkout body. Place it inside the checkout `<form>`
1642
+ * (the address fields are `required`).
1643
+ */
1644
+ declare function CheckoutDeliveryChoice({ delivery, copy, value, onChange, address, onAddressChange, addressErrors, error, quote, requiresDelivery, labels, currencyCode, locale, id: uid, className, }: CheckoutDeliveryChoiceProps): react_jsx_runtime.JSX.Element | null;
1645
+ /**
1646
+ * The starting choice: home delivery when offered, else pickup (with the
1647
+ * point preselected when there is only one). `null` when the tenant offers
1648
+ * neither, or against an API that predates the delivery config.
1649
+ */
1650
+ declare function defaultCheckoutFulfillment(delivery: ShopCheckoutDeliveryConfig | null | undefined): ShopFulfillmentInput | null;
1651
+ /** Whether the cart has something to deliver; `true` until a quote says otherwise. */
1652
+ declare function quoteRequiresDelivery(quote: Pick<ShopQuote, 'lines'> | null | undefined): boolean;
1653
+ /**
1654
+ * The quote and checkout body fields for the delivery choice. Home delivery
1655
+ * carries the address (blank optional fields left out); pickup the point. With
1656
+ * no choice (a cart with nothing to ship) it still sends home delivery: the
1657
+ * server records no delivery for such a cart, and the request stays on the
1658
+ * current contract (REB-1227).
1659
+ *
1660
+ * Pass `requiresDelivery` (`quoteRequiresDelivery(quote)`): when the cart
1661
+ * ships nothing the choice block is hidden and the address stays blank, so no
1662
+ * address and no pickup point are sent — a blank address is refused by the
1663
+ * server (400 INVALID_INPUT) and pickup of nothing is refused too.
1664
+ */
1665
+ declare function toCheckoutFulfillmentFields(value: ShopFulfillmentInput | null, address: CheckoutAddressValue, requiresDelivery?: boolean): Pick<ShopCheckoutInput, 'fulfillment' | 'shippingAddress'>;
1666
+
1667
+ /** SDK texts of {@link CheckoutQuoteSummary}; the tenant's own ones come in the quote. */
1668
+ interface CheckoutQuoteSummaryLabels {
1669
+ subtotal: string;
1670
+ /** The discount row: its tenant label when automatic, else the code. */
1671
+ discount: (codeOrLabel: string, isAutomatic: boolean) => string;
1672
+ free: string;
1673
+ /** Fallback delivery row name when the quote carries no label. */
1674
+ delivery: string;
1675
+ remainingForFree: (formattedAmount: string) => string;
1676
+ /** A tax row when prices include it («De los cuales IGIC 7 %»). */
1677
+ taxIncluded: (taxLabel: string) => string;
1678
+ total: string;
1679
+ /** Under the total when prices include tax. */
1680
+ taxesIncludedNote: string;
1681
+ quantityTimesUnit: (quantity: number, formattedUnitPrice: string) => string;
1682
+ }
1683
+ declare const DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS: CheckoutQuoteSummaryLabels;
1684
+ interface CheckoutQuoteSummaryProps {
1685
+ /** `useShopQuote().quote` / `client.shop.quote()` — the total Stripe charges. */
1686
+ quote: ShopQuote;
1687
+ heading?: ReactNode;
1688
+ headingLevel?: HeadingLevel;
1689
+ labels?: Partial<CheckoutQuoteSummaryLabels>;
1690
+ /** @default 'EUR' */
1691
+ currencyCode?: string;
1692
+ /** @default 'es-ES' */
1693
+ locale?: string;
1694
+ className?: string;
1695
+ }
1696
+ /**
1697
+ * `CheckoutQuoteSummary` (REB-1197) — the pre-payment summary of the
1698
+ * single-step checkout, rendered from `ShopQuote`: every line with its kind,
1699
+ * quantity and unit price; subtotal; discount; the delivery row (home
1700
+ * delivery cost or «Gratis», or the pickup point); the tax rows the tenant
1701
+ * shows; the total; the estimated delivery term. The amount is exactly what
1702
+ * Stripe charges (the API prices quote and checkout with one function).
1703
+ * Announces why a typed code was not applied (`role=status`) and why the
1704
+ * order cannot be paid (`role=alert`, e.g. over the max weight).
1705
+ *
1706
+ * Presentational and RSC-safe. Tenant texts (delivery labels, tax labels,
1707
+ * line kinds, the estimate) come from the API; `labels` replaces the rest.
1708
+ */
1709
+ declare function CheckoutQuoteSummary({ quote, heading, headingLevel, labels, currencyCode, locale, className, }: CheckoutQuoteSummaryProps): react_jsx_runtime.JSX.Element;
1710
+
1711
+ /**
1712
+ * `CheckoutTermsAcceptance` (REB-1198) — the mandatory, unticked box «He leído
1713
+ * y acepto las {terms} de {tenant}» of the single-step checkout. Every text is
1714
+ * the tenant's (`ShopConfig.checkout`, edited in nexus › Configuración ›
1715
+ * Legal): `{terms}` becomes the link to the full document (text
1716
+ * `termsLinkText`, target `termsLinkUrl` or the SITE's own `termsHref`, a new
1717
+ * tab when `isTermsLinkNewTab`), `{tenant}` the site name. A label without
1718
+ * `{terms}` gets the link appended.
1719
+ *
1720
+ * Renders nothing while the tenant has published no terms
1721
+ * (`termsVersion: null`): there is nothing to accept and checkout does not
1722
+ * ask. Send {@link toCheckoutTermsFields} with the checkout body; the server
1723
+ * refuses without it (`TERMS_NOT_ACCEPTED`) or with an old version
1724
+ * (`TERMS_VERSION_CHANGED`: reload the config and ask again).
1725
+ */
1726
+ type CheckoutTermsCopy = Pick<ShopCheckoutCopy, 'tenantName' | 'termsCheckboxLabel' | 'termsLinkText' | 'termsLinkUrl' | 'isTermsLinkNewTab' | 'termsVersion'>;
1727
+ interface CheckoutTermsAcceptanceProps {
1728
+ copy: CheckoutTermsCopy;
1729
+ /** The SITE's route to its terms page, used when the tenant set no `termsLinkUrl`. */
1730
+ termsHref: string;
1731
+ checked: boolean;
1732
+ onCheckedChange: (checked: boolean) => void;
1733
+ /** E.g. «Debes aceptar las condiciones para continuar.» (the SITE's or the API's text). */
1734
+ error?: string | null;
1735
+ /** Appended inside the link when it opens a new tab (screen readers). @default '(se abre en una pestaña nueva)' */
1736
+ newTabHint?: string;
1737
+ /** The checkbox id (one box per page). @default 'checkout-terms' */
1738
+ id?: string;
1739
+ className?: string;
1740
+ }
1741
+ declare function CheckoutTermsAcceptance({ copy, termsHref, checked, onCheckedChange, error, newTabHint, id, className, }: CheckoutTermsAcceptanceProps): react_jsx_runtime.JSX.Element | null;
1742
+ /**
1743
+ * The checkout body fields for the terms box: `acceptsTerms` and the version
1744
+ * shown (`termsVersionId`), or nothing when the tenant published no terms.
1745
+ */
1746
+ declare function toCheckoutTermsFields(copy: Pick<ShopCheckoutCopy, 'termsVersion'> | null | undefined, accepted: boolean): Pick<ShopCheckoutInput, 'acceptsTerms' | 'termsVersionId'>;
1747
+
1748
+ /**
1749
+ * `CheckoutPayAction` (REB-1198) — the last control of the single-step
1750
+ * checkout: the submit button (`ShopCheckoutCopy.continueToPaymentLabel`,
1751
+ * «Continuar al pago») and, right under it and readable (lawyer, 3-Nov: no
1752
+ * tiny text), the notice with the amount (`ShopQuote.payNotice`, «En el
1753
+ * siguiente paso pagarás {total} en la pasarela segura de Stripe…», already
1754
+ * filled). The button is described by the notice, so a screen reader hears
1755
+ * both. Place it inside the checkout `<form>`.
1756
+ */
1757
+ interface CheckoutPayActionProps {
1758
+ /** The tenant's button text: `ShopCheckoutCopy.continueToPaymentLabel`. */
1759
+ label: string;
1760
+ /** The tenant's small print: `ShopQuote.payNotice`. Omit while there is no quote. */
1761
+ notice?: string | null;
1762
+ submitting?: boolean;
1763
+ /** Shown on the button while `submitting`. @default 'Procesando…' */
1764
+ submittingLabel?: string;
1765
+ disabled?: boolean;
1766
+ /** Prefix of the element ids (one action per page). @default 'checkout-pay' */
1767
+ id?: string;
1768
+ className?: string;
1769
+ /** Classes for the button; REPLACE the default look. */
1770
+ buttonClassName?: string;
1771
+ /** Classes for the notice; REPLACE the default `text-sm text-muted-foreground`. */
1772
+ noticeClassName?: string;
1773
+ }
1774
+ declare function CheckoutPayAction({ label, notice, submitting, submittingLabel, disabled, id, className, buttonClassName, noticeClassName, }: CheckoutPayActionProps): react_jsx_runtime.JSX.Element;
1775
+
1550
1776
  /**
1551
1777
  * `ContactInterestField` — the contact form's tenant-configurable interest
1552
1778
  * question, drop-in (REB-759). Fully controlled (`value`/`onChange`), no hooks,
@@ -1596,4 +1822,4 @@ interface OrderInvoiceLinkProps {
1596
1822
  }
1597
1823
  declare function OrderInvoiceLink({ invoice, labels, className }: OrderInvoiceLinkProps): react_jsx_runtime.JSX.Element | null;
1598
1824
 
1599
- export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, ArbitrationBadge, type ArbitrationBadgeProps, type BlockRendererProps, type CanonicalBlockType, type CartAdjustmentLine, CartAdjustmentsNotice, type CartAdjustmentsNoticeLabels, type CartAdjustmentsNoticeProps, type CartLineItemView, CartLineList, type CartLineListLabels, type CartLineListProps, CartSummary, type CartSummaryLabels, type CartSummaryProps, type CheckoutAppliedDiscount, type CheckoutContactErrors, type CheckoutContactValues, CheckoutForm, type CheckoutFormLabels, type CheckoutFormProps, CheckoutLoginPrompt, type CheckoutLoginPromptLabels, type CheckoutLoginPromptProps, 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_COURSE_CATALOG_FILTERS_LABELS, DEFAULT_COURSE_PRICE_BANDS, DEFAULT_COURSE_PURCHASE_TERMS_LABELS, DEFAULT_INVOICE_COUNTRIES, 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_FULL_INVOICE_VALUE, FaqAccordion, type FaqAccordionProps, FaqItem, type FullInvoiceErrors, FullInvoiceFields, type FullInvoiceFieldsLabels, type FullInvoiceFieldsProps, type FullInvoiceIdType, type FullInvoiceValue, HeadingLevel, 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, 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, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isOverSimplifiedInvoiceCap, markdownToSafeHtml, readingTime, sanitizeHtml, shopIssuesInvoices, shouldRenderShopFilters, toCheckoutInvoiceFields };
1825
+ export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, ArbitrationBadge, type ArbitrationBadgeProps, type BlockRendererProps, type CanonicalBlockType, 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, CheckoutQuoteSummary, type CheckoutQuoteSummaryLabels, type CheckoutQuoteSummaryProps, CheckoutTermsAcceptance, type CheckoutTermsAcceptanceProps, type CheckoutTermsCopy, 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_CHECKOUT_DELIVERY_CHOICE_LABELS, DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS, DEFAULT_COURSE_CATALOG_FILTERS_LABELS, DEFAULT_COURSE_PRICE_BANDS, DEFAULT_COURSE_PURCHASE_TERMS_LABELS, DEFAULT_INVOICE_COUNTRIES, 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, EMPTY_FULL_INVOICE_VALUE, FaqAccordion, type FaqAccordionProps, FaqItem, type FullInvoiceErrors, FullInvoiceFields, type FullInvoiceFieldsLabels, type FullInvoiceFieldsProps, type FullInvoiceIdType, type FullInvoiceValue, HeadingLevel, 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, 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, defaultCheckoutFulfillment, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isOverSimplifiedInvoiceCap, markdownToSafeHtml, quoteRequiresDelivery, readingTime, sanitizeHtml, shopIssuesInvoices, shouldRenderShopFilters, toCheckoutFulfillmentFields, toCheckoutInvoiceFields, toCheckoutTermsFields };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ShopErrorCode, AcademyCourseDetail, AcademyLessonPreview, PageDetail, PageListItem, ProfessionalField, ShopProductListItem, ShopProductTrustIcon, ShopProductTrustItem, TrustBadgeType, TrustBadge, BlockType, PageBlock, ResolvedEmbed, ShopFacets, AcademyInstructorPublic, AcademyCategoryPublic, AcademyCatalogFiltersPublic, ShopStaffAutoDiscount, ShopOrder, ShopBillingInput, ShopCheckoutInput, Config, ShopOrderInvoice } from '@reblu/site-contracts';
1
+ import { ShopErrorCode, AcademyCourseDetail, AcademyLessonPreview, PageDetail, PageListItem, ProfessionalField, ShopProductListItem, ShopProductTrustIcon, ShopProductTrustItem, TrustBadgeType, TrustBadge, BlockType, PageBlock, ResolvedEmbed, ShopFacets, AcademyInstructorPublic, AcademyCategoryPublic, AcademyCatalogFiltersPublic, ShopBundleComponent, ShopStaffAutoDiscount, ShopOrder, ShopBillingInput, ShopCheckoutInput, ShopCheckoutDeliveryConfig, ShopCheckoutCopy, ShopFulfillmentInput, ShopQuote, 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';
@@ -1069,7 +1069,34 @@ interface CartLineListLabels {
1069
1069
  unitPriceSuffix: string;
1070
1070
  /** REB-837 — default copy for `notice={true}`. */
1071
1071
  cancelledNotice: string;
1072
+ /** REB-1208 — the summary of the per-line `lineIncludes` disclosure. */
1073
+ includesSummary: string;
1072
1074
  }
1075
+ /** REB-1208 — one row of a line's «Qué incluye» detail. */
1076
+ interface CartLineIncludesEntry {
1077
+ label: React.ReactNode;
1078
+ value: React.ReactNode;
1079
+ }
1080
+ interface CartLineIncludesProps {
1081
+ entries: CartLineIncludesEntry[];
1082
+ /** An optional full-width note under the entries (e.g. a condition of use). */
1083
+ note?: React.ReactNode;
1084
+ className?: string;
1085
+ }
1086
+ /**
1087
+ * `CartLineIncludes` — drop-in body for `CartLineList`'s `lineIncludes`
1088
+ * (REB-1208): a term/description list of what a line includes, built by the
1089
+ * SITE from the product's own data (its custom-field values, or
1090
+ * `bundleComponentsToIncludes(product.bundleComponents)`). Renders nothing
1091
+ * when there are no entries and no note.
1092
+ */
1093
+ declare function CartLineIncludes({ entries, note, className }: CartLineIncludesProps): react_jsx_runtime.JSX.Element | null;
1094
+ /**
1095
+ * REB-1208 — maps `ShopProductDetail.bundleComponents` (already on the
1096
+ * contract) to `CartLineIncludes` entries: each component's name and its
1097
+ * quantity, in the `x{quantity}` form `OrderConfirmation` uses.
1098
+ */
1099
+ declare function bundleComponentsToIncludes(components: readonly ShopBundleComponent[]): CartLineIncludesEntry[];
1073
1100
  interface CartLineListProps {
1074
1101
  items: CartLineItemView[];
1075
1102
  onQuantityChange?: (productId: string, variantId: string | null | undefined, quantity: number) => void;
@@ -1093,12 +1120,19 @@ interface CartLineListProps {
1093
1120
  * `null`/`undefined` for lines without one.
1094
1121
  */
1095
1122
  lineMessage?: (item: CartLineItemView) => React.ReactNode;
1123
+ /**
1124
+ * REB-1208 — what a line includes, shown under it in a collapsed
1125
+ * «Qué incluye» disclosure (`labels.includesSummary`). Return the content
1126
+ * (usually `<CartLineIncludes entries={…} />`), or `null`/`undefined` for
1127
+ * lines with nothing to show. Omit the prop to render no disclosure.
1128
+ */
1129
+ lineIncludes?: (item: CartLineItemView) => React.ReactNode;
1096
1130
  labels?: Partial<CartLineListLabels>;
1097
1131
  currencyCode?: string;
1098
1132
  locale?: string;
1099
1133
  className?: string;
1100
1134
  }
1101
- declare function CartLineList({ items, onQuantityChange, onRemove, liveMessage, notice, lineMessage, labels, currencyCode, locale, className, }: CartLineListProps): react_jsx_runtime.JSX.Element;
1135
+ declare function CartLineList({ items, onQuantityChange, onRemove, liveMessage, notice, lineMessage, lineIncludes, labels, currencyCode, locale, className, }: CartLineListProps): react_jsx_runtime.JSX.Element;
1102
1136
 
1103
1137
  /**
1104
1138
  * `CartSummary` — presentational price breakdown (REB-829): subtotal,
@@ -1547,6 +1581,198 @@ interface FullInvoiceFieldsProps {
1547
1581
  }
1548
1582
  declare function FullInvoiceFields({ value, onChange, overCap, issuesInvoices, errors, countries, labels, className, }: FullInvoiceFieldsProps): react_jsx_runtime.JSX.Element | null;
1549
1583
 
1584
+ /** The shipping address fields the buyer types (country defaults server-side). */
1585
+ interface CheckoutAddressValue {
1586
+ firstName: string;
1587
+ lastName: string;
1588
+ street: string;
1589
+ postalCode: string;
1590
+ city: string;
1591
+ region: string;
1592
+ }
1593
+ type CheckoutAddressErrors = Partial<Record<keyof CheckoutAddressValue, string>>;
1594
+ declare const EMPTY_CHECKOUT_ADDRESS: CheckoutAddressValue;
1595
+ /** SDK texts of {@link CheckoutDeliveryChoice}; the option names come from the tenant. */
1596
+ interface CheckoutDeliveryChoiceLabels {
1597
+ legend: string;
1598
+ free: string;
1599
+ pickupPointsLegend: string;
1600
+ addressLegend: string;
1601
+ firstName: string;
1602
+ lastName: string;
1603
+ street: string;
1604
+ postalCode: string;
1605
+ city: string;
1606
+ region: string;
1607
+ }
1608
+ declare const DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS: CheckoutDeliveryChoiceLabels;
1609
+ interface CheckoutDeliveryChoiceProps {
1610
+ /** `ShopConfig.delivery`. */
1611
+ delivery: ShopCheckoutDeliveryConfig;
1612
+ /** `ShopConfig.checkout` — the tenant's option names. */
1613
+ copy: Pick<ShopCheckoutCopy, 'shippingOptionLabel' | 'pickupOptionLabel'>;
1614
+ /** The current choice; start from {@link defaultCheckoutFulfillment}. */
1615
+ value: ShopFulfillmentInput | null;
1616
+ onChange: (value: ShopFulfillmentInput) => void;
1617
+ address: CheckoutAddressValue;
1618
+ onAddressChange: (value: CheckoutAddressValue) => void;
1619
+ addressErrors?: CheckoutAddressErrors;
1620
+ /** A delivery error from checkout or the quote (e.g. `PICKUP_LOCATION_INVALID`). */
1621
+ error?: string | null;
1622
+ /** The last quote: its home delivery cost wins over the flat cost (free over the threshold). */
1623
+ quote?: Pick<ShopQuote, 'fulfillment' | 'shipping'> | null;
1624
+ /** `false` for a cart with nothing to ship (see {@link quoteRequiresDelivery}): renders nothing. */
1625
+ requiresDelivery?: boolean;
1626
+ labels?: Partial<CheckoutDeliveryChoiceLabels>;
1627
+ currencyCode?: string;
1628
+ locale?: string;
1629
+ /** Prefix of the element ids and radio names (one choice per page). @default 'checkout-delivery' */
1630
+ id?: string;
1631
+ className?: string;
1632
+ }
1633
+ /**
1634
+ * `CheckoutDeliveryChoice` (REB-1197) — how the order reaches the buyer,
1635
+ * chosen before paying: home delivery (with the shipping address, stored on
1636
+ * the order) or free pickup at one of the tenant's pickup points. Only the
1637
+ * methods the tenant offers (`ShopConfig.delivery.methods`) are shown, with
1638
+ * the tenant's names; home delivery shows its cost and the estimated delivery
1639
+ * term; each pickup point its address, opening hours and ready-in text, all
1640
+ * edited in nexus. Fully controlled, no hooks (RSC-safe root entry); send {@link toCheckoutFulfillmentFields}
1641
+ * with the quote and the checkout body. Place it inside the checkout `<form>`
1642
+ * (the address fields are `required`).
1643
+ */
1644
+ declare function CheckoutDeliveryChoice({ delivery, copy, value, onChange, address, onAddressChange, addressErrors, error, quote, requiresDelivery, labels, currencyCode, locale, id: uid, className, }: CheckoutDeliveryChoiceProps): react_jsx_runtime.JSX.Element | null;
1645
+ /**
1646
+ * The starting choice: home delivery when offered, else pickup (with the
1647
+ * point preselected when there is only one). `null` when the tenant offers
1648
+ * neither, or against an API that predates the delivery config.
1649
+ */
1650
+ declare function defaultCheckoutFulfillment(delivery: ShopCheckoutDeliveryConfig | null | undefined): ShopFulfillmentInput | null;
1651
+ /** Whether the cart has something to deliver; `true` until a quote says otherwise. */
1652
+ declare function quoteRequiresDelivery(quote: Pick<ShopQuote, 'lines'> | null | undefined): boolean;
1653
+ /**
1654
+ * The quote and checkout body fields for the delivery choice. Home delivery
1655
+ * carries the address (blank optional fields left out); pickup the point. With
1656
+ * no choice (a cart with nothing to ship) it still sends home delivery: the
1657
+ * server records no delivery for such a cart, and the request stays on the
1658
+ * current contract (REB-1227).
1659
+ *
1660
+ * Pass `requiresDelivery` (`quoteRequiresDelivery(quote)`): when the cart
1661
+ * ships nothing the choice block is hidden and the address stays blank, so no
1662
+ * address and no pickup point are sent — a blank address is refused by the
1663
+ * server (400 INVALID_INPUT) and pickup of nothing is refused too.
1664
+ */
1665
+ declare function toCheckoutFulfillmentFields(value: ShopFulfillmentInput | null, address: CheckoutAddressValue, requiresDelivery?: boolean): Pick<ShopCheckoutInput, 'fulfillment' | 'shippingAddress'>;
1666
+
1667
+ /** SDK texts of {@link CheckoutQuoteSummary}; the tenant's own ones come in the quote. */
1668
+ interface CheckoutQuoteSummaryLabels {
1669
+ subtotal: string;
1670
+ /** The discount row: its tenant label when automatic, else the code. */
1671
+ discount: (codeOrLabel: string, isAutomatic: boolean) => string;
1672
+ free: string;
1673
+ /** Fallback delivery row name when the quote carries no label. */
1674
+ delivery: string;
1675
+ remainingForFree: (formattedAmount: string) => string;
1676
+ /** A tax row when prices include it («De los cuales IGIC 7 %»). */
1677
+ taxIncluded: (taxLabel: string) => string;
1678
+ total: string;
1679
+ /** Under the total when prices include tax. */
1680
+ taxesIncludedNote: string;
1681
+ quantityTimesUnit: (quantity: number, formattedUnitPrice: string) => string;
1682
+ }
1683
+ declare const DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS: CheckoutQuoteSummaryLabels;
1684
+ interface CheckoutQuoteSummaryProps {
1685
+ /** `useShopQuote().quote` / `client.shop.quote()` — the total Stripe charges. */
1686
+ quote: ShopQuote;
1687
+ heading?: ReactNode;
1688
+ headingLevel?: HeadingLevel;
1689
+ labels?: Partial<CheckoutQuoteSummaryLabels>;
1690
+ /** @default 'EUR' */
1691
+ currencyCode?: string;
1692
+ /** @default 'es-ES' */
1693
+ locale?: string;
1694
+ className?: string;
1695
+ }
1696
+ /**
1697
+ * `CheckoutQuoteSummary` (REB-1197) — the pre-payment summary of the
1698
+ * single-step checkout, rendered from `ShopQuote`: every line with its kind,
1699
+ * quantity and unit price; subtotal; discount; the delivery row (home
1700
+ * delivery cost or «Gratis», or the pickup point); the tax rows the tenant
1701
+ * shows; the total; the estimated delivery term. The amount is exactly what
1702
+ * Stripe charges (the API prices quote and checkout with one function).
1703
+ * Announces why a typed code was not applied (`role=status`) and why the
1704
+ * order cannot be paid (`role=alert`, e.g. over the max weight).
1705
+ *
1706
+ * Presentational and RSC-safe. Tenant texts (delivery labels, tax labels,
1707
+ * line kinds, the estimate) come from the API; `labels` replaces the rest.
1708
+ */
1709
+ declare function CheckoutQuoteSummary({ quote, heading, headingLevel, labels, currencyCode, locale, className, }: CheckoutQuoteSummaryProps): react_jsx_runtime.JSX.Element;
1710
+
1711
+ /**
1712
+ * `CheckoutTermsAcceptance` (REB-1198) — the mandatory, unticked box «He leído
1713
+ * y acepto las {terms} de {tenant}» of the single-step checkout. Every text is
1714
+ * the tenant's (`ShopConfig.checkout`, edited in nexus › Configuración ›
1715
+ * Legal): `{terms}` becomes the link to the full document (text
1716
+ * `termsLinkText`, target `termsLinkUrl` or the SITE's own `termsHref`, a new
1717
+ * tab when `isTermsLinkNewTab`), `{tenant}` the site name. A label without
1718
+ * `{terms}` gets the link appended.
1719
+ *
1720
+ * Renders nothing while the tenant has published no terms
1721
+ * (`termsVersion: null`): there is nothing to accept and checkout does not
1722
+ * ask. Send {@link toCheckoutTermsFields} with the checkout body; the server
1723
+ * refuses without it (`TERMS_NOT_ACCEPTED`) or with an old version
1724
+ * (`TERMS_VERSION_CHANGED`: reload the config and ask again).
1725
+ */
1726
+ type CheckoutTermsCopy = Pick<ShopCheckoutCopy, 'tenantName' | 'termsCheckboxLabel' | 'termsLinkText' | 'termsLinkUrl' | 'isTermsLinkNewTab' | 'termsVersion'>;
1727
+ interface CheckoutTermsAcceptanceProps {
1728
+ copy: CheckoutTermsCopy;
1729
+ /** The SITE's route to its terms page, used when the tenant set no `termsLinkUrl`. */
1730
+ termsHref: string;
1731
+ checked: boolean;
1732
+ onCheckedChange: (checked: boolean) => void;
1733
+ /** E.g. «Debes aceptar las condiciones para continuar.» (the SITE's or the API's text). */
1734
+ error?: string | null;
1735
+ /** Appended inside the link when it opens a new tab (screen readers). @default '(se abre en una pestaña nueva)' */
1736
+ newTabHint?: string;
1737
+ /** The checkbox id (one box per page). @default 'checkout-terms' */
1738
+ id?: string;
1739
+ className?: string;
1740
+ }
1741
+ declare function CheckoutTermsAcceptance({ copy, termsHref, checked, onCheckedChange, error, newTabHint, id, className, }: CheckoutTermsAcceptanceProps): react_jsx_runtime.JSX.Element | null;
1742
+ /**
1743
+ * The checkout body fields for the terms box: `acceptsTerms` and the version
1744
+ * shown (`termsVersionId`), or nothing when the tenant published no terms.
1745
+ */
1746
+ declare function toCheckoutTermsFields(copy: Pick<ShopCheckoutCopy, 'termsVersion'> | null | undefined, accepted: boolean): Pick<ShopCheckoutInput, 'acceptsTerms' | 'termsVersionId'>;
1747
+
1748
+ /**
1749
+ * `CheckoutPayAction` (REB-1198) — the last control of the single-step
1750
+ * checkout: the submit button (`ShopCheckoutCopy.continueToPaymentLabel`,
1751
+ * «Continuar al pago») and, right under it and readable (lawyer, 3-Nov: no
1752
+ * tiny text), the notice with the amount (`ShopQuote.payNotice`, «En el
1753
+ * siguiente paso pagarás {total} en la pasarela segura de Stripe…», already
1754
+ * filled). The button is described by the notice, so a screen reader hears
1755
+ * both. Place it inside the checkout `<form>`.
1756
+ */
1757
+ interface CheckoutPayActionProps {
1758
+ /** The tenant's button text: `ShopCheckoutCopy.continueToPaymentLabel`. */
1759
+ label: string;
1760
+ /** The tenant's small print: `ShopQuote.payNotice`. Omit while there is no quote. */
1761
+ notice?: string | null;
1762
+ submitting?: boolean;
1763
+ /** Shown on the button while `submitting`. @default 'Procesando…' */
1764
+ submittingLabel?: string;
1765
+ disabled?: boolean;
1766
+ /** Prefix of the element ids (one action per page). @default 'checkout-pay' */
1767
+ id?: string;
1768
+ className?: string;
1769
+ /** Classes for the button; REPLACE the default look. */
1770
+ buttonClassName?: string;
1771
+ /** Classes for the notice; REPLACE the default `text-sm text-muted-foreground`. */
1772
+ noticeClassName?: string;
1773
+ }
1774
+ declare function CheckoutPayAction({ label, notice, submitting, submittingLabel, disabled, id, className, buttonClassName, noticeClassName, }: CheckoutPayActionProps): react_jsx_runtime.JSX.Element;
1775
+
1550
1776
  /**
1551
1777
  * `ContactInterestField` — the contact form's tenant-configurable interest
1552
1778
  * question, drop-in (REB-759). Fully controlled (`value`/`onChange`), no hooks,
@@ -1596,4 +1822,4 @@ interface OrderInvoiceLinkProps {
1596
1822
  }
1597
1823
  declare function OrderInvoiceLink({ invoice, labels, className }: OrderInvoiceLinkProps): react_jsx_runtime.JSX.Element | null;
1598
1824
 
1599
- export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, ArbitrationBadge, type ArbitrationBadgeProps, type BlockRendererProps, type CanonicalBlockType, type CartAdjustmentLine, CartAdjustmentsNotice, type CartAdjustmentsNoticeLabels, type CartAdjustmentsNoticeProps, type CartLineItemView, CartLineList, type CartLineListLabels, type CartLineListProps, CartSummary, type CartSummaryLabels, type CartSummaryProps, type CheckoutAppliedDiscount, type CheckoutContactErrors, type CheckoutContactValues, CheckoutForm, type CheckoutFormLabels, type CheckoutFormProps, CheckoutLoginPrompt, type CheckoutLoginPromptLabels, type CheckoutLoginPromptProps, 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_COURSE_CATALOG_FILTERS_LABELS, DEFAULT_COURSE_PRICE_BANDS, DEFAULT_COURSE_PURCHASE_TERMS_LABELS, DEFAULT_INVOICE_COUNTRIES, 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_FULL_INVOICE_VALUE, FaqAccordion, type FaqAccordionProps, FaqItem, type FullInvoiceErrors, FullInvoiceFields, type FullInvoiceFieldsLabels, type FullInvoiceFieldsProps, type FullInvoiceIdType, type FullInvoiceValue, HeadingLevel, 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, 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, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isOverSimplifiedInvoiceCap, markdownToSafeHtml, readingTime, sanitizeHtml, shopIssuesInvoices, shouldRenderShopFilters, toCheckoutInvoiceFields };
1825
+ export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, ArbitrationBadge, type ArbitrationBadgeProps, type BlockRendererProps, type CanonicalBlockType, 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, CheckoutQuoteSummary, type CheckoutQuoteSummaryLabels, type CheckoutQuoteSummaryProps, CheckoutTermsAcceptance, type CheckoutTermsAcceptanceProps, type CheckoutTermsCopy, 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_CHECKOUT_DELIVERY_CHOICE_LABELS, DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS, DEFAULT_COURSE_CATALOG_FILTERS_LABELS, DEFAULT_COURSE_PRICE_BANDS, DEFAULT_COURSE_PURCHASE_TERMS_LABELS, DEFAULT_INVOICE_COUNTRIES, 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, EMPTY_FULL_INVOICE_VALUE, FaqAccordion, type FaqAccordionProps, FaqItem, type FullInvoiceErrors, FullInvoiceFields, type FullInvoiceFieldsLabels, type FullInvoiceFieldsProps, type FullInvoiceIdType, type FullInvoiceValue, HeadingLevel, 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, 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, defaultCheckoutFulfillment, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isOverSimplifiedInvoiceCap, markdownToSafeHtml, quoteRequiresDelivery, readingTime, sanitizeHtml, shopIssuesInvoices, shouldRenderShopFilters, toCheckoutFulfillmentFields, toCheckoutInvoiceFields, toCheckoutTermsFields };