@wix/web5-core 1.63.5 → 1.63.6

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.
@@ -1 +1 @@
1
- {"version":3,"names":["_clients","require","exports","CLIENT_IDS","EXPERIMENT_IDS","_FeatureToggleContext","createFeatureToggleReader","FeatureToggleProvider","useFeatureToggles","useFeatureToggle","_parts","getPartsByType","getPartByRole","getAllByRole","getHeading","getImages","getLinks","extractContent","extractContentMarkdown","deriveRole","_sectionDefinition","DROP_SECTION","_diagnosticTypes","DIAGNOSTIC_TYPES","_imageSearchFilterTypes","buildImageSearchFilter","_imageSearchFilters","ImageSearchFilterToken","backgroundFilter","_componentDefinitions","HeroSectionDefinition","HeroEntitySectionDefinition","KpiSectionDefinition","FeatureCardsSectionDefinition","EntitySectionDefinition","EntityCollectionSectionDefinition","ComparisonSectionDefinition","TextBlockSectionDefinition","CtaBannerSectionDefinition","CalloutSectionDefinition","NextStepsSectionDefinition","FeatureSection9PlusDefinition","ListItemsSectionDefinition","SkipNodesSectionDefinition","HtmlCommentSectionDefinition","SearchSectionDefinition","ErrorSectionDefinition","FallbackSectionDefinition","createSdkRegistry","_registry","ComponentRegistry","_patternValidator","validatePattern","validatePatternSyntax","validatePatternWithBlocks","_markdownBlocks","convertToBlockElements","convertToBlockElementsWithMapping","_linkTypes","Web5UrlType","isWeb5AskUrl","isWeb5EntityUrl","isWeb5ImageUrl","isWeb5IconUrl","isWeb5ActionUrl","isWeb5SearchUrl","isWeb5Url","isNavigableUrl","isValidLinkUrl","isLegacyUrl","_entityLinkParser","parseWeb5Url","isValidWeb5Url","validateLinkUrl","isEntityLink","parseEntityLink","extractProtocol","extractLinkMetadata","_web5LinkValidator","findInvalidWeb5Links","_nodeMatchers","hasImage","isHtmlComment","_match","matchMarkdown","matchAllSections","nodesToParts","_ComponentDependenciesContext","ComponentDependenciesProvider","useComponentDependencies","_UserQueryContext","UserQueryProvider","useUserQuery","_ChipsContext","ChipsProvider","useChips","_entity","defaultExtractor","enrichEntitiesFromPayload","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","getEntityExtractor","registerEntityExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","_callout","CALLOUT_KINDS","_useWeb5Link","useWeb5Link","_useConversation","useConversation","_useDebugImageContext","useDebugImageContext","_useResolvedImageSources","useResolvedImageSources","_useResolveGenericEntityData","useResolveGenericEntityData","_useEntityTransforms","useEntityTransforms","_useMarkdownUtils","useMarkdownUtils","_useResolveShopifyEntityData","useResolveShopifyEntityData","_useResolveSearchSpringEntityData","useResolveSearchSpringEntityData","_searchspring","fetchProductsByHandles","fetchProductsByHandlesMap","transformSSProductToEntityItemData","_cart","addToCart","_shopify","ShopifyStorefrontClient","resolveShopifyConfig","resolveShopifyEntity","transformShopifyProduct","transformShopifyCollection","transformShopifyArticle","transformShopifyEntityToItemData","PRODUCT_BY_HANDLE_QUERY","COLLECTION_BY_HANDLE_QUERY","ARTICLE_BY_HANDLE_QUERY","_utils","cn","_imageUtils","normalizeImageUrl","getResizedImageUrl","_imageBackdrop","analyzeBackdrop","computeContentBBox","buildProbeUrl","loadImagePixels","loadBackdropAnalysis","_parseUtils","stripMarkdown","_colorUtils","rgbToHsl","hslToRgb","ensureMinLightness","toRgb","deriveDarkColor","deriveDarkGradient","deriveLightColor","_analyticsEvents","pushEvent","pushPromptSubmit","pushLinkClick","pushError","pushExit","pushEntityFiltered","hasAnalyticsConsent","_errors","ERROR_MARKDOWN","getErrorTypeFromStatus","createErrorMarkdown","STREAMING_TIMEOUT_MS","DEFAULT_ERROR_TEMPLATES","resolveErrorTemplate","_navigationStack","getForwardStack","setForwardStack","clearForwardStack","pushToForwardStack","popFromForwardStack","_UserQuery","UserQuery","_productBackHandoff","PRODUCT_BACK_SESSION_KEY","writeProductBackHandoff","readProductBackHandoff","_PromptEntryEmptyState","PromptEntryEmptyState","_SearchSection","SearchSection","_FeedbackBar","FeedbackBar","_Disclaimer","Disclaimer","_BottomContainer","BottomContainer","_MarkdownText","MarkdownText","_CalloutBlock","CalloutBlock","_OptimizedImage","OptimizedImage","_SectionSkeleton","SectionSkeleton","_SmartIcon","SmartIcon","_Loader","Loader","_PlacementLoader","PlacementLoader","_UnifiedLink","UnifiedLink","detectLinkType","LinkType","_table","Table","TableHeader","TableBody","TableFooter","TableHead","TableRow","TableCell","TableCaption","_userQueryEvent","WEB5_USER_QUERY_EVENT","_answerUpdatedEvent","WEB5_ANSWER_UPDATED_EVENT","_redirectEvent","WEB5_REDIRECT_EVENT","_loadClientBundle","loadClientBundle","_clientBundleOverride","getClientBundleOverride","isTrustedBundleHost","_clientBundleUrl","TEMPLATES_CDN_BASE","TEMPLATES_MANIFEST_URL","getTemplateOverride","isTemplatePickerRequested","isValidTemplateId","resolveClientBundleUrl","_mergeClientConfig","mergeClientConfig","_applyThemeOverrides","applyThemeOverrides","THEME_OVERRIDE_TOKENS","_tokenContract","THEME_TOKEN_CONTRACT","BRAND_TOKENS","EDITABLE_TOKENS","TOKEN_NAME_PATTERN","bucketOf","hostAliasFor","_themeDebug","isThemeDebugEnabled","THEME_DEBUG_KEY","THEME_DEBUG_QUERY_PARAM","_colorFormat","hexToHslTriplet","hslTripletToHex","isHslTriplet","_PlacementResponseRenderer","PlacementResponseRenderer","PlacementSmoothHeight","_buildPlacementDependencies","buildPlacementDependencies","_PlacementPayloadContext","PlacementPayloadProvider","usePlacementPayload","_unifiedMarkdownParser","UnifiedMarkdownParser","parseMarkdownToAst","parseAstToMarkdown","_markdownPreprocessor","escapeWeb5Links","fixMalformedLinks","trimTrailingWhitespace","normalizeIconUrls","decodeLinkText","preprocessMarkdown","_componentTracking","ComponentTracking","_contentKeywordMatcher","findKeywordsInContent","getContextualImageFilename","_intentExtractor","extractIntentFromMarkdown","getIntentFromMarkdown","_propsExtractor","createPageSection","generateSectionId","generateId","findImageInNode","findImageInChildren","_diagnosticsCollector","DiagnosticsCollector","_refreshPrompts","REFRESH_PROMPTS_UNTIL_KEY","REFRESH_PROMPTS_WINDOW_MS","getRefreshPromptsExpiry","shouldRefreshPrompts","enableRefreshPrompts","disableRefreshPrompts","_backendEnvironment","BACKEND_ENVIRONMENT_KEY","BACKEND_ENVIRONMENT_QUERY_PARAM","DEFAULT_BACKEND_ENVIRONMENT","getBackendEnvironment","setBackendEnvironment","usesStagingBackend","_simulation","isSimulationTraffic","_matchDebug","MATCH_DEBUG_KEY","MATCH_DEBUG_QUERY_PARAM","isMatchDebugEnabled","setMatchDebug","resetMatchDebugCache","logMatchDebug","_wixAuthFetch","createWixAuthFetch","_sessionManager","getOrCreateSessionId","getSessionId","getChatId","startNewChatId","setChatId","resetChatIdForTests","_componentParser","parseMarkdownToComponents","tryParseComponent","mergeSectionsWithStableReferences","_hostScope","WEB5_ROOT_ID","WEB5_ROOT_CLASS","WEB5_SCOPES","WEB5_SCOPE","WEB5_GLOBAL_TOKENS"],"sources":["../../src/index.ts"],"sourcesContent":["// Client IDs and experiment IDs\nexport { CLIENT_IDS, EXPERIMENT_IDS } from './clients';\n\nexport {\n type EmbedFeatureToggleResult,\n type FeatureToggleReader,\n createFeatureToggleReader,\n FeatureToggleProvider,\n useFeatureToggles,\n useFeatureToggle,\n} from './featureToggles/FeatureToggleContext';\n\n// Dev-only chrome injection contract for client packages\nexport type { DevEnvironment } from './client/devEnvironment';\n\n// Part types and helpers\nexport {\n type PartType,\n type Part,\n type HeadingPart,\n type ImagePart,\n type LinkPart,\n type ListPart,\n type ListItemPart,\n type KpiItemPart,\n type CardPart,\n type IconPart,\n type CalloutPart,\n type EntityPart,\n getPartsByType,\n getPartByRole,\n getAllByRole,\n getHeading,\n getImages,\n getLinks,\n extractContent,\n extractContentMarkdown,\n deriveRole,\n} from './parts/parts';\n\n// Component types\nexport type {\n BaseCompProps,\n SlotCompProps,\n SectionCompProps,\n SectionCompPropsWithSlot,\n TextCompProps,\n ButtonCompProps,\n ImageCompProps,\n BadgeCompProps,\n HeroButton,\n KpiItemCompProps,\n FeatureItemCompProps,\n FeatureCardCompProps,\n EntityItemData,\n EntityItem,\n GenericEntityData,\n GenericEntityCompProps,\n ComparisonRow,\n ComparisonColumn,\n AiNarrativeCompProps,\n HeroCompProps,\n HeroEntityCompProps,\n KpiCompProps,\n FeatureCardsCompProps,\n EntityCompProps,\n ComparisonCompProps,\n TextBlockCompProps,\n Component,\n BaseComponent,\n SlotComponent,\n SectionComponent,\n TextComponent,\n ButtonComponent,\n ImageComponent,\n BadgeComponent,\n KpiItemComponent,\n FeatureItemComponent,\n FeatureCardComponent,\n GenericEntityComponent,\n AiNarrativeComponent,\n ComparisonSectionComponent,\n TextBlockSectionComponent,\n HeroSectionComponent,\n HeroEntitySectionComponent,\n KpiSectionComponent,\n FeatureCardsSectionComponent,\n EntitySectionComponent,\n PropsOf,\n SectionFixture,\n CtaBannerCompProps,\n CtaBannerSectionComponent,\n CalloutCompProps,\n CalloutSectionComponent,\n NextStepsCompProps,\n NextStepsSectionComponent,\n FeatureSection9PlusCompProps,\n FeatureSection9PlusSectionComponent,\n ListItemsSectionCompProps,\n ListItemsSectionComponent,\n ErrorCompProps,\n ErrorSectionComponent,\n NullCompProps,\n NullSectionComponent,\n SolutionEntityCompProps,\n SolutionEntitySectionComponent,\n SolutionEntityData,\n BlogEntityCompProps,\n BlogEntitySectionComponent,\n BlogEntityData,\n GeneralTextCompProps,\n GeneralTextSectionComponent,\n PersonalizedNarrativeCompProps,\n PersonalizedNarrativeSectionComponent,\n} from './component/types';\n\n// Section definition\nexport type {\n SectionDefinition,\n ParseContext,\n ContextualImageResult,\n DropSection,\n} from './component/section-definition';\nexport { DROP_SECTION } from './component/section-definition';\n\n// Diagnostic types\nexport { DIAGNOSTIC_TYPES } from './component/diagnosticTypes';\nexport type { DiagnosticType } from './component/diagnosticTypes';\n\n// Image search filters\nexport {\n buildImageSearchFilter,\n type ImageSearchFilterString,\n} from './image/imageSearchFilterTypes';\nexport {\n ImageSearchFilterToken,\n backgroundFilter,\n} from './image/imageSearchFilters';\nexport type {\n ContextualImageAsset,\n ImageSourceInput,\n ResolvedImageSource,\n ResolvedImageSourceKind,\n} from './image/contextualImageTypes';\n\n// Section definition classes + createSdkRegistry\nexport {\n HeroSectionDefinition,\n HeroEntitySectionDefinition,\n KpiSectionDefinition,\n FeatureCardsSectionDefinition,\n EntitySectionDefinition,\n EntityCollectionSectionDefinition,\n ComparisonSectionDefinition,\n TextBlockSectionDefinition,\n CtaBannerSectionDefinition,\n CalloutSectionDefinition,\n NextStepsSectionDefinition,\n FeatureSection9PlusDefinition,\n ListItemsSectionDefinition,\n SkipNodesSectionDefinition,\n HtmlCommentSectionDefinition,\n SearchSectionDefinition,\n ErrorSectionDefinition,\n FallbackSectionDefinition,\n createSdkRegistry,\n} from './component/componentDefinitions';\n\n// Registry\nexport { ComponentRegistry } from './registry';\nexport type {\n SlotOptions,\n SectionOptions,\n SectionRegistration,\n SlotNode,\n SlotIntentNode,\n SectionIntentNode,\n SectionNode,\n SlotVariant,\n SectionVariant,\n RegistryCatalog,\n ActionResult,\n ActionHandler,\n} from './registry';\n\n// Pattern validator\nexport {\n validatePattern,\n validatePatternSyntax,\n validatePatternWithBlocks,\n type PatternValidationResult,\n type BlockElement,\n type EnrichedBlockElement,\n type LinkMetadata,\n type LinkAttribute,\n} from './patternValidator';\n\n// Markdown blocks\nexport {\n convertToBlockElements,\n convertToBlockElementsWithMapping,\n type BlockElementsWithMapping,\n} from './markdownBlocks';\n\n// Link types, enum & guards\nexport {\n Web5UrlType,\n type Web5AskUrl,\n type Web5EntityUrl,\n type Web5ImageUrl,\n type Web5IconUrl,\n type Web5ActionUrl,\n type Web5SearchUrl,\n type Web5Url,\n type HttpsUrl,\n type HttpUrl,\n type MailtoUrl,\n type RelativeUrl,\n type NavigableUrl,\n type ValidLinkUrl,\n type AnyKnownUrl,\n type LegacyUrl,\n isWeb5AskUrl,\n isWeb5EntityUrl,\n isWeb5ImageUrl,\n isWeb5IconUrl,\n isWeb5ActionUrl,\n isWeb5SearchUrl,\n isWeb5Url,\n isNavigableUrl,\n isValidLinkUrl,\n isLegacyUrl,\n} from './types/link-types';\n\n// Entity/URL parsing\nexport {\n parseWeb5Url,\n isValidWeb5Url,\n validateLinkUrl,\n type Web5UrlParsed,\n type Web5AskParsed,\n type Web5EntityParsed,\n type Web5ImageParsed,\n type Web5IconParsed,\n type Web5ActionParsed,\n type Web5SearchParsed,\n isEntityLink,\n parseEntityLink,\n extractProtocol,\n extractLinkMetadata,\n} from './utils/entityLinkParser';\n\n// Web5 link validation\nexport {\n findInvalidWeb5Links,\n type InvalidWeb5Link,\n} from './utils/web5LinkValidator';\n\n// Node matchers\nexport { hasImage, isHtmlComment } from './utils/nodeMatchers';\n\n// Match API\nexport {\n matchMarkdown,\n type MarkdownMatchResult,\n matchAllSections,\n type MatchAllSectionsResult,\n nodesToParts,\n} from './match';\n\n// ---------------------------------------------------------------------------\n// DI Infrastructure (moved from @wix/w5-client-circana)\n// ---------------------------------------------------------------------------\n\n// DI context and provider\nexport {\n ComponentDependenciesProvider,\n useComponentDependencies,\n type ComponentDependenciesProviderProps,\n} from './context/ComponentDependenciesContext';\n\n// Raw user query for the current response page\nexport {\n UserQueryProvider,\n useUserQuery,\n type UserQueryProviderProps,\n} from './context/UserQueryContext';\n\n// Chips context (suggestion chips shared between SearchSection and error states)\nexport {\n ChipsProvider,\n useChips,\n type SuggestionChip,\n} from './context/ChipsContext';\n\n// DI types\nexport type {\n ComponentDependencies,\n Web5LinkApi,\n ConversationApi,\n SendMessageTrackingOptions,\n SendMessageOptions,\n ComparisonSubmitPayload,\n ComparisonSelectedProduct,\n ProductComparisonSelectionState,\n ProductComparisonApi,\n EntityTransforms,\n MarkdownUtils,\n ResolveGenericEntityDataOptions,\n} from './types/dependencies';\nexport type {\n ApiPayloadItem,\n EntityTypeConfig,\n EntityConfig,\n EntityExtractionContext,\n} from './types/entity';\nexport {\n defaultExtractor,\n enrichEntitiesFromPayload,\n fetchEntityListData,\n listEntityItems,\n LIST_ITEMS_ENDPOINT,\n getEntityExtractor,\n registerEntityExtractor,\n transformToSolutionEntityData,\n transformToBlogPostEntityData,\n transformToGenericEntityData,\n} from './entity';\nexport type {\n EntityExtractor,\n FetchEntityListDataOptions,\n ListEntityItemsOptions,\n} from './entity';\nexport { CALLOUT_KINDS, type CalloutKind, type Callout } from './types/callout';\n\n// Wrapper hooks\nexport { useWeb5Link } from './hooks/useWeb5Link';\nexport { useConversation } from './hooks/useConversation';\nexport { useDebugImageContext } from './hooks/useDebugImageContext';\nexport { useResolvedImageSources } from './hooks/useResolvedImageSources';\nexport { useResolveGenericEntityData } from './hooks/useResolveGenericEntityData';\nexport { useEntityTransforms } from './hooks/useEntityTransforms';\nexport { useMarkdownUtils } from './hooks/useMarkdownUtils';\nexport { useResolveShopifyEntityData } from './hooks/useResolveShopifyEntityData';\nexport { useResolveSearchSpringEntityData } from './hooks/useResolveSearchSpringEntityData';\n\n// SearchSpring\nexport {\n fetchProductsByHandles,\n fetchProductsByHandlesMap,\n transformSSProductToEntityItemData,\n} from './services/searchspring';\nexport type {\n SearchSpringConfig,\n SSProduct,\n SSSearchResponse,\n SSSizeData,\n} from './services/searchspring';\n\n// Shopify Storefront API\n// Cart actions\nexport { addToCart } from './services/cart';\n\nexport {\n ShopifyStorefrontClient,\n resolveShopifyConfig,\n resolveShopifyEntity,\n transformShopifyProduct,\n transformShopifyCollection,\n transformShopifyArticle,\n transformShopifyEntityToItemData,\n PRODUCT_BY_HANDLE_QUERY,\n COLLECTION_BY_HANDLE_QUERY,\n ARTICLE_BY_HANDLE_QUERY,\n} from './services/shopify';\nexport type {\n ShopifyStorefrontConfig,\n ShopifyProduct,\n ShopifyCollection,\n ShopifyArticle,\n ShopifyImage,\n ShopifyMoneyV2,\n} from './services/shopify';\n\n// Utilities\nexport { cn } from './lib/utils';\nexport { normalizeImageUrl, getResizedImageUrl } from './utils/image-utils';\nexport {\n analyzeBackdrop,\n computeContentBBox,\n buildProbeUrl,\n loadImagePixels,\n loadBackdropAnalysis,\n type BackdropAnalysis,\n type ContentBBox,\n type ImagePixels,\n} from './utils/imageBackdrop';\nexport { stripMarkdown } from './component/componentDefinitions/parse-utils';\n\n// Color utilities\nexport {\n type RGB,\n rgbToHsl,\n hslToRgb,\n ensureMinLightness,\n toRgb,\n deriveDarkColor,\n deriveDarkGradient,\n deriveLightColor,\n} from './color/colorUtils';\n\n// Analytics\nexport {\n pushEvent,\n pushPromptSubmit,\n pushLinkClick,\n pushError,\n pushExit,\n pushEntityFiltered,\n hasAnalyticsConsent,\n type EntityFilteredReason,\n} from './utils/analyticsEvents';\n\n// Error handling types and utilities\nexport {\n type ConversationErrorType,\n ERROR_MARKDOWN,\n getErrorTypeFromStatus,\n createErrorMarkdown,\n STREAMING_TIMEOUT_MS,\n type ErrorActionType,\n type ErrorIconType,\n type ErrorTemplateButton,\n type ErrorTemplate,\n type ErrorTemplateOverrides,\n DEFAULT_ERROR_TEMPLATES,\n resolveErrorTemplate,\n} from './errors';\n\n// Navigation utilities\nexport {\n getForwardStack,\n setForwardStack,\n clearForwardStack,\n pushToForwardStack,\n popFromForwardStack,\n} from './utils/navigationStack';\n\n// UI components\nexport {\n UserQuery,\n type UserQueryProps,\n type ProductBackContext,\n} from './components/ui/UserQuery';\nexport {\n PRODUCT_BACK_SESSION_KEY,\n writeProductBackHandoff,\n readProductBackHandoff,\n type ProductBackHandoff,\n} from './utils/productBackHandoff';\nexport {\n PromptEntryEmptyState,\n type PromptEntryEmptyStateProps,\n} from './components/ui/PromptEntryEmptyState';\nexport {\n SearchSection,\n type SearchSectionProps,\n type SearchSectionHandle,\n type ScrollChip,\n} from './components/ui/SearchSection';\nexport {\n FeedbackBar,\n type FeedbackBarProps,\n type FeedbackCategoryOption,\n type FeedbackSentiment,\n type FeedbackSubmitInput,\n} from './components/ui/FeedbackBar';\nexport {\n Disclaimer,\n type DisclaimerProps,\n} from './components/ui/Disclaimer';\nexport {\n BottomContainer,\n type BottomContainerProps,\n} from './components/ui/BottomContainer';\nexport { MarkdownText } from './components/ui/MarkdownText';\nexport {\n CalloutBlock,\n type CalloutBlockProps,\n} from './components/ui/CalloutBlock';\nexport {\n OptimizedImage,\n type OptimizedImageProps,\n} from './components/ui/OptimizedImage';\nexport {\n SectionSkeleton,\n type SectionSkeletonProps,\n} from './components/ui/SectionSkeleton';\nexport { SmartIcon, type SmartIconProps } from './components/ui/SmartIcon';\nexport { Loader, type LoaderProps } from './components/ui/Loader';\nexport {\n PlacementLoader,\n type PlacementLoaderProps,\n} from './components/ui/PlacementLoader';\nexport {\n UnifiedLink,\n detectLinkType,\n type UnifiedLinkProps,\n LinkType,\n type LinkVariant,\n} from './components/ui/UnifiedLink';\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from './components/ui/table';\n\n// Placement (DL #088, DL #102 behavior declarations)\nexport type {\n PlacementBehaviorConfig,\n PlacementConfig,\n PlacementPrompts,\n} from './types/placement';\n\n// Cross-bundle user-query broadcast event (DL #097 D2)\nexport {\n WEB5_USER_QUERY_EVENT,\n type Web5UserQueryEventDetail,\n type Web5UserQueryEvent,\n} from './types/userQueryEvent';\n\n// Cross-bundle answer-updated broadcast event (B2B-4121)\nexport {\n WEB5_ANSWER_UPDATED_EVENT,\n type Web5AnswerUpdatedEventDetail,\n type Web5AnswerUpdatedEvent,\n} from './types/answerUpdatedEvent';\n\n// Cross-bundle redirect broadcast event (DL #098 D3)\nexport {\n WEB5_REDIRECT_EVENT,\n type Web5RedirectEventDetail,\n type Web5RedirectEvent,\n type Web5RedirectReason,\n} from './types/redirectEvent';\n// `placementFilter` was removed — hero/next-steps exclusion is the prompt's job\n// and placement-specific designs belong as `{ placement: true }` registry\n// variants (resolved automatically via `resolveSection(type, { placement: true })`).\n\n// Client bundle loader (DL #088 D3.3)\nexport { loadClientBundle } from './client/loadClientBundle';\n\n// `?clientBundleUrl=` dev override — shared by `web50-server-ui` and\n// `embed-placement` so the trusted-host gate can't drift between them.\nexport {\n getClientBundleOverride,\n isTrustedBundleHost,\n} from './client/clientBundleOverride';\n\n// Client-UMD URL resolution (DL #094 per-msid, DL #129 per-template) and the\n// universal bundle←backend config merge (DL #129 Q3/Q7) — shared by\n// `web50-server-ui` and `embed-placement`, the two client-bundle load sites.\nexport {\n TEMPLATES_CDN_BASE,\n TEMPLATES_MANIFEST_URL,\n getTemplateOverride,\n isTemplatePickerRequested,\n isValidTemplateId,\n resolveClientBundleUrl,\n} from './client/clientBundleUrl';\nexport { mergeClientConfig, type DeepPartial } from './client/mergeClientConfig';\nexport {\n applyThemeOverrides,\n THEME_OVERRIDE_TOKENS,\n type ThemeOverrideKey,\n type ThemeOverrides,\n} from './client/applyThemeOverrides';\nexport {\n THEME_TOKEN_CONTRACT,\n BRAND_TOKENS,\n EDITABLE_TOKENS,\n TOKEN_NAME_PATTERN,\n bucketOf,\n hostAliasFor,\n type TokenBucket,\n type TokenContractEntry,\n type TokenType,\n} from './theme/tokenContract';\nexport {\n isThemeDebugEnabled,\n THEME_DEBUG_KEY,\n THEME_DEBUG_QUERY_PARAM,\n type AppliedToken,\n type ThemeOverrideSource,\n} from './client/themeDebug';\nexport {\n hexToHslTriplet,\n hslTripletToHex,\n isHslTriplet,\n} from './theme/colorFormat';\n\n// Placement renderer + DI helper (DL #088 D3.2, D3.4)\nexport {\n PlacementResponseRenderer,\n PlacementSmoothHeight,\n type PlacementResponseRendererProps,\n type PlacementSection,\n type PlacementVariant,\n} from './components/placement/PlacementResponseRenderer';\nexport {\n buildPlacementDependencies,\n type BuildPlacementDependenciesOptions,\n} from './components/placement/buildPlacementDependencies';\nexport {\n PlacementPayloadProvider,\n usePlacementPayload,\n type PlacementPayloadContextValue,\n} from './components/placement/PlacementPayloadContext';\n\n// Markdown parsing utilities — lifted from web50-server-ui (DL #088 B9.1)\nexport {\n UnifiedMarkdownParser,\n parseMarkdownToAst,\n parseAstToMarkdown,\n} from './utils/unifiedMarkdownParser';\nexport {\n escapeWeb5Links,\n fixMalformedLinks,\n trimTrailingWhitespace,\n normalizeIconUrls,\n decodeLinkText,\n preprocessMarkdown,\n type PreprocessorDiagnostic,\n type PreprocessResult,\n} from './utils/markdownPreprocessor';\nexport {\n ComponentTracking,\n type ComponentNodeRange,\n} from './utils/componentTracking';\nexport {\n findKeywordsInContent,\n getContextualImageFilename,\n} from './utils/contentKeywordMatcher';\nexport {\n extractIntentFromMarkdown,\n getIntentFromMarkdown,\n type IntentInfo,\n type IntentExtractionOptions,\n type ResponseState,\n} from './utils/intentExtractor';\nexport type { PageSection } from './types/page-section';\nexport {\n createPageSection,\n generateSectionId,\n generateId,\n findImageInNode,\n findImageInChildren,\n type Product,\n type ComparisonProduct,\n type ProductComparisonSectionProps,\n} from './utils/propsExtractor';\nexport {\n DiagnosticsCollector,\n type DiagnosticEntry,\n} from './utils/diagnosticsCollector';\nexport {\n REFRESH_PROMPTS_UNTIL_KEY,\n REFRESH_PROMPTS_WINDOW_MS,\n getRefreshPromptsExpiry,\n shouldRefreshPrompts,\n enableRefreshPrompts,\n disableRefreshPrompts,\n} from './utils/refreshPrompts';\nexport {\n type BackendEnvironment,\n BACKEND_ENVIRONMENT_KEY,\n BACKEND_ENVIRONMENT_QUERY_PARAM,\n DEFAULT_BACKEND_ENVIRONMENT,\n getBackendEnvironment,\n setBackendEnvironment,\n usesStagingBackend,\n} from './utils/backendEnvironment';\nexport { isSimulationTraffic } from './utils/simulation';\nexport {\n MATCH_DEBUG_KEY,\n MATCH_DEBUG_QUERY_PARAM,\n isMatchDebugEnabled,\n setMatchDebug,\n resetMatchDebugCache,\n logMatchDebug,\n} from './utils/matchDebug';\nexport { createWixAuthFetch } from './client/wixAuthFetch';\nexport {\n getOrCreateSessionId,\n getSessionId,\n getChatId,\n startNewChatId,\n setChatId,\n resetChatIdForTests,\n} from './utils/sessionManager';\n\n// Component parser orchestrator — lifted from web50-server-ui (DL #088 B9.5)\nexport {\n parseMarkdownToComponents,\n tryParseComponent,\n mergeSectionsWithStableReferences,\n type ParseMarkdownOptions,\n type ParseMarkdownResult,\n type ComponentMatch,\n type ParserContext,\n} from './component/componentParser';\nexport type {\n ParserClientConfig,\n EnrichEntityProps,\n} from './component/parser-types';\n\n// Host-mount scope contract — shared by web50-server-ui (which stamps the\n// class and mounts), embed-placement (which mounts the same bundle elsewhere),\n// and the client CDN build (which compiles every selector against it).\nexport {\n WEB5_ROOT_ID,\n WEB5_ROOT_CLASS,\n WEB5_SCOPES,\n WEB5_SCOPE,\n WEB5_GLOBAL_TOKENS,\n type HostFitConfig,\n} from './hostScope';\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_clients","require","exports","CLIENT_IDS","EXPERIMENT_IDS","_FeatureToggleContext","createFeatureToggleReader","FeatureToggleProvider","useFeatureToggles","useFeatureToggle","_parts","getPartsByType","getPartByRole","getAllByRole","getHeading","getImages","getLinks","extractContent","extractContentMarkdown","deriveRole","_sectionDefinition","DROP_SECTION","_diagnosticTypes","DIAGNOSTIC_TYPES","_imageSearchFilterTypes","buildImageSearchFilter","_imageSearchFilters","ImageSearchFilterToken","backgroundFilter","_componentDefinitions","HeroSectionDefinition","HeroEntitySectionDefinition","KpiSectionDefinition","FeatureCardsSectionDefinition","EntitySectionDefinition","EntityCollectionSectionDefinition","ComparisonSectionDefinition","TextBlockSectionDefinition","CtaBannerSectionDefinition","CalloutSectionDefinition","NextStepsSectionDefinition","FeatureSection9PlusDefinition","ListItemsSectionDefinition","SkipNodesSectionDefinition","HtmlCommentSectionDefinition","SearchSectionDefinition","ErrorSectionDefinition","FallbackSectionDefinition","createSdkRegistry","_registry","ComponentRegistry","_patternValidator","validatePattern","validatePatternSyntax","validatePatternWithBlocks","_markdownBlocks","convertToBlockElements","convertToBlockElementsWithMapping","_linkTypes","Web5UrlType","isWeb5AskUrl","isWeb5EntityUrl","isWeb5ImageUrl","isWeb5IconUrl","isWeb5ActionUrl","isWeb5SearchUrl","isWeb5Url","isNavigableUrl","isValidLinkUrl","isLegacyUrl","_entityLinkParser","parseWeb5Url","isValidWeb5Url","validateLinkUrl","isEntityLink","parseEntityLink","extractProtocol","extractLinkMetadata","_web5LinkValidator","findInvalidWeb5Links","_nodeMatchers","hasImage","isHtmlComment","_match","matchMarkdown","matchAllSections","nodesToParts","_ComponentDependenciesContext","ComponentDependenciesProvider","useComponentDependencies","_UserQueryContext","UserQueryProvider","useUserQuery","_ChipsContext","ChipsProvider","useChips","_entity","defaultExtractor","enrichEntitiesFromPayload","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","getEntityExtractor","registerEntityExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","toMatchedOptions","formatMoney","readCurrencyCode","formatPriceField","formatProductPriceLabel","_callout","CALLOUT_KINDS","_useWeb5Link","useWeb5Link","_useConversation","useConversation","_useDebugImageContext","useDebugImageContext","_useResolvedImageSources","useResolvedImageSources","_useResolveGenericEntityData","useResolveGenericEntityData","_useEntityTransforms","useEntityTransforms","_useMarkdownUtils","useMarkdownUtils","_useResolveShopifyEntityData","useResolveShopifyEntityData","_useResolveSearchSpringEntityData","useResolveSearchSpringEntityData","_searchspring","fetchProductsByHandles","fetchProductsByHandlesMap","transformSSProductToEntityItemData","_cart","addToCart","_shopify","ShopifyStorefrontClient","resolveShopifyConfig","resolveShopifyEntity","transformShopifyProduct","transformShopifyCollection","transformShopifyArticle","transformShopifyEntityToItemData","PRODUCT_BY_HANDLE_QUERY","COLLECTION_BY_HANDLE_QUERY","ARTICLE_BY_HANDLE_QUERY","_utils","cn","_imageUtils","normalizeImageUrl","getResizedImageUrl","_imageBackdrop","analyzeBackdrop","computeContentBBox","buildProbeUrl","loadImagePixels","loadBackdropAnalysis","_parseUtils","stripMarkdown","_colorUtils","rgbToHsl","hslToRgb","ensureMinLightness","toRgb","deriveDarkColor","deriveDarkGradient","deriveLightColor","_analyticsEvents","pushEvent","pushPromptSubmit","pushLinkClick","pushError","pushExit","pushEntityFiltered","hasAnalyticsConsent","_errors","ERROR_MARKDOWN","getErrorTypeFromStatus","createErrorMarkdown","STREAMING_TIMEOUT_MS","DEFAULT_ERROR_TEMPLATES","resolveErrorTemplate","_navigationStack","getForwardStack","setForwardStack","clearForwardStack","pushToForwardStack","popFromForwardStack","_UserQuery","UserQuery","_productBackHandoff","PRODUCT_BACK_SESSION_KEY","writeProductBackHandoff","readProductBackHandoff","_PromptEntryEmptyState","PromptEntryEmptyState","_SearchSection","SearchSection","_FeedbackBar","FeedbackBar","_Disclaimer","Disclaimer","_BottomContainer","BottomContainer","_MarkdownText","MarkdownText","_CalloutBlock","CalloutBlock","_OptimizedImage","OptimizedImage","_SectionSkeleton","SectionSkeleton","_SmartIcon","SmartIcon","_Loader","Loader","_PlacementLoader","PlacementLoader","_UnifiedLink","UnifiedLink","detectLinkType","LinkType","_table","Table","TableHeader","TableBody","TableFooter","TableHead","TableRow","TableCell","TableCaption","_userQueryEvent","WEB5_USER_QUERY_EVENT","_answerUpdatedEvent","WEB5_ANSWER_UPDATED_EVENT","_redirectEvent","WEB5_REDIRECT_EVENT","_loadClientBundle","loadClientBundle","_clientBundleOverride","getClientBundleOverride","isTrustedBundleHost","_clientBundleUrl","TEMPLATES_CDN_BASE","TEMPLATES_MANIFEST_URL","getTemplateOverride","isTemplatePickerRequested","isValidTemplateId","resolveClientBundleUrl","_mergeClientConfig","mergeClientConfig","_applyThemeOverrides","applyThemeOverrides","THEME_OVERRIDE_TOKENS","_tokenContract","THEME_TOKEN_CONTRACT","BRAND_TOKENS","EDITABLE_TOKENS","TOKEN_NAME_PATTERN","bucketOf","hostAliasFor","_themeDebug","isThemeDebugEnabled","THEME_DEBUG_KEY","THEME_DEBUG_QUERY_PARAM","_colorFormat","hexToHslTriplet","hslTripletToHex","isHslTriplet","_PlacementResponseRenderer","PlacementResponseRenderer","PlacementSmoothHeight","_buildPlacementDependencies","buildPlacementDependencies","_PlacementPayloadContext","PlacementPayloadProvider","usePlacementPayload","_unifiedMarkdownParser","UnifiedMarkdownParser","parseMarkdownToAst","parseAstToMarkdown","_markdownPreprocessor","escapeWeb5Links","fixMalformedLinks","trimTrailingWhitespace","normalizeIconUrls","decodeLinkText","preprocessMarkdown","_componentTracking","ComponentTracking","_contentKeywordMatcher","findKeywordsInContent","getContextualImageFilename","_intentExtractor","extractIntentFromMarkdown","getIntentFromMarkdown","_propsExtractor","createPageSection","generateSectionId","generateId","findImageInNode","findImageInChildren","_diagnosticsCollector","DiagnosticsCollector","_refreshPrompts","REFRESH_PROMPTS_UNTIL_KEY","REFRESH_PROMPTS_WINDOW_MS","getRefreshPromptsExpiry","shouldRefreshPrompts","enableRefreshPrompts","disableRefreshPrompts","_backendEnvironment","BACKEND_ENVIRONMENT_KEY","BACKEND_ENVIRONMENT_QUERY_PARAM","DEFAULT_BACKEND_ENVIRONMENT","getBackendEnvironment","setBackendEnvironment","usesStagingBackend","_simulation","isSimulationTraffic","_matchDebug","MATCH_DEBUG_KEY","MATCH_DEBUG_QUERY_PARAM","isMatchDebugEnabled","setMatchDebug","resetMatchDebugCache","logMatchDebug","_wixAuthFetch","createWixAuthFetch","_sessionManager","getOrCreateSessionId","getSessionId","getChatId","startNewChatId","setChatId","resetChatIdForTests","_componentParser","parseMarkdownToComponents","tryParseComponent","mergeSectionsWithStableReferences","_hostScope","WEB5_ROOT_ID","WEB5_ROOT_CLASS","WEB5_SCOPES","WEB5_SCOPE","WEB5_GLOBAL_TOKENS"],"sources":["../../src/index.ts"],"sourcesContent":["// Client IDs and experiment IDs\nexport { CLIENT_IDS, EXPERIMENT_IDS } from './clients';\n\nexport {\n type EmbedFeatureToggleResult,\n type FeatureToggleReader,\n createFeatureToggleReader,\n FeatureToggleProvider,\n useFeatureToggles,\n useFeatureToggle,\n} from './featureToggles/FeatureToggleContext';\n\n// Dev-only chrome injection contract for client packages\nexport type { DevEnvironment } from './client/devEnvironment';\n\n// Part types and helpers\nexport {\n type PartType,\n type Part,\n type HeadingPart,\n type ImagePart,\n type LinkPart,\n type ListPart,\n type ListItemPart,\n type KpiItemPart,\n type CardPart,\n type IconPart,\n type CalloutPart,\n type EntityPart,\n getPartsByType,\n getPartByRole,\n getAllByRole,\n getHeading,\n getImages,\n getLinks,\n extractContent,\n extractContentMarkdown,\n deriveRole,\n} from './parts/parts';\n\n// Component types\nexport type {\n BaseCompProps,\n SlotCompProps,\n SectionCompProps,\n SectionCompPropsWithSlot,\n TextCompProps,\n ButtonCompProps,\n ImageCompProps,\n BadgeCompProps,\n HeroButton,\n KpiItemCompProps,\n FeatureItemCompProps,\n FeatureCardCompProps,\n EntityItemData,\n EntityItem,\n GenericEntityData,\n GenericEntityCompProps,\n ComparisonRow,\n ComparisonColumn,\n AiNarrativeCompProps,\n HeroCompProps,\n HeroEntityCompProps,\n KpiCompProps,\n FeatureCardsCompProps,\n EntityCompProps,\n ComparisonCompProps,\n TextBlockCompProps,\n Component,\n BaseComponent,\n SlotComponent,\n SectionComponent,\n TextComponent,\n ButtonComponent,\n ImageComponent,\n BadgeComponent,\n KpiItemComponent,\n FeatureItemComponent,\n FeatureCardComponent,\n GenericEntityComponent,\n AiNarrativeComponent,\n ComparisonSectionComponent,\n TextBlockSectionComponent,\n HeroSectionComponent,\n HeroEntitySectionComponent,\n KpiSectionComponent,\n FeatureCardsSectionComponent,\n EntitySectionComponent,\n PropsOf,\n SectionFixture,\n CtaBannerCompProps,\n CtaBannerSectionComponent,\n CalloutCompProps,\n CalloutSectionComponent,\n NextStepsCompProps,\n NextStepsSectionComponent,\n FeatureSection9PlusCompProps,\n FeatureSection9PlusSectionComponent,\n ListItemsSectionCompProps,\n ListItemsSectionComponent,\n ErrorCompProps,\n ErrorSectionComponent,\n NullCompProps,\n NullSectionComponent,\n SolutionEntityCompProps,\n SolutionEntitySectionComponent,\n SolutionEntityData,\n BlogEntityCompProps,\n BlogEntitySectionComponent,\n BlogEntityData,\n GeneralTextCompProps,\n GeneralTextSectionComponent,\n PersonalizedNarrativeCompProps,\n PersonalizedNarrativeSectionComponent,\n} from './component/types';\n\n// Section definition\nexport type {\n SectionDefinition,\n ParseContext,\n ContextualImageResult,\n DropSection,\n} from './component/section-definition';\nexport { DROP_SECTION } from './component/section-definition';\n\n// Diagnostic types\nexport { DIAGNOSTIC_TYPES } from './component/diagnosticTypes';\nexport type { DiagnosticType } from './component/diagnosticTypes';\n\n// Image search filters\nexport {\n buildImageSearchFilter,\n type ImageSearchFilterString,\n} from './image/imageSearchFilterTypes';\nexport {\n ImageSearchFilterToken,\n backgroundFilter,\n} from './image/imageSearchFilters';\nexport type {\n ContextualImageAsset,\n ImageSourceInput,\n ResolvedImageSource,\n ResolvedImageSourceKind,\n} from './image/contextualImageTypes';\n\n// Section definition classes + createSdkRegistry\nexport {\n HeroSectionDefinition,\n HeroEntitySectionDefinition,\n KpiSectionDefinition,\n FeatureCardsSectionDefinition,\n EntitySectionDefinition,\n EntityCollectionSectionDefinition,\n ComparisonSectionDefinition,\n TextBlockSectionDefinition,\n CtaBannerSectionDefinition,\n CalloutSectionDefinition,\n NextStepsSectionDefinition,\n FeatureSection9PlusDefinition,\n ListItemsSectionDefinition,\n SkipNodesSectionDefinition,\n HtmlCommentSectionDefinition,\n SearchSectionDefinition,\n ErrorSectionDefinition,\n FallbackSectionDefinition,\n createSdkRegistry,\n} from './component/componentDefinitions';\n\n// Registry\nexport { ComponentRegistry } from './registry';\nexport type {\n SlotOptions,\n SectionOptions,\n SectionRegistration,\n SlotNode,\n SlotIntentNode,\n SectionIntentNode,\n SectionNode,\n SlotVariant,\n SectionVariant,\n RegistryCatalog,\n ActionResult,\n ActionHandler,\n} from './registry';\n\n// Pattern validator\nexport {\n validatePattern,\n validatePatternSyntax,\n validatePatternWithBlocks,\n type PatternValidationResult,\n type BlockElement,\n type EnrichedBlockElement,\n type LinkMetadata,\n type LinkAttribute,\n} from './patternValidator';\n\n// Markdown blocks\nexport {\n convertToBlockElements,\n convertToBlockElementsWithMapping,\n type BlockElementsWithMapping,\n} from './markdownBlocks';\n\n// Link types, enum & guards\nexport {\n Web5UrlType,\n type Web5AskUrl,\n type Web5EntityUrl,\n type Web5ImageUrl,\n type Web5IconUrl,\n type Web5ActionUrl,\n type Web5SearchUrl,\n type Web5Url,\n type HttpsUrl,\n type HttpUrl,\n type MailtoUrl,\n type RelativeUrl,\n type NavigableUrl,\n type ValidLinkUrl,\n type AnyKnownUrl,\n type LegacyUrl,\n isWeb5AskUrl,\n isWeb5EntityUrl,\n isWeb5ImageUrl,\n isWeb5IconUrl,\n isWeb5ActionUrl,\n isWeb5SearchUrl,\n isWeb5Url,\n isNavigableUrl,\n isValidLinkUrl,\n isLegacyUrl,\n} from './types/link-types';\n\n// Entity/URL parsing\nexport {\n parseWeb5Url,\n isValidWeb5Url,\n validateLinkUrl,\n type Web5UrlParsed,\n type Web5AskParsed,\n type Web5EntityParsed,\n type Web5ImageParsed,\n type Web5IconParsed,\n type Web5ActionParsed,\n type Web5SearchParsed,\n isEntityLink,\n parseEntityLink,\n extractProtocol,\n extractLinkMetadata,\n} from './utils/entityLinkParser';\n\n// Web5 link validation\nexport {\n findInvalidWeb5Links,\n type InvalidWeb5Link,\n} from './utils/web5LinkValidator';\n\n// Node matchers\nexport { hasImage, isHtmlComment } from './utils/nodeMatchers';\n\n// Match API\nexport {\n matchMarkdown,\n type MarkdownMatchResult,\n matchAllSections,\n type MatchAllSectionsResult,\n nodesToParts,\n} from './match';\n\n// ---------------------------------------------------------------------------\n// DI Infrastructure (moved from @wix/w5-client-circana)\n// ---------------------------------------------------------------------------\n\n// DI context and provider\nexport {\n ComponentDependenciesProvider,\n useComponentDependencies,\n type ComponentDependenciesProviderProps,\n} from './context/ComponentDependenciesContext';\n\n// Raw user query for the current response page\nexport {\n UserQueryProvider,\n useUserQuery,\n type UserQueryProviderProps,\n} from './context/UserQueryContext';\n\n// Chips context (suggestion chips shared between SearchSection and error states)\nexport {\n ChipsProvider,\n useChips,\n type SuggestionChip,\n} from './context/ChipsContext';\n\n// DI types\nexport type {\n ComponentDependencies,\n Web5LinkApi,\n ConversationApi,\n SendMessageTrackingOptions,\n SendMessageOptions,\n ComparisonSubmitPayload,\n ComparisonSelectedProduct,\n ProductComparisonSelectionState,\n ProductComparisonApi,\n EntityTransforms,\n MarkdownUtils,\n ResolveGenericEntityDataOptions,\n} from './types/dependencies';\nexport type {\n ApiPayloadItem,\n EntityTypeConfig,\n EntityConfig,\n EntityExtractionContext,\n} from './types/entity';\nexport {\n defaultExtractor,\n enrichEntitiesFromPayload,\n fetchEntityListData,\n listEntityItems,\n LIST_ITEMS_ENDPOINT,\n getEntityExtractor,\n registerEntityExtractor,\n transformToSolutionEntityData,\n transformToBlogPostEntityData,\n transformToGenericEntityData,\n toMatchedOptions,\n formatMoney,\n readCurrencyCode,\n formatPriceField,\n formatProductPriceLabel,\n} from './entity';\nexport type {\n EntityExtractor,\n FetchEntityListDataOptions,\n ListEntityItemsOptions,\n MatchedOption,\n ProductPriceFields,\n} from './entity';\nexport { CALLOUT_KINDS, type CalloutKind, type Callout } from './types/callout';\n\n// Wrapper hooks\nexport { useWeb5Link } from './hooks/useWeb5Link';\nexport { useConversation } from './hooks/useConversation';\nexport { useDebugImageContext } from './hooks/useDebugImageContext';\nexport { useResolvedImageSources } from './hooks/useResolvedImageSources';\nexport { useResolveGenericEntityData } from './hooks/useResolveGenericEntityData';\nexport { useEntityTransforms } from './hooks/useEntityTransforms';\nexport { useMarkdownUtils } from './hooks/useMarkdownUtils';\nexport { useResolveShopifyEntityData } from './hooks/useResolveShopifyEntityData';\nexport { useResolveSearchSpringEntityData } from './hooks/useResolveSearchSpringEntityData';\n\n// SearchSpring\nexport {\n fetchProductsByHandles,\n fetchProductsByHandlesMap,\n transformSSProductToEntityItemData,\n} from './services/searchspring';\nexport type {\n SearchSpringConfig,\n SSProduct,\n SSSearchResponse,\n SSSizeData,\n} from './services/searchspring';\n\n// Shopify Storefront API\n// Cart actions\nexport { addToCart } from './services/cart';\n\nexport {\n ShopifyStorefrontClient,\n resolveShopifyConfig,\n resolveShopifyEntity,\n transformShopifyProduct,\n transformShopifyCollection,\n transformShopifyArticle,\n transformShopifyEntityToItemData,\n PRODUCT_BY_HANDLE_QUERY,\n COLLECTION_BY_HANDLE_QUERY,\n ARTICLE_BY_HANDLE_QUERY,\n} from './services/shopify';\nexport type {\n ShopifyStorefrontConfig,\n ShopifyProduct,\n ShopifyCollection,\n ShopifyArticle,\n ShopifyImage,\n ShopifyMoneyV2,\n} from './services/shopify';\n\n// Utilities\nexport { cn } from './lib/utils';\nexport { normalizeImageUrl, getResizedImageUrl } from './utils/image-utils';\nexport {\n analyzeBackdrop,\n computeContentBBox,\n buildProbeUrl,\n loadImagePixels,\n loadBackdropAnalysis,\n type BackdropAnalysis,\n type ContentBBox,\n type ImagePixels,\n} from './utils/imageBackdrop';\nexport { stripMarkdown } from './component/componentDefinitions/parse-utils';\n\n// Color utilities\nexport {\n type RGB,\n rgbToHsl,\n hslToRgb,\n ensureMinLightness,\n toRgb,\n deriveDarkColor,\n deriveDarkGradient,\n deriveLightColor,\n} from './color/colorUtils';\n\n// Analytics\nexport {\n pushEvent,\n pushPromptSubmit,\n pushLinkClick,\n pushError,\n pushExit,\n pushEntityFiltered,\n hasAnalyticsConsent,\n type EntityFilteredReason,\n} from './utils/analyticsEvents';\n\n// Error handling types and utilities\nexport {\n type ConversationErrorType,\n ERROR_MARKDOWN,\n getErrorTypeFromStatus,\n createErrorMarkdown,\n STREAMING_TIMEOUT_MS,\n type ErrorActionType,\n type ErrorIconType,\n type ErrorTemplateButton,\n type ErrorTemplate,\n type ErrorTemplateOverrides,\n DEFAULT_ERROR_TEMPLATES,\n resolveErrorTemplate,\n} from './errors';\n\n// Navigation utilities\nexport {\n getForwardStack,\n setForwardStack,\n clearForwardStack,\n pushToForwardStack,\n popFromForwardStack,\n} from './utils/navigationStack';\n\n// UI components\nexport {\n UserQuery,\n type UserQueryProps,\n type ProductBackContext,\n} from './components/ui/UserQuery';\nexport {\n PRODUCT_BACK_SESSION_KEY,\n writeProductBackHandoff,\n readProductBackHandoff,\n type ProductBackHandoff,\n} from './utils/productBackHandoff';\nexport {\n PromptEntryEmptyState,\n type PromptEntryEmptyStateProps,\n} from './components/ui/PromptEntryEmptyState';\nexport {\n SearchSection,\n type SearchSectionProps,\n type SearchSectionHandle,\n type ScrollChip,\n} from './components/ui/SearchSection';\nexport {\n FeedbackBar,\n type FeedbackBarProps,\n type FeedbackCategoryOption,\n type FeedbackSentiment,\n type FeedbackSubmitInput,\n} from './components/ui/FeedbackBar';\nexport {\n Disclaimer,\n type DisclaimerProps,\n} from './components/ui/Disclaimer';\nexport {\n BottomContainer,\n type BottomContainerProps,\n} from './components/ui/BottomContainer';\nexport { MarkdownText } from './components/ui/MarkdownText';\nexport {\n CalloutBlock,\n type CalloutBlockProps,\n} from './components/ui/CalloutBlock';\nexport {\n OptimizedImage,\n type OptimizedImageProps,\n} from './components/ui/OptimizedImage';\nexport {\n SectionSkeleton,\n type SectionSkeletonProps,\n} from './components/ui/SectionSkeleton';\nexport { SmartIcon, type SmartIconProps } from './components/ui/SmartIcon';\nexport { Loader, type LoaderProps } from './components/ui/Loader';\nexport {\n PlacementLoader,\n type PlacementLoaderProps,\n} from './components/ui/PlacementLoader';\nexport {\n UnifiedLink,\n detectLinkType,\n type UnifiedLinkProps,\n LinkType,\n type LinkVariant,\n} from './components/ui/UnifiedLink';\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from './components/ui/table';\n\n// Placement (DL #088, DL #102 behavior declarations)\nexport type {\n PlacementBehaviorConfig,\n PlacementConfig,\n PlacementPrompts,\n} from './types/placement';\n\n// Cross-bundle user-query broadcast event (DL #097 D2)\nexport {\n WEB5_USER_QUERY_EVENT,\n type Web5UserQueryEventDetail,\n type Web5UserQueryEvent,\n} from './types/userQueryEvent';\n\n// Cross-bundle answer-updated broadcast event (B2B-4121)\nexport {\n WEB5_ANSWER_UPDATED_EVENT,\n type Web5AnswerUpdatedEventDetail,\n type Web5AnswerUpdatedEvent,\n} from './types/answerUpdatedEvent';\n\n// Cross-bundle redirect broadcast event (DL #098 D3)\nexport {\n WEB5_REDIRECT_EVENT,\n type Web5RedirectEventDetail,\n type Web5RedirectEvent,\n type Web5RedirectReason,\n} from './types/redirectEvent';\n// `placementFilter` was removed — hero/next-steps exclusion is the prompt's job\n// and placement-specific designs belong as `{ placement: true }` registry\n// variants (resolved automatically via `resolveSection(type, { placement: true })`).\n\n// Client bundle loader (DL #088 D3.3)\nexport { loadClientBundle } from './client/loadClientBundle';\n\n// `?clientBundleUrl=` dev override — shared by `web50-server-ui` and\n// `embed-placement` so the trusted-host gate can't drift between them.\nexport {\n getClientBundleOverride,\n isTrustedBundleHost,\n} from './client/clientBundleOverride';\n\n// Client-UMD URL resolution (DL #094 per-msid, DL #129 per-template) and the\n// universal bundle←backend config merge (DL #129 Q3/Q7) — shared by\n// `web50-server-ui` and `embed-placement`, the two client-bundle load sites.\nexport {\n TEMPLATES_CDN_BASE,\n TEMPLATES_MANIFEST_URL,\n getTemplateOverride,\n isTemplatePickerRequested,\n isValidTemplateId,\n resolveClientBundleUrl,\n} from './client/clientBundleUrl';\nexport { mergeClientConfig, type DeepPartial } from './client/mergeClientConfig';\nexport {\n applyThemeOverrides,\n THEME_OVERRIDE_TOKENS,\n type ThemeOverrideKey,\n type ThemeOverrides,\n} from './client/applyThemeOverrides';\nexport {\n THEME_TOKEN_CONTRACT,\n BRAND_TOKENS,\n EDITABLE_TOKENS,\n TOKEN_NAME_PATTERN,\n bucketOf,\n hostAliasFor,\n type TokenBucket,\n type TokenContractEntry,\n type TokenType,\n} from './theme/tokenContract';\nexport {\n isThemeDebugEnabled,\n THEME_DEBUG_KEY,\n THEME_DEBUG_QUERY_PARAM,\n type AppliedToken,\n type ThemeOverrideSource,\n} from './client/themeDebug';\nexport {\n hexToHslTriplet,\n hslTripletToHex,\n isHslTriplet,\n} from './theme/colorFormat';\n\n// Placement renderer + DI helper (DL #088 D3.2, D3.4)\nexport {\n PlacementResponseRenderer,\n PlacementSmoothHeight,\n type PlacementResponseRendererProps,\n type PlacementSection,\n type PlacementVariant,\n} from './components/placement/PlacementResponseRenderer';\nexport {\n buildPlacementDependencies,\n type BuildPlacementDependenciesOptions,\n} from './components/placement/buildPlacementDependencies';\nexport {\n PlacementPayloadProvider,\n usePlacementPayload,\n type PlacementPayloadContextValue,\n} from './components/placement/PlacementPayloadContext';\n\n// Markdown parsing utilities — lifted from web50-server-ui (DL #088 B9.1)\nexport {\n UnifiedMarkdownParser,\n parseMarkdownToAst,\n parseAstToMarkdown,\n} from './utils/unifiedMarkdownParser';\nexport {\n escapeWeb5Links,\n fixMalformedLinks,\n trimTrailingWhitespace,\n normalizeIconUrls,\n decodeLinkText,\n preprocessMarkdown,\n type PreprocessorDiagnostic,\n type PreprocessResult,\n} from './utils/markdownPreprocessor';\nexport {\n ComponentTracking,\n type ComponentNodeRange,\n} from './utils/componentTracking';\nexport {\n findKeywordsInContent,\n getContextualImageFilename,\n} from './utils/contentKeywordMatcher';\nexport {\n extractIntentFromMarkdown,\n getIntentFromMarkdown,\n type IntentInfo,\n type IntentExtractionOptions,\n type ResponseState,\n} from './utils/intentExtractor';\nexport type { PageSection } from './types/page-section';\nexport {\n createPageSection,\n generateSectionId,\n generateId,\n findImageInNode,\n findImageInChildren,\n type Product,\n type ComparisonProduct,\n type ProductComparisonSectionProps,\n} from './utils/propsExtractor';\nexport {\n DiagnosticsCollector,\n type DiagnosticEntry,\n} from './utils/diagnosticsCollector';\nexport {\n REFRESH_PROMPTS_UNTIL_KEY,\n REFRESH_PROMPTS_WINDOW_MS,\n getRefreshPromptsExpiry,\n shouldRefreshPrompts,\n enableRefreshPrompts,\n disableRefreshPrompts,\n} from './utils/refreshPrompts';\nexport {\n type BackendEnvironment,\n BACKEND_ENVIRONMENT_KEY,\n BACKEND_ENVIRONMENT_QUERY_PARAM,\n DEFAULT_BACKEND_ENVIRONMENT,\n getBackendEnvironment,\n setBackendEnvironment,\n usesStagingBackend,\n} from './utils/backendEnvironment';\nexport { isSimulationTraffic } from './utils/simulation';\nexport {\n MATCH_DEBUG_KEY,\n MATCH_DEBUG_QUERY_PARAM,\n isMatchDebugEnabled,\n setMatchDebug,\n resetMatchDebugCache,\n logMatchDebug,\n} from './utils/matchDebug';\nexport { createWixAuthFetch } from './client/wixAuthFetch';\nexport {\n getOrCreateSessionId,\n getSessionId,\n getChatId,\n startNewChatId,\n setChatId,\n resetChatIdForTests,\n} from './utils/sessionManager';\n\n// Component parser orchestrator — lifted from web50-server-ui (DL #088 B9.5)\nexport {\n parseMarkdownToComponents,\n tryParseComponent,\n mergeSectionsWithStableReferences,\n type ParseMarkdownOptions,\n type ParseMarkdownResult,\n type ComponentMatch,\n type ParserContext,\n} from './component/componentParser';\nexport type {\n ParserClientConfig,\n EnrichEntityProps,\n} from './component/parser-types';\n\n// Host-mount scope contract — shared by web50-server-ui (which stamps the\n// class and mounts), embed-placement (which mounts the same bundle elsewhere),\n// and the client CDN build (which compiles every selector against it).\nexport {\n WEB5_ROOT_ID,\n WEB5_ROOT_CLASS,\n WEB5_SCOPES,\n WEB5_SCOPE,\n WEB5_GLOBAL_TOKENS,\n type HostFitConfig,\n} from './hostScope';\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/entity.ts"],"sourcesContent":["export interface ApiPayloadItem {\n url: string;\n features: { feature: string; value: string }[];\n img?: string;\n id: string;\n title: string;\n type: string;\n update_ts?: string;\n publishDate?: string;\n published_at?: string;\n cms_item_id?: string;\n usage?: number;\n author?: string;\n authorName?: string;\n description?: string;\n excerpt?: string;\n labels?: string[];\n tags?: string[];\n categories?: string[];\n}\n\nexport interface EntityTypeConfig {\n payloadType: string;\n urlMatchProperty: string;\n urlMatchPattern?: 'endsWith' | 'contains' | 'equals';\n imageBaseUrl?: string;\n}\n\nexport interface EntityConfig {\n enabled: boolean;\n entityTypes: Record<string, EntityTypeConfig>;\n}\n\nexport interface EntityExtractionContext {\n payload?: ApiPayloadItem[];\n entityConfig?: EntityConfig;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["../../../src/types/entity.ts"],"sourcesContent":["export interface ApiPayloadItem {\n url: string;\n features: { feature: string; value: string }[];\n img?: string;\n id: string;\n title: string;\n type: string;\n update_ts?: string;\n publishDate?: string;\n published_at?: string;\n cms_item_id?: string;\n usage?: number;\n author?: string;\n authorName?: string;\n description?: string;\n excerpt?: string;\n labels?: string[];\n tags?: string[];\n categories?: string[];\n /**\n * When retrieval resolved this document down to one of its children, the\n * child's own `{ name: value }` pairs. The keys are whatever the store\n * defines — read the map by iterating it, never by name.\n */\n options?: Record<string, string | number>;\n /** Price of the matched child. Raw number, or an already-formatted string. */\n price?: number | string;\n /** Lowest price across the whole document's children. */\n priceMin?: number | string;\n /** Highest price across the whole document's children. */\n priceMax?: number | string;\n /** ISO-4217 code the numeric price fields are denominated in. */\n currency?: string;\n /** Alias some feeds emit instead of `currency`. */\n priceCurrency?: string;\n}\n\nexport interface EntityTypeConfig {\n payloadType: string;\n urlMatchProperty: string;\n urlMatchPattern?: 'endsWith' | 'contains' | 'equals';\n imageBaseUrl?: string;\n}\n\nexport interface EntityConfig {\n enabled: boolean;\n entityTypes: Record<string, EntityTypeConfig>;\n}\n\nexport interface EntityExtractionContext {\n payload?: ApiPayloadItem[];\n entityConfig?: EntityConfig;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/component/types.ts"],"sourcesContent":["import type { FC } from 'react';\nimport type { Callout } from '../types/callout';\n\n/** Props extracted from markdown (base layer). */\nexport interface BaseCompProps {}\nexport interface SlotCompProps extends BaseCompProps {\n callout?: Callout;\n}\n\nexport interface SectionCompProps extends BaseCompProps {\n callout?: Callout;\n}\n\n/** Section props with a slot. TSlot enforces which slot component this section accepts. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface SectionCompPropsWithSlot<TSlot extends FC<any> = FC<any>>\n extends SectionCompProps {\n slot?: TSlot;\n}\n\n// ----------------------\n// Base Components\n// ----------------------\n\nexport interface TextCompProps extends BaseCompProps {\n content: string;\n variant?: 'h1' | 'h2' | 'body' | 'caption';\n}\n\nexport interface ButtonCompProps extends BaseCompProps {\n label: string;\n variant?: 'primary' | 'secondary' | 'ghost';\n onClick?: string;\n}\n\nexport interface ImageCompProps extends BaseCompProps {\n src: string;\n alt: string;\n ratio?: '16:9' | '4:3' | '1:1' | '9:16' | '3:4';\n}\n\nexport interface BadgeCompProps extends BaseCompProps {\n label: string;\n color?: 'primary' | 'secondary' | 'success' | 'warning' | 'error';\n}\n\n// ----------------------\n// Hero Button (aligned to HeroSection1Button)\n// ----------------------\n\nexport interface HeroButton {\n id: string;\n text: string;\n variant?: 'primary' | 'secondary';\n onClick?: string;\n}\n\n// ----------------------\n// Slot Components\n// ----------------------\n\nexport interface KpiItemCompProps extends SlotCompProps {\n title: string;\n description: string;\n icon?: string;\n}\n\n/** Feature item — aligned to web50-server-ui Feature interface */\nexport interface FeatureItemCompProps extends SlotCompProps {\n title?: string;\n description?: string;\n icon?: string;\n}\n\n/** Feature card — aligned to web50-server-ui FeatureCard */\nexport interface FeatureCardCompProps extends SlotCompProps {\n title: string;\n description: string;\n imageUrl?: string;\n imageFromText?: boolean;\n linkText?: string;\n linkHref?: string;\n callout?: Callout;\n}\n\n/** Resolved entity data (populated at runtime via useResolveGenericEntityData) */\nexport interface EntityItemData {\n url: string;\n title: string;\n type: string;\n description?: string;\n excerpt?: string;\n imageUrl?: string;\n date?: string;\n publishDate?: string;\n author?: string;\n cmsItemId?: string;\n usage?: number;\n tags?: string[];\n /** Product vendor / brand name (e.g. \"HOKA\") */\n vendor?: string;\n /** Formatted price string (e.g. \"542.00 NIS\") */\n price?: string;\n /** Secondary product image URL — shown on hover */\n secondaryImageUrl?: string;\n /** Available sizes for the product */\n sizes?: string[];\n /** Original price before discount (formatted, e.g. \"494.00 NIS\") — shown with strikethrough */\n compareAtPrice?: string;\n /** Discount percentage (e.g. \"30% OFF\") */\n discountPercent?: string;\n /** Product variants with IDs and availability — used for add-to-cart and size display */\n variants?: {\n label: string;\n variantId: string;\n available: boolean;\n selectedOptions?: { name: string; value: string }[];\n price?: string;\n compareAtPrice?: string;\n }[];\n /** All product image URLs (not just featured + secondary) */\n allImages?: string[];\n /** Product option groups (e.g. Size, Color) with their available values */\n options?: { name: string; values: string[] }[];\n}\n\n/** Single entity item within an entity section */\nexport interface EntityItem {\n entityId: string;\n linkText?: string;\n entityType: string;\n entityUrl: string;\n description?: string;\n imageUrl?: string;\n /** Per-item callout from a blockquote inside the list item */\n callout?: Callout;\n /** Resolved at runtime via useResolveGenericEntityData hook; not produced by parse() */\n data?: EntityItemData;\n}\n\n// ---------------------------------------------------------------------------\n// Deprecated aliases — kept for seed-components compilation\n// ---------------------------------------------------------------------------\n/** @deprecated Use EntityItemData */\nexport type GenericEntityData = EntityItemData;\n/** @deprecated Use EntityItemData */\nexport type SolutionEntityData = EntityItemData;\n/** @deprecated Use EntityItemData */\nexport type BlogEntityData = EntityItemData;\n/** @deprecated Use EntityItem */\nexport type GenericEntityCompProps = EntityItem;\n\n/** Comparison row — aligned to web50-server-ui ComparisonRow */\nexport interface ComparisonRow {\n feature: string;\n iconHint?: string;\n values: (boolean | string)[];\n}\n\nexport interface ComparisonColumn {\n label: string;\n href?: string;\n entityId?: string;\n entityType?: string;\n}\n\n/** @deprecated Use Callout from types/callout instead */\nexport interface AiNarrativeCompProps extends SlotCompProps {\n content: string;\n}\n\n// ----------------------\n// Section Components\n// ----------------------\n\n/** Hero — aligned to HeroSection1Props */\nexport interface HeroCompProps extends SectionCompProps {\n headline: string;\n badge?: string | { text: string; showIndicator?: boolean };\n content?: string;\n buttons?: HeroButton[];\n image?: string;\n trailingList?: string;\n leadingQuote?: string;\n}\n\n/**\n * Entity hero — a hero section whose body carries one or more web5 entity\n * links (`web5://entity/...`). Shares the hero framing fields with\n * {@link HeroCompProps} but, instead of CTA buttons, surfaces the entities as\n * resolvable {@link EntityItem}s for rich rendering.\n */\nexport interface HeroEntityCompProps extends SectionCompProps {\n headline: string;\n badge?: string | { text: string; showIndicator?: boolean };\n content?: string;\n image?: string;\n leadingQuote?: string;\n items: EntityItem[];\n}\n\n/** KPI — aligned to KpiSectionProps */\nexport interface KpiCompProps\n extends SectionCompPropsWithSlot<KpiItemComponent> {\n title: string;\n items: KpiItemCompProps[];\n}\n\n/** Feature cards — aligned to FeatureCardsSectionProps */\nexport interface FeatureCardsCompProps extends SectionCompProps {\n cards: FeatureCardCompProps[];\n}\n\n/** Unified entity section — replaces EntityCompProps, SolutionEntityCompProps, BlogEntityCompProps */\nexport interface EntityCompProps extends SectionCompProps {\n title: string;\n description?: string;\n items: EntityItem[];\n}\n\n/** Comparison — aligned to ComparisonSection1Props */\nexport interface ComparisonCompProps extends SectionCompProps {\n title: string;\n description?: string;\n columnLabels: string[];\n columns?: ComparisonColumn[];\n rows: ComparisonRow[];\n featureColumnLabel?: string;\n ctaText?: string;\n ctaHref?: string;\n}\n\n/** General text — aligned to GeneralTextSectionProps (used by Fallback) */\nexport interface GeneralTextCompProps extends SectionCompProps {\n markdown: string;\n}\n\n/** Callout — aligned to CalloutSectionProps */\nexport interface CalloutCompProps extends SectionCompProps {\n callouts: Callout[];\n title?: string;\n relatedLinks?: { text: string; url: string }[];\n}\n\n/** Next steps — aligned to NextStepsSectionProps */\nexport interface NextStepsCompProps extends SectionCompProps {\n title: string;\n body?: string;\n /**\n * True when the chips are already rendered inline inside `body`. Renderers\n * must show `body` alone in that case — listing `steps` as well repeats every\n * chip. `steps` stays populated either way; it is the machine-readable chip\n * list (the scroll chips under the answer are built from it).\n */\n chipsInlineInBody?: boolean;\n backgroundImage?: string;\n steps: { content: string; iconHint?: string }[];\n}\n\n/** Feature section 9+ — aligned to FeatureSection9PlusProps */\nexport interface FeatureSection9PlusCompProps extends SectionCompProps {\n title: string;\n description?: string;\n features: { title?: string; description: string; iconHint?: string }[];\n}\n\n/** List items section — title + a list of feature items. */\nexport interface ListItemsSectionCompProps extends SectionCompProps {\n title: string;\n features: { title?: string; description: string }[];\n}\n\nexport type ListItemsSectionComponent = FC<ListItemsSectionCompProps>;\n\n/** Error — aligned to ErrorSection */\nexport interface ErrorCompProps extends SectionCompProps {\n type: import('../errors/conversationErrorTypes').ConversationErrorType;\n}\n\n/** Skip/HTML/Search — null-component parsers */\nexport interface NullCompProps extends SectionCompProps {}\n\n/** @deprecated Use EntityCompProps */\nexport type SolutionEntityCompProps = EntityCompProps;\n/** @deprecated Use EntityCompProps */\nexport type BlogEntityCompProps = EntityCompProps;\n\n/** CTA Banner — dark purple gradient card with headline, description, and pill link buttons */\nexport interface CtaBannerCompProps extends SectionCompProps {\n headline: string;\n description?: string;\n links: { text: string; href: string }[];\n /** Contextual background image — resolved from allowed keywords during parse() */\n imageUrl?: string;\n imageFromText?: boolean;\n}\n\nexport type CtaBannerSectionComponent = FC<CtaBannerCompProps>;\n\n/** Text block — heading + body with an optional pullquote callout on the side */\nexport interface TextBlockCompProps extends SectionCompProps {\n title: string;\n description: string;\n}\n\n/** Personalized narrative — standalone section with no parse() definition */\nexport interface PersonalizedNarrativeCompProps extends SectionCompProps {\n title: string;\n content?: string;\n}\n\n// --------------------------------\n// Types of component - all components\n// --------------------------------\n\nexport type Component = BaseComponent | SlotComponent | SectionComponent;\n\nexport type BaseComponent = FC<BaseCompProps>;\nexport type SlotComponent = FC<SlotCompProps>;\nexport type SectionComponent = FC<SectionCompProps>;\n\n// Base Components\nexport type TextComponent = FC<TextCompProps>;\nexport type ButtonComponent = FC<ButtonCompProps>;\nexport type ImageComponent = FC<ImageCompProps>;\nexport type BadgeComponent = FC<BadgeCompProps>;\n\n// Slot Components\nexport type KpiItemComponent = FC<KpiItemCompProps>;\nexport type FeatureItemComponent = FC<FeatureItemCompProps>;\nexport type FeatureCardComponent = FC<FeatureCardCompProps>;\n/** @deprecated Use FC<EntityItem> */\nexport type GenericEntityComponent = FC<EntityItem>;\nexport type AiNarrativeComponent = FC<AiNarrativeCompProps>;\n\n// Section Components\nexport type ComparisonSectionComponent = FC<ComparisonCompProps>;\nexport type GeneralTextSectionComponent = FC<GeneralTextCompProps>;\nexport type TextBlockSectionComponent = FC<TextBlockCompProps>;\nexport type HeroSectionComponent = FC<HeroCompProps>;\nexport type HeroEntitySectionComponent = FC<HeroEntityCompProps>;\n\n// section components with slots\nexport type KpiSectionComponent = FC<KpiCompProps>;\nexport type FeatureCardsSectionComponent = FC<FeatureCardsCompProps>;\nexport type EntitySectionComponent = FC<EntityCompProps>;\n\n// New section component types for Phase 4\nexport type CalloutSectionComponent = FC<CalloutCompProps>;\nexport type NextStepsSectionComponent = FC<NextStepsCompProps>;\nexport type FeatureSection9PlusSectionComponent =\n FC<FeatureSection9PlusCompProps>;\nexport type NullSectionComponent = FC<NullCompProps>;\nexport type ErrorSectionComponent = FC<ErrorCompProps>;\nexport type SolutionEntitySectionComponent = FC<SolutionEntityCompProps>;\nexport type BlogEntitySectionComponent = FC<BlogEntityCompProps>;\nexport type PersonalizedNarrativeSectionComponent =\n FC<PersonalizedNarrativeCompProps>;\n\nexport type PropsOf<T> = T extends (props: infer P) => unknown ? P : never;\n\nexport interface SectionFixture<TProps> {\n markdown: string;\n expected: Partial<TProps>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["../../../src/component/types.ts"],"sourcesContent":["import type { FC } from 'react';\nimport type { Callout } from '../types/callout';\n\n/** Props extracted from markdown (base layer). */\nexport interface BaseCompProps {}\nexport interface SlotCompProps extends BaseCompProps {\n callout?: Callout;\n}\n\nexport interface SectionCompProps extends BaseCompProps {\n callout?: Callout;\n}\n\n/** Section props with a slot. TSlot enforces which slot component this section accepts. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface SectionCompPropsWithSlot<TSlot extends FC<any> = FC<any>>\n extends SectionCompProps {\n slot?: TSlot;\n}\n\n// ----------------------\n// Base Components\n// ----------------------\n\nexport interface TextCompProps extends BaseCompProps {\n content: string;\n variant?: 'h1' | 'h2' | 'body' | 'caption';\n}\n\nexport interface ButtonCompProps extends BaseCompProps {\n label: string;\n variant?: 'primary' | 'secondary' | 'ghost';\n onClick?: string;\n}\n\nexport interface ImageCompProps extends BaseCompProps {\n src: string;\n alt: string;\n ratio?: '16:9' | '4:3' | '1:1' | '9:16' | '3:4';\n}\n\nexport interface BadgeCompProps extends BaseCompProps {\n label: string;\n color?: 'primary' | 'secondary' | 'success' | 'warning' | 'error';\n}\n\n// ----------------------\n// Hero Button (aligned to HeroSection1Button)\n// ----------------------\n\nexport interface HeroButton {\n id: string;\n text: string;\n variant?: 'primary' | 'secondary';\n onClick?: string;\n}\n\n// ----------------------\n// Slot Components\n// ----------------------\n\nexport interface KpiItemCompProps extends SlotCompProps {\n title: string;\n description: string;\n icon?: string;\n}\n\n/** Feature item — aligned to web50-server-ui Feature interface */\nexport interface FeatureItemCompProps extends SlotCompProps {\n title?: string;\n description?: string;\n icon?: string;\n}\n\n/** Feature card — aligned to web50-server-ui FeatureCard */\nexport interface FeatureCardCompProps extends SlotCompProps {\n title: string;\n description: string;\n imageUrl?: string;\n imageFromText?: boolean;\n linkText?: string;\n linkHref?: string;\n callout?: Callout;\n}\n\n/** Resolved entity data (populated at runtime via useResolveGenericEntityData) */\nexport interface EntityItemData {\n url: string;\n title: string;\n type: string;\n description?: string;\n excerpt?: string;\n imageUrl?: string;\n date?: string;\n publishDate?: string;\n author?: string;\n cmsItemId?: string;\n usage?: number;\n tags?: string[];\n /** Product vendor / brand name (e.g. \"HOKA\") */\n vendor?: string;\n /**\n * The `{ name, value }` pairs of the one variant a search matched, in the\n * store's own order. Present only when retrieval resolved the product down\n * to a single variant. The names are the store's own, so read this by\n * iterating it — never by looking a name up.\n */\n matchedOptions?: { name: string; value: string }[];\n /** Formatted lowest price across the product's variants (e.g. \"$107.95\") */\n priceMin?: string;\n /** Formatted highest price across the product's variants */\n priceMax?: string;\n /** Formatted price string (e.g. \"542.00 NIS\") */\n price?: string;\n /** Secondary product image URL — shown on hover */\n secondaryImageUrl?: string;\n /** Available sizes for the product */\n sizes?: string[];\n /** Original price before discount (formatted, e.g. \"494.00 NIS\") — shown with strikethrough */\n compareAtPrice?: string;\n /** Discount percentage (e.g. \"30% OFF\") */\n discountPercent?: string;\n /** Product variants with IDs and availability — used for add-to-cart and size display */\n variants?: {\n label: string;\n variantId: string;\n available: boolean;\n selectedOptions?: { name: string; value: string }[];\n price?: string;\n compareAtPrice?: string;\n }[];\n /** All product image URLs (not just featured + secondary) */\n allImages?: string[];\n /** Product option groups (e.g. Size, Color) with their available values */\n options?: { name: string; values: string[] }[];\n}\n\n/** Single entity item within an entity section */\nexport interface EntityItem {\n entityId: string;\n linkText?: string;\n entityType: string;\n entityUrl: string;\n description?: string;\n imageUrl?: string;\n /** Per-item callout from a blockquote inside the list item */\n callout?: Callout;\n /** Resolved at runtime via useResolveGenericEntityData hook; not produced by parse() */\n data?: EntityItemData;\n}\n\n// ---------------------------------------------------------------------------\n// Deprecated aliases — kept for seed-components compilation\n// ---------------------------------------------------------------------------\n/** @deprecated Use EntityItemData */\nexport type GenericEntityData = EntityItemData;\n/** @deprecated Use EntityItemData */\nexport type SolutionEntityData = EntityItemData;\n/** @deprecated Use EntityItemData */\nexport type BlogEntityData = EntityItemData;\n/** @deprecated Use EntityItem */\nexport type GenericEntityCompProps = EntityItem;\n\n/** Comparison row — aligned to web50-server-ui ComparisonRow */\nexport interface ComparisonRow {\n feature: string;\n iconHint?: string;\n values: (boolean | string)[];\n}\n\nexport interface ComparisonColumn {\n label: string;\n href?: string;\n entityId?: string;\n entityType?: string;\n}\n\n/** @deprecated Use Callout from types/callout instead */\nexport interface AiNarrativeCompProps extends SlotCompProps {\n content: string;\n}\n\n// ----------------------\n// Section Components\n// ----------------------\n\n/** Hero — aligned to HeroSection1Props */\nexport interface HeroCompProps extends SectionCompProps {\n headline: string;\n badge?: string | { text: string; showIndicator?: boolean };\n content?: string;\n buttons?: HeroButton[];\n image?: string;\n trailingList?: string;\n leadingQuote?: string;\n}\n\n/**\n * Entity hero — a hero section whose body carries one or more web5 entity\n * links (`web5://entity/...`). Shares the hero framing fields with\n * {@link HeroCompProps} but, instead of CTA buttons, surfaces the entities as\n * resolvable {@link EntityItem}s for rich rendering.\n */\nexport interface HeroEntityCompProps extends SectionCompProps {\n headline: string;\n badge?: string | { text: string; showIndicator?: boolean };\n content?: string;\n image?: string;\n leadingQuote?: string;\n items: EntityItem[];\n}\n\n/** KPI — aligned to KpiSectionProps */\nexport interface KpiCompProps\n extends SectionCompPropsWithSlot<KpiItemComponent> {\n title: string;\n items: KpiItemCompProps[];\n}\n\n/** Feature cards — aligned to FeatureCardsSectionProps */\nexport interface FeatureCardsCompProps extends SectionCompProps {\n cards: FeatureCardCompProps[];\n}\n\n/** Unified entity section — replaces EntityCompProps, SolutionEntityCompProps, BlogEntityCompProps */\nexport interface EntityCompProps extends SectionCompProps {\n title: string;\n description?: string;\n items: EntityItem[];\n}\n\n/** Comparison — aligned to ComparisonSection1Props */\nexport interface ComparisonCompProps extends SectionCompProps {\n title: string;\n description?: string;\n columnLabels: string[];\n columns?: ComparisonColumn[];\n rows: ComparisonRow[];\n featureColumnLabel?: string;\n ctaText?: string;\n ctaHref?: string;\n}\n\n/** General text — aligned to GeneralTextSectionProps (used by Fallback) */\nexport interface GeneralTextCompProps extends SectionCompProps {\n markdown: string;\n}\n\n/** Callout — aligned to CalloutSectionProps */\nexport interface CalloutCompProps extends SectionCompProps {\n callouts: Callout[];\n title?: string;\n relatedLinks?: { text: string; url: string }[];\n}\n\n/** Next steps — aligned to NextStepsSectionProps */\nexport interface NextStepsCompProps extends SectionCompProps {\n title: string;\n body?: string;\n /**\n * True when the chips are already rendered inline inside `body`. Renderers\n * must show `body` alone in that case — listing `steps` as well repeats every\n * chip. `steps` stays populated either way; it is the machine-readable chip\n * list (the scroll chips under the answer are built from it).\n */\n chipsInlineInBody?: boolean;\n backgroundImage?: string;\n steps: { content: string; iconHint?: string }[];\n}\n\n/** Feature section 9+ — aligned to FeatureSection9PlusProps */\nexport interface FeatureSection9PlusCompProps extends SectionCompProps {\n title: string;\n description?: string;\n features: { title?: string; description: string; iconHint?: string }[];\n}\n\n/** List items section — title + a list of feature items. */\nexport interface ListItemsSectionCompProps extends SectionCompProps {\n title: string;\n features: { title?: string; description: string }[];\n}\n\nexport type ListItemsSectionComponent = FC<ListItemsSectionCompProps>;\n\n/** Error — aligned to ErrorSection */\nexport interface ErrorCompProps extends SectionCompProps {\n type: import('../errors/conversationErrorTypes').ConversationErrorType;\n}\n\n/** Skip/HTML/Search — null-component parsers */\nexport interface NullCompProps extends SectionCompProps {}\n\n/** @deprecated Use EntityCompProps */\nexport type SolutionEntityCompProps = EntityCompProps;\n/** @deprecated Use EntityCompProps */\nexport type BlogEntityCompProps = EntityCompProps;\n\n/** CTA Banner — dark purple gradient card with headline, description, and pill link buttons */\nexport interface CtaBannerCompProps extends SectionCompProps {\n headline: string;\n description?: string;\n links: { text: string; href: string }[];\n /** Contextual background image — resolved from allowed keywords during parse() */\n imageUrl?: string;\n imageFromText?: boolean;\n}\n\nexport type CtaBannerSectionComponent = FC<CtaBannerCompProps>;\n\n/** Text block — heading + body with an optional pullquote callout on the side */\nexport interface TextBlockCompProps extends SectionCompProps {\n title: string;\n description: string;\n}\n\n/** Personalized narrative — standalone section with no parse() definition */\nexport interface PersonalizedNarrativeCompProps extends SectionCompProps {\n title: string;\n content?: string;\n}\n\n// --------------------------------\n// Types of component - all components\n// --------------------------------\n\nexport type Component = BaseComponent | SlotComponent | SectionComponent;\n\nexport type BaseComponent = FC<BaseCompProps>;\nexport type SlotComponent = FC<SlotCompProps>;\nexport type SectionComponent = FC<SectionCompProps>;\n\n// Base Components\nexport type TextComponent = FC<TextCompProps>;\nexport type ButtonComponent = FC<ButtonCompProps>;\nexport type ImageComponent = FC<ImageCompProps>;\nexport type BadgeComponent = FC<BadgeCompProps>;\n\n// Slot Components\nexport type KpiItemComponent = FC<KpiItemCompProps>;\nexport type FeatureItemComponent = FC<FeatureItemCompProps>;\nexport type FeatureCardComponent = FC<FeatureCardCompProps>;\n/** @deprecated Use FC<EntityItem> */\nexport type GenericEntityComponent = FC<EntityItem>;\nexport type AiNarrativeComponent = FC<AiNarrativeCompProps>;\n\n// Section Components\nexport type ComparisonSectionComponent = FC<ComparisonCompProps>;\nexport type GeneralTextSectionComponent = FC<GeneralTextCompProps>;\nexport type TextBlockSectionComponent = FC<TextBlockCompProps>;\nexport type HeroSectionComponent = FC<HeroCompProps>;\nexport type HeroEntitySectionComponent = FC<HeroEntityCompProps>;\n\n// section components with slots\nexport type KpiSectionComponent = FC<KpiCompProps>;\nexport type FeatureCardsSectionComponent = FC<FeatureCardsCompProps>;\nexport type EntitySectionComponent = FC<EntityCompProps>;\n\n// New section component types for Phase 4\nexport type CalloutSectionComponent = FC<CalloutCompProps>;\nexport type NextStepsSectionComponent = FC<NextStepsCompProps>;\nexport type FeatureSection9PlusSectionComponent =\n FC<FeatureSection9PlusCompProps>;\nexport type NullSectionComponent = FC<NullCompProps>;\nexport type ErrorSectionComponent = FC<ErrorCompProps>;\nexport type SolutionEntitySectionComponent = FC<SolutionEntityCompProps>;\nexport type BlogEntitySectionComponent = FC<BlogEntityCompProps>;\nexport type PersonalizedNarrativeSectionComponent =\n FC<PersonalizedNarrativeCompProps>;\n\nexport type PropsOf<T> = T extends (props: infer P) => unknown ? P : never;\n\nexport interface SectionFixture<TProps> {\n markdown: string;\n expected: Partial<TProps>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  import { Web5UrlType, isWeb5EntityUrl } from '../types/link-types.js';
2
2
  import { parseWeb5Url } from '../utils/entityLinkParser.js';
3
+ import { formatPriceField, readCurrencyCode, toMatchedOptions } from './matchedVariant.js';
3
4
 
4
5
  /**
5
6
  * Extract entity type and ID from a web5://entity/ URL.
@@ -91,6 +92,12 @@ export function transformToGenericEntityData(payloadItem, config) {
91
92
  const imgAlreadyAbsolute = payloadItem.img.startsWith('http');
92
93
  imageUrl = config.imageBaseUrl && !imgAlreadyAbsolute ? `${config.imageBaseUrl}${payloadItem.img}` : payloadItem.img;
93
94
  }
95
+
96
+ // A document that retrieval narrowed to one child arrives with that child's
97
+ // presentation fields already overlaid (`url`, `img`, `price`) plus the pairs
98
+ // that identify it and the span its parent covers. The overlay is done
99
+ // server-side; all that is left here is to shape those two for display.
100
+ const currency = readCurrencyCode(payloadItem.currency, payloadItem.priceCurrency);
94
101
  return {
95
102
  url: payloadItem.url,
96
103
  title: payloadItem.title,
@@ -98,6 +105,10 @@ export function transformToGenericEntityData(payloadItem, config) {
98
105
  description: payloadItem.description,
99
106
  excerpt: payloadItem.excerpt,
100
107
  imageUrl,
108
+ matchedOptions: toMatchedOptions(payloadItem.options),
109
+ price: formatPriceField(payloadItem.price, currency),
110
+ priceMin: formatPriceField(payloadItem.priceMin, currency),
111
+ priceMax: formatPriceField(payloadItem.priceMax, currency),
101
112
  date: payloadItem.update_ts ? formatEntityDate(payloadItem.update_ts) : undefined,
102
113
  publishDate: publishTimestamp ? formatEntityDate(publishTimestamp) : undefined,
103
114
  author: payloadItem.author || payloadItem.authorName,
@@ -1 +1 @@
1
- {"version":3,"names":["Web5UrlType","isWeb5EntityUrl","parseWeb5Url","extractEntityIdFromUrl","entityUrl","trimmedUrl","trim","parsed","type","ENTITY","entityType","entityId","matchesUrl","payloadItem","config","id","urlValue","urlMatchProperty","pattern","urlMatchPattern","endsWith","includes","findEntityInPayload","payload","entityConfig","typeConfig","entityTypes","matchedItem","find","item","transformToSolutionEntityData","transformToGenericEntityData","formatEntityDate","timestamp","_parts$find","_parts$find2","_parts$find3","date","Date","isNaN","getTime","undefined","formatter","Intl","DateTimeFormat","day","month","timeZone","year","parts","formatToParts","part","value","transformToBlogPostEntityData","_payloadItem$labels","_payloadItem$tags","imageUrl","publishTimestamp","publishDate","published_at","img","imgAlreadyAbsolute","startsWith","imageBaseUrl","url","title","description","excerpt","update_ts","author","authorName","cmsItemId","cms_item_id","usage","tags","labels","length","defaultExtractor"],"sources":["../../../src/entity/defaultExtractor.ts"],"sourcesContent":["import type { SolutionEntityData, BlogEntityData, EntityItemData } from '../component/types';\nimport type {\n ApiPayloadItem,\n EntityConfig,\n EntityTypeConfig,\n} from '../types/entity';\nimport type { EntityExtractor } from './types';\nimport { Web5UrlType, isWeb5EntityUrl } from '../types/link-types';\nimport { parseWeb5Url } from '../utils/entityLinkParser';\n\n/**\n * Extract entity type and ID from a web5://entity/ URL.\n * Delegates to the central `parseWeb5Url` parser.\n */\nfunction extractEntityIdFromUrl(\n entityUrl: string,\n): { entityType: string; entityId: string } | null {\n const trimmedUrl = entityUrl?.trim();\n if (!trimmedUrl || !isWeb5EntityUrl(trimmedUrl)) {\n return null;\n }\n const parsed = parseWeb5Url(trimmedUrl);\n if (parsed?.type !== Web5UrlType.ENTITY || !parsed.entityType || !parsed.entityId) {\n return null;\n }\n return { entityType: parsed.entityType, entityId: parsed.entityId };\n}\n\nfunction matchesUrl(\n payloadItem: ApiPayloadItem,\n entityId: string,\n config: EntityTypeConfig,\n): boolean {\n // Entities resolve by `entityId` (the `<id>` in `web5://entity/<type>/<id>`).\n // Accept a direct `id` match, then fall back to the configured url strategy.\n if (payloadItem.id === entityId) {\n return true;\n }\n\n const urlValue = payloadItem[config.urlMatchProperty as keyof ApiPayloadItem];\n\n if (typeof urlValue !== 'string') {\n return false;\n }\n\n const pattern = config.urlMatchPattern || 'endsWith';\n\n switch (pattern) {\n case 'endsWith':\n return urlValue.endsWith(`/${entityId}`);\n case 'contains':\n return urlValue.includes(entityId);\n case 'equals':\n return urlValue === entityId;\n default:\n return urlValue.endsWith(`/${entityId}`);\n }\n}\n\nfunction findEntityInPayload(\n entityType: string,\n entityId: string,\n payload: ApiPayloadItem[],\n entityConfig: EntityConfig,\n): ApiPayloadItem | null {\n const typeConfig = entityConfig.entityTypes[entityType];\n\n if (!typeConfig) {\n return null;\n }\n\n // Resolution keys off `entityId` (not the type): find the payload item whose\n // id/url matches, using the type's configured url strategy.\n const matchedItem = payload.find((item) =>\n matchesUrl(item, entityId, typeConfig),\n );\n\n return matchedItem || null;\n}\n\n/** @deprecated Use transformToGenericEntityData */\nexport function transformToSolutionEntityData(\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n): SolutionEntityData {\n return transformToGenericEntityData(payloadItem, config);\n}\n\nfunction formatEntityDate(timestamp: string): string | undefined {\n const date = new Date(timestamp);\n if (isNaN(date.getTime())) {\n return undefined;\n }\n const formatter = new Intl.DateTimeFormat('en-US', {\n day: 'numeric',\n month: 'short',\n timeZone: 'Europe/Kiev',\n year: 'numeric',\n });\n const parts = formatter.formatToParts(date);\n const day = parts.find((part) => part.type === 'day')?.value;\n const month = parts.find((part) => part.type === 'month')?.value;\n const year = parts.find((part) => part.type === 'year')?.value;\n\n if (!day || !month || !year) {\n return undefined;\n }\n\n return `${day} ${month} ${year}`;\n}\n\n/** @deprecated Use transformToGenericEntityData */\nexport function transformToBlogPostEntityData(\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n): BlogEntityData {\n return transformToGenericEntityData(payloadItem, config);\n}\n\nexport function transformToGenericEntityData(\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n): EntityItemData {\n let imageUrl: string | undefined;\n const publishTimestamp = payloadItem.publishDate || payloadItem.published_at;\n\n if (payloadItem.img) {\n const imgAlreadyAbsolute = payloadItem.img.startsWith('http');\n imageUrl = config.imageBaseUrl && !imgAlreadyAbsolute\n ? `${config.imageBaseUrl}${payloadItem.img}`\n : payloadItem.img;\n }\n\n return {\n url: payloadItem.url,\n title: payloadItem.title,\n type: payloadItem.type,\n description: payloadItem.description,\n excerpt: payloadItem.excerpt,\n imageUrl,\n date: payloadItem.update_ts\n ? formatEntityDate(payloadItem.update_ts)\n : undefined,\n publishDate: publishTimestamp\n ? formatEntityDate(publishTimestamp)\n : undefined,\n author: payloadItem.author || payloadItem.authorName,\n cmsItemId: payloadItem.cms_item_id,\n usage: payloadItem.usage,\n tags: payloadItem.labels?.length\n ? payloadItem.labels\n : payloadItem.tags?.length\n ? payloadItem.tags\n : undefined,\n };\n}\n\n/**\n * Default entity extractor - config-driven extraction for any client.\n * Uses entityConfig from client JSON to resolve web5://entity/ URLs against API payload.\n */\nexport const defaultExtractor: EntityExtractor = {\n extractEntityIdFromUrl,\n findEntityInPayload,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Web5UrlType","isWeb5EntityUrl","parseWeb5Url","formatPriceField","readCurrencyCode","toMatchedOptions","extractEntityIdFromUrl","entityUrl","trimmedUrl","trim","parsed","type","ENTITY","entityType","entityId","matchesUrl","payloadItem","config","id","urlValue","urlMatchProperty","pattern","urlMatchPattern","endsWith","includes","findEntityInPayload","payload","entityConfig","typeConfig","entityTypes","matchedItem","find","item","transformToSolutionEntityData","transformToGenericEntityData","formatEntityDate","timestamp","_parts$find","_parts$find2","_parts$find3","date","Date","isNaN","getTime","undefined","formatter","Intl","DateTimeFormat","day","month","timeZone","year","parts","formatToParts","part","value","transformToBlogPostEntityData","_payloadItem$labels","_payloadItem$tags","imageUrl","publishTimestamp","publishDate","published_at","img","imgAlreadyAbsolute","startsWith","imageBaseUrl","currency","priceCurrency","url","title","description","excerpt","matchedOptions","options","price","priceMin","priceMax","update_ts","author","authorName","cmsItemId","cms_item_id","usage","tags","labels","length","defaultExtractor"],"sources":["../../../src/entity/defaultExtractor.ts"],"sourcesContent":["import type { SolutionEntityData, BlogEntityData, EntityItemData } from '../component/types';\nimport type {\n ApiPayloadItem,\n EntityConfig,\n EntityTypeConfig,\n} from '../types/entity';\nimport type { EntityExtractor } from './types';\nimport { Web5UrlType, isWeb5EntityUrl } from '../types/link-types';\nimport { parseWeb5Url } from '../utils/entityLinkParser';\nimport {\n formatPriceField,\n readCurrencyCode,\n toMatchedOptions,\n} from './matchedVariant';\n\n/**\n * Extract entity type and ID from a web5://entity/ URL.\n * Delegates to the central `parseWeb5Url` parser.\n */\nfunction extractEntityIdFromUrl(\n entityUrl: string,\n): { entityType: string; entityId: string } | null {\n const trimmedUrl = entityUrl?.trim();\n if (!trimmedUrl || !isWeb5EntityUrl(trimmedUrl)) {\n return null;\n }\n const parsed = parseWeb5Url(trimmedUrl);\n if (parsed?.type !== Web5UrlType.ENTITY || !parsed.entityType || !parsed.entityId) {\n return null;\n }\n return { entityType: parsed.entityType, entityId: parsed.entityId };\n}\n\nfunction matchesUrl(\n payloadItem: ApiPayloadItem,\n entityId: string,\n config: EntityTypeConfig,\n): boolean {\n // Entities resolve by `entityId` (the `<id>` in `web5://entity/<type>/<id>`).\n // Accept a direct `id` match, then fall back to the configured url strategy.\n if (payloadItem.id === entityId) {\n return true;\n }\n\n const urlValue = payloadItem[config.urlMatchProperty as keyof ApiPayloadItem];\n\n if (typeof urlValue !== 'string') {\n return false;\n }\n\n const pattern = config.urlMatchPattern || 'endsWith';\n\n switch (pattern) {\n case 'endsWith':\n return urlValue.endsWith(`/${entityId}`);\n case 'contains':\n return urlValue.includes(entityId);\n case 'equals':\n return urlValue === entityId;\n default:\n return urlValue.endsWith(`/${entityId}`);\n }\n}\n\nfunction findEntityInPayload(\n entityType: string,\n entityId: string,\n payload: ApiPayloadItem[],\n entityConfig: EntityConfig,\n): ApiPayloadItem | null {\n const typeConfig = entityConfig.entityTypes[entityType];\n\n if (!typeConfig) {\n return null;\n }\n\n // Resolution keys off `entityId` (not the type): find the payload item whose\n // id/url matches, using the type's configured url strategy.\n const matchedItem = payload.find((item) =>\n matchesUrl(item, entityId, typeConfig),\n );\n\n return matchedItem || null;\n}\n\n/** @deprecated Use transformToGenericEntityData */\nexport function transformToSolutionEntityData(\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n): SolutionEntityData {\n return transformToGenericEntityData(payloadItem, config);\n}\n\nfunction formatEntityDate(timestamp: string): string | undefined {\n const date = new Date(timestamp);\n if (isNaN(date.getTime())) {\n return undefined;\n }\n const formatter = new Intl.DateTimeFormat('en-US', {\n day: 'numeric',\n month: 'short',\n timeZone: 'Europe/Kiev',\n year: 'numeric',\n });\n const parts = formatter.formatToParts(date);\n const day = parts.find((part) => part.type === 'day')?.value;\n const month = parts.find((part) => part.type === 'month')?.value;\n const year = parts.find((part) => part.type === 'year')?.value;\n\n if (!day || !month || !year) {\n return undefined;\n }\n\n return `${day} ${month} ${year}`;\n}\n\n/** @deprecated Use transformToGenericEntityData */\nexport function transformToBlogPostEntityData(\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n): BlogEntityData {\n return transformToGenericEntityData(payloadItem, config);\n}\n\nexport function transformToGenericEntityData(\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n): EntityItemData {\n let imageUrl: string | undefined;\n const publishTimestamp = payloadItem.publishDate || payloadItem.published_at;\n\n if (payloadItem.img) {\n const imgAlreadyAbsolute = payloadItem.img.startsWith('http');\n imageUrl = config.imageBaseUrl && !imgAlreadyAbsolute\n ? `${config.imageBaseUrl}${payloadItem.img}`\n : payloadItem.img;\n }\n\n // A document that retrieval narrowed to one child arrives with that child's\n // presentation fields already overlaid (`url`, `img`, `price`) plus the pairs\n // that identify it and the span its parent covers. The overlay is done\n // server-side; all that is left here is to shape those two for display.\n const currency = readCurrencyCode(\n payloadItem.currency,\n payloadItem.priceCurrency,\n );\n\n return {\n url: payloadItem.url,\n title: payloadItem.title,\n type: payloadItem.type,\n description: payloadItem.description,\n excerpt: payloadItem.excerpt,\n imageUrl,\n matchedOptions: toMatchedOptions(payloadItem.options),\n price: formatPriceField(payloadItem.price, currency),\n priceMin: formatPriceField(payloadItem.priceMin, currency),\n priceMax: formatPriceField(payloadItem.priceMax, currency),\n date: payloadItem.update_ts\n ? formatEntityDate(payloadItem.update_ts)\n : undefined,\n publishDate: publishTimestamp\n ? formatEntityDate(publishTimestamp)\n : undefined,\n author: payloadItem.author || payloadItem.authorName,\n cmsItemId: payloadItem.cms_item_id,\n usage: payloadItem.usage,\n tags: payloadItem.labels?.length\n ? payloadItem.labels\n : payloadItem.tags?.length\n ? payloadItem.tags\n : undefined,\n };\n}\n\n/**\n * Default entity extractor - config-driven extraction for any client.\n * Uses entityConfig from client JSON to resolve web5://entity/ URLs against API payload.\n */\nexport const defaultExtractor: EntityExtractor = {\n extractEntityIdFromUrl,\n findEntityInPayload,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  import { defaultExtractor } from './defaultExtractor.js';
2
2
  export { defaultExtractor, transformToSolutionEntityData, transformToBlogPostEntityData, transformToGenericEntityData } from './defaultExtractor.js';
3
3
  export { enrichEntitiesFromPayload } from './enrichEntitiesFromPayload.js';
4
+ export { toMatchedOptions, formatMoney, readCurrencyCode, formatPriceField, formatProductPriceLabel } from './matchedVariant.js';
4
5
  export { fetchEntityListData } from './fetchEntityListData.js';
5
6
  export { listEntityItems, LIST_ITEMS_ENDPOINT } from './listEntityItems.js';
6
7
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["defaultExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","enrichEntitiesFromPayload","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","extractorRegistry","getEntityExtractor","clientId","registerEntityExtractor","extractor"],"sources":["../../../src/entity/index.ts"],"sourcesContent":["import type { EntityExtractor } from './types';\nimport { defaultExtractor } from './defaultExtractor';\n\nexport {\n defaultExtractor,\n transformToSolutionEntityData,\n transformToBlogPostEntityData,\n transformToGenericEntityData,\n} from './defaultExtractor';\n\nexport { enrichEntitiesFromPayload } from './enrichEntitiesFromPayload';\nexport {\n fetchEntityListData,\n type FetchEntityListDataOptions,\n} from './fetchEntityListData';\nexport {\n listEntityItems,\n LIST_ITEMS_ENDPOINT,\n type ListEntityItemsOptions,\n} from './listEntityItems';\n\nexport type { EntityExtractor } from './types';\n\n/**\n * Registry of client-specific entity extractors.\n * Only needed if a client requires custom extraction logic beyond the config-driven default.\n */\nconst extractorRegistry: Record<string, EntityExtractor> = {};\n\n/**\n * Get the entity extractor for a specific client.\n * The default extractor is config-driven and works for any client with entityConfig.\n */\nexport function getEntityExtractor(clientId?: string): EntityExtractor {\n if (clientId && extractorRegistry[clientId]) {\n return extractorRegistry[clientId];\n }\n return defaultExtractor;\n}\n\n/**\n * Register a custom entity extractor for a client\n * Useful for runtime registration or testing\n */\nexport function registerEntityExtractor(\n clientId: string,\n extractor: EntityExtractor,\n): void {\n extractorRegistry[clientId] = extractor;\n}\n"],"mappings":"AACA,SAASA,gBAAgB,QAAQ,oBAAoB;AAErD,SACEA,gBAAgB,EAChBC,6BAA6B,EAC7BC,6BAA6B,EAC7BC,4BAA4B,QACvB,oBAAoB;AAE3B,SAASC,yBAAyB,QAAQ,6BAA6B;AACvE,SACEC,mBAAmB,QAEd,uBAAuB;AAC9B,SACEC,eAAe,EACfC,mBAAmB,QAEd,mBAAmB;AAI1B;AACA;AACA;AACA;AACA,MAAMC,iBAAkD,GAAG,CAAC,CAAC;;AAE7D;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAACC,QAAiB,EAAmB;EACrE,IAAIA,QAAQ,IAAIF,iBAAiB,CAACE,QAAQ,CAAC,EAAE;IAC3C,OAAOF,iBAAiB,CAACE,QAAQ,CAAC;EACpC;EACA,OAAOV,gBAAgB;AACzB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASW,uBAAuBA,CACrCD,QAAgB,EAChBE,SAA0B,EACpB;EACNJ,iBAAiB,CAACE,QAAQ,CAAC,GAAGE,SAAS;AACzC","ignoreList":[]}
1
+ {"version":3,"names":["defaultExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","enrichEntitiesFromPayload","toMatchedOptions","formatMoney","readCurrencyCode","formatPriceField","formatProductPriceLabel","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","extractorRegistry","getEntityExtractor","clientId","registerEntityExtractor","extractor"],"sources":["../../../src/entity/index.ts"],"sourcesContent":["import type { EntityExtractor } from './types';\nimport { defaultExtractor } from './defaultExtractor';\n\nexport {\n defaultExtractor,\n transformToSolutionEntityData,\n transformToBlogPostEntityData,\n transformToGenericEntityData,\n} from './defaultExtractor';\n\nexport { enrichEntitiesFromPayload } from './enrichEntitiesFromPayload';\nexport {\n toMatchedOptions,\n formatMoney,\n readCurrencyCode,\n formatPriceField,\n formatProductPriceLabel,\n type MatchedOption,\n type ProductPriceFields,\n} from './matchedVariant';\nexport {\n fetchEntityListData,\n type FetchEntityListDataOptions,\n} from './fetchEntityListData';\nexport {\n listEntityItems,\n LIST_ITEMS_ENDPOINT,\n type ListEntityItemsOptions,\n} from './listEntityItems';\n\nexport type { EntityExtractor } from './types';\n\n/**\n * Registry of client-specific entity extractors.\n * Only needed if a client requires custom extraction logic beyond the config-driven default.\n */\nconst extractorRegistry: Record<string, EntityExtractor> = {};\n\n/**\n * Get the entity extractor for a specific client.\n * The default extractor is config-driven and works for any client with entityConfig.\n */\nexport function getEntityExtractor(clientId?: string): EntityExtractor {\n if (clientId && extractorRegistry[clientId]) {\n return extractorRegistry[clientId];\n }\n return defaultExtractor;\n}\n\n/**\n * Register a custom entity extractor for a client\n * Useful for runtime registration or testing\n */\nexport function registerEntityExtractor(\n clientId: string,\n extractor: EntityExtractor,\n): void {\n extractorRegistry[clientId] = extractor;\n}\n"],"mappings":"AACA,SAASA,gBAAgB,QAAQ,oBAAoB;AAErD,SACEA,gBAAgB,EAChBC,6BAA6B,EAC7BC,6BAA6B,EAC7BC,4BAA4B,QACvB,oBAAoB;AAE3B,SAASC,yBAAyB,QAAQ,6BAA6B;AACvE,SACEC,gBAAgB,EAChBC,WAAW,EACXC,gBAAgB,EAChBC,gBAAgB,EAChBC,uBAAuB,QAGlB,kBAAkB;AACzB,SACEC,mBAAmB,QAEd,uBAAuB;AAC9B,SACEC,eAAe,EACfC,mBAAmB,QAEd,mBAAmB;AAI1B;AACA;AACA;AACA;AACA,MAAMC,iBAAkD,GAAG,CAAC,CAAC;;AAE7D;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAACC,QAAiB,EAAmB;EACrE,IAAIA,QAAQ,IAAIF,iBAAiB,CAACE,QAAQ,CAAC,EAAE;IAC3C,OAAOF,iBAAiB,CAACE,QAAQ,CAAC;EACpC;EACA,OAAOf,gBAAgB;AACzB;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASgB,uBAAuBA,CACrCD,QAAgB,EAChBE,SAA0B,EACpB;EACNJ,iBAAiB,CAACE,QAAQ,CAAC,GAAGE,SAAS;AACzC","ignoreList":[]}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Presentation helpers for a document that retrieval resolved down to one
3
+ * child.
4
+ *
5
+ * When a query filters on an attribute that lives on the child rather than on
6
+ * the parent, retrieval overlays the matching child's presentation fields onto
7
+ * the parent document before it reaches us: `url`, `img` and `price` already
8
+ * describe the child, while `title`, `description` and `doc_id` stay the
9
+ * parent's. Two fields need shaping before a card can print them, and both
10
+ * live here:
11
+ *
12
+ * - `options` — the child's own `{ name: value }` pairs.
13
+ * - `priceMin` / `priceMax` — the parent's span, against which the child's
14
+ * single `price` has to be read.
15
+ *
16
+ * The overlay itself is done server-side and is deliberately NOT repeated
17
+ * here.
18
+ */
19
+
20
+ /** One `{ name: value }` pair, exactly as the store named it. */
21
+
22
+ function readText(value) {
23
+ if (typeof value === 'string') {
24
+ return value.trim();
25
+ }
26
+ if (typeof value === 'number' && Number.isFinite(value)) {
27
+ return String(value);
28
+ }
29
+ return '';
30
+ }
31
+
32
+ /**
33
+ * Turn a document's raw `options` map into an ordered list of pairs.
34
+ *
35
+ * Every entry the store put in the map is kept, under the store's own name and
36
+ * in the store's own order. Nothing here knows — or may learn — what any
37
+ * particular name means: one catalogue's pairs describe a garment, the next
38
+ * one's a power tool, and both have to come out identical. Entries with an
39
+ * empty name or an empty/non-printable value are dropped, since a card can do
40
+ * nothing with them.
41
+ *
42
+ * Returns `undefined` (not `[]`) when there is nothing to show, so callers can
43
+ * treat it like every other optional field on the entity.
44
+ */
45
+ export function toMatchedOptions(raw) {
46
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
47
+ return undefined;
48
+ }
49
+ const pairs = [];
50
+ for (const [rawName, rawValue] of Object.entries(raw)) {
51
+ const name = rawName.trim();
52
+ const value = readText(rawValue);
53
+ if (name && value) {
54
+ pairs.push({
55
+ name,
56
+ value
57
+ });
58
+ }
59
+ }
60
+ return pairs.length ? pairs : undefined;
61
+ }
62
+
63
+ /**
64
+ * Render one amount in the document's currency.
65
+ *
66
+ * With no currency code on the document the amount is printed bare: assuming
67
+ * "$" prints a false fact on every store that doesn't sell in dollars. Whole
68
+ * amounts stay whole ("107" not "107.00"); a real fractional amount keeps its
69
+ * minor units.
70
+ */
71
+ export function formatMoney(amount, currency) {
72
+ if (!currency) {
73
+ return String(amount);
74
+ }
75
+ try {
76
+ return new Intl.NumberFormat(undefined, {
77
+ style: 'currency',
78
+ currency,
79
+ minimumFractionDigits: Number.isInteger(amount) ? 0 : 2
80
+ }).format(amount);
81
+ } catch {
82
+ // A well-formed but unknown code: show it rather than dropping it.
83
+ return `${amount} ${currency}`;
84
+ }
85
+ }
86
+
87
+ /** Normalize a document currency to an ISO-4217 code, or drop it. */
88
+ export function readCurrencyCode() {
89
+ for (var _len = arguments.length, candidates = new Array(_len), _key = 0; _key < _len; _key++) {
90
+ candidates[_key] = arguments[_key];
91
+ }
92
+ for (const candidate of candidates) {
93
+ if (typeof candidate !== 'string') {
94
+ continue;
95
+ }
96
+ const code = candidate.trim().toUpperCase();
97
+ if (/^[A-Z]{3}$/.test(code)) {
98
+ return code;
99
+ }
100
+ }
101
+ return undefined;
102
+ }
103
+
104
+ /**
105
+ * Format one of a document's price fields for display. Numbers are rendered in
106
+ * the document's currency; an already-formatted string is passed through
107
+ * untouched; anything else yields `undefined`.
108
+ */
109
+ export function formatPriceField(value, currency) {
110
+ if (typeof value === 'number' && Number.isFinite(value)) {
111
+ return formatMoney(value, currency);
112
+ }
113
+ if (typeof value === 'string' && value.trim()) {
114
+ return value.trim();
115
+ }
116
+ return undefined;
117
+ }
118
+
119
+ /** The already-formatted price fields a card reads. */
120
+
121
+ /**
122
+ * What a product card should print as its price.
123
+ *
124
+ * `price` belongs to the single variant the search matched — the same variant
125
+ * the card's image and link point at. `priceMin`/`priceMax` describe the whole
126
+ * product. When those two differ the product has no one price, and printing
127
+ * the matched variant's number on its own would pass it off as the product's;
128
+ * printing it after "from" would be worse still, because "from" is a claim
129
+ * about the floor of the span and the matched variant is not always the
130
+ * cheapest one. So a span prints its own floor, prefixed.
131
+ *
132
+ * With no span — the two ends equal, or only one of them known — nothing
133
+ * changes: the matched variant's price is printed as it always was.
134
+ */
135
+ export function formatProductPriceLabel(fields) {
136
+ const {
137
+ price,
138
+ priceMin,
139
+ priceMax
140
+ } = fields;
141
+ if (priceMin && priceMax && priceMin !== priceMax) {
142
+ return `from ${priceMin}`;
143
+ }
144
+ return price;
145
+ }
146
+ //# sourceMappingURL=matchedVariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["readText","value","trim","Number","isFinite","String","toMatchedOptions","raw","Array","isArray","undefined","pairs","rawName","rawValue","Object","entries","name","push","length","formatMoney","amount","currency","Intl","NumberFormat","style","minimumFractionDigits","isInteger","format","readCurrencyCode","_len","arguments","candidates","_key","candidate","code","toUpperCase","test","formatPriceField","formatProductPriceLabel","fields","price","priceMin","priceMax"],"sources":["../../../src/entity/matchedVariant.ts"],"sourcesContent":["/**\n * Presentation helpers for a document that retrieval resolved down to one\n * child.\n *\n * When a query filters on an attribute that lives on the child rather than on\n * the parent, retrieval overlays the matching child's presentation fields onto\n * the parent document before it reaches us: `url`, `img` and `price` already\n * describe the child, while `title`, `description` and `doc_id` stay the\n * parent's. Two fields need shaping before a card can print them, and both\n * live here:\n *\n * - `options` — the child's own `{ name: value }` pairs.\n * - `priceMin` / `priceMax` — the parent's span, against which the child's\n * single `price` has to be read.\n *\n * The overlay itself is done server-side and is deliberately NOT repeated\n * here.\n */\n\n/** One `{ name: value }` pair, exactly as the store named it. */\nexport interface MatchedOption {\n name: string;\n value: string;\n}\n\nfunction readText(value: unknown): string {\n if (typeof value === 'string') {\n return value.trim();\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n return '';\n}\n\n/**\n * Turn a document's raw `options` map into an ordered list of pairs.\n *\n * Every entry the store put in the map is kept, under the store's own name and\n * in the store's own order. Nothing here knows — or may learn — what any\n * particular name means: one catalogue's pairs describe a garment, the next\n * one's a power tool, and both have to come out identical. Entries with an\n * empty name or an empty/non-printable value are dropped, since a card can do\n * nothing with them.\n *\n * Returns `undefined` (not `[]`) when there is nothing to show, so callers can\n * treat it like every other optional field on the entity.\n */\nexport function toMatchedOptions(raw: unknown): MatchedOption[] | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {\n return undefined;\n }\n\n const pairs: MatchedOption[] = [];\n for (const [rawName, rawValue] of Object.entries(\n raw as Record<string, unknown>,\n )) {\n const name = rawName.trim();\n const value = readText(rawValue);\n if (name && value) {\n pairs.push({ name, value });\n }\n }\n\n return pairs.length ? pairs : undefined;\n}\n\n/**\n * Render one amount in the document's currency.\n *\n * With no currency code on the document the amount is printed bare: assuming\n * \"$\" prints a false fact on every store that doesn't sell in dollars. Whole\n * amounts stay whole (\"107\" not \"107.00\"); a real fractional amount keeps its\n * minor units.\n */\nexport function formatMoney(amount: number, currency?: string): string {\n if (!currency) {\n return String(amount);\n }\n try {\n return new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency,\n minimumFractionDigits: Number.isInteger(amount) ? 0 : 2,\n }).format(amount);\n } catch {\n // A well-formed but unknown code: show it rather than dropping it.\n return `${amount} ${currency}`;\n }\n}\n\n/** Normalize a document currency to an ISO-4217 code, or drop it. */\nexport function readCurrencyCode(...candidates: unknown[]): string | undefined {\n for (const candidate of candidates) {\n if (typeof candidate !== 'string') {\n continue;\n }\n const code = candidate.trim().toUpperCase();\n if (/^[A-Z]{3}$/.test(code)) {\n return code;\n }\n }\n return undefined;\n}\n\n/**\n * Format one of a document's price fields for display. Numbers are rendered in\n * the document's currency; an already-formatted string is passed through\n * untouched; anything else yields `undefined`.\n */\nexport function formatPriceField(\n value: unknown,\n currency?: string,\n): string | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return formatMoney(value, currency);\n }\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n return undefined;\n}\n\n/** The already-formatted price fields a card reads. */\nexport interface ProductPriceFields {\n /** Price of the one variant this result matched. */\n price?: string;\n /** Lowest price across the whole product's variants. */\n priceMin?: string;\n /** Highest price across the whole product's variants. */\n priceMax?: string;\n}\n\n/**\n * What a product card should print as its price.\n *\n * `price` belongs to the single variant the search matched — the same variant\n * the card's image and link point at. `priceMin`/`priceMax` describe the whole\n * product. When those two differ the product has no one price, and printing\n * the matched variant's number on its own would pass it off as the product's;\n * printing it after \"from\" would be worse still, because \"from\" is a claim\n * about the floor of the span and the matched variant is not always the\n * cheapest one. So a span prints its own floor, prefixed.\n *\n * With no span — the two ends equal, or only one of them known — nothing\n * changes: the matched variant's price is printed as it always was.\n */\nexport function formatProductPriceLabel(\n fields: ProductPriceFields,\n): string | undefined {\n const { price, priceMin, priceMax } = fields;\n if (priceMin && priceMax && priceMin !== priceMax) {\n return `from ${priceMin}`;\n }\n return price;\n}\n"],"mappings":"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","ignoreList":[]}
package/dist/esm/index.js CHANGED
@@ -59,7 +59,7 @@ export { ChipsProvider, useChips } from './context/ChipsContext.js';
59
59
 
60
60
  // DI types
61
61
 
62
- export { defaultExtractor, enrichEntitiesFromPayload, fetchEntityListData, listEntityItems, LIST_ITEMS_ENDPOINT, getEntityExtractor, registerEntityExtractor, transformToSolutionEntityData, transformToBlogPostEntityData, transformToGenericEntityData } from './entity/index.js';
62
+ export { defaultExtractor, enrichEntitiesFromPayload, fetchEntityListData, listEntityItems, LIST_ITEMS_ENDPOINT, getEntityExtractor, registerEntityExtractor, transformToSolutionEntityData, transformToBlogPostEntityData, transformToGenericEntityData, toMatchedOptions, formatMoney, readCurrencyCode, formatPriceField, formatProductPriceLabel } from './entity/index.js';
63
63
  export { CALLOUT_KINDS } from './types/callout.js';
64
64
 
65
65
  // Wrapper hooks