@reblu/site-blocks 0.13.0 → 0.14.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,8 +1,8 @@
1
1
  import { ShopErrorCode, PageDetail, PageListItem, ShopProductListItem, ShopProductTrustIcon, ShopProductTrustItem, BlockType, PageBlock, ResolvedEmbed, ShopFacets, ShopOrder, ShopBillingInput, ShopCheckoutInput, ShopOrderInvoice } from '@reblu/site-contracts';
2
2
  import { FaqItem } from './seo.cjs';
3
- export { FaqPageJsonLd, buildFaqPageJsonLd, collectFaqItems } from './seo.cjs';
3
+ export { FaqPageJsonLd, MarkdownToPlainTextOptions, buildFaqPageJsonLd, collectFaqItems, markdownToPlainText } from './seo.cjs';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
- import { ComponentType, ReactNode, FormEvent } from 'react';
5
+ import { ReactNode, ComponentType, FormEvent } from 'react';
6
6
 
7
7
  declare function readingTime(content: string | null | undefined): number | null;
8
8
 
@@ -240,6 +240,50 @@ interface SafeHtmlProps {
240
240
  }
241
241
  declare function SafeHtml({ html, className, headingOffset }: SafeHtmlProps): react_jsx_runtime.JSX.Element | null;
242
242
 
243
+ /** A heading level a caller can configure — `h1`…`h6`. */
244
+ type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
245
+
246
+ /**
247
+ * `CourseDescription` — the drop-in for `AcademyCourseDetail.description`
248
+ * (`client.academy.bySlug()`), REB-879. The description is rich-text Markdown
249
+ * written in nexus with the shared editor: headings, GFM tables, images.
250
+ *
251
+ * Server Component, RSC-safe: no hooks, no state, no `'use client'`.
252
+ *
253
+ * Semantics:
254
+ * - The Markdown goes through the same pipeline as {@link MarkdownRenderer}
255
+ * (`marked` → hast-util-sanitize → token-driven component map). It is never
256
+ * rendered as raw HTML: `<script>`, event handlers, `javascript:` links and
257
+ * non-allowlisted iframes are dropped.
258
+ * - `null`, `undefined`, blank text, or content the sanitiser empties render
259
+ * NOTHING — not even the heading. No default copy is ever invented.
260
+ * - `heading` is the SITE's own section title (its language, its words). When
261
+ * given, the block is a `<section>` labelled by it, and the description's own
262
+ * headings are demoted under it (`##` → one level below `headingLevel`).
263
+ */
264
+ interface CourseDescriptionProps {
265
+ /** `AcademyCourseDetail.description` as served — may be `null` / `undefined`. */
266
+ description: string | null | undefined;
267
+ /** Optional section heading, e.g. «Sobre el curso». Omit to render the description alone. */
268
+ heading?: ReactNode;
269
+ /** Level of `heading`. Defaults to `2`. */
270
+ headingLevel?: HeadingLevel;
271
+ /** `id` of the heading element (the section's `aria-labelledby`). */
272
+ headingId?: string;
273
+ /**
274
+ * Levels added to the description's own headings. Defaults to `headingLevel - 1`
275
+ * with a `heading` (so its `##` sits one level below it) and `0` without one.
276
+ */
277
+ headingOffset?: number;
278
+ /** Classes for the outer element. */
279
+ className?: string;
280
+ /** Classes for the heading. */
281
+ headingClassName?: string;
282
+ /** Classes for the rendered Markdown body. */
283
+ contentClassName?: string;
284
+ }
285
+ declare function CourseDescription({ description, heading, headingLevel, headingId, headingOffset, className, headingClassName, contentClassName, }: CourseDescriptionProps): react_jsx_runtime.JSX.Element | null;
286
+
243
287
  /**
244
288
  * `Treatment` — full treatment page organism over a `PageDetail` (a SERVICE-type
245
289
  * page). Renders the hero band followed by the ordered content sections.
@@ -391,9 +435,6 @@ interface ProductTrustItemsProps {
391
435
  }
392
436
  declare function ProductTrustItems({ items, icons, as: List, className, itemClassName, }: ProductTrustItemsProps): react_jsx_runtime.JSX.Element | null;
393
437
 
394
- /** A heading level a caller can configure — `h1`…`h6`. */
395
- type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
396
-
397
438
  /**
398
439
  * REB-850 — accessible FAQ list on native `<details>`/`<summary>`.
399
440
  *
@@ -642,12 +683,18 @@ interface CartLineListProps {
642
683
  * `ReactNode` for custom content, or omit/`false` to render nothing.
643
684
  */
644
685
  notice?: boolean | React.ReactNode;
686
+ /**
687
+ * REB-981 — a message rendered under a line (e.g. its cart-validation
688
+ * error from `useCartValidation().getLineError(...)?.message`). Return
689
+ * `null`/`undefined` for lines without one.
690
+ */
691
+ lineMessage?: (item: CartLineItemView) => React.ReactNode;
645
692
  labels?: Partial<CartLineListLabels>;
646
693
  currencyCode?: string;
647
694
  locale?: string;
648
695
  className?: string;
649
696
  }
650
- declare function CartLineList({ items, onQuantityChange, onRemove, liveMessage, notice, labels, currencyCode, locale, className, }: CartLineListProps): react_jsx_runtime.JSX.Element;
697
+ declare function CartLineList({ items, onQuantityChange, onRemove, liveMessage, notice, lineMessage, labels, currencyCode, locale, className, }: CartLineListProps): react_jsx_runtime.JSX.Element;
651
698
 
652
699
  /**
653
700
  * `CartSummary` — presentational price breakdown (REB-829): subtotal,
@@ -699,6 +746,42 @@ interface CartSummaryProps {
699
746
  }
700
747
  declare function CartSummary({ subtotal, discount, discountCode, shipping, shippingEnabled, total, notice, labels, currencyCode, locale, className, }: CartSummaryProps): react_jsx_runtime.JSX.Element;
701
748
 
749
+ /**
750
+ * `CartAdjustmentsNotice` (REB-981) — tells the visitor what cart validation
751
+ * changed: lines removed because they can no longer be bought, quantities
752
+ * clamped to the stock left, and prices that changed since the line was
753
+ * added. Presentational only: feed it `@reblu/site-next/cart`'s
754
+ * `useCartValidation()` result (`removed`, `quantityChanges`,
755
+ * `priceChanges`) — every item shape is a structural subset of those.
756
+ * Renders nothing when there is nothing to report.
757
+ */
758
+ interface CartAdjustmentLine {
759
+ name: string;
760
+ variantName?: string;
761
+ }
762
+ interface CartAdjustmentsNoticeLabels {
763
+ /** `names` already include the variant, e.g. `Gel (200 ml)`. */
764
+ removed: (names: string[]) => string;
765
+ quantityChanged: (name: string, quantity: number) => string;
766
+ priceChanged: (name: string, from: string, to: string) => string;
767
+ }
768
+ interface CartAdjustmentsNoticeProps {
769
+ removed?: CartAdjustmentLine[];
770
+ quantityChanges?: Array<CartAdjustmentLine & {
771
+ to: number;
772
+ }>;
773
+ /** `from`/`to` in integer cents. */
774
+ priceChanges?: Array<CartAdjustmentLine & {
775
+ from: number;
776
+ to: number;
777
+ }>;
778
+ labels?: Partial<CartAdjustmentsNoticeLabels>;
779
+ currencyCode?: string;
780
+ locale?: string;
781
+ className?: string;
782
+ }
783
+ declare function CartAdjustmentsNotice({ removed, quantityChanges, priceChanges, labels, currencyCode, locale, className, }: CartAdjustmentsNoticeProps): react_jsx_runtime.JSX.Element | null;
784
+
702
785
  /**
703
786
  * `AddedToCartToast` — add-to-cart feedback toast CONTENT (REB-837). Pure
704
787
  * presentational, no hooks.
@@ -1061,4 +1144,4 @@ interface OrderInvoiceLinkProps {
1061
1144
  }
1062
1145
  declare function OrderInvoiceLink({ invoice, labels, className }: OrderInvoiceLinkProps): react_jsx_runtime.JSX.Element | null;
1063
1146
 
1064
- export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, type BlockRendererProps, type CanonicalBlockType, 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, DEFAULT_INVOICE_COUNTRIES, DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE, DEFAULT_SHOP_ERROR_MESSAGES, DEFAULT_SHOP_PRICE_BANDS, DEFAULT_TRUST_ICONS, EMPTY_FULL_INVOICE_VALUE, FaqAccordion, type FaqAccordionProps, FaqItem, type FullInvoiceErrors, FullInvoiceFields, type FullInvoiceFieldsLabels, type FullInvoiceFieldsProps, type FullInvoiceIdType, type FullInvoiceValue, type HeadingLevel, 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, 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, type TrustIconComponent, type TrustIconProps, buildShareUrls, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isOverSimplifiedInvoiceCap, markdownToSafeHtml, readingTime, sanitizeHtml, shopIssuesInvoices, shouldRenderShopFilters, toCheckoutInvoiceFields };
1147
+ export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, 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, CourseDescription, type CourseDescriptionProps, DEFAULT_INVOICE_COUNTRIES, DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE, DEFAULT_SHOP_ERROR_MESSAGES, DEFAULT_SHOP_PRICE_BANDS, DEFAULT_TRUST_ICONS, EMPTY_FULL_INVOICE_VALUE, FaqAccordion, type FaqAccordionProps, FaqItem, type FullInvoiceErrors, FullInvoiceFields, type FullInvoiceFieldsLabels, type FullInvoiceFieldsProps, type FullInvoiceIdType, type FullInvoiceValue, type HeadingLevel, 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, 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, type TrustIconComponent, type TrustIconProps, buildShareUrls, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isOverSimplifiedInvoiceCap, markdownToSafeHtml, readingTime, sanitizeHtml, shopIssuesInvoices, shouldRenderShopFilters, toCheckoutInvoiceFields };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { ShopErrorCode, PageDetail, PageListItem, ShopProductListItem, ShopProductTrustIcon, ShopProductTrustItem, BlockType, PageBlock, ResolvedEmbed, ShopFacets, ShopOrder, ShopBillingInput, ShopCheckoutInput, ShopOrderInvoice } from '@reblu/site-contracts';
2
2
  import { FaqItem } from './seo.js';
3
- export { FaqPageJsonLd, buildFaqPageJsonLd, collectFaqItems } from './seo.js';
3
+ export { FaqPageJsonLd, MarkdownToPlainTextOptions, buildFaqPageJsonLd, collectFaqItems, markdownToPlainText } from './seo.js';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
- import { ComponentType, ReactNode, FormEvent } from 'react';
5
+ import { ReactNode, ComponentType, FormEvent } from 'react';
6
6
 
7
7
  declare function readingTime(content: string | null | undefined): number | null;
8
8
 
@@ -240,6 +240,50 @@ interface SafeHtmlProps {
240
240
  }
241
241
  declare function SafeHtml({ html, className, headingOffset }: SafeHtmlProps): react_jsx_runtime.JSX.Element | null;
242
242
 
243
+ /** A heading level a caller can configure — `h1`…`h6`. */
244
+ type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
245
+
246
+ /**
247
+ * `CourseDescription` — the drop-in for `AcademyCourseDetail.description`
248
+ * (`client.academy.bySlug()`), REB-879. The description is rich-text Markdown
249
+ * written in nexus with the shared editor: headings, GFM tables, images.
250
+ *
251
+ * Server Component, RSC-safe: no hooks, no state, no `'use client'`.
252
+ *
253
+ * Semantics:
254
+ * - The Markdown goes through the same pipeline as {@link MarkdownRenderer}
255
+ * (`marked` → hast-util-sanitize → token-driven component map). It is never
256
+ * rendered as raw HTML: `<script>`, event handlers, `javascript:` links and
257
+ * non-allowlisted iframes are dropped.
258
+ * - `null`, `undefined`, blank text, or content the sanitiser empties render
259
+ * NOTHING — not even the heading. No default copy is ever invented.
260
+ * - `heading` is the SITE's own section title (its language, its words). When
261
+ * given, the block is a `<section>` labelled by it, and the description's own
262
+ * headings are demoted under it (`##` → one level below `headingLevel`).
263
+ */
264
+ interface CourseDescriptionProps {
265
+ /** `AcademyCourseDetail.description` as served — may be `null` / `undefined`. */
266
+ description: string | null | undefined;
267
+ /** Optional section heading, e.g. «Sobre el curso». Omit to render the description alone. */
268
+ heading?: ReactNode;
269
+ /** Level of `heading`. Defaults to `2`. */
270
+ headingLevel?: HeadingLevel;
271
+ /** `id` of the heading element (the section's `aria-labelledby`). */
272
+ headingId?: string;
273
+ /**
274
+ * Levels added to the description's own headings. Defaults to `headingLevel - 1`
275
+ * with a `heading` (so its `##` sits one level below it) and `0` without one.
276
+ */
277
+ headingOffset?: number;
278
+ /** Classes for the outer element. */
279
+ className?: string;
280
+ /** Classes for the heading. */
281
+ headingClassName?: string;
282
+ /** Classes for the rendered Markdown body. */
283
+ contentClassName?: string;
284
+ }
285
+ declare function CourseDescription({ description, heading, headingLevel, headingId, headingOffset, className, headingClassName, contentClassName, }: CourseDescriptionProps): react_jsx_runtime.JSX.Element | null;
286
+
243
287
  /**
244
288
  * `Treatment` — full treatment page organism over a `PageDetail` (a SERVICE-type
245
289
  * page). Renders the hero band followed by the ordered content sections.
@@ -391,9 +435,6 @@ interface ProductTrustItemsProps {
391
435
  }
392
436
  declare function ProductTrustItems({ items, icons, as: List, className, itemClassName, }: ProductTrustItemsProps): react_jsx_runtime.JSX.Element | null;
393
437
 
394
- /** A heading level a caller can configure — `h1`…`h6`. */
395
- type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
396
-
397
438
  /**
398
439
  * REB-850 — accessible FAQ list on native `<details>`/`<summary>`.
399
440
  *
@@ -642,12 +683,18 @@ interface CartLineListProps {
642
683
  * `ReactNode` for custom content, or omit/`false` to render nothing.
643
684
  */
644
685
  notice?: boolean | React.ReactNode;
686
+ /**
687
+ * REB-981 — a message rendered under a line (e.g. its cart-validation
688
+ * error from `useCartValidation().getLineError(...)?.message`). Return
689
+ * `null`/`undefined` for lines without one.
690
+ */
691
+ lineMessage?: (item: CartLineItemView) => React.ReactNode;
645
692
  labels?: Partial<CartLineListLabels>;
646
693
  currencyCode?: string;
647
694
  locale?: string;
648
695
  className?: string;
649
696
  }
650
- declare function CartLineList({ items, onQuantityChange, onRemove, liveMessage, notice, labels, currencyCode, locale, className, }: CartLineListProps): react_jsx_runtime.JSX.Element;
697
+ declare function CartLineList({ items, onQuantityChange, onRemove, liveMessage, notice, lineMessage, labels, currencyCode, locale, className, }: CartLineListProps): react_jsx_runtime.JSX.Element;
651
698
 
652
699
  /**
653
700
  * `CartSummary` — presentational price breakdown (REB-829): subtotal,
@@ -699,6 +746,42 @@ interface CartSummaryProps {
699
746
  }
700
747
  declare function CartSummary({ subtotal, discount, discountCode, shipping, shippingEnabled, total, notice, labels, currencyCode, locale, className, }: CartSummaryProps): react_jsx_runtime.JSX.Element;
701
748
 
749
+ /**
750
+ * `CartAdjustmentsNotice` (REB-981) — tells the visitor what cart validation
751
+ * changed: lines removed because they can no longer be bought, quantities
752
+ * clamped to the stock left, and prices that changed since the line was
753
+ * added. Presentational only: feed it `@reblu/site-next/cart`'s
754
+ * `useCartValidation()` result (`removed`, `quantityChanges`,
755
+ * `priceChanges`) — every item shape is a structural subset of those.
756
+ * Renders nothing when there is nothing to report.
757
+ */
758
+ interface CartAdjustmentLine {
759
+ name: string;
760
+ variantName?: string;
761
+ }
762
+ interface CartAdjustmentsNoticeLabels {
763
+ /** `names` already include the variant, e.g. `Gel (200 ml)`. */
764
+ removed: (names: string[]) => string;
765
+ quantityChanged: (name: string, quantity: number) => string;
766
+ priceChanged: (name: string, from: string, to: string) => string;
767
+ }
768
+ interface CartAdjustmentsNoticeProps {
769
+ removed?: CartAdjustmentLine[];
770
+ quantityChanges?: Array<CartAdjustmentLine & {
771
+ to: number;
772
+ }>;
773
+ /** `from`/`to` in integer cents. */
774
+ priceChanges?: Array<CartAdjustmentLine & {
775
+ from: number;
776
+ to: number;
777
+ }>;
778
+ labels?: Partial<CartAdjustmentsNoticeLabels>;
779
+ currencyCode?: string;
780
+ locale?: string;
781
+ className?: string;
782
+ }
783
+ declare function CartAdjustmentsNotice({ removed, quantityChanges, priceChanges, labels, currencyCode, locale, className, }: CartAdjustmentsNoticeProps): react_jsx_runtime.JSX.Element | null;
784
+
702
785
  /**
703
786
  * `AddedToCartToast` — add-to-cart feedback toast CONTENT (REB-837). Pure
704
787
  * presentational, no hooks.
@@ -1061,4 +1144,4 @@ interface OrderInvoiceLinkProps {
1061
1144
  }
1062
1145
  declare function OrderInvoiceLink({ invoice, labels, className }: OrderInvoiceLinkProps): react_jsx_runtime.JSX.Element | null;
1063
1146
 
1064
- export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, type BlockRendererProps, type CanonicalBlockType, 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, DEFAULT_INVOICE_COUNTRIES, DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE, DEFAULT_SHOP_ERROR_MESSAGES, DEFAULT_SHOP_PRICE_BANDS, DEFAULT_TRUST_ICONS, EMPTY_FULL_INVOICE_VALUE, FaqAccordion, type FaqAccordionProps, FaqItem, type FullInvoiceErrors, FullInvoiceFields, type FullInvoiceFieldsLabels, type FullInvoiceFieldsProps, type FullInvoiceIdType, type FullInvoiceValue, type HeadingLevel, 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, 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, type TrustIconComponent, type TrustIconProps, buildShareUrls, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isOverSimplifiedInvoiceCap, markdownToSafeHtml, readingTime, sanitizeHtml, shopIssuesInvoices, shouldRenderShopFilters, toCheckoutInvoiceFields };
1147
+ export { ALLOWED_YOUTUBE_HOSTS, AddedToCartToast, type AddedToCartToastLabels, type AddedToCartToastProps, type AddedToCartToastStatus, 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, CourseDescription, type CourseDescriptionProps, DEFAULT_INVOICE_COUNTRIES, DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE, DEFAULT_SHOP_ERROR_MESSAGES, DEFAULT_SHOP_PRICE_BANDS, DEFAULT_TRUST_ICONS, EMPTY_FULL_INVOICE_VALUE, FaqAccordion, type FaqAccordionProps, FaqItem, type FullInvoiceErrors, FullInvoiceFields, type FullInvoiceFieldsLabels, type FullInvoiceFieldsProps, type FullInvoiceIdType, type FullInvoiceValue, type HeadingLevel, 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, 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, type TrustIconComponent, type TrustIconProps, buildShareUrls, formatPrice, getShopErrorMessage, isAllowedYouTubeHost, isOverSimplifiedInvoiceCap, markdownToSafeHtml, readingTime, sanitizeHtml, shopIssuesInvoices, shouldRenderShopFilters, toCheckoutInvoiceFields };