@burdenoff/website-sdk 2026.925.2 → 2026.926.1

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.
Files changed (67) hide show
  1. package/dist/components/contact.js +8 -0
  2. package/dist/components/contact.js.map +1 -1
  3. package/dist/components/contact.mjs +8 -0
  4. package/dist/components/contact.mjs.map +1 -1
  5. package/dist/components/explore.d.mts +1 -1
  6. package/dist/components/explore.d.ts +1 -1
  7. package/dist/components/explore.js +1101 -518
  8. package/dist/components/explore.js.map +1 -1
  9. package/dist/components/explore.mjs +1103 -521
  10. package/dist/components/explore.mjs.map +1 -1
  11. package/dist/components/newsletter.js +8 -0
  12. package/dist/components/newsletter.js.map +1 -1
  13. package/dist/components/newsletter.mjs +8 -0
  14. package/dist/components/newsletter.mjs.map +1 -1
  15. package/dist/components/partners.js +11 -2
  16. package/dist/components/partners.js.map +1 -1
  17. package/dist/components/partners.mjs +11 -2
  18. package/dist/components/partners.mjs.map +1 -1
  19. package/dist/components/resource-links.js +8 -0
  20. package/dist/components/resource-links.js.map +1 -1
  21. package/dist/components/resource-links.mjs +8 -0
  22. package/dist/components/resource-links.mjs.map +1 -1
  23. package/dist/components/social-links.js +8 -0
  24. package/dist/components/social-links.js.map +1 -1
  25. package/dist/components/social-links.mjs +8 -0
  26. package/dist/components/social-links.mjs.map +1 -1
  27. package/dist/components/waitlist.js +8 -0
  28. package/dist/components/waitlist.js.map +1 -1
  29. package/dist/components/waitlist.mjs +8 -0
  30. package/dist/components/waitlist.mjs.map +1 -1
  31. package/dist/content/index.d.mts +1 -1
  32. package/dist/content/index.d.ts +1 -1
  33. package/dist/content/index.js +11 -2
  34. package/dist/content/index.js.map +1 -1
  35. package/dist/content/index.mjs +11 -2
  36. package/dist/content/index.mjs.map +1 -1
  37. package/dist/{explore-C0RFTKAi.d.ts → explore-Cam_ElSJ.d.ts} +70 -12
  38. package/dist/{explore-DzOf7n4m.d.mts → explore-hTQm-_SF.d.mts} +70 -12
  39. package/dist/hooks/index.js +51 -13
  40. package/dist/hooks/index.js.map +1 -1
  41. package/dist/hooks/index.mjs +51 -13
  42. package/dist/hooks/index.mjs.map +1 -1
  43. package/dist/{index-BMWQNZDX.d.mts → index-gm3pBCJT.d.mts} +8 -2
  44. package/dist/{index-BqHF-G-S.d.ts → index-ySbOLSD5.d.ts} +8 -2
  45. package/dist/index.d.mts +32 -11
  46. package/dist/index.d.ts +32 -11
  47. package/dist/index.js +901 -267
  48. package/dist/index.js.map +1 -1
  49. package/dist/index.mjs +892 -269
  50. package/dist/index.mjs.map +1 -1
  51. package/dist/product/index.d.mts +16 -1
  52. package/dist/product/index.d.ts +16 -1
  53. package/dist/product/index.js +61 -17
  54. package/dist/product/index.js.map +1 -1
  55. package/dist/product/index.mjs +61 -18
  56. package/dist/product/index.mjs.map +1 -1
  57. package/dist/store/index.js +11 -2
  58. package/dist/store/index.js.map +1 -1
  59. package/dist/store/index.mjs +11 -2
  60. package/dist/store/index.mjs.map +1 -1
  61. package/dist/utils/index.d.mts +41 -1
  62. package/dist/utils/index.d.ts +41 -1
  63. package/dist/utils/index.js +42 -0
  64. package/dist/utils/index.js.map +1 -1
  65. package/dist/utils/index.mjs +35 -1
  66. package/dist/utils/index.mjs.map +1 -1
  67. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
- import { Components } from 'react-markdown';
3
+ import { Components, Options } from 'react-markdown';
4
4
  import { W as WebSDKClient } from './graphql-client-CI9vbgat.mjs';
5
5
 
6
6
  /** A job posting option for the CareersApplyForm dropdown. */
@@ -148,6 +148,12 @@ interface MarkdownProps {
148
148
  inline?: boolean;
149
149
  /** Optional react-markdown component overrides. */
150
150
  components?: Components;
151
+ /**
152
+ * Extra rehype plugins. They run AFTER `rehype-sanitize`, on the already-safe tree, so they
153
+ * are for annotating nodes an override then reads — never for adding markup, because
154
+ * nothing sanitises what they insert.
155
+ */
156
+ rehypePlugins?: Options["rehypePlugins"];
151
157
  }
152
158
  /**
153
159
  * Shared markdown renderer for website content.
@@ -157,7 +163,7 @@ interface MarkdownProps {
157
163
  * - Sanitizes HTML via `rehype-sanitize` so raw markup in markdown is stripped.
158
164
  * - External links open in a new tab with safe rel attributes.
159
165
  */
160
- declare function Markdown({ children, className, inline, components, }: MarkdownProps): ReactNode;
166
+ declare function Markdown({ children, className, inline, components, rehypePlugins, }: MarkdownProps): ReactNode;
161
167
 
162
168
  interface PublicInterviewRoundConfig {
163
169
  roundNumber: number;
@@ -1,6 +1,6 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
- import { Components } from 'react-markdown';
3
+ import { Components, Options } from 'react-markdown';
4
4
  import { W as WebSDKClient } from './graphql-client-CI9vbgat.js';
5
5
 
6
6
  /** A job posting option for the CareersApplyForm dropdown. */
@@ -148,6 +148,12 @@ interface MarkdownProps {
148
148
  inline?: boolean;
149
149
  /** Optional react-markdown component overrides. */
150
150
  components?: Components;
151
+ /**
152
+ * Extra rehype plugins. They run AFTER `rehype-sanitize`, on the already-safe tree, so they
153
+ * are for annotating nodes an override then reads — never for adding markup, because
154
+ * nothing sanitises what they insert.
155
+ */
156
+ rehypePlugins?: Options["rehypePlugins"];
151
157
  }
152
158
  /**
153
159
  * Shared markdown renderer for website content.
@@ -157,7 +163,7 @@ interface MarkdownProps {
157
163
  * - Sanitizes HTML via `rehype-sanitize` so raw markup in markdown is stripped.
158
164
  * - External links open in a new tab with safe rel attributes.
159
165
  */
160
- declare function Markdown({ children, className, inline, components, }: MarkdownProps): ReactNode;
166
+ declare function Markdown({ children, className, inline, components, rehypePlugins, }: MarkdownProps): ReactNode;
161
167
 
162
168
  interface PublicInterviewRoundConfig {
163
169
  roundNumber: number;
package/dist/index.d.mts CHANGED
@@ -2,8 +2,8 @@ export { G as GraphQLResponse, W as WebSDKClient, a as WebSDKClientConfig, b as
2
2
  export { W as WebSDKProvider, a as WebSDKProviderProps, u as useWebSDK, b as useWebSDKConfig } from './provider-MFV1NVqZ.mjs';
3
3
  export { ContactCategory, ContactPage, ContactPageProps, DEFAULT_CONTACT_CATEGORIES } from './components/contact.mjs';
4
4
  export { PartnersPage, PartnersPageProps } from './components/partners.mjs';
5
- import { C as CareersPostingOption } from './index-BMWQNZDX.mjs';
6
- export { B as BlogListPage, a as BlogListPageProps, b as BlogPostPage, c as BlogPostPageProps, d as CareersApplyForm, e as CareersApplyFormProps, f as CaseStudiesListPage, g as CaseStudiesListPageProps, h as CaseStudyPage, i as CaseStudyPageProps, j as ChangelogEntry, k as ChangelogPage, l as ChangelogPageProps, m as ContentPageData, n as ContentPageListData, o as ContentPageListItem, p as ContentRenderer, q as ContractAsset, r as ContractsPage, s as ContractsPageProps, M as Markdown, t as MarkdownProps, P as PressKitAsset, u as PressKitAssetCategory, v as PressKitPage, w as PressKitPageProps, x as PublicInterviewRoundConfig, y as PublicJobPosting, U as UsePublicJobPostingOptions, z as UsePublicJobPostingsOptions, A as fetchPublicJobPosting, D as fetchPublicJobPostings, E as fetchPublicJobPostingsForSubmission, F as useContentPage, G as useContentPages, H as usePublicJobPosting, I as usePublicJobPostings, J as usePublicJobPostingsForSubmission } from './index-BMWQNZDX.mjs';
5
+ import { C as CareersPostingOption } from './index-gm3pBCJT.mjs';
6
+ export { B as BlogListPage, a as BlogListPageProps, b as BlogPostPage, c as BlogPostPageProps, d as CareersApplyForm, e as CareersApplyFormProps, f as CaseStudiesListPage, g as CaseStudiesListPageProps, h as CaseStudyPage, i as CaseStudyPageProps, j as ChangelogEntry, k as ChangelogPage, l as ChangelogPageProps, m as ContentPageData, n as ContentPageListData, o as ContentPageListItem, p as ContentRenderer, q as ContractAsset, r as ContractsPage, s as ContractsPageProps, M as Markdown, t as MarkdownProps, P as PressKitAsset, u as PressKitAssetCategory, v as PressKitPage, w as PressKitPageProps, x as PublicInterviewRoundConfig, y as PublicJobPosting, U as UsePublicJobPostingOptions, z as UsePublicJobPostingsOptions, A as fetchPublicJobPosting, D as fetchPublicJobPostings, E as fetchPublicJobPostingsForSubmission, F as useContentPage, G as useContentPages, H as usePublicJobPosting, I as usePublicJobPostings, J as usePublicJobPostingsForSubmission } from './index-gm3pBCJT.mjs';
7
7
  import * as react from 'react';
8
8
  import { ComponentType, ReactNode } from 'react';
9
9
  export { NewsletterForm, NewsletterFormProps, NewsletterPage, NewsletterPageProps } from './components/newsletter.mjs';
@@ -18,19 +18,19 @@ export { LaunchCountdown, LaunchCountdownProps } from './components/launch-count
18
18
  export { ProblemSolved, ProblemsSolvedSection, ProblemsSolvedSectionProps } from './components/problems-solved.mjs';
19
19
  export { DetectedPlatform, ElectronDownloadLink, ElectronDownloadLinkProps, detectElectronPlatform } from './components/electron-download.mjs';
20
20
  import { Components } from 'react-markdown';
21
- import { A as AnswerRendererStrings } from './explore-DzOf7n4m.mjs';
22
- export { E as EXPLORE_PREFILL_MAX_LENGTH, a as ExploreAnswerBody, b as ExploreAnswerBodyProps, c as ExploreAnswerStyles, d as ExplorePage, e as ExplorePageProps, f as answerPlainText, g as answerSpeechText, h as exploreQuestionHref, i as inlineImageOrigins, j as isInlineImageAllowed } from './explore-DzOf7n4m.mjs';
21
+ import { A as AnswerRendererStrings } from './explore-hTQm-_SF.mjs';
22
+ export { E as EXPLORE_PREFILL_MAX_LENGTH, a as ExploreAnswerBody, b as ExploreAnswerBodyProps, c as ExploreAnswerStyles, d as ExplorePage, e as ExplorePageProps, f as answerPlainText, g as answerSpeechText, h as exploreQuestionHref, i as inlineImageOrigins, j as isInlineImageAllowed, k as isInlineVideoAllowed, p as productSlugsByOrigin } from './explore-hTQm-_SF.mjs';
23
23
  export { ExploreCta, ExploreCtaProps } from './components/explore-cta.mjs';
24
24
  export { g as ESCALATE_EXPLORE_CONVERSATION_MUTATION, h as EXPLORE_CATALOG_QUERY, i as EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS, j as EXPLORE_ESCALATION_NOTE_SOFT_MAX, k as EXPLORE_MESSAGE_QUERY, l as EscalateExploreConversationInput, m as EscalateExploreConversationResult, c as ExploreCatalog, n as ExploreCatalogQueryData, o as ExploreConceptHighlight, p as ExploreConversation, q as ExploreCtaKind, r as ExploreCtaLink, s as ExploreErrorCode, t as ExploreEscalation, b as ExploreLimits, d as ExploreMessage, u as ExploreMessageQueryData, v as ExploreMessageRole, w as ExploreMessageStatus, E as ExploreProduct, a as ExploreReference, S as SEND_EXPLORE_MESSAGE_MUTATION, x as SendExploreMessageInput, y as SendExploreMessageMutationData, z as SendExploreMessageResult, A as looksLikeDeliverableEmail } from './explore-types-B5sdOC5M.mjs';
25
25
  export { D as DEFAULT_EXPLORE_EXAMPLE_PROMPTS, E as ExploreChatError, a as ExploreChatErrorKind, b as ExploreChatPhase, c as ExploreEscalateOutcome, d as ExploreEscalateResult, F as FALLBACK_EXPLORE_LIMITS, U as UseExploreChatOptions, e as UseExploreChatResult, f as UseSpeechOutputOptions, g as UseSpeechOutputResult, h as classifyExploreError, s as stopSpeaking, u as useExploreChat, i as useProgressiveReveal, j as useSpeechOutput } from './use-progressive-reveal-BBLRAnbU.mjs';
26
26
  export { RybbitAnalytics, RybbitAnalyticsProps } from './analytics/index.mjs';
27
27
  export { PageHead, PageHeadProps } from './seo/index.mjs';
28
- export { ProductData, ProductProvider, ProductProviderProps, useProduct, useProductConfig } from './product/index.mjs';
28
+ export { ProductData, ProductProvider, ProductProviderProps, PublicProductFetchResult, fetchPublicProduct, useProduct, useProductConfig } from './product/index.mjs';
29
29
  import * as class_variance_authority_types from 'class-variance-authority/types';
30
30
  import { VariantProps } from 'class-variance-authority';
31
31
  import * as LabelPrimitive from '@radix-ui/react-label';
32
32
  export { B as BrowseStoreResult, G as GroupedStoreProducts, P as ProductCard, a as ProductCategory, R as RatingDistribution, S as SearchSuggestion, b as StarRating, c as StoreBrowsePage, d as StoreBrowsePageProps, e as StoreFacet, f as StoreFacets, g as StoreHomePage, h as StoreHomePageProps, i as StorePageProps, j as StoreProduct, k as StoreProductDetailPage, l as StoreProductDetailPageProps, m as StoreProductDetails, n as StorePublisher, o as StoreReview, p as StoreTerminology, q as StoreTypeFilter, T as TypeBadge, r as formatDownloads, s as formatPrice } from './product-card-CGxETsFa.mjs';
33
- export { EXPLORE_RECAPTCHA_ACTION, FOOTERLESS_ROUTES, RecaptchaV3, cn, getRecaptchaV3Token, isFooterlessPath, loadRecaptchaV3, normalizeRoutePath, shouldRenderSiteFooter } from './utils/index.mjs';
33
+ export { EXPLORE_RECAPTCHA_ACTION, FOOTERLESS_ROUTES, PRODUCT_SLUG_ALIASES, PRODUCT_SLUG_EMIT, PRODUCT_SLUG_RENAMES, ProductSlugGeneration, ProductSlugRename, RecaptchaV3, cn, emitProductSlug, getRecaptchaV3Token, isFooterlessPath, isSameProductSlug, legacyProductSlug, loadRecaptchaV3, normalizeProductSlug, normalizeRoutePath, productSlugVariants, shouldRenderSiteFooter } from './utils/index.mjs';
34
34
  import 'clsx';
35
35
 
36
36
  interface CareersSubmissionFormProps {
@@ -616,6 +616,24 @@ interface ExploreStrings {
616
616
  * columns that are off the edge. The `<table>` inside it keeps its own semantics.
617
617
  */
618
618
  answerTable: string;
619
+ /**
620
+ * The product-video card in an answer (CONTRACT.md §7) and the player it opens.
621
+ *
622
+ * `productVideo` is the card's badge — the video counterpart of `conceptIllustration` —
623
+ * and names a video the answer gave no title. `productVideoTitle` names the video in this
624
+ * language and takes `{product}`: the harness always writes the line's text as the English
625
+ * "<Name> product video", so the card keeps only the name from it. `playVideo` is the
626
+ * card's accessible name and takes `{title}`, which is that name. The last four belong to
627
+ * the player: its Close button, the two states of its full-screen toggle, and the line
628
+ * shown in place of a video that cannot be played.
629
+ */
630
+ productVideo: string;
631
+ productVideoTitle: string;
632
+ playVideo: string;
633
+ closeVideo: string;
634
+ enterFullScreen: string;
635
+ exitFullScreen: string;
636
+ videoUnavailable: string;
619
637
  /** Accessible name of the provenance row under an answer. */
620
638
  groundedIn: string;
621
639
  /** How many sources the answer cites. `sourceCountMany` takes `{count}`. */
@@ -667,12 +685,15 @@ declare function speechLocaleOf(locale: ExploreLocale): string;
667
685
  * then prints an English answer tells a screen reader to read English with Arabic phonemes,
668
686
  * and tells a crawler the answer is in a language it is not.
669
687
  *
670
- * ## The three borrowed strings
688
+ * ## The borrowed strings
671
689
  *
672
- * `answerTable`, `conceptIllustration` and `opensInNewTab` come straight from
673
- * `exploreStrings`. They are the words the ANSWER BODY renders, and the answer body is the
674
- * same component on both surfaces — two phrasings for the same caveat read as two different
675
- * caveats, which is the rule the illustration badge already follows.
690
+ * `answerTable`, `conceptIllustration`, `opensInNewTab` and the product-video card's and
691
+ * player's words (`productVideo`, `productVideoTitle`, `playVideo`, `closeVideo`,
692
+ * `enterFullScreen`, `exitFullScreen`, `videoUnavailable`) come straight from
693
+ * `exploreStrings`. They are the
694
+ * words the ANSWER BODY renders, and the answer body is the same component on both surfaces
695
+ * — two phrasings for the same caveat read as two different caveats, which is the rule the
696
+ * illustration badge already follows.
676
697
  */
677
698
 
678
699
  interface AnswerStrings extends AnswerRendererStrings {
package/dist/index.d.ts CHANGED
@@ -2,8 +2,8 @@ export { G as GraphQLResponse, W as WebSDKClient, a as WebSDKClientConfig, b as
2
2
  export { W as WebSDKProvider, a as WebSDKProviderProps, u as useWebSDK, b as useWebSDKConfig } from './provider-Dwgz4d0r.js';
3
3
  export { ContactCategory, ContactPage, ContactPageProps, DEFAULT_CONTACT_CATEGORIES } from './components/contact.js';
4
4
  export { PartnersPage, PartnersPageProps } from './components/partners.js';
5
- import { C as CareersPostingOption } from './index-BqHF-G-S.js';
6
- export { B as BlogListPage, a as BlogListPageProps, b as BlogPostPage, c as BlogPostPageProps, d as CareersApplyForm, e as CareersApplyFormProps, f as CaseStudiesListPage, g as CaseStudiesListPageProps, h as CaseStudyPage, i as CaseStudyPageProps, j as ChangelogEntry, k as ChangelogPage, l as ChangelogPageProps, m as ContentPageData, n as ContentPageListData, o as ContentPageListItem, p as ContentRenderer, q as ContractAsset, r as ContractsPage, s as ContractsPageProps, M as Markdown, t as MarkdownProps, P as PressKitAsset, u as PressKitAssetCategory, v as PressKitPage, w as PressKitPageProps, x as PublicInterviewRoundConfig, y as PublicJobPosting, U as UsePublicJobPostingOptions, z as UsePublicJobPostingsOptions, A as fetchPublicJobPosting, D as fetchPublicJobPostings, E as fetchPublicJobPostingsForSubmission, F as useContentPage, G as useContentPages, H as usePublicJobPosting, I as usePublicJobPostings, J as usePublicJobPostingsForSubmission } from './index-BqHF-G-S.js';
5
+ import { C as CareersPostingOption } from './index-ySbOLSD5.js';
6
+ export { B as BlogListPage, a as BlogListPageProps, b as BlogPostPage, c as BlogPostPageProps, d as CareersApplyForm, e as CareersApplyFormProps, f as CaseStudiesListPage, g as CaseStudiesListPageProps, h as CaseStudyPage, i as CaseStudyPageProps, j as ChangelogEntry, k as ChangelogPage, l as ChangelogPageProps, m as ContentPageData, n as ContentPageListData, o as ContentPageListItem, p as ContentRenderer, q as ContractAsset, r as ContractsPage, s as ContractsPageProps, M as Markdown, t as MarkdownProps, P as PressKitAsset, u as PressKitAssetCategory, v as PressKitPage, w as PressKitPageProps, x as PublicInterviewRoundConfig, y as PublicJobPosting, U as UsePublicJobPostingOptions, z as UsePublicJobPostingsOptions, A as fetchPublicJobPosting, D as fetchPublicJobPostings, E as fetchPublicJobPostingsForSubmission, F as useContentPage, G as useContentPages, H as usePublicJobPosting, I as usePublicJobPostings, J as usePublicJobPostingsForSubmission } from './index-ySbOLSD5.js';
7
7
  import * as react from 'react';
8
8
  import { ComponentType, ReactNode } from 'react';
9
9
  export { NewsletterForm, NewsletterFormProps, NewsletterPage, NewsletterPageProps } from './components/newsletter.js';
@@ -18,19 +18,19 @@ export { LaunchCountdown, LaunchCountdownProps } from './components/launch-count
18
18
  export { ProblemSolved, ProblemsSolvedSection, ProblemsSolvedSectionProps } from './components/problems-solved.js';
19
19
  export { DetectedPlatform, ElectronDownloadLink, ElectronDownloadLinkProps, detectElectronPlatform } from './components/electron-download.js';
20
20
  import { Components } from 'react-markdown';
21
- import { A as AnswerRendererStrings } from './explore-C0RFTKAi.js';
22
- export { E as EXPLORE_PREFILL_MAX_LENGTH, a as ExploreAnswerBody, b as ExploreAnswerBodyProps, c as ExploreAnswerStyles, d as ExplorePage, e as ExplorePageProps, f as answerPlainText, g as answerSpeechText, h as exploreQuestionHref, i as inlineImageOrigins, j as isInlineImageAllowed } from './explore-C0RFTKAi.js';
21
+ import { A as AnswerRendererStrings } from './explore-Cam_ElSJ.js';
22
+ export { E as EXPLORE_PREFILL_MAX_LENGTH, a as ExploreAnswerBody, b as ExploreAnswerBodyProps, c as ExploreAnswerStyles, d as ExplorePage, e as ExplorePageProps, f as answerPlainText, g as answerSpeechText, h as exploreQuestionHref, i as inlineImageOrigins, j as isInlineImageAllowed, k as isInlineVideoAllowed, p as productSlugsByOrigin } from './explore-Cam_ElSJ.js';
23
23
  export { ExploreCta, ExploreCtaProps } from './components/explore-cta.js';
24
24
  export { g as ESCALATE_EXPLORE_CONVERSATION_MUTATION, h as EXPLORE_CATALOG_QUERY, i as EXPLORE_CATALOG_QUERY_WITHOUT_HIGHLIGHTS, j as EXPLORE_ESCALATION_NOTE_SOFT_MAX, k as EXPLORE_MESSAGE_QUERY, l as EscalateExploreConversationInput, m as EscalateExploreConversationResult, c as ExploreCatalog, n as ExploreCatalogQueryData, o as ExploreConceptHighlight, p as ExploreConversation, q as ExploreCtaKind, r as ExploreCtaLink, s as ExploreErrorCode, t as ExploreEscalation, b as ExploreLimits, d as ExploreMessage, u as ExploreMessageQueryData, v as ExploreMessageRole, w as ExploreMessageStatus, E as ExploreProduct, a as ExploreReference, S as SEND_EXPLORE_MESSAGE_MUTATION, x as SendExploreMessageInput, y as SendExploreMessageMutationData, z as SendExploreMessageResult, A as looksLikeDeliverableEmail } from './explore-types-B5sdOC5M.js';
25
25
  export { D as DEFAULT_EXPLORE_EXAMPLE_PROMPTS, E as ExploreChatError, a as ExploreChatErrorKind, b as ExploreChatPhase, c as ExploreEscalateOutcome, d as ExploreEscalateResult, F as FALLBACK_EXPLORE_LIMITS, U as UseExploreChatOptions, e as UseExploreChatResult, f as UseSpeechOutputOptions, g as UseSpeechOutputResult, h as classifyExploreError, s as stopSpeaking, u as useExploreChat, i as useProgressiveReveal, j as useSpeechOutput } from './use-progressive-reveal-myNKWb6S.js';
26
26
  export { RybbitAnalytics, RybbitAnalyticsProps } from './analytics/index.js';
27
27
  export { PageHead, PageHeadProps } from './seo/index.js';
28
- export { ProductData, ProductProvider, ProductProviderProps, useProduct, useProductConfig } from './product/index.js';
28
+ export { ProductData, ProductProvider, ProductProviderProps, PublicProductFetchResult, fetchPublicProduct, useProduct, useProductConfig } from './product/index.js';
29
29
  import * as class_variance_authority_types from 'class-variance-authority/types';
30
30
  import { VariantProps } from 'class-variance-authority';
31
31
  import * as LabelPrimitive from '@radix-ui/react-label';
32
32
  export { B as BrowseStoreResult, G as GroupedStoreProducts, P as ProductCard, a as ProductCategory, R as RatingDistribution, S as SearchSuggestion, b as StarRating, c as StoreBrowsePage, d as StoreBrowsePageProps, e as StoreFacet, f as StoreFacets, g as StoreHomePage, h as StoreHomePageProps, i as StorePageProps, j as StoreProduct, k as StoreProductDetailPage, l as StoreProductDetailPageProps, m as StoreProductDetails, n as StorePublisher, o as StoreReview, p as StoreTerminology, q as StoreTypeFilter, T as TypeBadge, r as formatDownloads, s as formatPrice } from './product-card-CGxETsFa.js';
33
- export { EXPLORE_RECAPTCHA_ACTION, FOOTERLESS_ROUTES, RecaptchaV3, cn, getRecaptchaV3Token, isFooterlessPath, loadRecaptchaV3, normalizeRoutePath, shouldRenderSiteFooter } from './utils/index.js';
33
+ export { EXPLORE_RECAPTCHA_ACTION, FOOTERLESS_ROUTES, PRODUCT_SLUG_ALIASES, PRODUCT_SLUG_EMIT, PRODUCT_SLUG_RENAMES, ProductSlugGeneration, ProductSlugRename, RecaptchaV3, cn, emitProductSlug, getRecaptchaV3Token, isFooterlessPath, isSameProductSlug, legacyProductSlug, loadRecaptchaV3, normalizeProductSlug, normalizeRoutePath, productSlugVariants, shouldRenderSiteFooter } from './utils/index.js';
34
34
  import 'clsx';
35
35
 
36
36
  interface CareersSubmissionFormProps {
@@ -616,6 +616,24 @@ interface ExploreStrings {
616
616
  * columns that are off the edge. The `<table>` inside it keeps its own semantics.
617
617
  */
618
618
  answerTable: string;
619
+ /**
620
+ * The product-video card in an answer (CONTRACT.md §7) and the player it opens.
621
+ *
622
+ * `productVideo` is the card's badge — the video counterpart of `conceptIllustration` —
623
+ * and names a video the answer gave no title. `productVideoTitle` names the video in this
624
+ * language and takes `{product}`: the harness always writes the line's text as the English
625
+ * "<Name> product video", so the card keeps only the name from it. `playVideo` is the
626
+ * card's accessible name and takes `{title}`, which is that name. The last four belong to
627
+ * the player: its Close button, the two states of its full-screen toggle, and the line
628
+ * shown in place of a video that cannot be played.
629
+ */
630
+ productVideo: string;
631
+ productVideoTitle: string;
632
+ playVideo: string;
633
+ closeVideo: string;
634
+ enterFullScreen: string;
635
+ exitFullScreen: string;
636
+ videoUnavailable: string;
619
637
  /** Accessible name of the provenance row under an answer. */
620
638
  groundedIn: string;
621
639
  /** How many sources the answer cites. `sourceCountMany` takes `{count}`. */
@@ -667,12 +685,15 @@ declare function speechLocaleOf(locale: ExploreLocale): string;
667
685
  * then prints an English answer tells a screen reader to read English with Arabic phonemes,
668
686
  * and tells a crawler the answer is in a language it is not.
669
687
  *
670
- * ## The three borrowed strings
688
+ * ## The borrowed strings
671
689
  *
672
- * `answerTable`, `conceptIllustration` and `opensInNewTab` come straight from
673
- * `exploreStrings`. They are the words the ANSWER BODY renders, and the answer body is the
674
- * same component on both surfaces — two phrasings for the same caveat read as two different
675
- * caveats, which is the rule the illustration badge already follows.
690
+ * `answerTable`, `conceptIllustration`, `opensInNewTab` and the product-video card's and
691
+ * player's words (`productVideo`, `productVideoTitle`, `playVideo`, `closeVideo`,
692
+ * `enterFullScreen`, `exitFullScreen`, `videoUnavailable`) come straight from
693
+ * `exploreStrings`. They are the
694
+ * words the ANSWER BODY renders, and the answer body is the same component on both surfaces
695
+ * — two phrasings for the same caveat read as two different caveats, which is the rule the
696
+ * illustration badge already follows.
676
697
  */
677
698
 
678
699
  interface AnswerStrings extends AnswerRendererStrings {