@wix/web5-core 1.63.35 → 1.63.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"names":["_clients","require","exports","CLIENT_IDS","EXPERIMENT_IDS","_FeatureToggleContext","createFeatureToggleReader","FeatureToggleProvider","useFeatureToggles","useFeatureToggle","_parts","getPartsByType","getPartByRole","getAllByRole","getHeading","getImages","getLinks","extractContent","extractContentMarkdown","deriveRole","_sectionDefinition","DROP_SECTION","_diagnosticTypes","DIAGNOSTIC_TYPES","_imageSearchFilterTypes","buildImageSearchFilter","_imageSearchFilters","ImageSearchFilterToken","backgroundFilter","_componentDefinitions","HeroSectionDefinition","HeroEntitySectionDefinition","KpiSectionDefinition","MetricsSectionDefinition","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","entityHref","normalizeEntityItem","toCatalogPath","entityPayloadFromItems","mergeEntityData","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","getEntityExtractor","registerEntityExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","toMatchedOptions","formatMoney","readCurrencyCode","formatPriceField","formatProductPriceLabel","isProductFamilyEntityType","isDocumentFamilyEntityType","PLATFORM_ENTITY_TYPES","resolveEntityTypeConfig","_callout","CALLOUT_KINDS","CALLOUT_SEMANTICS","_useWeb5Link","useWeb5Link","_useConversation","useConversation","_useDebugImageContext","useDebugImageContext","_useResolvedImageSources","useResolvedImageSources","_useImageSlot","useImageSlot","_ImageSlotContext","ImageSlotProvider","useImageSlotCollector","_composeSemantic","composeSemantic","_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","_AiDisclosure","AiDisclosure","ASSISTANT_TOKEN","DEFAULT_AI_DISCLOSURE_TEXT","_AiIcon","AiIcon","_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 MetricsCompProps,\n MetricsItemCompProps,\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 MetricsItemComponent,\n FeatureItemComponent,\n FeatureCardComponent,\n GenericEntityComponent,\n AiNarrativeComponent,\n ComparisonSectionComponent,\n TextBlockSectionComponent,\n HeroSectionComponent,\n HeroEntitySectionComponent,\n KpiSectionComponent,\n MetricsSectionComponent,\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 MetricsSectionDefinition,\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 entityHref,\n normalizeEntityItem,\n toCatalogPath,\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 isDocumentFamilyEntityType,\n PLATFORM_ENTITY_TYPES,\n resolveEntityTypeConfig,\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';\n\n// Image slots (ADR 0222/0223/0225): a section declares the holes in its layout\n// and a per-section collector resolves them as one set. Replaces the per-image\n// `useResolvedImageSources` path above, which is kept until its callers move.\nexport { useImageSlot } from './hooks/useImageSlot';\nexport type {\n UseImageSlotOptions,\n ResolvedImage,\n} from './hooks/useImageSlot';\nexport {\n ImageSlotProvider,\n useImageSlotCollector,\n} from './context/ImageSlotContext';\nexport type {\n ImageSlotCollector,\n ImageSlotProviderProps,\n} from './context/ImageSlotContext';\nexport { composeSemantic } from './image/composeSemantic';\nexport type { ComposeSemanticInput } from './image/composeSemantic';\nexport type {\n ImageSlotKind,\n ImageMatchQuality,\n ImageKind,\n ImageBackground,\n ImageSlotRequest,\n ImagePalette,\n ImageStatGrid,\n ImageVisualMetadata,\n ResolvedImageSlot,\n ResolveImageSetResponse,\n ResolveImageSetPort,\n SlotState,\n ImageSubject,\n} from './image/imageSlotTypes';\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 {\n AiDisclosure,\n ASSISTANT_TOKEN,\n DEFAULT_AI_DISCLOSURE_TEXT,\n type AiDisclosureProps,\n} from './components/ui/AiDisclosure';\nexport { AiIcon } from './components/ui/icons/AiIcon';\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","MetricsSectionDefinition","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","entityHref","normalizeEntityItem","toCatalogPath","entityPayloadFromItems","mergeEntityData","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","getEntityExtractor","registerEntityExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","toMatchedOptions","formatMoney","readCurrencyCode","formatPriceField","formatProductPriceLabel","isProductFamilyEntityType","isDocumentFamilyEntityType","PLATFORM_ENTITY_TYPES","resolveEntityTypeConfig","_callout","CALLOUT_KINDS","CALLOUT_SEMANTICS","_useWeb5Link","useWeb5Link","_useConversation","useConversation","_useDebugImageContext","useDebugImageContext","_useResolvedImageSources","useResolvedImageSources","_useImageSlot","useImageSlot","_ImageSlotContext","ImageSlotProvider","useImageSlotCollector","_composeSemantic","composeSemantic","_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","_AiDisclosure","AiDisclosure","ASSISTANT_TOKEN","DEFAULT_AI_DISCLOSURE_TEXT","_AiIcon","AiIcon","_PoweredByBadge","PoweredByBadge","DEFAULT_POWERED_BY_HREF","_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 MetricsCompProps,\n MetricsItemCompProps,\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 MetricsItemComponent,\n FeatureItemComponent,\n FeatureCardComponent,\n GenericEntityComponent,\n AiNarrativeComponent,\n ComparisonSectionComponent,\n TextBlockSectionComponent,\n HeroSectionComponent,\n HeroEntitySectionComponent,\n KpiSectionComponent,\n MetricsSectionComponent,\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 MetricsSectionDefinition,\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 entityHref,\n normalizeEntityItem,\n toCatalogPath,\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 isDocumentFamilyEntityType,\n PLATFORM_ENTITY_TYPES,\n resolveEntityTypeConfig,\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';\n\n// Image slots (ADR 0222/0223/0225): a section declares the holes in its layout\n// and a per-section collector resolves them as one set. Replaces the per-image\n// `useResolvedImageSources` path above, which is kept until its callers move.\nexport { useImageSlot } from './hooks/useImageSlot';\nexport type {\n UseImageSlotOptions,\n ResolvedImage,\n} from './hooks/useImageSlot';\nexport {\n ImageSlotProvider,\n useImageSlotCollector,\n} from './context/ImageSlotContext';\nexport type {\n ImageSlotCollector,\n ImageSlotProviderProps,\n} from './context/ImageSlotContext';\nexport { composeSemantic } from './image/composeSemantic';\nexport type { ComposeSemanticInput } from './image/composeSemantic';\nexport type {\n ImageSlotKind,\n ImageMatchQuality,\n ImageKind,\n ImageBackground,\n ImageSlotRequest,\n ImagePalette,\n ImageStatGrid,\n ImageVisualMetadata,\n ResolvedImageSlot,\n ResolveImageSetResponse,\n ResolveImageSetPort,\n SlotState,\n ImageSubject,\n} from './image/imageSlotTypes';\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 {\n AiDisclosure,\n ASSISTANT_TOKEN,\n DEFAULT_AI_DISCLOSURE_TEXT,\n type AiDisclosureProps,\n} from './components/ui/AiDisclosure';\nexport { AiIcon } from './components/ui/icons/AiIcon';\nexport {\n PoweredByBadge,\n DEFAULT_POWERED_BY_HREF,\n type PoweredByBadgeProps,\n} from './components/ui/PoweredByBadge';\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":[]}
@@ -2,6 +2,7 @@
2
2
  @import '../components/ui/PromptEntryEmptyState.css';
3
3
  @import '../components/ui/FeedbackBar.css';
4
4
  @import '../components/ui/AiDisclosure.css';
5
+ @import '../components/ui/PoweredByBadge.css';
5
6
  @import '../components/ui/UserQuery.css';
6
7
  @import '../components/ui/PlacementLoader.css';
7
8
  @import '../components/placement/PlacementResponseRenderer.css';
@@ -0,0 +1,68 @@
1
+ /* "Powered by Niso" free-tier credit bar (B2B-4574).
2
+
3
+ A full-width strip pinned under the prompt dock at the very bottom of the AI
4
+ page. Colour and type are vars with fallbacks so a client can re-skin the bar
5
+ without forking the component — but see the two values below that are
6
+ deliberately fixed, and `App.tsx` on why the bar itself is not a UI slot. */
7
+
8
+ .web5-powered-by {
9
+ /*
10
+ * The bar's lift, straight from the design (Figma 751-2729): a soft drop
11
+ * plus a wider ambient glow, the latter being what actually reads above a
12
+ * bar pinned to the bottom edge.
13
+ *
14
+ * Its own value rather than one of the `--shadow-*` steps in
15
+ * `base-tokens.css`: that is a general-purpose scale clients legitimately
16
+ * re-map — feature.com flattens `--shadow-sm` to `none` — and the bar needs
17
+ * a lift that survives it. Declared here rather than in `base-tokens.css`
18
+ * because that file ships in the *client* bundle, which is versioned apart
19
+ * from this stylesheet; a token defined there would resolve to nothing on
20
+ * any client built before this change.
21
+ */
22
+ --web5-credit-bar-shadow:
23
+ 0px 6px 6px hsl(230 100% 7% / 0.03), 0px 0px 18px hsl(230 100% 7% / 0.07);
24
+
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ width: 100%;
29
+ /*
30
+ * Fixed, not a var. The host docks this bar `position: fixed` and lifts the
31
+ * prompt input by the same 30px (`--web5-credit-bar-height` in `App.css`);
32
+ * a client able to resize it could only ever push the two out of step. The
33
+ * colour and type vars below are safe precisely because they cannot.
34
+ */
35
+ height: 30px;
36
+ padding-inline: var(--web5-powered-by-padding-inline, 16px);
37
+ background: var(--web5-powered-by-background, hsl(var(--background)));
38
+ box-shadow: var(--web5-powered-by-shadow, var(--web5-credit-bar-shadow));
39
+ font-size: var(--web5-powered-by-font-size, 14px);
40
+ line-height: var(--web5-powered-by-line-height, 1);
41
+ font-weight: 400;
42
+ text-align: center;
43
+ }
44
+
45
+ .web5-powered-by__link {
46
+ display: inline-flex;
47
+ align-items: center;
48
+ gap: 0.25em;
49
+ /* WCAG 2.1 AA target size — the 30px bar is taller than the text alone. */
50
+ min-height: 24px;
51
+ color: inherit;
52
+ text-decoration: none;
53
+ cursor: pointer;
54
+ }
55
+
56
+ .web5-powered-by__label {
57
+ color: var(--web5-powered-by-label-color, hsl(var(--muted-foreground)));
58
+ }
59
+
60
+ .web5-powered-by__brand {
61
+ color: var(--web5-powered-by-brand-color, hsl(var(--foreground)));
62
+ }
63
+
64
+ .web5-powered-by__link:hover .web5-powered-by__brand,
65
+ .web5-powered-by__link:focus-visible .web5-powered-by__brand {
66
+ text-decoration: underline;
67
+ text-decoration-skip-ink: none;
68
+ }
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import { cn } from '../../lib/utils.js';
3
+ export const DEFAULT_POWERED_BY_HREF = 'https://www.nisoweb.ai';
4
+
5
+ /**
6
+ * The free-tier credit bar (B2B-4574): a full-width strip at the very bottom of
7
+ * the AI page reading "Powered by Niso", with the brand name linking out.
8
+ *
9
+ * Rendering is the caller's decision — this component says nothing about plans.
10
+ * The AI page mounts it only when the site is on the Free tier (see
11
+ * `shouldShowPoweredBy`); any paid package removes it.
12
+ */
13
+ export const PoweredByBadge = _ref => {
14
+ let {
15
+ label = 'Powered by',
16
+ brand = 'Niso',
17
+ href = DEFAULT_POWERED_BY_HREF,
18
+ target = '_blank',
19
+ onClick,
20
+ className
21
+ } = _ref;
22
+ const rel = target === '_blank' ? 'noopener noreferrer' : undefined;
23
+ return /*#__PURE__*/React.createElement("div", {
24
+ className: cn('web5-powered-by', className)
25
+ }, /*#__PURE__*/React.createElement("a", {
26
+ className: "web5-powered-by__link",
27
+ href: href,
28
+ target: target,
29
+ rel: rel,
30
+ onClick: onClick
31
+ // The visible text splits across two spans for the two-tone treatment,
32
+ // so spell the whole thing out once for assistive tech — including the
33
+ // new tab, which is otherwise unannounced.
34
+ ,
35
+ "aria-label": `${label} ${brand}${target === '_blank' ? ' (opens in a new tab)' : ''}`
36
+ }, /*#__PURE__*/React.createElement("span", {
37
+ className: "web5-powered-by__label"
38
+ }, label), ' ', /*#__PURE__*/React.createElement("span", {
39
+ className: "web5-powered-by__brand"
40
+ }, brand)));
41
+ };
42
+ //# sourceMappingURL=PoweredByBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","cn","DEFAULT_POWERED_BY_HREF","PoweredByBadge","_ref","label","brand","href","target","onClick","className","rel","undefined","createElement"],"sources":["../../../../src/components/ui/PoweredByBadge.tsx"],"sourcesContent":["import React, { FC } from 'react';\nimport { cn } from '../../lib/utils';\n\nexport interface PoweredByBadgeProps {\n /** Muted lead-in. Default: \"Powered by\". */\n label?: string;\n /** The emphasised brand name, and the link's visible anchor. Default: \"Niso\". */\n brand?: string;\n /** URL the badge opens. Default: the Niso marketing site. */\n href?: string;\n /** Override the link target. Default: `_blank` (opens in a new tab). */\n target?: '_blank' | '_self' | '_parent' | '_top';\n /** Click handler invoked before navigation. Use to fire analytics. */\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n className?: string;\n}\n\nexport const DEFAULT_POWERED_BY_HREF = 'https://www.nisoweb.ai';\n\n/**\n * The free-tier credit bar (B2B-4574): a full-width strip at the very bottom of\n * the AI page reading \"Powered by Niso\", with the brand name linking out.\n *\n * Rendering is the caller's decision — this component says nothing about plans.\n * The AI page mounts it only when the site is on the Free tier (see\n * `shouldShowPoweredBy`); any paid package removes it.\n */\nexport const PoweredByBadge: FC<PoweredByBadgeProps> = ({\n label = 'Powered by',\n brand = 'Niso',\n href = DEFAULT_POWERED_BY_HREF,\n target = '_blank',\n onClick,\n className,\n}) => {\n const rel = target === '_blank' ? 'noopener noreferrer' : undefined;\n\n return (\n <div className={cn('web5-powered-by', className)}>\n <a\n className=\"web5-powered-by__link\"\n href={href}\n target={target}\n rel={rel}\n onClick={onClick}\n // The visible text splits across two spans for the two-tone treatment,\n // so spell the whole thing out once for assistive tech — including the\n // new tab, which is otherwise unannounced.\n aria-label={`${label} ${brand}${\n target === '_blank' ? ' (opens in a new tab)' : ''\n }`}\n >\n <span className=\"web5-powered-by__label\">{label}</span>{' '}\n <span className=\"web5-powered-by__brand\">{brand}</span>\n </a>\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAc,OAAO;AACjC,SAASC,EAAE,QAAQ,iBAAiB;AAgBpC,OAAO,MAAMC,uBAAuB,GAAG,wBAAwB;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAuC,GAAGC,IAAA,IAOjD;EAAA,IAPkD;IACtDC,KAAK,GAAG,YAAY;IACpBC,KAAK,GAAG,MAAM;IACdC,IAAI,GAAGL,uBAAuB;IAC9BM,MAAM,GAAG,QAAQ;IACjBC,OAAO;IACPC;EACF,CAAC,GAAAN,IAAA;EACC,MAAMO,GAAG,GAAGH,MAAM,KAAK,QAAQ,GAAG,qBAAqB,GAAGI,SAAS;EAEnE,oBACEZ,KAAA,CAAAa,aAAA;IAAKH,SAAS,EAAET,EAAE,CAAC,iBAAiB,EAAES,SAAS;EAAE,gBAC/CV,KAAA,CAAAa,aAAA;IACEH,SAAS,EAAC,uBAAuB;IACjCH,IAAI,EAAEA,IAAK;IACXC,MAAM,EAAEA,MAAO;IACfG,GAAG,EAAEA,GAAI;IACTF,OAAO,EAAEA;IACT;IACA;IACA;IAAA;IACA,cAAY,GAAGJ,KAAK,IAAIC,KAAK,GAC3BE,MAAM,KAAK,QAAQ,GAAG,uBAAuB,GAAG,EAAE;EACjD,gBAEHR,KAAA,CAAAa,aAAA;IAAMH,SAAS,EAAC;EAAwB,GAAEL,KAAY,CAAC,EAAC,GAAG,eAC3DL,KAAA,CAAAa,aAAA;IAAMH,SAAS,EAAC;EAAwB,GAAEJ,KAAY,CACrD,CACA,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -18,9 +18,55 @@
18
18
  * CDN build externalises core, so a core change could not be seen through
19
19
  * `?clientBundleUrl=` until it had been published. 0223 always assigned it
20
20
  * here, and this is that move.
21
+ *
22
+ * WHAT THIS PHRASE IS FOR, AND WHY IT IS SHORT (ADR 0238)
23
+ * ------------------------------------------------------
24
+ * It buys **recall, and only recall**. In media-manager an editorial slot
25
+ * retrieves `SEMANTIC` over `semantic_text` capped at 30 candidates
26
+ * (`CandidateGather.planFor`), scoped by a filter that is just "this site's
27
+ * images" (`buildFilter`) — so the phrase ranks the corpus rather than gating
28
+ * it. Which picture then WINS is decided by `SlotScorer`, whose every term is
29
+ * geometric (crop fit, background, subject, text safety, resolution). Vespa's
30
+ * relevance score is not one of them, and the pool's order is discarded by the
31
+ * assignment solve. The phrase's entire job is choosing which 30 images reach
32
+ * the scorer.
33
+ *
34
+ * That is why it is budgeted in WORDS. The documents it is matched against are
35
+ * short — `ImageDocumentWriter.semanticText` embeds `alt, caption, label,
36
+ * label…`, usually under ten words — and retrieval is hybrid, BM25 blended with
37
+ * vector closeness. A headline plus a clause of marketing prose is the wrong
38
+ * shape against that on both halves: the vector drifts toward the mean of
39
+ * several topics instead of sitting on the subject, and BM25 spends term weight
40
+ * on filler that pulls in whatever else on the site happens to carry those
41
+ * words. Nothing normalises the query — case folding and dedupe (`LabelMerge`)
42
+ * happen on the document side only.
43
+ *
44
+ * A phrase that is too specific costs a worse 30, never a blank section: the
45
+ * site-wide widening in `CandidateGather.poolFor` is entity-only because an
46
+ * editorial pool empties only when the site has no images at all.
47
+ *
48
+ * CHANGING ANY OF THIS INVALIDATES SLOT IDS. `useImageSlot` derives a text
49
+ * slot's id as `s:${semantic}` (ADR 0223), so the phrase IS the cache key —
50
+ * every text-derived slot in the product gets a new id. Not a place for
51
+ * cosmetic edits.
52
+ */
53
+
54
+ /**
55
+ * The phrase's real budget, in whole words — the unit that matters, because
56
+ * what it is matched against is a short bag of nouns and not a paragraph.
57
+ */
58
+ const WORD_BUDGET = 10;
59
+
60
+ /**
61
+ * A title of this many words already names its own subject, so the lead adds
62
+ * dilution rather than signal and is dropped. Below it the title may be as thin
63
+ * as "Our picks" or "Why it matters", which names nothing retrievable on its
64
+ * own — that is the case the lead exists for.
21
65
  */
66
+ const TITLE_ENOUGH = 5;
22
67
 
23
- /** Longer than this and the tail stops helping retrieval and starts diluting it. */
68
+ /** A character backstop under the word budget: ten words is normally well
69
+ * inside it, but one pathological unbroken "word" is not. */
24
70
  const MAX_LENGTH = 120;
25
71
 
26
72
  /** Below this there is no query worth sending — better to render no picture
@@ -35,9 +81,18 @@ const stripMarkdown = raw => raw
35
81
  .replace(/^\s*#{1,6}\s*/gm, '').replace(/^\s*>\s?/gm, '')
36
82
  // html tags an author or the parser may have left behind
37
83
  .replace(/<[^>]+>/g, ' ');
38
- const tidy = raw => stripMarkdown(raw).replace(/\s+/g, ' ').trim()
39
- // trailing punctuation is noise in a retrieval phrase
40
- .replace(/[\s.,;:!?—–-]+$/g, '').trim();
84
+ const trimTail = raw => raw.replace(/[\s.,;:!?—–-]+$/g, '').trim();
85
+ const tidy = raw => trimTail(stripMarkdown(raw).replace(/\s+/g, ' ').trim());
86
+ const wordsOf = raw => raw.split(' ').filter(word => word.length > 0);
87
+
88
+ /** Keep at most `max` whole words. The unit the budget is actually stated in. */
89
+ const clampToWords = (raw, max) => {
90
+ const words = wordsOf(raw);
91
+ if (words.length <= max) {
92
+ return raw;
93
+ }
94
+ return trimTail(words.slice(0, max).join(' '));
95
+ };
41
96
 
42
97
  /**
43
98
  * Clamp without cutting a word in half. Slicing at a fixed length leaves
@@ -54,9 +109,12 @@ const clampToWord = (raw, max) => {
54
109
  const cut = raw.slice(0, max + 1);
55
110
  const lastBreak = cut.lastIndexOf(' ');
56
111
  const out = lastBreak > 0 ? cut.slice(0, lastBreak) : raw.slice(0, max);
57
- return out.replace(/[\s.,;:!?—–-]+$/g, '').trim();
112
+ return trimTail(out);
58
113
  };
59
114
 
115
+ /** The word budget first, then the character backstop under it. */
116
+ const budgeted = raw => clampToWord(clampToWords(raw, WORD_BUDGET), MAX_LENGTH);
117
+
60
118
  /** The first clause carries the subject; what follows is usually qualification. */
61
119
  const firstClause = raw => {
62
120
  const m = raw.match(/^[^.!?;]+/);
@@ -75,17 +133,23 @@ export function composeSemantic(_ref) {
75
133
  // A mission, when there is one, is the whole answer.
76
134
  const mission = tidy(sectionSemantic ?? '');
77
135
  if (mission.length >= MIN_LENGTH) {
78
- return clampToWord(mission, MAX_LENGTH);
136
+ return budgeted(mission);
79
137
  }
80
138
  const head = tidy(title ?? '');
81
- const body = firstClause(tidy(lead ?? ''));
139
+ const headWords = wordsOf(head).length;
140
+
141
+ // The title is the stronger signal, so it is spent first and never truncated
142
+ // to make room for the lead. Once it names a subject on its own, it IS the
143
+ // phrase.
144
+ if (headWords >= TITLE_ENOUGH) {
145
+ const out = budgeted(head);
146
+ return out.length < MIN_LENGTH ? '' : out;
147
+ }
148
+
149
+ // A thin title spends what it did not use on the lead's first clause.
150
+ const body = clampToWords(firstClause(tidy(lead ?? '')), WORD_BUDGET - headWords);
82
151
  const joined = [head, body].filter(Boolean).join('. ');
83
152
  if (joined.length < MIN_LENGTH) return '';
84
- if (joined.length <= MAX_LENGTH) return joined;
85
-
86
- // Over budget: keep the title whole if it fits, since it is the stronger
87
- // signal, and spend whatever is left on the lead.
88
- if (head.length >= MAX_LENGTH) return clampToWord(head, MAX_LENGTH);
89
153
  return clampToWord(joined, MAX_LENGTH);
90
154
  }
91
155
  //# sourceMappingURL=composeSemantic.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MAX_LENGTH","MIN_LENGTH","stripMarkdown","raw","replace","tidy","trim","clampToWord","max","length","cut","slice","lastBreak","lastIndexOf","out","firstClause","m","match","composeSemantic","_ref","title","lead","sectionSemantic","mission","head","body","joined","filter","Boolean","join"],"sources":["../../../src/image/composeSemantic.ts"],"sourcesContent":["/**\n * Turn a section's own words into a retrieval phrase.\n *\n * The section hands over its RAW props — a title, a lead paragraph — not a\n * query string. Composing is this module's job, in one place, because the two\n * call sites that do it today invent their own phrase, do not agree with each\n * other, and neither is tested:\n *\n * w5-client-circana/src/components/sections/GenericEntitySection.tsx:144\n * `web5://image/${title}` — raw, so `**Nike** collections`\n * is searched WITH its asterisks\n * w5-client-circana/src/components/sections/ResearchSection.tsx:68\n * `web5://image/${encodeURIComponent(title)}` — same idea, escaped\n *\n * Centralising it is most of what the text-derived case is worth.\n *\n * Lifted from the seed client package (ADR 0225): it started there because the\n * CDN build externalises core, so a core change could not be seen through\n * `?clientBundleUrl=` until it had been published. 0223 always assigned it\n * here, and this is that move.\n */\n\n/** Longer than this and the tail stops helping retrieval and starts diluting it. */\nconst MAX_LENGTH = 120;\n\n/** Below this there is no query worth sending — better to render no picture\n * than to retrieve on a word like \"More\". */\nconst MIN_LENGTH = 3;\n\nconst stripMarkdown = (raw: string): string =>\n raw\n // images before links: ![alt](src) would otherwise leave a stray `!`\n .replace(/!\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n .replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n // emphasis / strong / strike / inline code — keep the words, drop the marks\n .replace(/(\\*\\*\\*|\\*\\*|\\*|___|__|_|~~|`)/g, '')\n // leading heading hashes and blockquote marks\n .replace(/^\\s*#{1,6}\\s*/gm, '')\n .replace(/^\\s*>\\s?/gm, '')\n // html tags an author or the parser may have left behind\n .replace(/<[^>]+>/g, ' ');\n\nconst tidy = (raw: string): string =>\n stripMarkdown(raw)\n .replace(/\\s+/g, ' ')\n .trim()\n // trailing punctuation is noise in a retrieval phrase\n .replace(/[\\s.,;:!?—–-]+$/g, '')\n .trim();\n\n/**\n * Clamp without cutting a word in half. Slicing at a fixed length leaves\n * fragments like \"the kinds of product\" — observed in the first real run — and\n * a dangling partial word is noise in a retrieval phrase, not a shorter\n * version of it. Falls back to a hard slice only when the budget cannot fit\n * even one word.\n */\nconst clampToWord = (raw: string, max: number): string => {\n if (raw.length <= max) {\n return raw;\n }\n // +1 so a boundary landing exactly on the budget still counts as a break.\n const cut = raw.slice(0, max + 1);\n const lastBreak = cut.lastIndexOf(' ');\n const out = lastBreak > 0 ? cut.slice(0, lastBreak) : raw.slice(0, max);\n return out.replace(/[\\s.,;:!?—–-]+$/g, '').trim();\n};\n\n/** The first clause carries the subject; what follows is usually qualification. */\nconst firstClause = (raw: string): string => {\n const m = raw.match(/^[^.!?;]+/);\n return (m ? m[0] : raw).trim();\n};\n\nexport interface ComposeSemanticInput {\n /** The section's headline. */\n title?: string;\n /** Its lead paragraph or body copy. */\n lead?: string;\n /** The descriptor's own `semantic` / mission, when the host supplies one.\n * Outranks the prose: it is what the orchestrator meant the section to be\n * about, which is a better subject than what it happened to say. */\n sectionSemantic?: string;\n}\n\n/**\n * Returns the phrase, or `''` when what survives is too thin to retrieve on —\n * the caller then declares no slot at all rather than sending a bad query.\n */\nexport function composeSemantic({\n title,\n lead,\n sectionSemantic,\n}: ComposeSemanticInput): string {\n // A mission, when there is one, is the whole answer.\n const mission = tidy(sectionSemantic ?? '');\n if (mission.length >= MIN_LENGTH) {\n return clampToWord(mission, MAX_LENGTH);\n }\n\n const head = tidy(title ?? '');\n const body = firstClause(tidy(lead ?? ''));\n\n const joined = [head, body].filter(Boolean).join('. ');\n if (joined.length < MIN_LENGTH) return '';\n\n if (joined.length <= MAX_LENGTH) return joined;\n\n // Over budget: keep the title whole if it fits, since it is the stronger\n // signal, and spend whatever is left on the lead.\n if (head.length >= MAX_LENGTH) return clampToWord(head, MAX_LENGTH);\n return clampToWord(joined, MAX_LENGTH);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["WORD_BUDGET","TITLE_ENOUGH","MAX_LENGTH","MIN_LENGTH","stripMarkdown","raw","replace","trimTail","trim","tidy","wordsOf","split","filter","word","length","clampToWords","max","words","slice","join","clampToWord","cut","lastBreak","lastIndexOf","out","budgeted","firstClause","m","match","composeSemantic","_ref","title","lead","sectionSemantic","mission","head","headWords","body","joined","Boolean"],"sources":["../../../src/image/composeSemantic.ts"],"sourcesContent":["/**\n * Turn a section's own words into a retrieval phrase.\n *\n * The section hands over its RAW props — a title, a lead paragraph — not a\n * query string. Composing is this module's job, in one place, because the two\n * call sites that do it today invent their own phrase, do not agree with each\n * other, and neither is tested:\n *\n * w5-client-circana/src/components/sections/GenericEntitySection.tsx:144\n * `web5://image/${title}` — raw, so `**Nike** collections`\n * is searched WITH its asterisks\n * w5-client-circana/src/components/sections/ResearchSection.tsx:68\n * `web5://image/${encodeURIComponent(title)}` — same idea, escaped\n *\n * Centralising it is most of what the text-derived case is worth.\n *\n * Lifted from the seed client package (ADR 0225): it started there because the\n * CDN build externalises core, so a core change could not be seen through\n * `?clientBundleUrl=` until it had been published. 0223 always assigned it\n * here, and this is that move.\n *\n * WHAT THIS PHRASE IS FOR, AND WHY IT IS SHORT (ADR 0238)\n * ------------------------------------------------------\n * It buys **recall, and only recall**. In media-manager an editorial slot\n * retrieves `SEMANTIC` over `semantic_text` capped at 30 candidates\n * (`CandidateGather.planFor`), scoped by a filter that is just \"this site's\n * images\" (`buildFilter`) — so the phrase ranks the corpus rather than gating\n * it. Which picture then WINS is decided by `SlotScorer`, whose every term is\n * geometric (crop fit, background, subject, text safety, resolution). Vespa's\n * relevance score is not one of them, and the pool's order is discarded by the\n * assignment solve. The phrase's entire job is choosing which 30 images reach\n * the scorer.\n *\n * That is why it is budgeted in WORDS. The documents it is matched against are\n * short — `ImageDocumentWriter.semanticText` embeds `alt, caption, label,\n * label…`, usually under ten words — and retrieval is hybrid, BM25 blended with\n * vector closeness. A headline plus a clause of marketing prose is the wrong\n * shape against that on both halves: the vector drifts toward the mean of\n * several topics instead of sitting on the subject, and BM25 spends term weight\n * on filler that pulls in whatever else on the site happens to carry those\n * words. Nothing normalises the query — case folding and dedupe (`LabelMerge`)\n * happen on the document side only.\n *\n * A phrase that is too specific costs a worse 30, never a blank section: the\n * site-wide widening in `CandidateGather.poolFor` is entity-only because an\n * editorial pool empties only when the site has no images at all.\n *\n * CHANGING ANY OF THIS INVALIDATES SLOT IDS. `useImageSlot` derives a text\n * slot's id as `s:${semantic}` (ADR 0223), so the phrase IS the cache key —\n * every text-derived slot in the product gets a new id. Not a place for\n * cosmetic edits.\n */\n\n/**\n * The phrase's real budget, in whole words — the unit that matters, because\n * what it is matched against is a short bag of nouns and not a paragraph.\n */\nconst WORD_BUDGET = 10;\n\n/**\n * A title of this many words already names its own subject, so the lead adds\n * dilution rather than signal and is dropped. Below it the title may be as thin\n * as \"Our picks\" or \"Why it matters\", which names nothing retrievable on its\n * own — that is the case the lead exists for.\n */\nconst TITLE_ENOUGH = 5;\n\n/** A character backstop under the word budget: ten words is normally well\n * inside it, but one pathological unbroken \"word\" is not. */\nconst MAX_LENGTH = 120;\n\n/** Below this there is no query worth sending — better to render no picture\n * than to retrieve on a word like \"More\". */\nconst MIN_LENGTH = 3;\n\nconst stripMarkdown = (raw: string): string =>\n raw\n // images before links: ![alt](src) would otherwise leave a stray `!`\n .replace(/!\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n .replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n // emphasis / strong / strike / inline code — keep the words, drop the marks\n .replace(/(\\*\\*\\*|\\*\\*|\\*|___|__|_|~~|`)/g, '')\n // leading heading hashes and blockquote marks\n .replace(/^\\s*#{1,6}\\s*/gm, '')\n .replace(/^\\s*>\\s?/gm, '')\n // html tags an author or the parser may have left behind\n .replace(/<[^>]+>/g, ' ');\n\nconst trimTail = (raw: string): string =>\n raw.replace(/[\\s.,;:!?—–-]+$/g, '').trim();\n\nconst tidy = (raw: string): string =>\n trimTail(stripMarkdown(raw).replace(/\\s+/g, ' ').trim());\n\nconst wordsOf = (raw: string): string[] =>\n raw.split(' ').filter((word) => word.length > 0);\n\n/** Keep at most `max` whole words. The unit the budget is actually stated in. */\nconst clampToWords = (raw: string, max: number): string => {\n const words = wordsOf(raw);\n if (words.length <= max) {\n return raw;\n }\n return trimTail(words.slice(0, max).join(' '));\n};\n\n/**\n * Clamp without cutting a word in half. Slicing at a fixed length leaves\n * fragments like \"the kinds of product\" — observed in the first real run — and\n * a dangling partial word is noise in a retrieval phrase, not a shorter\n * version of it. Falls back to a hard slice only when the budget cannot fit\n * even one word.\n */\nconst clampToWord = (raw: string, max: number): string => {\n if (raw.length <= max) {\n return raw;\n }\n // +1 so a boundary landing exactly on the budget still counts as a break.\n const cut = raw.slice(0, max + 1);\n const lastBreak = cut.lastIndexOf(' ');\n const out = lastBreak > 0 ? cut.slice(0, lastBreak) : raw.slice(0, max);\n return trimTail(out);\n};\n\n/** The word budget first, then the character backstop under it. */\nconst budgeted = (raw: string): string =>\n clampToWord(clampToWords(raw, WORD_BUDGET), MAX_LENGTH);\n\n/** The first clause carries the subject; what follows is usually qualification. */\nconst firstClause = (raw: string): string => {\n const m = raw.match(/^[^.!?;]+/);\n return (m ? m[0] : raw).trim();\n};\n\nexport interface ComposeSemanticInput {\n /** The section's headline. */\n title?: string;\n /** Its lead paragraph or body copy. */\n lead?: string;\n /** The descriptor's own `semantic` / mission, when the host supplies one.\n * Outranks the prose: it is what the orchestrator meant the section to be\n * about, which is a better subject than what it happened to say. */\n sectionSemantic?: string;\n}\n\n/**\n * Returns the phrase, or `''` when what survives is too thin to retrieve on —\n * the caller then declares no slot at all rather than sending a bad query.\n */\nexport function composeSemantic({\n title,\n lead,\n sectionSemantic,\n}: ComposeSemanticInput): string {\n // A mission, when there is one, is the whole answer.\n const mission = tidy(sectionSemantic ?? '');\n if (mission.length >= MIN_LENGTH) {\n return budgeted(mission);\n }\n\n const head = tidy(title ?? '');\n const headWords = wordsOf(head).length;\n\n // The title is the stronger signal, so it is spent first and never truncated\n // to make room for the lead. Once it names a subject on its own, it IS the\n // phrase.\n if (headWords >= TITLE_ENOUGH) {\n const out = budgeted(head);\n return out.length < MIN_LENGTH ? '' : out;\n }\n\n // A thin title spends what it did not use on the lead's first clause.\n const body = clampToWords(\n firstClause(tidy(lead ?? '')),\n WORD_BUDGET - headWords,\n );\n\n const joined = [head, body].filter(Boolean).join('. ');\n if (joined.length < MIN_LENGTH) return '';\n\n return clampToWord(joined, MAX_LENGTH);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAMA,WAAW,GAAG,EAAE;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,YAAY,GAAG,CAAC;;AAEtB;AACA;AACA,MAAMC,UAAU,GAAG,GAAG;;AAEtB;AACA;AACA,MAAMC,UAAU,GAAG,CAAC;AAEpB,MAAMC,aAAa,GAAIC,GAAW,IAChCA;AACE;AAAA,CACCC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC,CACxCA,OAAO,CAAC,wBAAwB,EAAE,IAAI;AACvC;AAAA,CACCA,OAAO,CAAC,iCAAiC,EAAE,EAAE;AAC9C;AAAA,CACCA,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAC9BA,OAAO,CAAC,YAAY,EAAE,EAAE;AACzB;AAAA,CACCA,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;AAE7B,MAAMC,QAAQ,GAAIF,GAAW,IAC3BA,GAAG,CAACC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAACE,IAAI,CAAC,CAAC;AAE5C,MAAMC,IAAI,GAAIJ,GAAW,IACvBE,QAAQ,CAACH,aAAa,CAACC,GAAG,CAAC,CAACC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAACE,IAAI,CAAC,CAAC,CAAC;AAE1D,MAAME,OAAO,GAAIL,GAAW,IAC1BA,GAAG,CAACM,KAAK,CAAC,GAAG,CAAC,CAACC,MAAM,CAAEC,IAAI,IAAKA,IAAI,CAACC,MAAM,GAAG,CAAC,CAAC;;AAElD;AACA,MAAMC,YAAY,GAAGA,CAACV,GAAW,EAAEW,GAAW,KAAa;EACzD,MAAMC,KAAK,GAAGP,OAAO,CAACL,GAAG,CAAC;EAC1B,IAAIY,KAAK,CAACH,MAAM,IAAIE,GAAG,EAAE;IACvB,OAAOX,GAAG;EACZ;EACA,OAAOE,QAAQ,CAACU,KAAK,CAACC,KAAK,CAAC,CAAC,EAAEF,GAAG,CAAC,CAACG,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,WAAW,GAAGA,CAACf,GAAW,EAAEW,GAAW,KAAa;EACxD,IAAIX,GAAG,CAACS,MAAM,IAAIE,GAAG,EAAE;IACrB,OAAOX,GAAG;EACZ;EACA;EACA,MAAMgB,GAAG,GAAGhB,GAAG,CAACa,KAAK,CAAC,CAAC,EAAEF,GAAG,GAAG,CAAC,CAAC;EACjC,MAAMM,SAAS,GAAGD,GAAG,CAACE,WAAW,CAAC,GAAG,CAAC;EACtC,MAAMC,GAAG,GAAGF,SAAS,GAAG,CAAC,GAAGD,GAAG,CAACH,KAAK,CAAC,CAAC,EAAEI,SAAS,CAAC,GAAGjB,GAAG,CAACa,KAAK,CAAC,CAAC,EAAEF,GAAG,CAAC;EACvE,OAAOT,QAAQ,CAACiB,GAAG,CAAC;AACtB,CAAC;;AAED;AACA,MAAMC,QAAQ,GAAIpB,GAAW,IAC3Be,WAAW,CAACL,YAAY,CAACV,GAAG,EAAEL,WAAW,CAAC,EAAEE,UAAU,CAAC;;AAEzD;AACA,MAAMwB,WAAW,GAAIrB,GAAW,IAAa;EAC3C,MAAMsB,CAAC,GAAGtB,GAAG,CAACuB,KAAK,CAAC,WAAW,CAAC;EAChC,OAAO,CAACD,CAAC,GAAGA,CAAC,CAAC,CAAC,CAAC,GAAGtB,GAAG,EAAEG,IAAI,CAAC,CAAC;AAChC,CAAC;AAaD;AACA;AACA;AACA;AACA,OAAO,SAASqB,eAAeA,CAAAC,IAAA,EAIE;EAAA,IAJD;IAC9BC,KAAK;IACLC,IAAI;IACJC;EACoB,CAAC,GAAAH,IAAA;EACrB;EACA,MAAMI,OAAO,GAAGzB,IAAI,CAACwB,eAAe,IAAI,EAAE,CAAC;EAC3C,IAAIC,OAAO,CAACpB,MAAM,IAAIX,UAAU,EAAE;IAChC,OAAOsB,QAAQ,CAACS,OAAO,CAAC;EAC1B;EAEA,MAAMC,IAAI,GAAG1B,IAAI,CAACsB,KAAK,IAAI,EAAE,CAAC;EAC9B,MAAMK,SAAS,GAAG1B,OAAO,CAACyB,IAAI,CAAC,CAACrB,MAAM;;EAEtC;EACA;EACA;EACA,IAAIsB,SAAS,IAAInC,YAAY,EAAE;IAC7B,MAAMuB,GAAG,GAAGC,QAAQ,CAACU,IAAI,CAAC;IAC1B,OAAOX,GAAG,CAACV,MAAM,GAAGX,UAAU,GAAG,EAAE,GAAGqB,GAAG;EAC3C;;EAEA;EACA,MAAMa,IAAI,GAAGtB,YAAY,CACvBW,WAAW,CAACjB,IAAI,CAACuB,IAAI,IAAI,EAAE,CAAC,CAAC,EAC7BhC,WAAW,GAAGoC,SAChB,CAAC;EAED,MAAME,MAAM,GAAG,CAACH,IAAI,EAAEE,IAAI,CAAC,CAACzB,MAAM,CAAC2B,OAAO,CAAC,CAACpB,IAAI,CAAC,IAAI,CAAC;EACtD,IAAImB,MAAM,CAACxB,MAAM,GAAGX,UAAU,EAAE,OAAO,EAAE;EAEzC,OAAOiB,WAAW,CAACkB,MAAM,EAAEpC,UAAU,CAAC;AACxC","ignoreList":[]}
package/dist/esm/index.js CHANGED
@@ -115,6 +115,7 @@ export { SearchSection } from './components/ui/SearchSection.js';
115
115
  export { FeedbackBar } from './components/ui/FeedbackBar.js';
116
116
  export { AiDisclosure, ASSISTANT_TOKEN, DEFAULT_AI_DISCLOSURE_TEXT } from './components/ui/AiDisclosure.js';
117
117
  export { AiIcon } from './components/ui/icons/AiIcon.js';
118
+ export { PoweredByBadge, DEFAULT_POWERED_BY_HREF } from './components/ui/PoweredByBadge.js';
118
119
  export { BottomContainer } from './components/ui/BottomContainer.js';
119
120
  export { MarkdownText } from './components/ui/MarkdownText.js';
120
121
  export { CalloutBlock } from './components/ui/CalloutBlock.js';