@wix/web5-core 1.63.21 → 1.63.22

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","_imageSetTypes","MAX_IMAGE_SLOTS_PER_SET","DEFAULT_RENDER_WIDTH_PX","MAX_RENDER_WIDTH_PX","hasSlotImage","isSubjectMatch","backdropColorOf","renderRatioOf","_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","_ImageSetContext","ImageSetProvider","useImageSlot","useImageSetEnabled","_ChipsContext","ChipsProvider","useChips","_entity","defaultExtractor","enrichEntitiesFromPayload","normalizeEntityItem","entityPayloadFromItems","mergeEntityData","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","getEntityExtractor","registerEntityExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","toMatchedOptions","formatMoney","readCurrencyCode","formatPriceField","formatProductPriceLabel","isProductFamilyEntityType","_callout","CALLOUT_KINDS","CALLOUT_SEMANTICS","_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","_privacy","UNKNOWN_CONSENT","HOST_CONSENT_GLOBAL","transmit","mayTransmit","unlockOnUserAction","isUserEngaged","mayPersistIdentity","getConsentSnapshot","getGateView","subscribeToConsent","installConsentProvider","getInstalledProviderName","setConsentBufferLimit","getConsentGateStats","resetConsentGateForTests","detectConsentProvider","initConsentGate","CONSENT_OVERRIDE_KEY","CONSENT_OVERRIDE_QUERY_PARAM","getConsentOverride","setConsentOverride","createShopifyConsentProvider","isShopifyHost","createOneTrustConsentProvider","isOneTrustHost","createHostSuppliedConsentProvider","hasHostSuppliedConsent","publishHostConsent","_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","_answerSettledEvent","WEB5_ANSWER_SETTLED_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// Image sets — the page-level slot contract (ADR 0221)\nexport type {\n ImageBackground,\n ImageSlotKind,\n ImageMatchQuality,\n ImageCrop,\n ImageRect,\n ImagePalette,\n ImageStatGrid,\n ImageVisualMetadata,\n ImageSlot,\n ResolvedImageSlot,\n ResolveImageSetInput,\n ResolveImageSetResult,\n} from './image/imageSetTypes';\nexport {\n MAX_IMAGE_SLOTS_PER_SET,\n DEFAULT_RENDER_WIDTH_PX,\n MAX_RENDER_WIDTH_PX,\n hasSlotImage,\n isSubjectMatch,\n backdropColorOf,\n renderRatioOf,\n} from './image/imageSetTypes';\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// Page-level image slot collector\nexport {\n ImageSetProvider,\n useImageSlot,\n useImageSetEnabled,\n type ImageSetProviderProps,\n type ImageSlotState,\n} from './context/ImageSetContext';\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 normalizeEntityItem,\n entityPayloadFromItems,\n mergeEntityData,\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 isProductFamilyEntityType,\n} from './entity';\nexport type {\n EntityExtractor,\n FetchEntityListDataOptions,\n ListEntityItemsOptions,\n MatchedOption,\n ProductPriceFields,\n} from './entity';\nexport {\n CALLOUT_KINDS,\n CALLOUT_SEMANTICS,\n type CalloutKind,\n type CalloutSemantic,\n type Callout,\n} 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// Consent gate (DL #218)\nexport {\n type ConsentState,\n type ConsentPurpose,\n type GatedPurpose,\n type ConsentSnapshot,\n type ConsentProvider,\n type GateView,\n type HostConsentInput,\n UNKNOWN_CONSENT,\n HOST_CONSENT_GLOBAL,\n transmit,\n mayTransmit,\n unlockOnUserAction,\n isUserEngaged,\n mayPersistIdentity,\n getConsentSnapshot,\n getGateView,\n subscribeToConsent,\n installConsentProvider,\n getInstalledProviderName,\n setConsentBufferLimit,\n getConsentGateStats,\n resetConsentGateForTests,\n detectConsentProvider,\n initConsentGate,\n CONSENT_OVERRIDE_KEY,\n CONSENT_OVERRIDE_QUERY_PARAM,\n getConsentOverride,\n setConsentOverride,\n createShopifyConsentProvider,\n isShopifyHost,\n createOneTrustConsentProvider,\n isOneTrustHost,\n createHostSuppliedConsentProvider,\n hasHostSuppliedConsent,\n publishHostConsent,\n} from './privacy';\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 { Disclaimer, type DisclaimerProps } 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';\nexport {\n WEB5_ANSWER_SETTLED_EVENT,\n type Web5AnswerSettledStatus,\n type Web5AnswerSettledEventDetail,\n type Web5AnswerSettledEvent,\n} from './types/answerSettledEvent';\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 {\n mergeClientConfig,\n type DeepPartial,\n} 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","normalizeEntityItem","entityPayloadFromItems","mergeEntityData","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","getEntityExtractor","registerEntityExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","toMatchedOptions","formatMoney","readCurrencyCode","formatPriceField","formatProductPriceLabel","isProductFamilyEntityType","_callout","CALLOUT_KINDS","CALLOUT_SEMANTICS","_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","_privacy","UNKNOWN_CONSENT","HOST_CONSENT_GLOBAL","transmit","mayTransmit","unlockOnUserAction","isUserEngaged","mayPersistIdentity","getConsentSnapshot","getGateView","subscribeToConsent","installConsentProvider","getInstalledProviderName","setConsentBufferLimit","getConsentGateStats","resetConsentGateForTests","detectConsentProvider","initConsentGate","CONSENT_OVERRIDE_KEY","CONSENT_OVERRIDE_QUERY_PARAM","getConsentOverride","setConsentOverride","createShopifyConsentProvider","isShopifyHost","createOneTrustConsentProvider","isOneTrustHost","createHostSuppliedConsentProvider","hasHostSuppliedConsent","publishHostConsent","_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","_answerSettledEvent","WEB5_ANSWER_SETTLED_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 normalizeEntityItem,\n entityPayloadFromItems,\n mergeEntityData,\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 isProductFamilyEntityType,\n} from './entity';\nexport type {\n EntityExtractor,\n FetchEntityListDataOptions,\n ListEntityItemsOptions,\n MatchedOption,\n ProductPriceFields,\n} from './entity';\nexport {\n CALLOUT_KINDS,\n CALLOUT_SEMANTICS,\n type CalloutKind,\n type CalloutSemantic,\n type Callout,\n} 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// Consent gate (DL #218)\nexport {\n type ConsentState,\n type ConsentPurpose,\n type GatedPurpose,\n type ConsentSnapshot,\n type ConsentProvider,\n type GateView,\n type HostConsentInput,\n UNKNOWN_CONSENT,\n HOST_CONSENT_GLOBAL,\n transmit,\n mayTransmit,\n unlockOnUserAction,\n isUserEngaged,\n mayPersistIdentity,\n getConsentSnapshot,\n getGateView,\n subscribeToConsent,\n installConsentProvider,\n getInstalledProviderName,\n setConsentBufferLimit,\n getConsentGateStats,\n resetConsentGateForTests,\n detectConsentProvider,\n initConsentGate,\n CONSENT_OVERRIDE_KEY,\n CONSENT_OVERRIDE_QUERY_PARAM,\n getConsentOverride,\n setConsentOverride,\n createShopifyConsentProvider,\n isShopifyHost,\n createOneTrustConsentProvider,\n isOneTrustHost,\n createHostSuppliedConsentProvider,\n hasHostSuppliedConsent,\n publishHostConsent,\n} from './privacy';\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 { Disclaimer, type DisclaimerProps } 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';\nexport {\n WEB5_ANSWER_SETTLED_EVENT,\n type Web5AnswerSettledStatus,\n type Web5AnswerSettledEventDetail,\n type Web5AnswerSettledEvent,\n} from './types/answerSettledEvent';\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 {\n mergeClientConfig,\n type DeepPartial,\n} 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/dependencies.ts"],"sourcesContent":["import type React from 'react';\nimport type { ApiPayloadItem, EntityTypeConfig } from './entity';\nimport type {\n EntityItem,\n EntityItemData,\n SolutionEntityData,\n BlogEntityData,\n} from '../component/types';\nimport type { RGB } from '../color/colorUtils';\nimport type { DiagnosticType } from '../component/diagnosticTypes';\nimport type { ImageSearchFilterString } from '../image/imageSearchFilterTypes';\nimport type { ContextualImageAsset } from '../image/contextualImageTypes';\nimport type {\n ResolveImageSetInput,\n ResolveImageSetResult,\n} from '../image/imageSetTypes';\n\n/**\n * Return type of useWeb5Link hook.\n */\nexport interface Web5LinkApi {\n handleLinkClick: (\n e: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement>,\n url: string | undefined,\n ) => void;\n sendWeb5Message: (url: string) => void;\n navigateToUrl: (url: string) => void;\n transformUrl: (url: string) => string | null;\n resolveUrl: (url: string | undefined) => string | undefined;\n isExternalUrl: (url: string) => boolean;\n isActionRegistered: (name: string) => boolean;\n executeAction: (\n name: string,\n params: Record<string, string>,\n ) => Promise<void>;\n}\n\n/**\n * Optional tracking parameters for sendMessage.\n * When provided, analytics events are automatically dispatched.\n */\nexport interface SendMessageTrackingOptions {\n /** Button/link text — fires web5_link_click with type 'web5' */\n source?: string;\n /** Prompt type — fires web5_prompt_submit instead of link_click */\n promptType?: 'text' | 'chip';\n}\n\nexport interface ComparisonSubmitPayload {\n intent: 'comparison';\n entityIds: string[];\n userPrompt?: string;\n selectedItems?: ComparisonSelectedProduct[];\n}\n\nexport interface SendMessageOptions extends SendMessageTrackingOptions {\n structuredPayload?: ComparisonSubmitPayload;\n}\n\n/**\n * Return type of useConversation hook.\n */\nexport interface ConversationApi {\n sendMessage: (message: string, options?: SendMessageOptions) => Promise<void>;\n loadConversationByTriggerId: (triggerId: string) => Promise<void>;\n}\n\nexport interface ComparisonSelectedProduct {\n entityId: string;\n entityType: string;\n title: string;\n description?: string;\n imageUrl?: string;\n url?: string;\n vendor?: string;\n price?: string;\n compareAtPrice?: string;\n sizes?: string[];\n variants?: EntityItemData['variants'];\n options?: EntityItemData['options'];\n}\n\nexport interface ProductComparisonSelectionState {\n sectionId: string | null;\n entityIds: string[];\n itemsById: Record<string, ComparisonSelectedProduct>;\n maxSelectable: number;\n submitting: boolean;\n}\n\nexport interface ProductComparisonApi {\n state: ProductComparisonSelectionState;\n maxSelectable: number;\n enterComparisonMode: (input: {\n sectionId: string;\n maxSelectable?: number;\n }) => void;\n exitComparisonMode: (sectionId?: string) => void;\n toggleComparisonProduct: (input: {\n sectionId: string;\n item: EntityItem;\n }) => void;\n removeComparisonProduct: (entityId: string) => void;\n clearComparisonSelection: () => void;\n setComparisonSubmitting: (submitting: boolean) => void;\n}\n\n/**\n * Entity transform functions provided by the host app.\n */\nexport interface EntityTransforms {\n /** @deprecated Use transformToGenericEntityData */\n transformToSolutionEntityData: (\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n ) => SolutionEntityData;\n /** @deprecated Use transformToGenericEntityData */\n transformToBlogPostEntityData: (\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n ) => BlogEntityData;\n transformToGenericEntityData: (\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n ) => EntityItemData;\n}\n\n// SolutionEntityData, BlogEntityData, GenericEntityData are defined in component/types (single source of truth)\nexport type {\n GenericEntityData,\n SolutionEntityData,\n BlogEntityData,\n} from '../component/types';\n\n/**\n * Markdown utility functions provided by the host app.\n */\nexport interface MarkdownUtils {\n parseMarkdownToAst: (markdown: string) => any;\n extractLinks: (ast: any) => { url: string; text: string }[];\n extractText: (node: any) => string;\n}\n\n/**\n * Options for useResolveGenericEntityData hook.\n */\nexport interface ResolveGenericEntityDataOptions<TEntityData> {\n transform: (raw: ApiPayloadItem, config: EntityTypeConfig) => TEntityData;\n}\n\n/**\n * Contract for all dependencies that section components need from the host app.\n * The host app provides implementations via React context.\n *\n * Each field is a hook function reference — components call them to get the actual values.\n */\nexport interface ComponentDependencies {\n /** Hook returning Web5 link handling API */\n useWeb5Link: () => Web5LinkApi;\n\n /** Hook returning conversation API (sendMessage, loadConversationByTriggerId) */\n useConversation: () => ConversationApi;\n\n /** Hook returning product comparison selection API */\n useProductComparison?: () => ProductComparisonApi;\n\n /** Hook returning whether debug image mode is enabled */\n useDebugImageContext: () => boolean;\n\n /** Hook for resolving entity data (mixed entity types) */\n useResolveGenericEntityData: <\n TEntity extends {\n entityId: string;\n entityUrl: string;\n entityType: string;\n data?: TEntityData;\n },\n TEntityData,\n >(\n entities: TEntity[],\n options: ResolveGenericEntityDataOptions<TEntityData>,\n ) => { enrichedEntities: TEntity[]; loading: boolean };\n\n /** Entity transform functions */\n entityTransforms: EntityTransforms;\n\n /** Markdown utility functions */\n markdownUtils: MarkdownUtils;\n\n /** Image resolver for contextual images (image:// protocol) */\n resolveContextualImageUrl?: (\n client: any,\n imageKey: string,\n options?: {\n filter?: ImageSearchFilterString | null;\n },\n ) => Promise<string | null>;\n\n /** Rich contextual image resolver used by self-resolving image components */\n resolveContextualImageAsset?: (\n client: any,\n imageKey: string,\n options?: {\n filter?: ImageSearchFilterString | null;\n },\n ) => Promise<ContextualImageAsset | null>;\n\n /** Batch resolver for contextual image searches used by collage-style UIs */\n resolveContextualImageUrls?: (\n client: any,\n imageKey: string,\n options?: {\n count?: number;\n threshold?: number;\n filter?: ImageSearchFilterString | null;\n },\n ) => Promise<string[]>;\n\n /**\n * Resolves one page's image slots together (ADR 0221).\n *\n * The transport for `ResolveImageSet`. Optional: where it is absent,\n * `ImageSetProvider` reports every slot `unavailable` and sections keep their\n * existing `web5://image/` path, so this can be rolled out per host.\n *\n * The host owns the wire mapping — responses come back\n * `preserving_proto_field_name` — and owns reaching the endpoint at all,\n * which is not trivial: `ResolveImageSet` is INTERNAL, SITE tenancy, with\n * `uou` and `anonymous` NOT_ALLOWED, so an embed cannot call it directly the\n * way it calls `Images`.\n */\n resolveImageSet?: (\n input: ResolveImageSetInput,\n ) => Promise<ResolveImageSetResult>;\n\n /** App store client accessor (for OptimizedImage) */\n useAppClient?: () => any;\n\n /** Hook returning a ref to the scroll container element (for parallax effects) */\n useScrollContainerRef?: () => React.RefObject<HTMLElement | null>;\n\n /** Bulk icon resolution: hints → SVG URL map */\n resolveIcons?: (hints: string[]) => Promise<Record<string, string>>;\n\n /** Set the page-level mesh gradient palette colors */\n setMeshBackground?: (colors: RGB[]) => void;\n\n /** Get the current mesh gradient palette colors */\n getMeshBackground?: () => RGB[];\n\n /** Report a markdown diagnostic at render time (e.g. broken link, filtered card) */\n reportDiagnostic?: (\n diagnosticType: DiagnosticType,\n sectionType: string,\n details: string,\n ) => void;\n\n /** BI logger for contextual image events (event 914) */\n logContextualImage?: (params: {\n imageUrl: string;\n contextualTerm: string;\n imageEventType: string;\n isImageResolved: boolean;\n isFallbackImage: boolean;\n }) => void;\n\n /** Conversation context for BI tracking */\n useConversationContext?: () => {\n conversationId?: string;\n messageId?: string;\n sessionId?: string;\n };\n\n /** Fallback image URLs used when a contextual image search returns no results */\n fallbackImages?: string[];\n\n /** Client-provided loader component (replaces default CSS spinner) */\n LoaderComponent?: React.FC<{\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n message?: string;\n showMessage?: boolean;\n }>;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["../../../src/types/dependencies.ts"],"sourcesContent":["import type React from 'react';\nimport type { ApiPayloadItem, EntityTypeConfig } from './entity';\nimport type {\n EntityItem,\n EntityItemData,\n SolutionEntityData,\n BlogEntityData,\n} from '../component/types';\nimport type { RGB } from '../color/colorUtils';\nimport type { DiagnosticType } from '../component/diagnosticTypes';\nimport type { ImageSearchFilterString } from '../image/imageSearchFilterTypes';\nimport type { ContextualImageAsset } from '../image/contextualImageTypes';\n\n/**\n * Return type of useWeb5Link hook.\n */\nexport interface Web5LinkApi {\n handleLinkClick: (\n e: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement>,\n url: string | undefined,\n ) => void;\n sendWeb5Message: (url: string) => void;\n navigateToUrl: (url: string) => void;\n transformUrl: (url: string) => string | null;\n resolveUrl: (url: string | undefined) => string | undefined;\n isExternalUrl: (url: string) => boolean;\n isActionRegistered: (name: string) => boolean;\n executeAction: (\n name: string,\n params: Record<string, string>,\n ) => Promise<void>;\n}\n\n/**\n * Optional tracking parameters for sendMessage.\n * When provided, analytics events are automatically dispatched.\n */\nexport interface SendMessageTrackingOptions {\n /** Button/link text — fires web5_link_click with type 'web5' */\n source?: string;\n /** Prompt type — fires web5_prompt_submit instead of link_click */\n promptType?: 'text' | 'chip';\n}\n\nexport interface ComparisonSubmitPayload {\n intent: 'comparison';\n entityIds: string[];\n userPrompt?: string;\n selectedItems?: ComparisonSelectedProduct[];\n}\n\nexport interface SendMessageOptions extends SendMessageTrackingOptions {\n structuredPayload?: ComparisonSubmitPayload;\n}\n\n/**\n * Return type of useConversation hook.\n */\nexport interface ConversationApi {\n sendMessage: (\n message: string,\n options?: SendMessageOptions,\n ) => Promise<void>;\n loadConversationByTriggerId: (triggerId: string) => Promise<void>;\n}\n\nexport interface ComparisonSelectedProduct {\n entityId: string;\n entityType: string;\n title: string;\n description?: string;\n imageUrl?: string;\n url?: string;\n vendor?: string;\n price?: string;\n compareAtPrice?: string;\n sizes?: string[];\n variants?: EntityItemData['variants'];\n options?: EntityItemData['options'];\n}\n\nexport interface ProductComparisonSelectionState {\n sectionId: string | null;\n entityIds: string[];\n itemsById: Record<string, ComparisonSelectedProduct>;\n maxSelectable: number;\n submitting: boolean;\n}\n\nexport interface ProductComparisonApi {\n state: ProductComparisonSelectionState;\n maxSelectable: number;\n enterComparisonMode: (input: {\n sectionId: string;\n maxSelectable?: number;\n }) => void;\n exitComparisonMode: (sectionId?: string) => void;\n toggleComparisonProduct: (input: {\n sectionId: string;\n item: EntityItem;\n }) => void;\n removeComparisonProduct: (entityId: string) => void;\n clearComparisonSelection: () => void;\n setComparisonSubmitting: (submitting: boolean) => void;\n}\n\n/**\n * Entity transform functions provided by the host app.\n */\nexport interface EntityTransforms {\n /** @deprecated Use transformToGenericEntityData */\n transformToSolutionEntityData: (\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n ) => SolutionEntityData;\n /** @deprecated Use transformToGenericEntityData */\n transformToBlogPostEntityData: (\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n ) => BlogEntityData;\n transformToGenericEntityData: (\n payloadItem: ApiPayloadItem,\n config: EntityTypeConfig,\n ) => EntityItemData;\n}\n\n// SolutionEntityData, BlogEntityData, GenericEntityData are defined in component/types (single source of truth)\nexport type {\n GenericEntityData,\n SolutionEntityData,\n BlogEntityData,\n} from '../component/types';\n\n/**\n * Markdown utility functions provided by the host app.\n */\nexport interface MarkdownUtils {\n parseMarkdownToAst: (markdown: string) => any;\n extractLinks: (ast: any) => { url: string; text: string }[];\n extractText: (node: any) => string;\n}\n\n/**\n * Options for useResolveGenericEntityData hook.\n */\nexport interface ResolveGenericEntityDataOptions<TEntityData> {\n transform: (raw: ApiPayloadItem, config: EntityTypeConfig) => TEntityData;\n}\n\n/**\n * Contract for all dependencies that section components need from the host app.\n * The host app provides implementations via React context.\n *\n * Each field is a hook function reference — components call them to get the actual values.\n */\nexport interface ComponentDependencies {\n /** Hook returning Web5 link handling API */\n useWeb5Link: () => Web5LinkApi;\n\n /** Hook returning conversation API (sendMessage, loadConversationByTriggerId) */\n useConversation: () => ConversationApi;\n\n /** Hook returning product comparison selection API */\n useProductComparison?: () => ProductComparisonApi;\n\n /** Hook returning whether debug image mode is enabled */\n useDebugImageContext: () => boolean;\n\n /** Hook for resolving entity data (mixed entity types) */\n useResolveGenericEntityData: <\n TEntity extends {\n entityId: string;\n entityUrl: string;\n entityType: string;\n data?: TEntityData;\n },\n TEntityData,\n >(\n entities: TEntity[],\n options: ResolveGenericEntityDataOptions<TEntityData>,\n ) => { enrichedEntities: TEntity[]; loading: boolean };\n\n /** Entity transform functions */\n entityTransforms: EntityTransforms;\n\n /** Markdown utility functions */\n markdownUtils: MarkdownUtils;\n\n /** Image resolver for contextual images (image:// protocol) */\n resolveContextualImageUrl?: (\n client: any,\n imageKey: string,\n options?: {\n filter?: ImageSearchFilterString | null;\n },\n ) => Promise<string | null>;\n\n /** Rich contextual image resolver used by self-resolving image components */\n resolveContextualImageAsset?: (\n client: any,\n imageKey: string,\n options?: {\n filter?: ImageSearchFilterString | null;\n },\n ) => Promise<ContextualImageAsset | null>;\n\n /** Batch resolver for contextual image searches used by collage-style UIs */\n resolveContextualImageUrls?: (\n client: any,\n imageKey: string,\n options?: {\n count?: number;\n threshold?: number;\n filter?: ImageSearchFilterString | null;\n },\n ) => Promise<string[]>;\n\n /** App store client accessor (for OptimizedImage) */\n useAppClient?: () => any;\n\n /** Hook returning a ref to the scroll container element (for parallax effects) */\n useScrollContainerRef?: () => React.RefObject<HTMLElement | null>;\n\n /** Bulk icon resolution: hints → SVG URL map */\n resolveIcons?: (hints: string[]) => Promise<Record<string, string>>;\n\n /** Set the page-level mesh gradient palette colors */\n setMeshBackground?: (colors: RGB[]) => void;\n\n /** Get the current mesh gradient palette colors */\n getMeshBackground?: () => RGB[];\n\n /** Report a markdown diagnostic at render time (e.g. broken link, filtered card) */\n reportDiagnostic?: (\n diagnosticType: DiagnosticType,\n sectionType: string,\n details: string,\n ) => void;\n\n /** BI logger for contextual image events (event 914) */\n logContextualImage?: (params: {\n imageUrl: string;\n contextualTerm: string;\n imageEventType: string;\n isImageResolved: boolean;\n isFallbackImage: boolean;\n }) => void;\n\n /** Conversation context for BI tracking */\n useConversationContext?: () => {\n conversationId?: string;\n messageId?: string;\n sessionId?: string;\n };\n\n /** Fallback image URLs used when a contextual image search returns no results */\n fallbackImages?: string[];\n\n /** Client-provided loader component (replaces default CSS spinner) */\n LoaderComponent?: React.FC<{\n className?: string;\n size?: 'sm' | 'md' | 'lg';\n message?: string;\n showMessage?: boolean;\n }>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -4,10 +4,8 @@ import { loadBackdropAnalysis } from '../../utils/imageBackdrop.js';
4
4
  import { isWeb5ImageUrl } from '../../types/link-types.js';
5
5
  import { useComponentDependencies } from '../../context/ComponentDependenciesContext.js';
6
6
  import { useResolvedImageSources } from '../../hooks/useResolvedImageSources.js';
7
- import { backdropColorOf } from '../../image/imageSetTypes.js';
8
7
  const lowResFallbackCache = new Map();
9
8
  export const OptimizedImage = /*#__PURE__*/memo(props => {
10
- var _slot$visualMetadata, _slot$crop;
11
9
  const {
12
10
  alt,
13
11
  className = '',
@@ -25,7 +23,6 @@ export const OptimizedImage = /*#__PURE__*/memo(props => {
25
23
  disableResize = false,
26
24
  imageMode = 'fit',
27
25
  adaptiveBackdrop = false,
28
- slot,
29
26
  fallbackOnLowRes,
30
27
  lowResThreshold = 550
31
28
  } = props;
@@ -124,21 +121,6 @@ export const OptimizedImage = /*#__PURE__*/memo(props => {
124
121
  const effectiveObjectFit = adaptiveActive ? backdrop != null && backdrop.hasBackdrop ? 'contain' : 'cover' : objectFit;
125
122
  const effectiveImageMode = adaptiveActive ? backdrop != null && backdrop.hasBackdrop ? 'fit' : 'fill' : imageMode;
126
123
  const adaptiveBackgroundColor = adaptiveActive && backdrop != null && backdrop.hasBackdrop ? backdrop.backgroundColor : undefined;
127
-
128
- // A resolved slot answers the same two questions the canvas probe was asking,
129
- // from the server's own decode. It wins wherever it is present.
130
- //
131
- // `contained` (ADR 0220) forces `contain` regardless of anything else: the
132
- // server deliberately returned a crop at a different aspect than the slot
133
- // asked for, so that the whole product stays in frame. Cropping it again with
134
- // `cover` would undo exactly the cut it went out of its way to avoid, and the
135
- // padding it leaves behind is what `backgroundColor` is for — guaranteed
136
- // non-empty in that case.
137
- const slotBackground = slot == null || (_slot$visualMetadata = slot.visualMetadata) == null ? void 0 : _slot$visualMetadata.background;
138
- const slotIsSolid = slotBackground === 'IMAGE_BACKGROUND_SOLID';
139
- const slotWantsContain = Boolean(slot == null || (_slot$crop = slot.crop) == null ? void 0 : _slot$crop.contained) || slotIsSolid;
140
- const resolvedObjectFit = slot ? slotWantsContain ? 'contain' : 'cover' : effectiveObjectFit;
141
- const resolvedBackgroundColor = slot ? slotWantsContain ? backdropColorOf(slot) : undefined : adaptiveBackgroundColor;
142
124
  useEffect(() => {
143
125
  if (!adaptiveActive) {
144
126
  return;
@@ -357,7 +339,7 @@ export const OptimizedImage = /*#__PURE__*/memo(props => {
357
339
  className: ['block', layout === 'intrinsic' ? '' : 'relative overflow-hidden', showDynamicBadge ? 'relative' : '', className].filter(Boolean).join(' '),
358
340
  style: layout === 'intrinsic' ? undefined : {
359
341
  minHeight: '1px',
360
- backgroundColor: resolvedBackgroundColor
342
+ backgroundColor: adaptiveBackgroundColor
361
343
  },
362
344
  onClick: clickable ? onClick : undefined,
363
345
  onKeyDown: clickable ? handleKeyDown : undefined,
@@ -394,7 +376,7 @@ export const OptimizedImage = /*#__PURE__*/memo(props => {
394
376
  }, "Failed to load image"))), imageUrl && !isError && /*#__PURE__*/React.createElement("img", {
395
377
  src: imageUrl,
396
378
  alt: alt,
397
- className: `${layout === 'intrinsic' ? 'w-full h-auto' : 'absolute inset-0 w-full h-full'} transition-opacity duration-300 ${isLoaded ? 'opacity-100' : 'opacity-0'} ${resolvedObjectFit === 'contain' ? 'object-contain' : resolvedObjectFit === 'cover' ? 'object-cover' : resolvedObjectFit === 'fill' ? 'object-fill' : resolvedObjectFit === 'none' ? 'object-none' : resolvedObjectFit === 'scale-down' ? 'object-scale-down' : ''}`,
379
+ className: `${layout === 'intrinsic' ? 'w-full h-auto' : 'absolute inset-0 w-full h-full'} transition-opacity duration-300 ${isLoaded ? 'opacity-100' : 'opacity-0'} ${effectiveObjectFit === 'contain' ? 'object-contain' : effectiveObjectFit === 'cover' ? 'object-cover' : effectiveObjectFit === 'fill' ? 'object-fill' : effectiveObjectFit === 'none' ? 'object-none' : effectiveObjectFit === 'scale-down' ? 'object-scale-down' : ''}`,
398
380
  style: layout === 'intrinsic' ? {
399
381
  width: '100%',
400
382
  height: 'auto',
@@ -405,7 +387,7 @@ export const OptimizedImage = /*#__PURE__*/memo(props => {
405
387
  inset: 0,
406
388
  width: '100%',
407
389
  height: '100%',
408
- objectFit: resolvedObjectFit,
390
+ objectFit: effectiveObjectFit,
409
391
  maxWidth: '100%',
410
392
  display: 'block'
411
393
  },
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","useRef","useEffect","memo","useMemo","getResizedImageUrl","normalizeImageUrl","loadBackdropAnalysis","isWeb5ImageUrl","useComponentDependencies","useResolvedImageSources","backdropColorOf","lowResFallbackCache","Map","OptimizedImage","props","_slot$visualMetadata","_slot$crop","alt","className","quality","format","progressive","placeholderColor","objectFit","layout","onLoad","onError","onClick","clickable","imageFromText","disableResize","imageMode","adaptiveBackdrop","slot","fallbackOnLowRes","lowResThreshold","isResolvedMode","unresolvedSource","filename","preResolvedUrl","resolvedUrl","filter","undefined","sourceIdentifier","deps","isLoaded","setIsLoaded","isError","setIsError","imageUrl","setImageUrl","isFallback","setIsFallback","backdrop","setBackdrop","isDebugImageEnabled","useDebugImageContext","dimensions","setDimensions","containerRef","observerRef","isContextualImage","contextualImageKey","rawKey","slice","length","decodeURIComponent","trim","resolutionInputs","src","images","resolvedSources","loading","isResolutionLoading","resolvedSource","logContextualImage","url","contextualTerm","imageEventType","isImageResolved","isFallbackImage","contextualImageFallback","fallbacks","fallbackImages","Math","floor","random","effectiveFilename","sourceCacheKey","hasResolvedSourceDimensions","width","height","isLowResResolvedAsset","cachedFallbackUrl","get","showDynamicBadge","adaptiveActive","adaptiveResolved","effectiveObjectFit","hasBackdrop","effectiveImageMode","adaptiveBackgroundColor","backgroundColor","slotBackground","visualMetadata","background","slotIsSolid","slotWantsContain","Boolean","crop","contained","resolvedObjectFit","resolvedBackgroundColor","token","aborted","then","result","set","container","current","updateDimensions","rect","getBoundingClientRect","ceil","window","ResizeObserver","observe","handleResize","addEventListener","disconnect","removeEventListener","normalizedUrl","isExternalNonWixUrl","startsWith","includes","imageFilename","match","replace","dpr","devicePixelRatio","optimizedUrl","handleImageLoad","e","img","currentTarget","naturalWidth","naturalHeight","originalImageUrl","currentSrc","console","warn","fallbackImageUrl","handleImageError","error","source","Error","isTransparentPlaceholder","placeholderStyles","animation","backgroundSize","handleKeyDown","key","preventDefault","createElement","Fragment","ref","join","style","minHeight","onKeyDown","tabIndex","role","fill","stroke","viewBox","focusable","strokeLinecap","strokeLinejoin","strokeWidth","d","maxWidth","display","position","inset"],"sources":["../../../../src/components/ui/OptimizedImage.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, memo, useMemo } from 'react';\nimport { getResizedImageUrl, normalizeImageUrl } from '../../utils/image-utils';\nimport {\n loadBackdropAnalysis,\n type BackdropAnalysis,\n} from '../../utils/imageBackdrop';\nimport { isWeb5ImageUrl } from '../../types/link-types';\nimport { useComponentDependencies } from '../../context/ComponentDependenciesContext';\nimport type { ImageSearchFilterString } from '../../image/imageSearchFilterTypes';\nimport { useResolvedImageSources } from '../../hooks/useResolvedImageSources';\nimport {\n backdropColorOf,\n type ResolvedImageSlot,\n} from '../../image/imageSetTypes';\n\nconst lowResFallbackCache = new Map<string, string>();\n\ninterface OptimizedImageBaseProps {\n /** Accessible alternative text for the rendered image. */\n alt: string;\n /** Additional CSS classes applied to the outer image container. */\n className?: string;\n /** Preferred output quality for resized Wix media URLs. */\n quality?: number;\n /** Requested output format for future image delivery customization. */\n format?: 'auto' | 'webp' | 'jpg' | 'png';\n /** Enables progressive loading behavior when supported by the delivery layer. */\n progressive?: boolean;\n /** Placeholder background color shown before the image loads. */\n placeholderColor?: string;\n /** CSS object-fit behavior applied to the rendered `<img>`. */\n objectFit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';\n /** Layout strategy for the image container. */\n layout?: 'fill' | 'intrinsic';\n /** Called after the final rendered image successfully loads. */\n onLoad?: () => void;\n /** Called when the final rendered image fails to load. */\n onError?: (error: Error) => void;\n /** Click handler for interactive image surfaces. */\n onClick?: () => void;\n /** Makes the image container keyboard-focusable and clickable. */\n clickable?: boolean;\n /** Marks the source as originating from text-driven image generation for BI logging. */\n imageFromText?: boolean;\n /** Skips Wix fitted delivery URL rewriting and uses the normalized original URL directly. */\n disableResize?: boolean;\n /** CDN resize mode. 'fill' crops to exact container dimensions (sharp at slot size).\n * 'fit' (default) preserves aspect ratio. */\n imageMode?: 'fit' | 'fill';\n /**\n * Auto-pick `objectFit`/`imageMode` per image by sniffing its edges on a\n * canvas (see `imageBackdrop.ts`). Images shot on a seamless backdrop are\n * rendered `contain` with the slot painted that backdrop colour (the subject\n * is never cropped, the letterbox is invisible); full-bleed scenes fall back\n * to `cover`. Overrides `objectFit`/`imageMode` once analysis resolves; until\n * then, and on any probe/CORS failure, the passed `objectFit`/`imageMode`\n * apply. No effect for `layout=\"intrinsic\"`. */\n adaptiveBackdrop?: boolean;\n /**\n * A slot resolved by `ResolveImageSet` (ADR 0221). Supplying it makes the\n * server's own decode authoritative over `adaptiveBackdrop`'s canvas probe:\n * fit comes from `visualMetadata.background` and the backdrop colour from\n * `backgroundColor` (falling back to the dominant swatch for a scene), so no\n * pixel is read back, no CORS is needed and nothing is guessed.\n *\n * Pair it with `resolvedUrl={slot.imageUrl}` and `disableResize` — the URL\n * already carries the crop and the render size.\n */\n slot?: ResolvedImageSlot;\n /** Full URL to a fallback image used when the primary image is considered low resolution. */\n fallbackOnLowRes?: string;\n /** Minimum acceptable width or height before low-resolution fallback is triggered. */\n lowResThreshold?: number;\n}\n\ninterface OptimizedImageWithFilenameProps {\n /** Image source to render. Supports full URLs and `web5://image/...` contextual image tokens. */\n filename: string;\n /** Optional contextual search filter used only when resolving a `web5://image/...` source. */\n filter?: ImageSearchFilterString;\n /** Mutually exclusive with `filename`; provide this only when the image URL is already resolved. */\n resolvedUrl?: never;\n}\n\ninterface OptimizedImageWithResolvedUrlProps {\n /** Already-resolved image URL. When provided, OptimizedImage skips all source resolution. */\n resolvedUrl: string;\n /** Mutually exclusive with `resolvedUrl`; use `filename` when the source still needs resolving. */\n filename?: never;\n /** Not applicable for already-resolved image URLs. */\n filter?: never;\n}\n\nexport type OptimizedImageProps = OptimizedImageBaseProps &\n (OptimizedImageWithFilenameProps | OptimizedImageWithResolvedUrlProps);\n\nexport const OptimizedImage: React.FC<OptimizedImageProps> = memo((props) => {\n const {\n alt,\n className = '',\n quality = 85,\n format = 'auto',\n progressive = true,\n placeholderColor = '#f3f4f6',\n objectFit = 'contain',\n layout = 'fill',\n onLoad,\n onError,\n onClick,\n clickable = false,\n imageFromText = false,\n disableResize = false,\n imageMode = 'fit',\n adaptiveBackdrop = false,\n slot,\n fallbackOnLowRes,\n lowResThreshold = 550,\n } = props;\n void format;\n void progressive;\n\n const isResolvedMode = 'resolvedUrl' in props;\n const unresolvedSource = 'filename' in props ? props.filename ?? '' : '';\n const preResolvedUrl = 'resolvedUrl' in props ? props.resolvedUrl : '';\n const filter = 'filename' in props ? props.filter : undefined;\n const sourceIdentifier = isResolvedMode ? preResolvedUrl : unresolvedSource;\n\n const deps = useComponentDependencies();\n const [isLoaded, setIsLoaded] = useState(false);\n const [isError, setIsError] = useState(false);\n const [imageUrl, setImageUrl] = useState<string>('');\n const [isFallback, setIsFallback] = useState(false);\n // null = adaptive analysis pending (only meaningful when adaptiveBackdrop).\n const [backdrop, setBackdrop] = useState<BackdropAnalysis | null>(null);\n const isDebugImageEnabled = deps.useDebugImageContext();\n const [dimensions, setDimensions] = useState<{\n width: number;\n height: number;\n } | null>(null);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const isContextualImage = useMemo(\n () =>\n !isResolvedMode &&\n !!(unresolvedSource && isWeb5ImageUrl(unresolvedSource)),\n [isResolvedMode, unresolvedSource],\n );\n\n const contextualImageKey = useMemo(() => {\n if (!isContextualImage) {\n return '';\n }\n const rawKey = unresolvedSource.slice('web5://image/'.length);\n try {\n return decodeURIComponent(rawKey).trim();\n } catch {\n return rawKey.trim();\n }\n }, [isContextualImage, unresolvedSource]);\n const resolutionInputs = useMemo(\n () =>\n isResolvedMode || !unresolvedSource\n ? []\n : [\n {\n src: unresolvedSource,\n filter,\n },\n ],\n [filter, isResolvedMode, unresolvedSource],\n );\n const { images: resolvedSources, loading: isResolutionLoading } =\n useResolvedImageSources(resolutionInputs);\n const resolvedSource = useMemo(\n () => (!isResolvedMode ? resolvedSources?.[0] ?? null : null),\n [isResolvedMode, resolvedSources],\n );\n\n useEffect(() => {\n if (\n !isContextualImage ||\n isResolvedMode ||\n isResolutionLoading ||\n resolvedSources === null\n ) {\n return;\n }\n\n deps.logContextualImage?.({\n imageUrl: resolvedSource?.url ?? '',\n contextualTerm: contextualImageKey,\n imageEventType: imageFromText\n ? 'web5_image_link_from_text'\n : 'web5_image_link',\n isImageResolved: !!resolvedSource?.url,\n isFallbackImage: false,\n });\n }, [\n contextualImageKey,\n deps,\n imageFromText,\n isContextualImage,\n isResolvedMode,\n isResolutionLoading,\n resolvedSource?.url,\n resolvedSources,\n ]);\n\n // When imageFromText contextual image resolution returns empty, use a random fallback\n const contextualImageFallback = useMemo(() => {\n if (\n !imageFromText ||\n !isContextualImage ||\n isResolutionLoading ||\n resolvedSources === null ||\n resolvedSource?.url\n ) {\n return '';\n }\n const fallbacks = deps.fallbackImages;\n if (!fallbacks || fallbacks.length === 0) {\n return '';\n }\n return fallbacks[Math.floor(Math.random() * fallbacks.length)];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n imageFromText,\n isContextualImage,\n isResolutionLoading,\n resolvedSources,\n resolvedSource?.url,\n deps.fallbackImages,\n ]);\n\n // Log when a fallback image is used for an unresolved contextual image\n useEffect(() => {\n if (!contextualImageFallback) {\n return;\n }\n deps.logContextualImage?.({\n imageUrl: contextualImageFallback,\n contextualTerm: contextualImageKey,\n imageEventType: 'web5_image_fallback',\n isImageResolved: false,\n isFallbackImage: true,\n });\n }, [contextualImageFallback, contextualImageKey, deps]);\n\n const effectiveFilename = isResolvedMode\n ? preResolvedUrl\n : resolvedSource?.url || contextualImageFallback;\n const sourceCacheKey = useMemo(\n () =>\n effectiveFilename ? normalizeImageUrl(effectiveFilename).trim() : '',\n [effectiveFilename],\n );\n const hasResolvedSourceDimensions =\n typeof resolvedSource?.width === 'number' &&\n typeof resolvedSource?.height === 'number';\n const isLowResResolvedAsset =\n hasResolvedSourceDimensions &&\n (resolvedSource.width! < lowResThreshold ||\n resolvedSource.height! < lowResThreshold);\n const cachedFallbackUrl = useMemo(\n () => (sourceCacheKey ? lowResFallbackCache.get(sourceCacheKey) ?? '' : ''),\n [sourceCacheKey],\n );\n const showDynamicBadge = isContextualImage && isDebugImageEnabled;\n\n // Adaptive fit: probe the resolved image's edges, then map to fit/object-fit.\n // Until analysis resolves (`backdrop === null`) the displayed URL is held back\n // so we never fetch with the wrong mode and flash a re-crop. On a backdrop we\n // render `contain` (whole subject visible) and paint the slot its colour; on a\n // busy scene we `cover`. Failures resolve to `hasBackdrop: false` → `cover`.\n const adaptiveActive = adaptiveBackdrop && layout !== 'intrinsic';\n const adaptiveResolved = !adaptiveActive || backdrop !== null;\n const effectiveObjectFit = adaptiveActive\n ? backdrop?.hasBackdrop\n ? 'contain'\n : 'cover'\n : objectFit;\n const effectiveImageMode = adaptiveActive\n ? backdrop?.hasBackdrop\n ? 'fit'\n : 'fill'\n : imageMode;\n const adaptiveBackgroundColor =\n adaptiveActive && backdrop?.hasBackdrop\n ? backdrop.backgroundColor\n : undefined;\n\n // A resolved slot answers the same two questions the canvas probe was asking,\n // from the server's own decode. It wins wherever it is present.\n //\n // `contained` (ADR 0220) forces `contain` regardless of anything else: the\n // server deliberately returned a crop at a different aspect than the slot\n // asked for, so that the whole product stays in frame. Cropping it again with\n // `cover` would undo exactly the cut it went out of its way to avoid, and the\n // padding it leaves behind is what `backgroundColor` is for — guaranteed\n // non-empty in that case.\n const slotBackground = slot?.visualMetadata?.background;\n const slotIsSolid = slotBackground === 'IMAGE_BACKGROUND_SOLID';\n const slotWantsContain = Boolean(slot?.crop?.contained) || slotIsSolid;\n const resolvedObjectFit = slot\n ? slotWantsContain\n ? 'contain'\n : 'cover'\n : effectiveObjectFit;\n const resolvedBackgroundColor = slot\n ? slotWantsContain\n ? backdropColorOf(slot)\n : undefined\n : adaptiveBackgroundColor;\n\n useEffect(() => {\n if (!adaptiveActive) {\n return;\n }\n setBackdrop(null);\n if (\n !effectiveFilename ||\n isFallback ||\n cachedFallbackUrl ||\n (isLowResResolvedAsset && fallbackOnLowRes)\n ) {\n // No analyzable primary source → behave like a busy scene (cover).\n setBackdrop({ hasBackdrop: false });\n return;\n }\n const token = { aborted: false };\n loadBackdropAnalysis(effectiveFilename, token).then((result) => {\n if (!token.aborted) {\n setBackdrop(result);\n }\n });\n return () => {\n token.aborted = true;\n };\n }, [\n adaptiveActive,\n effectiveFilename,\n isFallback,\n cachedFallbackUrl,\n isLowResResolvedAsset,\n fallbackOnLowRes,\n ]);\n\n useEffect(() => {\n setIsLoaded(false);\n setIsError(false);\n setIsFallback(false);\n setImageUrl('');\n }, [sourceCacheKey, fallbackOnLowRes]);\n\n useEffect(() => {\n if (!sourceCacheKey || !fallbackOnLowRes) {\n return;\n }\n\n if (isLowResResolvedAsset) {\n lowResFallbackCache.set(sourceCacheKey, fallbackOnLowRes);\n setIsFallback(true);\n setImageUrl(fallbackOnLowRes);\n return;\n }\n\n if (!cachedFallbackUrl) {\n return;\n }\n\n setIsFallback(true);\n setImageUrl(cachedFallbackUrl);\n }, [\n cachedFallbackUrl,\n fallbackOnLowRes,\n isLowResResolvedAsset,\n sourceCacheKey,\n ]);\n\n // For fill layout, measure container so we can request a resized Wix image.\n useEffect(() => {\n if (layout === 'intrinsic' || disableResize) {\n return;\n }\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const updateDimensions = () => {\n const rect = container.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n setDimensions({\n width: Math.ceil(rect.width),\n height: Math.ceil(rect.height),\n });\n }\n };\n\n updateDimensions();\n\n if ('ResizeObserver' in window) {\n observerRef.current = new ResizeObserver(() => {\n updateDimensions();\n });\n observerRef.current.observe(container);\n }\n\n const handleResize = () => updateDimensions();\n window.addEventListener('resize', handleResize);\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n window.removeEventListener('resize', handleResize);\n };\n }, [disableResize, layout]);\n\n // Intrinsic layout: use normalized URL without resize logic.\n useEffect(() => {\n if (layout !== 'intrinsic') {\n return;\n }\n if (\n !effectiveFilename ||\n isFallback ||\n cachedFallbackUrl ||\n (isLowResResolvedAsset && fallbackOnLowRes)\n ) {\n return;\n }\n\n const normalizedUrl = normalizeImageUrl(effectiveFilename);\n setImageUrl(normalizedUrl);\n }, [\n cachedFallbackUrl,\n effectiveFilename,\n isFallback,\n isLowResResolvedAsset,\n layout,\n ]);\n\n // External non-Wix URLs skip resizing; use them immediately.\n useEffect(() => {\n if (layout === 'intrinsic') {\n return;\n }\n if (\n !effectiveFilename ||\n isFallback ||\n cachedFallbackUrl ||\n (isLowResResolvedAsset && fallbackOnLowRes)\n ) {\n return;\n }\n\n const normalizedUrl = normalizeImageUrl(effectiveFilename);\n const isExternalNonWixUrl =\n (normalizedUrl.startsWith('http://') ||\n normalizedUrl.startsWith('https://')) &&\n !normalizedUrl.includes('static.wixstatic.com');\n\n if (isExternalNonWixUrl) {\n setImageUrl(normalizedUrl);\n }\n }, [\n cachedFallbackUrl,\n effectiveFilename,\n isFallback,\n isLowResResolvedAsset,\n layout,\n ]);\n\n // Explicit opt-out: use original normalized URL even in fill layouts.\n useEffect(() => {\n if (layout === 'intrinsic') {\n return;\n }\n if (\n !disableResize ||\n !effectiveFilename ||\n isFallback ||\n cachedFallbackUrl ||\n (isLowResResolvedAsset && fallbackOnLowRes)\n ) {\n return;\n }\n\n setImageUrl(normalizeImageUrl(effectiveFilename));\n }, [\n cachedFallbackUrl,\n disableResize,\n effectiveFilename,\n isFallback,\n isLowResResolvedAsset,\n layout,\n ]);\n\n // Wix/local URLs: wait for dimensions, then build a resized URL.\n useEffect(() => {\n if (layout === 'intrinsic') {\n return;\n }\n if (disableResize) {\n return;\n }\n // Hold the fetch until adaptive analysis picks fit vs fill, so we request\n // the right CDN mode once instead of fetching twice and re-cropping.\n if (!adaptiveResolved) {\n return;\n }\n if (\n !dimensions ||\n !effectiveFilename ||\n isFallback ||\n cachedFallbackUrl ||\n (isLowResResolvedAsset && fallbackOnLowRes)\n ) {\n return;\n }\n\n const normalizedUrl = normalizeImageUrl(effectiveFilename);\n const isExternalNonWixUrl =\n (normalizedUrl.startsWith('http://') ||\n normalizedUrl.startsWith('https://')) &&\n !normalizedUrl.includes('static.wixstatic.com');\n\n if (isExternalNonWixUrl) {\n return;\n }\n\n let imageFilename = effectiveFilename;\n if (normalizedUrl.includes('static.wixstatic.com')) {\n const match = normalizedUrl.match(/media\\/([^/?]+)/);\n if (match && match[1]) {\n imageFilename = match[1];\n } else {\n setImageUrl(normalizedUrl);\n return;\n }\n } else if (\n normalizedUrl.startsWith('https://static.wixstatic.com/media/')\n ) {\n imageFilename = normalizedUrl.replace(\n 'https://static.wixstatic.com/media/',\n '',\n );\n }\n\n const dpr = window.devicePixelRatio ?? 1;\n const optimizedUrl = getResizedImageUrl(\n imageFilename,\n dimensions.width * dpr,\n dimensions.height * dpr,\n { quality, imageMode: effectiveImageMode },\n );\n setImageUrl(optimizedUrl);\n }, [\n dimensions,\n cachedFallbackUrl,\n effectiveFilename,\n isFallback,\n isLowResResolvedAsset,\n layout,\n disableResize,\n quality,\n effectiveImageMode,\n adaptiveResolved,\n ]);\n\n const handleImageLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {\n const img = e.currentTarget;\n\n if (\n fallbackOnLowRes &&\n !isFallback &&\n !hasResolvedSourceDimensions &&\n (img.naturalWidth < lowResThreshold ||\n img.naturalHeight < lowResThreshold)\n ) {\n const originalImageUrl =\n img.currentSrc || imageUrl || effectiveFilename || sourceIdentifier;\n\n if (sourceCacheKey) {\n lowResFallbackCache.set(sourceCacheKey, fallbackOnLowRes);\n }\n\n setIsFallback(true);\n setImageUrl(fallbackOnLowRes);\n setIsLoaded(false);\n\n console.warn('OptimizedImage applied a low-res fallback image.', {\n originalImageUrl,\n fallbackImageUrl: fallbackOnLowRes,\n naturalWidth: img.naturalWidth,\n naturalHeight: img.naturalHeight,\n lowResThreshold,\n });\n\n deps.logContextualImage?.({\n imageUrl: fallbackOnLowRes,\n contextualTerm: contextualImageKey,\n imageEventType: 'web5_image_fallback',\n isImageResolved: true,\n isFallbackImage: true,\n });\n return;\n }\n\n setIsLoaded(true);\n onLoad?.();\n };\n\n const handleImageError = () => {\n setIsError(true);\n console.error('Failed to load image:', {\n source: sourceIdentifier,\n imageUrl,\n alt,\n });\n onError?.(new Error(`Failed to load image: ${sourceIdentifier}`));\n };\n\n const isTransparentPlaceholder = placeholderColor === 'transparent';\n const placeholderStyles = isTransparentPlaceholder\n ? {\n background: 'transparent',\n animation: 'none',\n }\n : {\n background: `linear-gradient(90deg, ${placeholderColor} 0%, #e5e7eb 50%, ${placeholderColor} 100%)`,\n backgroundSize: '200% 100%',\n animation: 'shimmer 2s infinite ease-in-out',\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n return (\n <>\n <span\n ref={containerRef}\n className={[\n 'block',\n layout === 'intrinsic' ? '' : 'relative overflow-hidden',\n showDynamicBadge ? 'relative' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={\n layout === 'intrinsic'\n ? undefined\n : { minHeight: '1px', backgroundColor: resolvedBackgroundColor }\n }\n onClick={clickable ? onClick : undefined}\n onKeyDown={clickable ? handleKeyDown : undefined}\n tabIndex={clickable ? 0 : undefined}\n role={clickable ? 'button' : undefined}\n aria-label={clickable ? alt : undefined}\n >\n {showDynamicBadge && (\n <span className=\"absolute left-2 top-2 z-10 rounded bg-blue-600/90 px-2 py-1 text-[10px] font-semibold tracking-wide text-white shadow block\">\n {contextualImageKey}\n </span>\n )}\n {!isLoaded && !isError && sourceIdentifier && (\n <span\n className=\"absolute inset-0 rounded block\"\n style={placeholderStyles}\n role=\"status\"\n aria-label=\"Loading image\"\n />\n )}\n\n {isError && (\n <span\n className=\"absolute inset-0 flex items-center justify-center bg-gray-100 text-gray-500 rounded block\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n <span className=\"text-center p-4 block\">\n <svg\n className=\"w-8 h-8 mx-auto mb-2 text-gray-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n <span className=\"text-xs block\">Failed to load image</span>\n </span>\n </span>\n )}\n\n {imageUrl && !isError && (\n <img\n src={imageUrl}\n alt={alt}\n className={`${\n layout === 'intrinsic'\n ? 'w-full h-auto'\n : 'absolute inset-0 w-full h-full'\n } transition-opacity duration-300 ${\n isLoaded ? 'opacity-100' : 'opacity-0'\n } ${\n resolvedObjectFit === 'contain'\n ? 'object-contain'\n : resolvedObjectFit === 'cover'\n ? 'object-cover'\n : resolvedObjectFit === 'fill'\n ? 'object-fill'\n : resolvedObjectFit === 'none'\n ? 'object-none'\n : resolvedObjectFit === 'scale-down'\n ? 'object-scale-down'\n : ''\n }`}\n style={\n layout === 'intrinsic'\n ? {\n width: '100%',\n height: 'auto',\n maxWidth: '100%',\n display: 'block',\n }\n : {\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n objectFit: resolvedObjectFit,\n maxWidth: '100%',\n display: 'block',\n }\n }\n onLoad={handleImageLoad}\n onError={handleImageError}\n loading={imageUrl.startsWith('data:') ? 'eager' : 'lazy'}\n />\n )}\n </span>\n </>\n );\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","useRef","useEffect","memo","useMemo","getResizedImageUrl","normalizeImageUrl","loadBackdropAnalysis","isWeb5ImageUrl","useComponentDependencies","useResolvedImageSources","lowResFallbackCache","Map","OptimizedImage","props","alt","className","quality","format","progressive","placeholderColor","objectFit","layout","onLoad","onError","onClick","clickable","imageFromText","disableResize","imageMode","adaptiveBackdrop","fallbackOnLowRes","lowResThreshold","isResolvedMode","unresolvedSource","filename","preResolvedUrl","resolvedUrl","filter","undefined","sourceIdentifier","deps","isLoaded","setIsLoaded","isError","setIsError","imageUrl","setImageUrl","isFallback","setIsFallback","backdrop","setBackdrop","isDebugImageEnabled","useDebugImageContext","dimensions","setDimensions","containerRef","observerRef","isContextualImage","contextualImageKey","rawKey","slice","length","decodeURIComponent","trim","resolutionInputs","src","images","resolvedSources","loading","isResolutionLoading","resolvedSource","logContextualImage","url","contextualTerm","imageEventType","isImageResolved","isFallbackImage","contextualImageFallback","fallbacks","fallbackImages","Math","floor","random","effectiveFilename","sourceCacheKey","hasResolvedSourceDimensions","width","height","isLowResResolvedAsset","cachedFallbackUrl","get","showDynamicBadge","adaptiveActive","adaptiveResolved","effectiveObjectFit","hasBackdrop","effectiveImageMode","adaptiveBackgroundColor","backgroundColor","token","aborted","then","result","set","container","current","updateDimensions","rect","getBoundingClientRect","ceil","window","ResizeObserver","observe","handleResize","addEventListener","disconnect","removeEventListener","normalizedUrl","isExternalNonWixUrl","startsWith","includes","imageFilename","match","replace","dpr","devicePixelRatio","optimizedUrl","handleImageLoad","e","img","currentTarget","naturalWidth","naturalHeight","originalImageUrl","currentSrc","console","warn","fallbackImageUrl","handleImageError","error","source","Error","isTransparentPlaceholder","placeholderStyles","background","animation","backgroundSize","handleKeyDown","key","preventDefault","createElement","Fragment","ref","Boolean","join","style","minHeight","onKeyDown","tabIndex","role","fill","stroke","viewBox","focusable","strokeLinecap","strokeLinejoin","strokeWidth","d","maxWidth","display","position","inset"],"sources":["../../../../src/components/ui/OptimizedImage.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, memo, useMemo } from 'react';\nimport { getResizedImageUrl, normalizeImageUrl } from '../../utils/image-utils';\nimport {\n loadBackdropAnalysis,\n type BackdropAnalysis,\n} from '../../utils/imageBackdrop';\nimport { isWeb5ImageUrl } from '../../types/link-types';\nimport { useComponentDependencies } from '../../context/ComponentDependenciesContext';\nimport type { ImageSearchFilterString } from '../../image/imageSearchFilterTypes';\nimport { useResolvedImageSources } from '../../hooks/useResolvedImageSources';\n\nconst lowResFallbackCache = new Map<string, string>();\n\ninterface OptimizedImageBaseProps {\n /** Accessible alternative text for the rendered image. */\n alt: string;\n /** Additional CSS classes applied to the outer image container. */\n className?: string;\n /** Preferred output quality for resized Wix media URLs. */\n quality?: number;\n /** Requested output format for future image delivery customization. */\n format?: 'auto' | 'webp' | 'jpg' | 'png';\n /** Enables progressive loading behavior when supported by the delivery layer. */\n progressive?: boolean;\n /** Placeholder background color shown before the image loads. */\n placeholderColor?: string;\n /** CSS object-fit behavior applied to the rendered `<img>`. */\n objectFit?: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down';\n /** Layout strategy for the image container. */\n layout?: 'fill' | 'intrinsic';\n /** Called after the final rendered image successfully loads. */\n onLoad?: () => void;\n /** Called when the final rendered image fails to load. */\n onError?: (error: Error) => void;\n /** Click handler for interactive image surfaces. */\n onClick?: () => void;\n /** Makes the image container keyboard-focusable and clickable. */\n clickable?: boolean;\n /** Marks the source as originating from text-driven image generation for BI logging. */\n imageFromText?: boolean;\n /** Skips Wix fitted delivery URL rewriting and uses the normalized original URL directly. */\n disableResize?: boolean;\n /** CDN resize mode. 'fill' crops to exact container dimensions (sharp at slot size).\n * 'fit' (default) preserves aspect ratio. */\n imageMode?: 'fit' | 'fill';\n /**\n * Auto-pick `objectFit`/`imageMode` per image by sniffing its edges on a\n * canvas (see `imageBackdrop.ts`). Images shot on a seamless backdrop are\n * rendered `contain` with the slot painted that backdrop colour (the subject\n * is never cropped, the letterbox is invisible); full-bleed scenes fall back\n * to `cover`. Overrides `objectFit`/`imageMode` once analysis resolves; until\n * then, and on any probe/CORS failure, the passed `objectFit`/`imageMode`\n * apply. No effect for `layout=\"intrinsic\"`. */\n adaptiveBackdrop?: boolean;\n /** Full URL to a fallback image used when the primary image is considered low resolution. */\n fallbackOnLowRes?: string;\n /** Minimum acceptable width or height before low-resolution fallback is triggered. */\n lowResThreshold?: number;\n}\n\ninterface OptimizedImageWithFilenameProps {\n /** Image source to render. Supports full URLs and `web5://image/...` contextual image tokens. */\n filename: string;\n /** Optional contextual search filter used only when resolving a `web5://image/...` source. */\n filter?: ImageSearchFilterString;\n /** Mutually exclusive with `filename`; provide this only when the image URL is already resolved. */\n resolvedUrl?: never;\n}\n\ninterface OptimizedImageWithResolvedUrlProps {\n /** Already-resolved image URL. When provided, OptimizedImage skips all source resolution. */\n resolvedUrl: string;\n /** Mutually exclusive with `resolvedUrl`; use `filename` when the source still needs resolving. */\n filename?: never;\n /** Not applicable for already-resolved image URLs. */\n filter?: never;\n}\n\nexport type OptimizedImageProps = OptimizedImageBaseProps &\n (OptimizedImageWithFilenameProps | OptimizedImageWithResolvedUrlProps);\n\nexport const OptimizedImage: React.FC<OptimizedImageProps> = memo((props) => {\n const {\n alt,\n className = '',\n quality = 85,\n format = 'auto',\n progressive = true,\n placeholderColor = '#f3f4f6',\n objectFit = 'contain',\n layout = 'fill',\n onLoad,\n onError,\n onClick,\n clickable = false,\n imageFromText = false,\n disableResize = false,\n imageMode = 'fit',\n adaptiveBackdrop = false,\n fallbackOnLowRes,\n lowResThreshold = 550,\n } = props;\n void format;\n void progressive;\n\n const isResolvedMode = 'resolvedUrl' in props;\n const unresolvedSource = 'filename' in props ? props.filename ?? '' : '';\n const preResolvedUrl = 'resolvedUrl' in props ? props.resolvedUrl : '';\n const filter = 'filename' in props ? props.filter : undefined;\n const sourceIdentifier = isResolvedMode ? preResolvedUrl : unresolvedSource;\n\n const deps = useComponentDependencies();\n const [isLoaded, setIsLoaded] = useState(false);\n const [isError, setIsError] = useState(false);\n const [imageUrl, setImageUrl] = useState<string>('');\n const [isFallback, setIsFallback] = useState(false);\n // null = adaptive analysis pending (only meaningful when adaptiveBackdrop).\n const [backdrop, setBackdrop] = useState<BackdropAnalysis | null>(null);\n const isDebugImageEnabled = deps.useDebugImageContext();\n const [dimensions, setDimensions] = useState<{\n width: number;\n height: number;\n } | null>(null);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const isContextualImage = useMemo(\n () =>\n !isResolvedMode &&\n !!(unresolvedSource && isWeb5ImageUrl(unresolvedSource)),\n [isResolvedMode, unresolvedSource],\n );\n\n const contextualImageKey = useMemo(() => {\n if (!isContextualImage) {\n return '';\n }\n const rawKey = unresolvedSource.slice('web5://image/'.length);\n try {\n return decodeURIComponent(rawKey).trim();\n } catch {\n return rawKey.trim();\n }\n }, [isContextualImage, unresolvedSource]);\n const resolutionInputs = useMemo(\n () =>\n isResolvedMode || !unresolvedSource\n ? []\n : [\n {\n src: unresolvedSource,\n filter,\n },\n ],\n [filter, isResolvedMode, unresolvedSource],\n );\n const { images: resolvedSources, loading: isResolutionLoading } =\n useResolvedImageSources(resolutionInputs);\n const resolvedSource = useMemo(\n () => (!isResolvedMode ? resolvedSources?.[0] ?? null : null),\n [isResolvedMode, resolvedSources],\n );\n\n useEffect(() => {\n if (\n !isContextualImage ||\n isResolvedMode ||\n isResolutionLoading ||\n resolvedSources === null\n ) {\n return;\n }\n\n deps.logContextualImage?.({\n imageUrl: resolvedSource?.url ?? '',\n contextualTerm: contextualImageKey,\n imageEventType: imageFromText\n ? 'web5_image_link_from_text'\n : 'web5_image_link',\n isImageResolved: !!resolvedSource?.url,\n isFallbackImage: false,\n });\n }, [\n contextualImageKey,\n deps,\n imageFromText,\n isContextualImage,\n isResolvedMode,\n isResolutionLoading,\n resolvedSource?.url,\n resolvedSources,\n ]);\n\n // When imageFromText contextual image resolution returns empty, use a random fallback\n const contextualImageFallback = useMemo(() => {\n if (\n !imageFromText ||\n !isContextualImage ||\n isResolutionLoading ||\n resolvedSources === null ||\n resolvedSource?.url\n ) {\n return '';\n }\n const fallbacks = deps.fallbackImages;\n if (!fallbacks || fallbacks.length === 0) {\n return '';\n }\n return fallbacks[Math.floor(Math.random() * fallbacks.length)];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n imageFromText,\n isContextualImage,\n isResolutionLoading,\n resolvedSources,\n resolvedSource?.url,\n deps.fallbackImages,\n ]);\n\n // Log when a fallback image is used for an unresolved contextual image\n useEffect(() => {\n if (!contextualImageFallback) {\n return;\n }\n deps.logContextualImage?.({\n imageUrl: contextualImageFallback,\n contextualTerm: contextualImageKey,\n imageEventType: 'web5_image_fallback',\n isImageResolved: false,\n isFallbackImage: true,\n });\n }, [contextualImageFallback, contextualImageKey, deps]);\n\n const effectiveFilename = isResolvedMode\n ? preResolvedUrl\n : resolvedSource?.url || contextualImageFallback;\n const sourceCacheKey = useMemo(\n () =>\n effectiveFilename ? normalizeImageUrl(effectiveFilename).trim() : '',\n [effectiveFilename],\n );\n const hasResolvedSourceDimensions =\n typeof resolvedSource?.width === 'number' &&\n typeof resolvedSource?.height === 'number';\n const isLowResResolvedAsset =\n hasResolvedSourceDimensions &&\n (resolvedSource.width! < lowResThreshold ||\n resolvedSource.height! < lowResThreshold);\n const cachedFallbackUrl = useMemo(\n () => (sourceCacheKey ? lowResFallbackCache.get(sourceCacheKey) ?? '' : ''),\n [sourceCacheKey],\n );\n const showDynamicBadge = isContextualImage && isDebugImageEnabled;\n\n // Adaptive fit: probe the resolved image's edges, then map to fit/object-fit.\n // Until analysis resolves (`backdrop === null`) the displayed URL is held back\n // so we never fetch with the wrong mode and flash a re-crop. On a backdrop we\n // render `contain` (whole subject visible) and paint the slot its colour; on a\n // busy scene we `cover`. Failures resolve to `hasBackdrop: false` → `cover`.\n const adaptiveActive = adaptiveBackdrop && layout !== 'intrinsic';\n const adaptiveResolved = !adaptiveActive || backdrop !== null;\n const effectiveObjectFit = adaptiveActive\n ? backdrop?.hasBackdrop\n ? 'contain'\n : 'cover'\n : objectFit;\n const effectiveImageMode = adaptiveActive\n ? backdrop?.hasBackdrop\n ? 'fit'\n : 'fill'\n : imageMode;\n const adaptiveBackgroundColor =\n adaptiveActive && backdrop?.hasBackdrop\n ? backdrop.backgroundColor\n : undefined;\n\n useEffect(() => {\n if (!adaptiveActive) {\n return;\n }\n setBackdrop(null);\n if (\n !effectiveFilename ||\n isFallback ||\n cachedFallbackUrl ||\n (isLowResResolvedAsset && fallbackOnLowRes)\n ) {\n // No analyzable primary source → behave like a busy scene (cover).\n setBackdrop({ hasBackdrop: false });\n return;\n }\n const token = { aborted: false };\n loadBackdropAnalysis(effectiveFilename, token).then((result) => {\n if (!token.aborted) {\n setBackdrop(result);\n }\n });\n return () => {\n token.aborted = true;\n };\n }, [\n adaptiveActive,\n effectiveFilename,\n isFallback,\n cachedFallbackUrl,\n isLowResResolvedAsset,\n fallbackOnLowRes,\n ]);\n\n useEffect(() => {\n setIsLoaded(false);\n setIsError(false);\n setIsFallback(false);\n setImageUrl('');\n }, [sourceCacheKey, fallbackOnLowRes]);\n\n useEffect(() => {\n if (!sourceCacheKey || !fallbackOnLowRes) {\n return;\n }\n\n if (isLowResResolvedAsset) {\n lowResFallbackCache.set(sourceCacheKey, fallbackOnLowRes);\n setIsFallback(true);\n setImageUrl(fallbackOnLowRes);\n return;\n }\n\n if (!cachedFallbackUrl) {\n return;\n }\n\n setIsFallback(true);\n setImageUrl(cachedFallbackUrl);\n }, [\n cachedFallbackUrl,\n fallbackOnLowRes,\n isLowResResolvedAsset,\n sourceCacheKey,\n ]);\n\n // For fill layout, measure container so we can request a resized Wix image.\n useEffect(() => {\n if (layout === 'intrinsic' || disableResize) {\n return;\n }\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const updateDimensions = () => {\n const rect = container.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n setDimensions({\n width: Math.ceil(rect.width),\n height: Math.ceil(rect.height),\n });\n }\n };\n\n updateDimensions();\n\n if ('ResizeObserver' in window) {\n observerRef.current = new ResizeObserver(() => {\n updateDimensions();\n });\n observerRef.current.observe(container);\n }\n\n const handleResize = () => updateDimensions();\n window.addEventListener('resize', handleResize);\n\n return () => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n }\n window.removeEventListener('resize', handleResize);\n };\n }, [disableResize, layout]);\n\n // Intrinsic layout: use normalized URL without resize logic.\n useEffect(() => {\n if (layout !== 'intrinsic') {\n return;\n }\n if (\n !effectiveFilename ||\n isFallback ||\n cachedFallbackUrl ||\n (isLowResResolvedAsset && fallbackOnLowRes)\n ) {\n return;\n }\n\n const normalizedUrl = normalizeImageUrl(effectiveFilename);\n setImageUrl(normalizedUrl);\n }, [\n cachedFallbackUrl,\n effectiveFilename,\n isFallback,\n isLowResResolvedAsset,\n layout,\n ]);\n\n // External non-Wix URLs skip resizing; use them immediately.\n useEffect(() => {\n if (layout === 'intrinsic') {\n return;\n }\n if (\n !effectiveFilename ||\n isFallback ||\n cachedFallbackUrl ||\n (isLowResResolvedAsset && fallbackOnLowRes)\n ) {\n return;\n }\n\n const normalizedUrl = normalizeImageUrl(effectiveFilename);\n const isExternalNonWixUrl =\n (normalizedUrl.startsWith('http://') ||\n normalizedUrl.startsWith('https://')) &&\n !normalizedUrl.includes('static.wixstatic.com');\n\n if (isExternalNonWixUrl) {\n setImageUrl(normalizedUrl);\n }\n }, [\n cachedFallbackUrl,\n effectiveFilename,\n isFallback,\n isLowResResolvedAsset,\n layout,\n ]);\n\n // Explicit opt-out: use original normalized URL even in fill layouts.\n useEffect(() => {\n if (layout === 'intrinsic') {\n return;\n }\n if (\n !disableResize ||\n !effectiveFilename ||\n isFallback ||\n cachedFallbackUrl ||\n (isLowResResolvedAsset && fallbackOnLowRes)\n ) {\n return;\n }\n\n setImageUrl(normalizeImageUrl(effectiveFilename));\n }, [\n cachedFallbackUrl,\n disableResize,\n effectiveFilename,\n isFallback,\n isLowResResolvedAsset,\n layout,\n ]);\n\n // Wix/local URLs: wait for dimensions, then build a resized URL.\n useEffect(() => {\n if (layout === 'intrinsic') {\n return;\n }\n if (disableResize) {\n return;\n }\n // Hold the fetch until adaptive analysis picks fit vs fill, so we request\n // the right CDN mode once instead of fetching twice and re-cropping.\n if (!adaptiveResolved) {\n return;\n }\n if (\n !dimensions ||\n !effectiveFilename ||\n isFallback ||\n cachedFallbackUrl ||\n (isLowResResolvedAsset && fallbackOnLowRes)\n ) {\n return;\n }\n\n const normalizedUrl = normalizeImageUrl(effectiveFilename);\n const isExternalNonWixUrl =\n (normalizedUrl.startsWith('http://') ||\n normalizedUrl.startsWith('https://')) &&\n !normalizedUrl.includes('static.wixstatic.com');\n\n if (isExternalNonWixUrl) {\n return;\n }\n\n let imageFilename = effectiveFilename;\n if (normalizedUrl.includes('static.wixstatic.com')) {\n const match = normalizedUrl.match(/media\\/([^/?]+)/);\n if (match && match[1]) {\n imageFilename = match[1];\n } else {\n setImageUrl(normalizedUrl);\n return;\n }\n } else if (\n normalizedUrl.startsWith('https://static.wixstatic.com/media/')\n ) {\n imageFilename = normalizedUrl.replace(\n 'https://static.wixstatic.com/media/',\n '',\n );\n }\n\n const dpr = window.devicePixelRatio ?? 1;\n const optimizedUrl = getResizedImageUrl(\n imageFilename,\n dimensions.width * dpr,\n dimensions.height * dpr,\n { quality, imageMode: effectiveImageMode },\n );\n setImageUrl(optimizedUrl);\n }, [\n dimensions,\n cachedFallbackUrl,\n effectiveFilename,\n isFallback,\n isLowResResolvedAsset,\n layout,\n disableResize,\n quality,\n effectiveImageMode,\n adaptiveResolved,\n ]);\n\n const handleImageLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {\n const img = e.currentTarget;\n\n if (\n fallbackOnLowRes &&\n !isFallback &&\n !hasResolvedSourceDimensions &&\n (img.naturalWidth < lowResThreshold ||\n img.naturalHeight < lowResThreshold)\n ) {\n const originalImageUrl =\n img.currentSrc || imageUrl || effectiveFilename || sourceIdentifier;\n\n if (sourceCacheKey) {\n lowResFallbackCache.set(sourceCacheKey, fallbackOnLowRes);\n }\n\n setIsFallback(true);\n setImageUrl(fallbackOnLowRes);\n setIsLoaded(false);\n\n console.warn('OptimizedImage applied a low-res fallback image.', {\n originalImageUrl,\n fallbackImageUrl: fallbackOnLowRes,\n naturalWidth: img.naturalWidth,\n naturalHeight: img.naturalHeight,\n lowResThreshold,\n });\n\n deps.logContextualImage?.({\n imageUrl: fallbackOnLowRes,\n contextualTerm: contextualImageKey,\n imageEventType: 'web5_image_fallback',\n isImageResolved: true,\n isFallbackImage: true,\n });\n return;\n }\n\n setIsLoaded(true);\n onLoad?.();\n };\n\n const handleImageError = () => {\n setIsError(true);\n console.error('Failed to load image:', {\n source: sourceIdentifier,\n imageUrl,\n alt,\n });\n onError?.(new Error(`Failed to load image: ${sourceIdentifier}`));\n };\n\n const isTransparentPlaceholder = placeholderColor === 'transparent';\n const placeholderStyles = isTransparentPlaceholder\n ? {\n background: 'transparent',\n animation: 'none',\n }\n : {\n background: `linear-gradient(90deg, ${placeholderColor} 0%, #e5e7eb 50%, ${placeholderColor} 100%)`,\n backgroundSize: '200% 100%',\n animation: 'shimmer 2s infinite ease-in-out',\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n return (\n <>\n <span\n ref={containerRef}\n className={[\n 'block',\n layout === 'intrinsic' ? '' : 'relative overflow-hidden',\n showDynamicBadge ? 'relative' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={\n layout === 'intrinsic'\n ? undefined\n : { minHeight: '1px', backgroundColor: adaptiveBackgroundColor }\n }\n onClick={clickable ? onClick : undefined}\n onKeyDown={clickable ? handleKeyDown : undefined}\n tabIndex={clickable ? 0 : undefined}\n role={clickable ? 'button' : undefined}\n aria-label={clickable ? alt : undefined}\n >\n {showDynamicBadge && (\n <span className=\"absolute left-2 top-2 z-10 rounded bg-blue-600/90 px-2 py-1 text-[10px] font-semibold tracking-wide text-white shadow block\">\n {contextualImageKey}\n </span>\n )}\n {!isLoaded && !isError && sourceIdentifier && (\n <span\n className=\"absolute inset-0 rounded block\"\n style={placeholderStyles}\n role=\"status\"\n aria-label=\"Loading image\"\n />\n )}\n\n {isError && (\n <span\n className=\"absolute inset-0 flex items-center justify-center bg-gray-100 text-gray-500 rounded block\"\n role=\"alert\"\n aria-live=\"assertive\"\n >\n <span className=\"text-center p-4 block\">\n <svg\n className=\"w-8 h-8 mx-auto mb-2 text-gray-400\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\"\n />\n </svg>\n <span className=\"text-xs block\">Failed to load image</span>\n </span>\n </span>\n )}\n\n {imageUrl && !isError && (\n <img\n src={imageUrl}\n alt={alt}\n className={`${\n layout === 'intrinsic'\n ? 'w-full h-auto'\n : 'absolute inset-0 w-full h-full'\n } transition-opacity duration-300 ${\n isLoaded ? 'opacity-100' : 'opacity-0'\n } ${\n effectiveObjectFit === 'contain'\n ? 'object-contain'\n : effectiveObjectFit === 'cover'\n ? 'object-cover'\n : effectiveObjectFit === 'fill'\n ? 'object-fill'\n : effectiveObjectFit === 'none'\n ? 'object-none'\n : effectiveObjectFit === 'scale-down'\n ? 'object-scale-down'\n : ''\n }`}\n style={\n layout === 'intrinsic'\n ? {\n width: '100%',\n height: 'auto',\n maxWidth: '100%',\n display: 'block',\n }\n : {\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n objectFit: effectiveObjectFit,\n maxWidth: '100%',\n display: 'block',\n }\n }\n onLoad={handleImageLoad}\n onError={handleImageError}\n loading={imageUrl.startsWith('data:') ? 'eager' : 'lazy'}\n />\n )}\n </span>\n </>\n );\n});\n"],"mappings":"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","ignoreList":[]}
package/dist/esm/index.js CHANGED
@@ -18,11 +18,6 @@ export { DIAGNOSTIC_TYPES } from './component/diagnosticTypes.js';
18
18
  // Image search filters
19
19
  export { buildImageSearchFilter } from './image/imageSearchFilterTypes.js';
20
20
  export { ImageSearchFilterToken, backgroundFilter } from './image/imageSearchFilters.js';
21
-
22
- // Image sets — the page-level slot contract (ADR 0221)
23
-
24
- export { MAX_IMAGE_SLOTS_PER_SET, DEFAULT_RENDER_WIDTH_PX, MAX_RENDER_WIDTH_PX, hasSlotImage, isSubjectMatch, backdropColorOf, renderRatioOf } from './image/imageSetTypes.js';
25
-
26
21
  // Section definition classes + createSdkRegistry
27
22
  export { HeroSectionDefinition, HeroEntitySectionDefinition, KpiSectionDefinition, FeatureCardsSectionDefinition, EntitySectionDefinition, EntityCollectionSectionDefinition, ComparisonSectionDefinition, TextBlockSectionDefinition, CtaBannerSectionDefinition, CalloutSectionDefinition, NextStepsSectionDefinition, FeatureSection9PlusDefinition, ListItemsSectionDefinition, SkipNodesSectionDefinition, HtmlCommentSectionDefinition, SearchSectionDefinition, ErrorSectionDefinition, FallbackSectionDefinition, createSdkRegistry } from './component/componentDefinitions/index.js';
28
23
 
@@ -59,9 +54,6 @@ export { ComponentDependenciesProvider, useComponentDependencies } from './conte
59
54
  // Raw user query for the current response page
60
55
  export { UserQueryProvider, useUserQuery } from './context/UserQueryContext.js';
61
56
 
62
- // Page-level image slot collector
63
- export { ImageSetProvider, useImageSlot, useImageSetEnabled } from './context/ImageSetContext.js';
64
-
65
57
  // Chips context (suggestion chips shared between SearchSection and error states)
66
58
  export { ChipsProvider, useChips } from './context/ChipsContext.js';
67
59