@wix/web5-core 1.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/cjs/client/clientBundleOverride.js +48 -0
- package/dist/cjs/client/clientBundleOverride.js.map +1 -0
- package/dist/cjs/client/devEnvironment.js +4 -0
- package/dist/cjs/client/devEnvironment.js.map +1 -0
- package/dist/cjs/client/loadClientBundle.js +85 -0
- package/dist/cjs/client/loadClientBundle.js.map +1 -0
- package/dist/cjs/client/wixAuthFetch.js +73 -0
- package/dist/cjs/client/wixAuthFetch.js.map +1 -0
- package/dist/cjs/clients.js +15 -0
- package/dist/cjs/clients.js.map +1 -0
- package/dist/cjs/color/colorUtils.js +126 -0
- package/dist/cjs/color/colorUtils.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/CalloutSectionDefinition.js +67 -0
- package/dist/cjs/component/componentDefinitions/CalloutSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/ComparisonSectionDefinition.js +141 -0
- package/dist/cjs/component/componentDefinitions/ComparisonSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/CtaBannerSectionDefinition.js +85 -0
- package/dist/cjs/component/componentDefinitions/CtaBannerSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/EntitySectionDefinition.js +171 -0
- package/dist/cjs/component/componentDefinitions/EntitySectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/ErrorSectionDefinition.js +81 -0
- package/dist/cjs/component/componentDefinitions/ErrorSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/FallbackSectionDefinition.js +29 -0
- package/dist/cjs/component/componentDefinitions/FallbackSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/FeatureCardsSectionDefinition.js +119 -0
- package/dist/cjs/component/componentDefinitions/FeatureCardsSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/FeatureSection9PlusDefinition.js +75 -0
- package/dist/cjs/component/componentDefinitions/FeatureSection9PlusDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/HeroEntitySectionDefinition.js +124 -0
- package/dist/cjs/component/componentDefinitions/HeroEntitySectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/HeroSectionDefinition.js +209 -0
- package/dist/cjs/component/componentDefinitions/HeroSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/HtmlCommentSectionDefinition.js +19 -0
- package/dist/cjs/component/componentDefinitions/HtmlCommentSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/KpiSectionDefinition.js +114 -0
- package/dist/cjs/component/componentDefinitions/KpiSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/NextStepsSectionDefinition.js +136 -0
- package/dist/cjs/component/componentDefinitions/NextStepsSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/SearchSectionDefinition.js +18 -0
- package/dist/cjs/component/componentDefinitions/SearchSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/SkipNodesSectionDefinition.js +20 -0
- package/dist/cjs/component/componentDefinitions/SkipNodesSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/TextBlockSectionDefinition.js +65 -0
- package/dist/cjs/component/componentDefinitions/TextBlockSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/index.js +48 -0
- package/dist/cjs/component/componentDefinitions/index.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/listItemsSectionDefinition.js +86 -0
- package/dist/cjs/component/componentDefinitions/listItemsSectionDefinition.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/parse-utils.js +434 -0
- package/dist/cjs/component/componentDefinitions/parse-utils.js.map +1 -0
- package/dist/cjs/component/componentDefinitions/specHelpers.js +36 -0
- package/dist/cjs/component/componentDefinitions/specHelpers.js.map +1 -0
- package/dist/cjs/component/componentParser.js +365 -0
- package/dist/cjs/component/componentParser.js.map +1 -0
- package/dist/cjs/component/diagnosticTypes.js +30 -0
- package/dist/cjs/component/diagnosticTypes.js.map +1 -0
- package/dist/cjs/component/parser-types.js +4 -0
- package/dist/cjs/component/parser-types.js.map +1 -0
- package/dist/cjs/component/section-definition.js +4 -0
- package/dist/cjs/component/section-definition.js.map +1 -0
- package/dist/cjs/component/types.js +4 -0
- package/dist/cjs/component/types.js.map +1 -0
- package/dist/cjs/components/placement/PlacementPayloadContext.js +29 -0
- package/dist/cjs/components/placement/PlacementPayloadContext.js.map +1 -0
- package/dist/cjs/components/placement/PlacementResponseRenderer.css +269 -0
- package/dist/cjs/components/placement/PlacementResponseRenderer.js +259 -0
- package/dist/cjs/components/placement/PlacementResponseRenderer.js.map +1 -0
- package/dist/cjs/components/placement/buildPlacementDependencies.js +214 -0
- package/dist/cjs/components/placement/buildPlacementDependencies.js.map +1 -0
- package/dist/cjs/components/ui/BottomContainer.js +26 -0
- package/dist/cjs/components/ui/BottomContainer.js.map +1 -0
- package/dist/cjs/components/ui/CalloutBlock.js +156 -0
- package/dist/cjs/components/ui/CalloutBlock.js.map +1 -0
- package/dist/cjs/components/ui/Disclaimer.css +35 -0
- package/dist/cjs/components/ui/Disclaimer.js +56 -0
- package/dist/cjs/components/ui/Disclaimer.js.map +1 -0
- package/dist/cjs/components/ui/FeedbackBar.css +267 -0
- package/dist/cjs/components/ui/FeedbackBar.js +417 -0
- package/dist/cjs/components/ui/FeedbackBar.js.map +1 -0
- package/dist/cjs/components/ui/Loader.js +73 -0
- package/dist/cjs/components/ui/Loader.js.map +1 -0
- package/dist/cjs/components/ui/MarkdownText.js +419 -0
- package/dist/cjs/components/ui/MarkdownText.js.map +1 -0
- package/dist/cjs/components/ui/OptimizedImage.js +414 -0
- package/dist/cjs/components/ui/OptimizedImage.js.map +1 -0
- package/dist/cjs/components/ui/PlacementLoader.css +101 -0
- package/dist/cjs/components/ui/PlacementLoader.js +62 -0
- package/dist/cjs/components/ui/PlacementLoader.js.map +1 -0
- package/dist/cjs/components/ui/PromptEntryEmptyState.css +172 -0
- package/dist/cjs/components/ui/PromptEntryEmptyState.js +96 -0
- package/dist/cjs/components/ui/PromptEntryEmptyState.js.map +1 -0
- package/dist/cjs/components/ui/SearchSection.css +538 -0
- package/dist/cjs/components/ui/SearchSection.js +550 -0
- package/dist/cjs/components/ui/SearchSection.js.map +1 -0
- package/dist/cjs/components/ui/SectionSkeleton.css +109 -0
- package/dist/cjs/components/ui/SectionSkeleton.js +190 -0
- package/dist/cjs/components/ui/SectionSkeleton.js.map +1 -0
- package/dist/cjs/components/ui/SmartIcon.js +122 -0
- package/dist/cjs/components/ui/SmartIcon.js.map +1 -0
- package/dist/cjs/components/ui/UnifiedLink.js +169 -0
- package/dist/cjs/components/ui/UnifiedLink.js.map +1 -0
- package/dist/cjs/components/ui/UserQuery.js +348 -0
- package/dist/cjs/components/ui/UserQuery.js.map +1 -0
- package/dist/cjs/components/ui/icons/ArrowTopRightIcon.js +37 -0
- package/dist/cjs/components/ui/icons/ArrowTopRightIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/ArrowUpIcon.js +61 -0
- package/dist/cjs/components/ui/icons/ArrowUpIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/CheckIcon.js +37 -0
- package/dist/cjs/components/ui/icons/CheckIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/CommentIcon.js +34 -0
- package/dist/cjs/components/ui/icons/CommentIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/PlusIcon.js +51 -0
- package/dist/cjs/components/ui/icons/PlusIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/RedoIcon.js +51 -0
- package/dist/cjs/components/ui/icons/RedoIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/ShareIcon.js +81 -0
- package/dist/cjs/components/ui/icons/ShareIcon.js.map +1 -0
- package/dist/cjs/components/ui/icons/UndoIcon.js +51 -0
- package/dist/cjs/components/ui/icons/UndoIcon.js.map +1 -0
- package/dist/cjs/components/ui/table.js +159 -0
- package/dist/cjs/components/ui/table.js.map +1 -0
- package/dist/cjs/context/ChipsContext.js +12 -0
- package/dist/cjs/context/ChipsContext.js.map +1 -0
- package/dist/cjs/context/ComponentDependenciesContext.js +32 -0
- package/dist/cjs/context/ComponentDependenciesContext.js.map +1 -0
- package/dist/cjs/entity/defaultExtractor.js +117 -0
- package/dist/cjs/entity/defaultExtractor.js.map +1 -0
- package/dist/cjs/entity/enrichEntitiesFromPayload.js +39 -0
- package/dist/cjs/entity/enrichEntitiesFromPayload.js.map +1 -0
- package/dist/cjs/entity/fetchEntityListData.js +78 -0
- package/dist/cjs/entity/fetchEntityListData.js.map +1 -0
- package/dist/cjs/entity/index.js +41 -0
- package/dist/cjs/entity/index.js.map +1 -0
- package/dist/cjs/entity/types.js +4 -0
- package/dist/cjs/entity/types.js.map +1 -0
- package/dist/cjs/errors/conversationErrorTypes.js +56 -0
- package/dist/cjs/errors/conversationErrorTypes.js.map +1 -0
- package/dist/cjs/errors/errorTemplates.js +86 -0
- package/dist/cjs/errors/errorTemplates.js.map +1 -0
- package/dist/cjs/errors/index.js +13 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/external-types.d.js +2 -0
- package/dist/cjs/external-types.d.js.map +1 -0
- package/dist/cjs/featureToggles/FeatureToggleContext.js +44 -0
- package/dist/cjs/featureToggles/FeatureToggleContext.js.map +1 -0
- package/dist/cjs/hooks/useConversation.js +10 -0
- package/dist/cjs/hooks/useConversation.js.map +1 -0
- package/dist/cjs/hooks/useDebugImageContext.js +10 -0
- package/dist/cjs/hooks/useDebugImageContext.js.map +1 -0
- package/dist/cjs/hooks/useEntityTransforms.js +10 -0
- package/dist/cjs/hooks/useEntityTransforms.js.map +1 -0
- package/dist/cjs/hooks/useMarkdownUtils.js +10 -0
- package/dist/cjs/hooks/useMarkdownUtils.js.map +1 -0
- package/dist/cjs/hooks/useResolveGenericEntityData.js +10 -0
- package/dist/cjs/hooks/useResolveGenericEntityData.js.map +1 -0
- package/dist/cjs/hooks/useResolveSearchSpringEntityData.js +146 -0
- package/dist/cjs/hooks/useResolveSearchSpringEntityData.js.map +1 -0
- package/dist/cjs/hooks/useResolveShopifyEntityData.js +190 -0
- package/dist/cjs/hooks/useResolveShopifyEntityData.js.map +1 -0
- package/dist/cjs/hooks/useResolvedImageSources.js +160 -0
- package/dist/cjs/hooks/useResolvedImageSources.js.map +1 -0
- package/dist/cjs/hooks/useWeb5Link.js +10 -0
- package/dist/cjs/hooks/useWeb5Link.js.map +1 -0
- package/dist/cjs/image/contextualImageTypes.js +4 -0
- package/dist/cjs/image/contextualImageTypes.js.map +1 -0
- package/dist/cjs/image/imageSearchFilterTypes.js +19 -0
- package/dist/cjs/image/imageSearchFilterTypes.js.map +1 -0
- package/dist/cjs/image/imageSearchFilters.js +22 -0
- package/dist/cjs/image/imageSearchFilters.js.map +1 -0
- package/dist/cjs/index.js +285 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/utils.js +33 -0
- package/dist/cjs/lib/utils.js.map +1 -0
- package/dist/cjs/markdownBlocks.js +645 -0
- package/dist/cjs/markdownBlocks.js.map +1 -0
- package/dist/cjs/match/astToParts.js +374 -0
- package/dist/cjs/match/astToParts.js.map +1 -0
- package/dist/cjs/match/extractProps.js +654 -0
- package/dist/cjs/match/extractProps.js.map +1 -0
- package/dist/cjs/match/index.js +11 -0
- package/dist/cjs/match/index.js.map +1 -0
- package/dist/cjs/match/matchAllSections.js +34 -0
- package/dist/cjs/match/matchAllSections.js.map +1 -0
- package/dist/cjs/match/matchMarkdown.js +39 -0
- package/dist/cjs/match/matchMarkdown.js.map +1 -0
- package/dist/cjs/parts/parts.js +183 -0
- package/dist/cjs/parts/parts.js.map +1 -0
- package/dist/cjs/patternAnalyzer/conflictDetector.js +103 -0
- package/dist/cjs/patternAnalyzer/conflictDetector.js.map +1 -0
- package/dist/cjs/patternAnalyzer/index.js +40 -0
- package/dist/cjs/patternAnalyzer/index.js.map +1 -0
- package/dist/cjs/patternAnalyzer/markdownGenerator.js +347 -0
- package/dist/cjs/patternAnalyzer/markdownGenerator.js.map +1 -0
- package/dist/cjs/patternAnalyzer/mergeDetector.js +505 -0
- package/dist/cjs/patternAnalyzer/mergeDetector.js.map +1 -0
- package/dist/cjs/patternAnalyzer/parserValidator.js +56 -0
- package/dist/cjs/patternAnalyzer/parserValidator.js.map +1 -0
- package/dist/cjs/patternAnalyzer/patternWriter.js +106 -0
- package/dist/cjs/patternAnalyzer/patternWriter.js.map +1 -0
- package/dist/cjs/patternAnalyzer/run.js +140 -0
- package/dist/cjs/patternAnalyzer/run.js.map +1 -0
- package/dist/cjs/patternAnalyzer/types.js +4 -0
- package/dist/cjs/patternAnalyzer/types.js.map +1 -0
- package/dist/cjs/patternValidator/ERROR_MESSAGES.md +110 -0
- package/dist/cjs/patternValidator/README.md +757 -0
- package/dist/cjs/patternValidator/automaton.js +349 -0
- package/dist/cjs/patternValidator/automaton.js.map +1 -0
- package/dist/cjs/patternValidator/index.js +196 -0
- package/dist/cjs/patternValidator/index.js.map +1 -0
- package/dist/cjs/patternValidator/lexer.js +218 -0
- package/dist/cjs/patternValidator/lexer.js.map +1 -0
- package/dist/cjs/patternValidator/matcher.js +722 -0
- package/dist/cjs/patternValidator/matcher.js.map +1 -0
- package/dist/cjs/patternValidator/parser.js +533 -0
- package/dist/cjs/patternValidator/parser.js.map +1 -0
- package/dist/cjs/patternValidator/types.js +4 -0
- package/dist/cjs/patternValidator/types.js.map +1 -0
- package/dist/cjs/patternValidator/validator.test.js +1277 -0
- package/dist/cjs/patternValidator/validator.test.js.map +1 -0
- package/dist/cjs/registry/ComponentRegistry.js +438 -0
- package/dist/cjs/registry/ComponentRegistry.js.map +1 -0
- package/dist/cjs/registry/Intent.js +19 -0
- package/dist/cjs/registry/Intent.js.map +1 -0
- package/dist/cjs/registry/index.js +9 -0
- package/dist/cjs/registry/index.js.map +1 -0
- package/dist/cjs/registry/types.js +4 -0
- package/dist/cjs/registry/types.js.map +1 -0
- package/dist/cjs/services/cart/addToCart.js +147 -0
- package/dist/cjs/services/cart/addToCart.js.map +1 -0
- package/dist/cjs/services/cart/index.js +7 -0
- package/dist/cjs/services/cart/index.js.map +1 -0
- package/dist/cjs/services/searchspring/index.js +10 -0
- package/dist/cjs/services/searchspring/index.js.map +1 -0
- package/dist/cjs/services/searchspring/searchSpringClient.js +49 -0
- package/dist/cjs/services/searchspring/searchSpringClient.js.map +1 -0
- package/dist/cjs/services/searchspring/transformSSProduct.js +70 -0
- package/dist/cjs/services/searchspring/transformSSProduct.js.map +1 -0
- package/dist/cjs/services/searchspring/types.js +4 -0
- package/dist/cjs/services/searchspring/types.js.map +1 -0
- package/dist/cjs/services/shopify/globals.d.js +4 -0
- package/dist/cjs/services/shopify/globals.d.js.map +1 -0
- package/dist/cjs/services/shopify/index.js +22 -0
- package/dist/cjs/services/shopify/index.js.map +1 -0
- package/dist/cjs/services/shopify/queries.js +214 -0
- package/dist/cjs/services/shopify/queries.js.map +1 -0
- package/dist/cjs/services/shopify/resolveStoreDomain.js +28 -0
- package/dist/cjs/services/shopify/resolveStoreDomain.js.map +1 -0
- package/dist/cjs/services/shopify/shopifyEntityResolver.js +109 -0
- package/dist/cjs/services/shopify/shopifyEntityResolver.js.map +1 -0
- package/dist/cjs/services/shopify/shopifyStorefrontClient.js +58 -0
- package/dist/cjs/services/shopify/shopifyStorefrontClient.js.map +1 -0
- package/dist/cjs/services/shopify/transformShopifyEntity.js +137 -0
- package/dist/cjs/services/shopify/transformShopifyEntity.js.map +1 -0
- package/dist/cjs/services/shopify/types.js +4 -0
- package/dist/cjs/services/shopify/types.js.map +1 -0
- package/dist/cjs/styles/base-tokens.css +152 -0
- package/dist/cjs/styles/base-utilities.css +424 -0
- package/dist/cjs/styles/components.css +6 -0
- package/dist/cjs/styles/prompt-input-tokens.css +136 -0
- package/dist/cjs/styles/tailwind-theme.css +138 -0
- package/dist/cjs/test-types.d.js +2 -0
- package/dist/cjs/test-types.d.js.map +1 -0
- package/dist/cjs/testUtils.js +25 -0
- package/dist/cjs/testUtils.js.map +1 -0
- package/dist/cjs/types/answerUpdatedEvent.js +20 -0
- package/dist/cjs/types/answerUpdatedEvent.js.map +1 -0
- package/dist/cjs/types/blog.js +4 -0
- package/dist/cjs/types/blog.js.map +1 -0
- package/dist/cjs/types/callout.js +6 -0
- package/dist/cjs/types/callout.js.map +1 -0
- package/dist/cjs/types/dependencies.js +4 -0
- package/dist/cjs/types/dependencies.js.map +1 -0
- package/dist/cjs/types/entity.js +4 -0
- package/dist/cjs/types/entity.js.map +1 -0
- package/dist/cjs/types/link-types.js +62 -0
- package/dist/cjs/types/link-types.js.map +1 -0
- package/dist/cjs/types/page-section.js +4 -0
- package/dist/cjs/types/page-section.js.map +1 -0
- package/dist/cjs/types/placement.js +4 -0
- package/dist/cjs/types/placement.js.map +1 -0
- package/dist/cjs/types/redirectEvent.js +27 -0
- package/dist/cjs/types/redirectEvent.js.map +1 -0
- package/dist/cjs/types/userQueryEvent.js +19 -0
- package/dist/cjs/types/userQueryEvent.js.map +1 -0
- package/dist/cjs/utils/analyticsEvents.js +91 -0
- package/dist/cjs/utils/analyticsEvents.js.map +1 -0
- package/dist/cjs/utils/componentTracking.js +90 -0
- package/dist/cjs/utils/componentTracking.js.map +1 -0
- package/dist/cjs/utils/contentKeywordMatcher.js +56 -0
- package/dist/cjs/utils/contentKeywordMatcher.js.map +1 -0
- package/dist/cjs/utils/conversationApi.js +52 -0
- package/dist/cjs/utils/conversationApi.js.map +1 -0
- package/dist/cjs/utils/conversationMode.js +23 -0
- package/dist/cjs/utils/conversationMode.js.map +1 -0
- package/dist/cjs/utils/diagnosticsCollector.js +58 -0
- package/dist/cjs/utils/diagnosticsCollector.js.map +1 -0
- package/dist/cjs/utils/entityLinkParser.js +256 -0
- package/dist/cjs/utils/entityLinkParser.js.map +1 -0
- package/dist/cjs/utils/htmlCommentParser.js +122 -0
- package/dist/cjs/utils/htmlCommentParser.js.map +1 -0
- package/dist/cjs/utils/image-utils.js +49 -0
- package/dist/cjs/utils/image-utils.js.map +1 -0
- package/dist/cjs/utils/intentExtractor.js +47 -0
- package/dist/cjs/utils/intentExtractor.js.map +1 -0
- package/dist/cjs/utils/markdownPreprocessor.js +268 -0
- package/dist/cjs/utils/markdownPreprocessor.js.map +1 -0
- package/dist/cjs/utils/navigationStack.js +35 -0
- package/dist/cjs/utils/navigationStack.js.map +1 -0
- package/dist/cjs/utils/nodeMatchers.js +43 -0
- package/dist/cjs/utils/nodeMatchers.js.map +1 -0
- package/dist/cjs/utils/propsExtractor.js +66 -0
- package/dist/cjs/utils/propsExtractor.js.map +1 -0
- package/dist/cjs/utils/sessionManager.js +161 -0
- package/dist/cjs/utils/sessionManager.js.map +1 -0
- package/dist/cjs/utils/unifiedMarkdownParser.js +44 -0
- package/dist/cjs/utils/unifiedMarkdownParser.js.map +1 -0
- package/dist/cjs/utils/web5LinkValidator.js +56 -0
- package/dist/cjs/utils/web5LinkValidator.js.map +1 -0
- package/dist/cjs/utils/web5LinkValidator.test.js +115 -0
- package/dist/cjs/utils/web5LinkValidator.test.js.map +1 -0
- package/dist/esm/client/clientBundleOverride.js +43 -0
- package/dist/esm/client/clientBundleOverride.js.map +1 -0
- package/dist/esm/client/devEnvironment.js +2 -0
- package/dist/esm/client/devEnvironment.js.map +1 -0
- package/dist/esm/client/loadClientBundle.js +82 -0
- package/dist/esm/client/loadClientBundle.js.map +1 -0
- package/dist/esm/client/wixAuthFetch.js +68 -0
- package/dist/esm/client/wixAuthFetch.js.map +1 -0
- package/dist/esm/clients.js +11 -0
- package/dist/esm/clients.js.map +1 -0
- package/dist/esm/color/colorUtils.js +118 -0
- package/dist/esm/color/colorUtils.js.map +1 -0
- package/dist/esm/component/componentDefinitions/CalloutSectionDefinition.js +61 -0
- package/dist/esm/component/componentDefinitions/CalloutSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/ComparisonSectionDefinition.js +135 -0
- package/dist/esm/component/componentDefinitions/ComparisonSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/CtaBannerSectionDefinition.js +79 -0
- package/dist/esm/component/componentDefinitions/CtaBannerSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/EntitySectionDefinition.js +165 -0
- package/dist/esm/component/componentDefinitions/EntitySectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/ErrorSectionDefinition.js +75 -0
- package/dist/esm/component/componentDefinitions/ErrorSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/FallbackSectionDefinition.js +23 -0
- package/dist/esm/component/componentDefinitions/FallbackSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/FeatureCardsSectionDefinition.js +113 -0
- package/dist/esm/component/componentDefinitions/FeatureCardsSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/FeatureSection9PlusDefinition.js +69 -0
- package/dist/esm/component/componentDefinitions/FeatureSection9PlusDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/HeroEntitySectionDefinition.js +119 -0
- package/dist/esm/component/componentDefinitions/HeroEntitySectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/HeroSectionDefinition.js +203 -0
- package/dist/esm/component/componentDefinitions/HeroSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/HtmlCommentSectionDefinition.js +13 -0
- package/dist/esm/component/componentDefinitions/HtmlCommentSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/KpiSectionDefinition.js +108 -0
- package/dist/esm/component/componentDefinitions/KpiSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/NextStepsSectionDefinition.js +130 -0
- package/dist/esm/component/componentDefinitions/NextStepsSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/SearchSectionDefinition.js +12 -0
- package/dist/esm/component/componentDefinitions/SearchSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/SkipNodesSectionDefinition.js +14 -0
- package/dist/esm/component/componentDefinitions/SkipNodesSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/TextBlockSectionDefinition.js +59 -0
- package/dist/esm/component/componentDefinitions/TextBlockSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/index.js +45 -0
- package/dist/esm/component/componentDefinitions/index.js.map +1 -0
- package/dist/esm/component/componentDefinitions/listItemsSectionDefinition.js +80 -0
- package/dist/esm/component/componentDefinitions/listItemsSectionDefinition.js.map +1 -0
- package/dist/esm/component/componentDefinitions/parse-utils.js +412 -0
- package/dist/esm/component/componentDefinitions/parse-utils.js.map +1 -0
- package/dist/esm/component/componentDefinitions/specHelpers.js +31 -0
- package/dist/esm/component/componentDefinitions/specHelpers.js.map +1 -0
- package/dist/esm/component/componentParser.js +358 -0
- package/dist/esm/component/componentParser.js.map +1 -0
- package/dist/esm/component/diagnosticTypes.js +26 -0
- package/dist/esm/component/diagnosticTypes.js.map +1 -0
- package/dist/esm/component/parser-types.js +2 -0
- package/dist/esm/component/parser-types.js.map +1 -0
- package/dist/esm/component/section-definition.js +2 -0
- package/dist/esm/component/section-definition.js.map +1 -0
- package/dist/esm/component/types.js +2 -0
- package/dist/esm/component/types.js.map +1 -0
- package/dist/esm/components/placement/PlacementPayloadContext.js +24 -0
- package/dist/esm/components/placement/PlacementPayloadContext.js.map +1 -0
- package/dist/esm/components/placement/PlacementResponseRenderer.css +269 -0
- package/dist/esm/components/placement/PlacementResponseRenderer.js +173 -0
- package/dist/esm/components/placement/PlacementResponseRenderer.js.map +1 -0
- package/dist/esm/components/placement/buildPlacementDependencies.js +212 -0
- package/dist/esm/components/placement/buildPlacementDependencies.js.map +1 -0
- package/dist/esm/components/ui/BottomContainer.js +14 -0
- package/dist/esm/components/ui/BottomContainer.js.map +1 -0
- package/dist/esm/components/ui/CalloutBlock.js +118 -0
- package/dist/esm/components/ui/CalloutBlock.js.map +1 -0
- package/dist/esm/components/ui/Disclaimer.css +35 -0
- package/dist/esm/components/ui/Disclaimer.js +32 -0
- package/dist/esm/components/ui/Disclaimer.js.map +1 -0
- package/dist/esm/components/ui/FeedbackBar.css +267 -0
- package/dist/esm/components/ui/FeedbackBar.js +221 -0
- package/dist/esm/components/ui/FeedbackBar.js.map +1 -0
- package/dist/esm/components/ui/Loader.js +43 -0
- package/dist/esm/components/ui/Loader.js.map +1 -0
- package/dist/esm/components/ui/MarkdownText.js +283 -0
- package/dist/esm/components/ui/MarkdownText.js.map +1 -0
- package/dist/esm/components/ui/OptimizedImage.js +354 -0
- package/dist/esm/components/ui/OptimizedImage.js.map +1 -0
- package/dist/esm/components/ui/PlacementLoader.css +101 -0
- package/dist/esm/components/ui/PlacementLoader.js +28 -0
- package/dist/esm/components/ui/PlacementLoader.js.map +1 -0
- package/dist/esm/components/ui/PromptEntryEmptyState.css +172 -0
- package/dist/esm/components/ui/PromptEntryEmptyState.js +36 -0
- package/dist/esm/components/ui/PromptEntryEmptyState.js.map +1 -0
- package/dist/esm/components/ui/SearchSection.css +538 -0
- package/dist/esm/components/ui/SearchSection.js +317 -0
- package/dist/esm/components/ui/SearchSection.js.map +1 -0
- package/dist/esm/components/ui/SectionSkeleton.css +109 -0
- package/dist/esm/components/ui/SectionSkeleton.js +100 -0
- package/dist/esm/components/ui/SectionSkeleton.js.map +1 -0
- package/dist/esm/components/ui/SmartIcon.js +91 -0
- package/dist/esm/components/ui/SmartIcon.js.map +1 -0
- package/dist/esm/components/ui/UnifiedLink.js +105 -0
- package/dist/esm/components/ui/UnifiedLink.js.map +1 -0
- package/dist/esm/components/ui/UserQuery.js +167 -0
- package/dist/esm/components/ui/UserQuery.js.map +1 -0
- package/dist/esm/components/ui/icons/ArrowTopRightIcon.js +17 -0
- package/dist/esm/components/ui/icons/ArrowTopRightIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/ArrowUpIcon.js +29 -0
- package/dist/esm/components/ui/icons/ArrowUpIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/CheckIcon.js +17 -0
- package/dist/esm/components/ui/icons/CheckIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/CommentIcon.js +15 -0
- package/dist/esm/components/ui/icons/CommentIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/PlusIcon.js +25 -0
- package/dist/esm/components/ui/icons/PlusIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/RedoIcon.js +25 -0
- package/dist/esm/components/ui/icons/RedoIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/ShareIcon.js +37 -0
- package/dist/esm/components/ui/icons/ShareIcon.js.map +1 -0
- package/dist/esm/components/ui/icons/UndoIcon.js +25 -0
- package/dist/esm/components/ui/icons/UndoIcon.js.map +1 -0
- package/dist/esm/components/ui/table.js +92 -0
- package/dist/esm/components/ui/table.js.map +1 -0
- package/dist/esm/context/ChipsContext.js +7 -0
- package/dist/esm/context/ChipsContext.js.map +1 -0
- package/dist/esm/context/ComponentDependenciesContext.js +19 -0
- package/dist/esm/context/ComponentDependenciesContext.js.map +1 -0
- package/dist/esm/entity/defaultExtractor.js +111 -0
- package/dist/esm/entity/defaultExtractor.js.map +1 -0
- package/dist/esm/entity/enrichEntitiesFromPayload.js +35 -0
- package/dist/esm/entity/enrichEntitiesFromPayload.js.map +1 -0
- package/dist/esm/entity/fetchEntityListData.js +76 -0
- package/dist/esm/entity/fetchEntityListData.js.map +1 -0
- package/dist/esm/entity/index.js +29 -0
- package/dist/esm/entity/index.js.map +1 -0
- package/dist/esm/entity/types.js +2 -0
- package/dist/esm/entity/types.js.map +1 -0
- package/dist/esm/errors/conversationErrorTypes.js +50 -0
- package/dist/esm/errors/conversationErrorTypes.js.map +1 -0
- package/dist/esm/errors/errorTemplates.js +81 -0
- package/dist/esm/errors/errorTemplates.js.map +1 -0
- package/dist/esm/errors/index.js +3 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/external-types.d.js +2 -0
- package/dist/esm/external-types.d.js.map +1 -0
- package/dist/esm/featureToggles/FeatureToggleContext.js +30 -0
- package/dist/esm/featureToggles/FeatureToggleContext.js.map +1 -0
- package/dist/esm/hooks/useConversation.js +6 -0
- package/dist/esm/hooks/useConversation.js.map +1 -0
- package/dist/esm/hooks/useDebugImageContext.js +6 -0
- package/dist/esm/hooks/useDebugImageContext.js.map +1 -0
- package/dist/esm/hooks/useEntityTransforms.js +6 -0
- package/dist/esm/hooks/useEntityTransforms.js.map +1 -0
- package/dist/esm/hooks/useMarkdownUtils.js +6 -0
- package/dist/esm/hooks/useMarkdownUtils.js.map +1 -0
- package/dist/esm/hooks/useResolveGenericEntityData.js +6 -0
- package/dist/esm/hooks/useResolveGenericEntityData.js.map +1 -0
- package/dist/esm/hooks/useResolveSearchSpringEntityData.js +146 -0
- package/dist/esm/hooks/useResolveSearchSpringEntityData.js.map +1 -0
- package/dist/esm/hooks/useResolveShopifyEntityData.js +191 -0
- package/dist/esm/hooks/useResolveShopifyEntityData.js.map +1 -0
- package/dist/esm/hooks/useResolvedImageSources.js +169 -0
- package/dist/esm/hooks/useResolvedImageSources.js.map +1 -0
- package/dist/esm/hooks/useWeb5Link.js +6 -0
- package/dist/esm/hooks/useWeb5Link.js.map +1 -0
- package/dist/esm/image/contextualImageTypes.js +2 -0
- package/dist/esm/image/contextualImageTypes.js.map +1 -0
- package/dist/esm/image/imageSearchFilterTypes.js +15 -0
- package/dist/esm/image/imageSearchFilterTypes.js.map +1 -0
- package/dist/esm/image/imageSearchFilters.js +18 -0
- package/dist/esm/image/imageSearchFilters.js.map +1 -0
- package/dist/esm/index.js +152 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/utils.js +33 -0
- package/dist/esm/lib/utils.js.map +1 -0
- package/dist/esm/markdownBlocks.js +641 -0
- package/dist/esm/markdownBlocks.js.map +1 -0
- package/dist/esm/match/astToParts.js +371 -0
- package/dist/esm/match/astToParts.js.map +1 -0
- package/dist/esm/match/extractProps.js +634 -0
- package/dist/esm/match/extractProps.js.map +1 -0
- package/dist/esm/match/index.js +4 -0
- package/dist/esm/match/index.js.map +1 -0
- package/dist/esm/match/matchAllSections.js +31 -0
- package/dist/esm/match/matchAllSections.js.map +1 -0
- package/dist/esm/match/matchMarkdown.js +36 -0
- package/dist/esm/match/matchMarkdown.js.map +1 -0
- package/dist/esm/parts/parts.js +171 -0
- package/dist/esm/parts/parts.js.map +1 -0
- package/dist/esm/patternAnalyzer/conflictDetector.js +99 -0
- package/dist/esm/patternAnalyzer/conflictDetector.js.map +1 -0
- package/dist/esm/patternAnalyzer/index.js +36 -0
- package/dist/esm/patternAnalyzer/index.js.map +1 -0
- package/dist/esm/patternAnalyzer/markdownGenerator.js +344 -0
- package/dist/esm/patternAnalyzer/markdownGenerator.js.map +1 -0
- package/dist/esm/patternAnalyzer/mergeDetector.js +504 -0
- package/dist/esm/patternAnalyzer/mergeDetector.js.map +1 -0
- package/dist/esm/patternAnalyzer/parserValidator.js +52 -0
- package/dist/esm/patternAnalyzer/parserValidator.js.map +1 -0
- package/dist/esm/patternAnalyzer/patternWriter.js +102 -0
- package/dist/esm/patternAnalyzer/patternWriter.js.map +1 -0
- package/dist/esm/patternAnalyzer/run.js +138 -0
- package/dist/esm/patternAnalyzer/run.js.map +1 -0
- package/dist/esm/patternAnalyzer/types.js +2 -0
- package/dist/esm/patternAnalyzer/types.js.map +1 -0
- package/dist/esm/patternValidator/ERROR_MESSAGES.md +110 -0
- package/dist/esm/patternValidator/README.md +757 -0
- package/dist/esm/patternValidator/automaton.js +345 -0
- package/dist/esm/patternValidator/automaton.js.map +1 -0
- package/dist/esm/patternValidator/index.js +190 -0
- package/dist/esm/patternValidator/index.js.map +1 -0
- package/dist/esm/patternValidator/lexer.js +214 -0
- package/dist/esm/patternValidator/lexer.js.map +1 -0
- package/dist/esm/patternValidator/matcher.js +717 -0
- package/dist/esm/patternValidator/matcher.js.map +1 -0
- package/dist/esm/patternValidator/parser.js +531 -0
- package/dist/esm/patternValidator/parser.js.map +1 -0
- package/dist/esm/patternValidator/types.js +2 -0
- package/dist/esm/patternValidator/types.js.map +1 -0
- package/dist/esm/patternValidator/validator.test.js +1275 -0
- package/dist/esm/patternValidator/validator.test.js.map +1 -0
- package/dist/esm/registry/ComponentRegistry.js +435 -0
- package/dist/esm/registry/ComponentRegistry.js.map +1 -0
- package/dist/esm/registry/Intent.js +15 -0
- package/dist/esm/registry/Intent.js.map +1 -0
- package/dist/esm/registry/index.js +3 -0
- package/dist/esm/registry/index.js.map +1 -0
- package/dist/esm/registry/types.js +2 -0
- package/dist/esm/registry/types.js.map +1 -0
- package/dist/esm/services/cart/addToCart.js +146 -0
- package/dist/esm/services/cart/addToCart.js.map +1 -0
- package/dist/esm/services/cart/index.js +2 -0
- package/dist/esm/services/cart/index.js.map +1 -0
- package/dist/esm/services/searchspring/index.js +3 -0
- package/dist/esm/services/searchspring/index.js.map +1 -0
- package/dist/esm/services/searchspring/searchSpringClient.js +44 -0
- package/dist/esm/services/searchspring/searchSpringClient.js.map +1 -0
- package/dist/esm/services/searchspring/transformSSProduct.js +66 -0
- package/dist/esm/services/searchspring/transformSSProduct.js.map +1 -0
- package/dist/esm/services/searchspring/types.js +2 -0
- package/dist/esm/services/searchspring/types.js.map +1 -0
- package/dist/esm/services/shopify/globals.d.js +7 -0
- package/dist/esm/services/shopify/globals.d.js.map +1 -0
- package/dist/esm/services/shopify/index.js +6 -0
- package/dist/esm/services/shopify/index.js.map +1 -0
- package/dist/esm/services/shopify/queries.js +210 -0
- package/dist/esm/services/shopify/queries.js.map +1 -0
- package/dist/esm/services/shopify/resolveStoreDomain.js +25 -0
- package/dist/esm/services/shopify/resolveStoreDomain.js.map +1 -0
- package/dist/esm/services/shopify/shopifyEntityResolver.js +105 -0
- package/dist/esm/services/shopify/shopifyEntityResolver.js.map +1 -0
- package/dist/esm/services/shopify/shopifyStorefrontClient.js +52 -0
- package/dist/esm/services/shopify/shopifyStorefrontClient.js.map +1 -0
- package/dist/esm/services/shopify/transformShopifyEntity.js +130 -0
- package/dist/esm/services/shopify/transformShopifyEntity.js.map +1 -0
- package/dist/esm/services/shopify/types.js +2 -0
- package/dist/esm/services/shopify/types.js.map +1 -0
- package/dist/esm/styles/base-tokens.css +152 -0
- package/dist/esm/styles/base-utilities.css +424 -0
- package/dist/esm/styles/components.css +6 -0
- package/dist/esm/styles/prompt-input-tokens.css +136 -0
- package/dist/esm/styles/tailwind-theme.css +138 -0
- package/dist/esm/test-types.d.js +2 -0
- package/dist/esm/test-types.d.js.map +1 -0
- package/dist/esm/testUtils.js +20 -0
- package/dist/esm/testUtils.js.map +1 -0
- package/dist/esm/types/answerUpdatedEvent.js +16 -0
- package/dist/esm/types/answerUpdatedEvent.js.map +1 -0
- package/dist/esm/types/blog.js +2 -0
- package/dist/esm/types/blog.js.map +1 -0
- package/dist/esm/types/callout.js +2 -0
- package/dist/esm/types/callout.js.map +1 -0
- package/dist/esm/types/dependencies.js +2 -0
- package/dist/esm/types/dependencies.js.map +1 -0
- package/dist/esm/types/entity.js +2 -0
- package/dist/esm/types/entity.js.map +1 -0
- package/dist/esm/types/link-types.js +52 -0
- package/dist/esm/types/link-types.js.map +1 -0
- package/dist/esm/types/page-section.js +2 -0
- package/dist/esm/types/page-section.js.map +1 -0
- package/dist/esm/types/placement.js +2 -0
- package/dist/esm/types/placement.js.map +1 -0
- package/dist/esm/types/redirectEvent.js +23 -0
- package/dist/esm/types/redirectEvent.js.map +1 -0
- package/dist/esm/types/userQueryEvent.js +15 -0
- package/dist/esm/types/userQueryEvent.js.map +1 -0
- package/dist/esm/utils/analyticsEvents.js +84 -0
- package/dist/esm/utils/analyticsEvents.js.map +1 -0
- package/dist/esm/utils/componentTracking.js +84 -0
- package/dist/esm/utils/componentTracking.js.map +1 -0
- package/dist/esm/utils/contentKeywordMatcher.js +50 -0
- package/dist/esm/utils/contentKeywordMatcher.js.map +1 -0
- package/dist/esm/utils/conversationApi.js +45 -0
- package/dist/esm/utils/conversationApi.js.map +1 -0
- package/dist/esm/utils/conversationMode.js +18 -0
- package/dist/esm/utils/conversationMode.js.map +1 -0
- package/dist/esm/utils/diagnosticsCollector.js +52 -0
- package/dist/esm/utils/diagnosticsCollector.js.map +1 -0
- package/dist/esm/utils/entityLinkParser.js +246 -0
- package/dist/esm/utils/entityLinkParser.js.map +1 -0
- package/dist/esm/utils/htmlCommentParser.js +117 -0
- package/dist/esm/utils/htmlCommentParser.js.map +1 -0
- package/dist/esm/utils/image-utils.js +45 -0
- package/dist/esm/utils/image-utils.js.map +1 -0
- package/dist/esm/utils/intentExtractor.js +45 -0
- package/dist/esm/utils/intentExtractor.js.map +1 -0
- package/dist/esm/utils/markdownPreprocessor.js +257 -0
- package/dist/esm/utils/markdownPreprocessor.js.map +1 -0
- package/dist/esm/utils/navigationStack.js +27 -0
- package/dist/esm/utils/navigationStack.js.map +1 -0
- package/dist/esm/utils/nodeMatchers.js +38 -0
- package/dist/esm/utils/nodeMatchers.js.map +1 -0
- package/dist/esm/utils/propsExtractor.js +58 -0
- package/dist/esm/utils/propsExtractor.js.map +1 -0
- package/dist/esm/utils/sessionManager.js +151 -0
- package/dist/esm/utils/sessionManager.js.map +1 -0
- package/dist/esm/utils/unifiedMarkdownParser.js +36 -0
- package/dist/esm/utils/unifiedMarkdownParser.js.map +1 -0
- package/dist/esm/utils/web5LinkValidator.js +52 -0
- package/dist/esm/utils/web5LinkValidator.js.map +1 -0
- package/dist/esm/utils/web5LinkValidator.test.js +113 -0
- package/dist/esm/utils/web5LinkValidator.test.js.map +1 -0
- package/dist/types/client/clientBundleOverride.d.ts +26 -0
- package/dist/types/client/clientBundleOverride.d.ts.map +1 -0
- package/dist/types/client/devEnvironment.d.ts +24 -0
- package/dist/types/client/devEnvironment.d.ts.map +1 -0
- package/dist/types/client/loadClientBundle.d.ts +27 -0
- package/dist/types/client/loadClientBundle.d.ts.map +1 -0
- package/dist/types/client/wixAuthFetch.d.ts +12 -0
- package/dist/types/client/wixAuthFetch.d.ts.map +1 -0
- package/dist/types/clients.d.ts +10 -0
- package/dist/types/clients.d.ts.map +1 -0
- package/dist/types/color/colorUtils.d.ts +9 -0
- package/dist/types/color/colorUtils.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/CalloutSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/CalloutSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/ComparisonSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/ComparisonSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/CtaBannerSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/CtaBannerSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/EntitySectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/EntitySectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/ErrorSectionDefinition.d.ts +12 -0
- package/dist/types/component/componentDefinitions/ErrorSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/FallbackSectionDefinition.d.ts +16 -0
- package/dist/types/component/componentDefinitions/FallbackSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/FeatureCardsSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/FeatureCardsSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/FeatureSection9PlusDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/FeatureSection9PlusDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/HeroEntitySectionDefinition.d.ts +23 -0
- package/dist/types/component/componentDefinitions/HeroEntitySectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/HeroSectionDefinition.d.ts +12 -0
- package/dist/types/component/componentDefinitions/HeroSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/HtmlCommentSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/HtmlCommentSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/KpiSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/KpiSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/NextStepsSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/NextStepsSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/SearchSectionDefinition.d.ts +10 -0
- package/dist/types/component/componentDefinitions/SearchSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/SkipNodesSectionDefinition.d.ts +12 -0
- package/dist/types/component/componentDefinitions/SkipNodesSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/TextBlockSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/TextBlockSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/index.d.ts +26 -0
- package/dist/types/component/componentDefinitions/index.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/listItemsSectionDefinition.d.ts +11 -0
- package/dist/types/component/componentDefinitions/listItemsSectionDefinition.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/parse-utils.d.ts +88 -0
- package/dist/types/component/componentDefinitions/parse-utils.d.ts.map +1 -0
- package/dist/types/component/componentDefinitions/specHelpers.d.ts +16 -0
- package/dist/types/component/componentDefinitions/specHelpers.d.ts.map +1 -0
- package/dist/types/component/componentParser.d.ts +63 -0
- package/dist/types/component/componentParser.d.ts.map +1 -0
- package/dist/types/component/diagnosticTypes.d.ts +23 -0
- package/dist/types/component/diagnosticTypes.d.ts.map +1 -0
- package/dist/types/component/parser-types.d.ts +71 -0
- package/dist/types/component/parser-types.d.ts.map +1 -0
- package/dist/types/component/section-definition.d.ts +32 -0
- package/dist/types/component/section-definition.d.ts.map +1 -0
- package/dist/types/component/types.d.ts +315 -0
- package/dist/types/component/types.d.ts.map +1 -0
- package/dist/types/components/placement/PlacementPayloadContext.d.ts +20 -0
- package/dist/types/components/placement/PlacementPayloadContext.d.ts.map +1 -0
- package/dist/types/components/placement/PlacementResponseRenderer.d.ts +106 -0
- package/dist/types/components/placement/PlacementResponseRenderer.d.ts.map +1 -0
- package/dist/types/components/placement/buildPlacementDependencies.d.ts +44 -0
- package/dist/types/components/placement/buildPlacementDependencies.d.ts.map +1 -0
- package/dist/types/components/ui/BottomContainer.d.ts +9 -0
- package/dist/types/components/ui/BottomContainer.d.ts.map +1 -0
- package/dist/types/components/ui/CalloutBlock.d.ts +9 -0
- package/dist/types/components/ui/CalloutBlock.d.ts.map +1 -0
- package/dist/types/components/ui/Disclaimer.d.ts +21 -0
- package/dist/types/components/ui/Disclaimer.d.ts.map +1 -0
- package/dist/types/components/ui/FeedbackBar.d.ts +41 -0
- package/dist/types/components/ui/FeedbackBar.d.ts.map +1 -0
- package/dist/types/components/ui/Loader.d.ts +9 -0
- package/dist/types/components/ui/Loader.d.ts.map +1 -0
- package/dist/types/components/ui/MarkdownText.d.ts +9 -0
- package/dist/types/components/ui/MarkdownText.d.ts.map +1 -0
- package/dist/types/components/ui/OptimizedImage.d.ts +59 -0
- package/dist/types/components/ui/OptimizedImage.d.ts.map +1 -0
- package/dist/types/components/ui/PlacementLoader.d.ts +15 -0
- package/dist/types/components/ui/PlacementLoader.d.ts.map +1 -0
- package/dist/types/components/ui/PromptEntryEmptyState.d.ts +21 -0
- package/dist/types/components/ui/PromptEntryEmptyState.d.ts.map +1 -0
- package/dist/types/components/ui/SearchSection.d.ts +37 -0
- package/dist/types/components/ui/SearchSection.d.ts.map +1 -0
- package/dist/types/components/ui/SectionSkeleton.d.ts +27 -0
- package/dist/types/components/ui/SectionSkeleton.d.ts.map +1 -0
- package/dist/types/components/ui/SmartIcon.d.ts +19 -0
- package/dist/types/components/ui/SmartIcon.d.ts.map +1 -0
- package/dist/types/components/ui/UnifiedLink.d.ts +22 -0
- package/dist/types/components/ui/UnifiedLink.d.ts.map +1 -0
- package/dist/types/components/ui/UserQuery.d.ts +33 -0
- package/dist/types/components/ui/UserQuery.d.ts.map +1 -0
- package/dist/types/components/ui/icons/ArrowTopRightIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/ArrowTopRightIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/ArrowUpIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/ArrowUpIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/CheckIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/CheckIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/CommentIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/CommentIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/PlusIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/PlusIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/RedoIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/RedoIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/ShareIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/ShareIcon.d.ts.map +1 -0
- package/dist/types/components/ui/icons/UndoIcon.d.ts +3 -0
- package/dist/types/components/ui/icons/UndoIcon.d.ts.map +1 -0
- package/dist/types/components/ui/table.d.ts +11 -0
- package/dist/types/components/ui/table.d.ts.map +1 -0
- package/dist/types/context/ChipsContext.d.ts +8 -0
- package/dist/types/context/ChipsContext.d.ts.map +1 -0
- package/dist/types/context/ComponentDependenciesContext.d.ts +8 -0
- package/dist/types/context/ComponentDependenciesContext.d.ts.map +1 -0
- package/dist/types/entity/defaultExtractor.d.ts +14 -0
- package/dist/types/entity/defaultExtractor.d.ts.map +1 -0
- package/dist/types/entity/enrichEntitiesFromPayload.d.ts +27 -0
- package/dist/types/entity/enrichEntitiesFromPayload.d.ts.map +1 -0
- package/dist/types/entity/fetchEntityListData.d.ts +20 -0
- package/dist/types/entity/fetchEntityListData.d.ts.map +1 -0
- package/dist/types/entity/index.d.ts +16 -0
- package/dist/types/entity/index.d.ts.map +1 -0
- package/dist/types/entity/types.d.ts +13 -0
- package/dist/types/entity/types.d.ts.map +1 -0
- package/dist/types/errors/conversationErrorTypes.d.ts +20 -0
- package/dist/types/errors/conversationErrorTypes.d.ts.map +1 -0
- package/dist/types/errors/errorTemplates.d.ts +27 -0
- package/dist/types/errors/errorTemplates.d.ts.map +1 -0
- package/dist/types/errors/index.d.ts +3 -0
- package/dist/types/errors/index.d.ts.map +1 -0
- package/dist/types/featureToggles/FeatureToggleContext.d.ts +18 -0
- package/dist/types/featureToggles/FeatureToggleContext.d.ts.map +1 -0
- package/dist/types/hooks/useConversation.d.ts +3 -0
- package/dist/types/hooks/useConversation.d.ts.map +1 -0
- package/dist/types/hooks/useDebugImageContext.d.ts +2 -0
- package/dist/types/hooks/useDebugImageContext.d.ts.map +1 -0
- package/dist/types/hooks/useEntityTransforms.d.ts +3 -0
- package/dist/types/hooks/useEntityTransforms.d.ts.map +1 -0
- package/dist/types/hooks/useMarkdownUtils.d.ts +3 -0
- package/dist/types/hooks/useMarkdownUtils.d.ts.map +1 -0
- package/dist/types/hooks/useResolveGenericEntityData.d.ts +11 -0
- package/dist/types/hooks/useResolveGenericEntityData.d.ts.map +1 -0
- package/dist/types/hooks/useResolveSearchSpringEntityData.d.ts +20 -0
- package/dist/types/hooks/useResolveSearchSpringEntityData.d.ts.map +1 -0
- package/dist/types/hooks/useResolveShopifyEntityData.d.ts +21 -0
- package/dist/types/hooks/useResolveShopifyEntityData.d.ts.map +1 -0
- package/dist/types/hooks/useResolvedImageSources.d.ts +6 -0
- package/dist/types/hooks/useResolvedImageSources.d.ts.map +1 -0
- package/dist/types/hooks/useWeb5Link.d.ts +3 -0
- package/dist/types/hooks/useWeb5Link.d.ts.map +1 -0
- package/dist/types/image/contextualImageTypes.d.ts +17 -0
- package/dist/types/image/contextualImageTypes.d.ts.map +1 -0
- package/dist/types/image/imageSearchFilterTypes.d.ts +14 -0
- package/dist/types/image/imageSearchFilterTypes.d.ts.map +1 -0
- package/dist/types/image/imageSearchFilters.d.ts +16 -0
- package/dist/types/image/imageSearchFilters.d.ts.map +1 -0
- package/dist/types/index.d.ts +88 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lib/utils.d.ts +3 -0
- package/dist/types/lib/utils.d.ts.map +1 -0
- package/dist/types/markdownBlocks.d.ts +44 -0
- package/dist/types/markdownBlocks.d.ts.map +1 -0
- package/dist/types/match/astToParts.d.ts +15 -0
- package/dist/types/match/astToParts.d.ts.map +1 -0
- package/dist/types/match/extractProps.d.ts +207 -0
- package/dist/types/match/extractProps.d.ts.map +1 -0
- package/dist/types/match/index.d.ts +4 -0
- package/dist/types/match/index.d.ts.map +1 -0
- package/dist/types/match/matchAllSections.d.ts +15 -0
- package/dist/types/match/matchAllSections.d.ts.map +1 -0
- package/dist/types/match/matchMarkdown.d.ts +25 -0
- package/dist/types/match/matchMarkdown.d.ts.map +1 -0
- package/dist/types/parts/parts.d.ts +144 -0
- package/dist/types/parts/parts.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/conflictDetector.d.ts +19 -0
- package/dist/types/patternAnalyzer/conflictDetector.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/index.d.ts +10 -0
- package/dist/types/patternAnalyzer/index.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/markdownGenerator.d.ts +9 -0
- package/dist/types/patternAnalyzer/markdownGenerator.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/mergeDetector.d.ts +14 -0
- package/dist/types/patternAnalyzer/mergeDetector.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/parserValidator.d.ts +13 -0
- package/dist/types/patternAnalyzer/parserValidator.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/patternWriter.d.ts +8 -0
- package/dist/types/patternAnalyzer/patternWriter.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/run.d.ts +2 -0
- package/dist/types/patternAnalyzer/run.d.ts.map +1 -0
- package/dist/types/patternAnalyzer/types.d.ts +59 -0
- package/dist/types/patternAnalyzer/types.d.ts.map +1 -0
- package/dist/types/patternValidator/automaton.d.ts +3 -0
- package/dist/types/patternValidator/automaton.d.ts.map +1 -0
- package/dist/types/patternValidator/index.d.ts +48 -0
- package/dist/types/patternValidator/index.d.ts.map +1 -0
- package/dist/types/patternValidator/lexer.d.ts +3 -0
- package/dist/types/patternValidator/lexer.d.ts.map +1 -0
- package/dist/types/patternValidator/matcher.d.ts +14 -0
- package/dist/types/patternValidator/matcher.d.ts.map +1 -0
- package/dist/types/patternValidator/parser.d.ts +14 -0
- package/dist/types/patternValidator/parser.d.ts.map +1 -0
- package/dist/types/patternValidator/types.d.ts +125 -0
- package/dist/types/patternValidator/types.d.ts.map +1 -0
- package/dist/types/patternValidator/validator.test.d.ts +2 -0
- package/dist/types/patternValidator/validator.test.d.ts.map +1 -0
- package/dist/types/registry/ComponentRegistry.d.ts +64 -0
- package/dist/types/registry/ComponentRegistry.d.ts.map +1 -0
- package/dist/types/registry/Intent.d.ts +12 -0
- package/dist/types/registry/Intent.d.ts.map +1 -0
- package/dist/types/registry/index.d.ts +4 -0
- package/dist/types/registry/index.d.ts.map +1 -0
- package/dist/types/registry/types.d.ts +99 -0
- package/dist/types/registry/types.d.ts.map +1 -0
- package/dist/types/services/cart/addToCart.d.ts +26 -0
- package/dist/types/services/cart/addToCart.d.ts.map +1 -0
- package/dist/types/services/cart/index.d.ts +2 -0
- package/dist/types/services/cart/index.d.ts.map +1 -0
- package/dist/types/services/searchspring/index.d.ts +4 -0
- package/dist/types/services/searchspring/index.d.ts.map +1 -0
- package/dist/types/services/searchspring/searchSpringClient.d.ts +13 -0
- package/dist/types/services/searchspring/searchSpringClient.d.ts.map +1 -0
- package/dist/types/services/searchspring/transformSSProduct.d.ts +7 -0
- package/dist/types/services/searchspring/transformSSProduct.d.ts.map +1 -0
- package/dist/types/services/searchspring/types.d.ts +48 -0
- package/dist/types/services/searchspring/types.d.ts.map +1 -0
- package/dist/types/services/shopify/index.d.ts +7 -0
- package/dist/types/services/shopify/index.d.ts.map +1 -0
- package/dist/types/services/shopify/queries.d.ts +13 -0
- package/dist/types/services/shopify/queries.d.ts.map +1 -0
- package/dist/types/services/shopify/resolveStoreDomain.d.ts +14 -0
- package/dist/types/services/shopify/resolveStoreDomain.d.ts.map +1 -0
- package/dist/types/services/shopify/shopifyEntityResolver.d.ts +21 -0
- package/dist/types/services/shopify/shopifyEntityResolver.d.ts.map +1 -0
- package/dist/types/services/shopify/shopifyStorefrontClient.d.ts +19 -0
- package/dist/types/services/shopify/shopifyStorefrontClient.d.ts.map +1 -0
- package/dist/types/services/shopify/transformShopifyEntity.d.ts +11 -0
- package/dist/types/services/shopify/transformShopifyEntity.d.ts.map +1 -0
- package/dist/types/services/shopify/types.d.ts +109 -0
- package/dist/types/services/shopify/types.d.ts.map +1 -0
- package/dist/types/testUtils.d.ts +7 -0
- package/dist/types/testUtils.d.ts.map +1 -0
- package/dist/types/types/answerUpdatedEvent.d.ts +29 -0
- package/dist/types/types/answerUpdatedEvent.d.ts.map +1 -0
- package/dist/types/types/blog.d.ts +22 -0
- package/dist/types/types/blog.d.ts.map +1 -0
- package/dist/types/types/callout.d.ts +7 -0
- package/dist/types/types/callout.d.ts.map +1 -0
- package/dist/types/types/dependencies.d.ts +191 -0
- package/dist/types/types/dependencies.d.ts.map +1 -0
- package/dist/types/types/entity.d.ts +38 -0
- package/dist/types/types/entity.d.ts.map +1 -0
- package/dist/types/types/link-types.d.ts +38 -0
- package/dist/types/types/link-types.d.ts.map +1 -0
- package/dist/types/types/page-section.d.ts +27 -0
- package/dist/types/types/page-section.d.ts.map +1 -0
- package/dist/types/types/placement.d.ts +94 -0
- package/dist/types/types/placement.d.ts.map +1 -0
- package/dist/types/types/redirectEvent.d.ts +42 -0
- package/dist/types/types/redirectEvent.d.ts.map +1 -0
- package/dist/types/types/userQueryEvent.d.ts +24 -0
- package/dist/types/types/userQueryEvent.d.ts.map +1 -0
- package/dist/types/utils/analyticsEvents.d.ts +24 -0
- package/dist/types/utils/analyticsEvents.d.ts.map +1 -0
- package/dist/types/utils/componentTracking.d.ts +55 -0
- package/dist/types/utils/componentTracking.d.ts.map +1 -0
- package/dist/types/utils/contentKeywordMatcher.d.ts +14 -0
- package/dist/types/utils/contentKeywordMatcher.d.ts.map +1 -0
- package/dist/types/utils/conversationApi.d.ts +26 -0
- package/dist/types/utils/conversationApi.d.ts.map +1 -0
- package/dist/types/utils/conversationMode.d.ts +16 -0
- package/dist/types/utils/conversationMode.d.ts.map +1 -0
- package/dist/types/utils/diagnosticsCollector.d.ts +33 -0
- package/dist/types/utils/diagnosticsCollector.d.ts.map +1 -0
- package/dist/types/utils/entityLinkParser.d.ts +97 -0
- package/dist/types/utils/entityLinkParser.d.ts.map +1 -0
- package/dist/types/utils/htmlCommentParser.d.ts +13 -0
- package/dist/types/utils/htmlCommentParser.d.ts.map +1 -0
- package/dist/types/utils/image-utils.d.ts +10 -0
- package/dist/types/utils/image-utils.d.ts.map +1 -0
- package/dist/types/utils/intentExtractor.d.ts +11 -0
- package/dist/types/utils/intentExtractor.d.ts.map +1 -0
- package/dist/types/utils/markdownPreprocessor.d.ts +95 -0
- package/dist/types/utils/markdownPreprocessor.d.ts.map +1 -0
- package/dist/types/utils/navigationStack.d.ts +6 -0
- package/dist/types/utils/navigationStack.d.ts.map +1 -0
- package/dist/types/utils/nodeMatchers.d.ts +10 -0
- package/dist/types/utils/nodeMatchers.d.ts.map +1 -0
- package/dist/types/utils/propsExtractor.d.ts +51 -0
- package/dist/types/utils/propsExtractor.d.ts.map +1 -0
- package/dist/types/utils/sessionManager.d.ts +57 -0
- package/dist/types/utils/sessionManager.d.ts.map +1 -0
- package/dist/types/utils/unifiedMarkdownParser.d.ts +9 -0
- package/dist/types/utils/unifiedMarkdownParser.d.ts.map +1 -0
- package/dist/types/utils/web5LinkValidator.d.ts +14 -0
- package/dist/types/utils/web5LinkValidator.d.ts.map +1 -0
- package/dist/types/utils/web5LinkValidator.test.d.ts +2 -0
- package/dist/types/utils/web5LinkValidator.test.d.ts.map +1 -0
- package/package.json +103 -0
- package/src/styles/base-tokens.css +152 -0
- package/src/styles/base-utilities.css +424 -0
- package/src/styles/components.css +6 -0
- package/src/styles/prompt-input-tokens.css +136 -0
- package/src/styles/tailwind-theme.css +138 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.decodeLinkText = decodeLinkText;
|
|
5
|
+
exports.escapeWeb5Links = escapeWeb5Links;
|
|
6
|
+
exports.fixMalformedLinks = fixMalformedLinks;
|
|
7
|
+
exports.insertMissingTableSeparators = insertMissingTableSeparators;
|
|
8
|
+
exports.normalizeIconUrls = normalizeIconUrls;
|
|
9
|
+
exports.preprocessMarkdown = preprocessMarkdown;
|
|
10
|
+
exports.recoverOrphanedEmphasisLinks = recoverOrphanedEmphasisLinks;
|
|
11
|
+
exports.trimTrailingWhitespace = trimTrailingWhitespace;
|
|
12
|
+
/**
|
|
13
|
+
* Markdown preprocessing utilities
|
|
14
|
+
*
|
|
15
|
+
* These functions fix common markdown formatting issues before AST parsing.
|
|
16
|
+
* They are applied in a specific order to ensure proper processing.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Escape web5:// links by URL-encoding the URL part
|
|
21
|
+
* e.g. [text](web5://some text with spaces) → [text](web5://some%20text%20with%20spaces)
|
|
22
|
+
*
|
|
23
|
+
* @param markdown - The markdown string to process
|
|
24
|
+
* @returns The markdown string with web5:// URLs properly encoded
|
|
25
|
+
*/
|
|
26
|
+
function escapeWeb5Links(markdown) {
|
|
27
|
+
// Match markdown links with web5:// protocol
|
|
28
|
+
// Pattern: [text](web5://...)
|
|
29
|
+
return markdown.replace(/\[([^\]]+)\]\((web5|entity|image):\/\/([^)]+)\)/g, (match, linkText, protocol, url) => {
|
|
30
|
+
try {
|
|
31
|
+
// Decode first to avoid double-encoding (e.g. %20 → %2520)
|
|
32
|
+
const decodedUrl = decodeURIComponent(url);
|
|
33
|
+
// Use encodeURI (not encodeURIComponent) to preserve URL structure
|
|
34
|
+
// characters like /, ?, &, = while encoding spaces and unsafe chars
|
|
35
|
+
const encodedUrl = encodeURI(decodedUrl);
|
|
36
|
+
return `[${linkText}](${protocol}://${encodedUrl})`;
|
|
37
|
+
} catch {
|
|
38
|
+
// decodeURIComponent throws on a malformed percent sequence (raw `%`
|
|
39
|
+
// or truncated `%X`), encodeURI on a lone surrogate. During streaming
|
|
40
|
+
// this happens when chunks are concatenated mid-escape or a multi-byte
|
|
41
|
+
// char is split. Leave the link untouched rather than throw — an
|
|
42
|
+
// uncaught error here aborts the whole streaming parse and surfaces as
|
|
43
|
+
// a 908 conversation-streaming-error even though the page rendered.
|
|
44
|
+
return match;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Fix malformed markdown links with whitespace (spaces, tabs, newlines) between ] and (
|
|
51
|
+
* e.g. [text] (url) → [text](url)
|
|
52
|
+
* e.g. [text]\n(url) → [text](url)
|
|
53
|
+
*
|
|
54
|
+
* @param markdown - The markdown string to process
|
|
55
|
+
* @returns The markdown string with fixed link formatting
|
|
56
|
+
*/
|
|
57
|
+
function fixMalformedLinks(markdown) {
|
|
58
|
+
// \s matches spaces, tabs, and newlines; + means one or more
|
|
59
|
+
// Also handle cases with newlines explicitly
|
|
60
|
+
return markdown.replace(/\][\s\r\n]+\(/g, '](');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Recover inline CTA chips where the LLM emitted emphasized text followed by a
|
|
65
|
+
* dangling markdown link close, e.g. `**label →**](web5://ask/query)`.
|
|
66
|
+
*/
|
|
67
|
+
function recoverOrphanedEmphasisLinks(markdown) {
|
|
68
|
+
const diagnostics = [];
|
|
69
|
+
const result = markdown.replace(/(^|[^\[])\*\*([^\n\]*]+?)\*\*\]\((web5:\/\/(?:ask|action)\/[^)]+)\)/g, (match, prefix, linkText, href) => {
|
|
70
|
+
const normalized = `${prefix}[${linkText.trim()}](${href})`;
|
|
71
|
+
diagnostics.push({
|
|
72
|
+
type: 'orphaned_emphasis_link_recovered',
|
|
73
|
+
original: match,
|
|
74
|
+
normalized
|
|
75
|
+
});
|
|
76
|
+
return normalized;
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
result,
|
|
80
|
+
diagnostics
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Trim trailing whitespace from lines that contain text
|
|
86
|
+
*
|
|
87
|
+
* @param markdown - The markdown string to process
|
|
88
|
+
* @returns The markdown string with trailing whitespace trimmed from text lines
|
|
89
|
+
*/
|
|
90
|
+
function trimTrailingWhitespace(markdown) {
|
|
91
|
+
const lines = markdown.split('\n');
|
|
92
|
+
const processedLines = [];
|
|
93
|
+
for (const line of lines) {
|
|
94
|
+
const trimmedLine = line.trim();
|
|
95
|
+
|
|
96
|
+
// If the line has content, trim trailing whitespace (keep leading spaces for indentation)
|
|
97
|
+
if (trimmedLine.length > 0) {
|
|
98
|
+
processedLines.push(line.trimEnd());
|
|
99
|
+
} else {
|
|
100
|
+
// Lines with only whitespace become empty lines
|
|
101
|
+
processedLines.push('');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return processedLines.join('\n');
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Normalize malformed web5://icon URLs to the canonical web5://icon/{name} format.
|
|
109
|
+
* Handles variants like web5://icon:arrow, web5://icon-arrow, web5://icon arrow → web5://icon/arrow.
|
|
110
|
+
* Only alphanumeric characters and dashes are kept in the icon name.
|
|
111
|
+
*/
|
|
112
|
+
function normalizeIconUrls(markdown) {
|
|
113
|
+
const diagnostics = [];
|
|
114
|
+
const result = markdown.replace(/web5:\/\/icon(?:([:/-][^)\s]+)|(?:\s+([a-zA-Z0-9-]+)))/g, (match, rest, spaceName) => {
|
|
115
|
+
const cleanName = (spaceName ?? rest ?? '').replace(/[^a-zA-Z0-9-]/g, '').replace(/^-+|-+$/g, '');
|
|
116
|
+
const normalized = `web5://icon/${cleanName}`;
|
|
117
|
+
if (match !== normalized) {
|
|
118
|
+
diagnostics.push({
|
|
119
|
+
type: 'icon_url_normalized',
|
|
120
|
+
original: match,
|
|
121
|
+
normalized
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return normalized;
|
|
125
|
+
});
|
|
126
|
+
return {
|
|
127
|
+
result,
|
|
128
|
+
diagnostics
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function isFenceToggle(line) {
|
|
132
|
+
return /^\s*(`{3,}|~{3,})/.test(line);
|
|
133
|
+
}
|
|
134
|
+
function splitPipeRow(line) {
|
|
135
|
+
const trimmed = line.trim();
|
|
136
|
+
if (!trimmed.startsWith('|') || !trimmed.endsWith('|')) {
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
return trimmed.slice(1, -1).split('|').map(cell => cell.trim());
|
|
140
|
+
}
|
|
141
|
+
function isPipeRow(line) {
|
|
142
|
+
return splitPipeRow(line).length >= 2;
|
|
143
|
+
}
|
|
144
|
+
function isTableDelimiterRow(line) {
|
|
145
|
+
const cells = splitPipeRow(line);
|
|
146
|
+
return cells.length >= 2 && cells.every(cell => /^:?-{3,}:?$/.test(cell.replace(/\s+/g, '')));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Repair LLM-emitted pipe tables that omit the GFM delimiter row.
|
|
151
|
+
* Without this line remark-gfm parses the rows as plain paragraphs, so
|
|
152
|
+
* registry sections such as comparison never receive a `table` part.
|
|
153
|
+
*/
|
|
154
|
+
function insertMissingTableSeparators(markdown) {
|
|
155
|
+
const diagnostics = [];
|
|
156
|
+
const lines = markdown.split('\n');
|
|
157
|
+
const result = [];
|
|
158
|
+
let inFence = false;
|
|
159
|
+
for (let i = 0; i < lines.length; i++) {
|
|
160
|
+
const line = lines[i];
|
|
161
|
+
const previousLine = result[result.length - 1] ?? '';
|
|
162
|
+
const nextLine = lines[i + 1] ?? '';
|
|
163
|
+
if (isFenceToggle(line)) {
|
|
164
|
+
inFence = !inFence;
|
|
165
|
+
result.push(line);
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
result.push(line);
|
|
169
|
+
if (inFence || !isPipeRow(line) || isPipeRow(previousLine)) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (!isPipeRow(nextLine) || isTableDelimiterRow(nextLine)) {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
const headerCells = splitPipeRow(line);
|
|
176
|
+
const nextCells = splitPipeRow(nextLine);
|
|
177
|
+
if (headerCells.length !== nextCells.length) {
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
const separator = `| ${headerCells.map(() => '---').join(' | ')} |`;
|
|
181
|
+
result.push(separator);
|
|
182
|
+
diagnostics.push({
|
|
183
|
+
type: 'table_separator_inserted',
|
|
184
|
+
original: line,
|
|
185
|
+
normalized: `${line}\n${separator}`
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
result: result.join('\n'),
|
|
190
|
+
diagnostics
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Decode URL-encoded text in markdown link labels.
|
|
196
|
+
* e.g. [Some%20Text](https://example.com) → [Some Text](https://example.com)
|
|
197
|
+
* e.g. [Which+solution%3F](web5://...) → [Which solution?](web5://...)
|
|
198
|
+
*
|
|
199
|
+
* Only decodes the text portion [text], never the URL portion (url).
|
|
200
|
+
* Handles both `+` (form-encoded space) and `%XX` escapes; falls back to
|
|
201
|
+
* the original string on malformed percent sequences.
|
|
202
|
+
*/
|
|
203
|
+
function decodeLinkText(markdown) {
|
|
204
|
+
const diagnostics = [];
|
|
205
|
+
const result = markdown.replace(/\[([^\]]+)\]\(/g, (match, linkText) => {
|
|
206
|
+
try {
|
|
207
|
+
const decoded = decodeURIComponent(linkText.replace(/\+/g, '%20'));
|
|
208
|
+
if (decoded !== linkText) {
|
|
209
|
+
diagnostics.push({
|
|
210
|
+
type: 'link_text_decoded',
|
|
211
|
+
original: linkText,
|
|
212
|
+
normalized: decoded
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
return `[${decoded}](`;
|
|
216
|
+
} catch {
|
|
217
|
+
// If decodeURIComponent fails (e.g. malformed percent sequence like %ZZ),
|
|
218
|
+
// leave the text unchanged
|
|
219
|
+
return match;
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
return {
|
|
223
|
+
result,
|
|
224
|
+
diagnostics
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Preprocess markdown to fix common formatting issues before AST parsing.
|
|
230
|
+
*
|
|
231
|
+
* The preprocessing steps are applied in the following order:
|
|
232
|
+
* 1. Recover orphaned emphasized web5 links
|
|
233
|
+
* 2. Fix malformed links (remove whitespace between ] and () - must happen before web5 links are matched)
|
|
234
|
+
* 3. Decode URL-encoded link text
|
|
235
|
+
* 4. Escape web5:// links (URL-encode URLs)
|
|
236
|
+
* 5. Normalize icon URLs
|
|
237
|
+
* 6. Insert missing table separators for obvious pipe tables
|
|
238
|
+
* 7. Trim trailing whitespace from lines
|
|
239
|
+
*
|
|
240
|
+
* @param markdown - The raw markdown string to preprocess
|
|
241
|
+
* @returns The preprocessed markdown string ready for AST parsing
|
|
242
|
+
*/
|
|
243
|
+
function preprocessMarkdown(markdown) {
|
|
244
|
+
const {
|
|
245
|
+
result: recoveredLinks,
|
|
246
|
+
diagnostics: recoveredLinkDiagnostics
|
|
247
|
+
} = recoverOrphanedEmphasisLinks(markdown);
|
|
248
|
+
let processed = fixMalformedLinks(recoveredLinks);
|
|
249
|
+
const {
|
|
250
|
+
result: decodedText,
|
|
251
|
+
diagnostics: decodeDiagnostics
|
|
252
|
+
} = decodeLinkText(processed);
|
|
253
|
+
processed = escapeWeb5Links(decodedText);
|
|
254
|
+
const {
|
|
255
|
+
result: normalized,
|
|
256
|
+
diagnostics: iconDiagnostics
|
|
257
|
+
} = normalizeIconUrls(processed);
|
|
258
|
+
const {
|
|
259
|
+
result: tableNormalized,
|
|
260
|
+
diagnostics: tableDiagnostics
|
|
261
|
+
} = insertMissingTableSeparators(normalized);
|
|
262
|
+
processed = trimTrailingWhitespace(tableNormalized);
|
|
263
|
+
return {
|
|
264
|
+
markdown: processed,
|
|
265
|
+
diagnostics: [...recoveredLinkDiagnostics, ...decodeDiagnostics, ...iconDiagnostics, ...tableDiagnostics]
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=markdownPreprocessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["escapeWeb5Links","markdown","replace","match","linkText","protocol","url","decodedUrl","decodeURIComponent","encodedUrl","encodeURI","fixMalformedLinks","recoverOrphanedEmphasisLinks","diagnostics","result","prefix","href","normalized","trim","push","type","original","trimTrailingWhitespace","lines","split","processedLines","line","trimmedLine","length","trimEnd","join","normalizeIconUrls","rest","spaceName","cleanName","isFenceToggle","test","splitPipeRow","trimmed","startsWith","endsWith","slice","map","cell","isPipeRow","isTableDelimiterRow","cells","every","insertMissingTableSeparators","inFence","i","previousLine","nextLine","headerCells","nextCells","separator","decodeLinkText","decoded","preprocessMarkdown","recoveredLinks","recoveredLinkDiagnostics","processed","decodedText","decodeDiagnostics","iconDiagnostics","tableNormalized","tableDiagnostics"],"sources":["../../../src/utils/markdownPreprocessor.ts"],"sourcesContent":["/**\n * Markdown preprocessing utilities\n *\n * These functions fix common markdown formatting issues before AST parsing.\n * They are applied in a specific order to ensure proper processing.\n */\n\nexport interface PreprocessorDiagnostic {\n type: string;\n original: string;\n normalized: string;\n}\n\nexport interface PreprocessResult {\n markdown: string;\n diagnostics: PreprocessorDiagnostic[];\n}\n\n/**\n * Escape web5:// links by URL-encoding the URL part\n * e.g. [text](web5://some text with spaces) → [text](web5://some%20text%20with%20spaces)\n *\n * @param markdown - The markdown string to process\n * @returns The markdown string with web5:// URLs properly encoded\n */\nexport function escapeWeb5Links(markdown: string): string {\n // Match markdown links with web5:// protocol\n // Pattern: [text](web5://...)\n return markdown.replace(\n /\\[([^\\]]+)\\]\\((web5|entity|image):\\/\\/([^)]+)\\)/g,\n (match, linkText, protocol, url) => {\n try {\n // Decode first to avoid double-encoding (e.g. %20 → %2520)\n const decodedUrl = decodeURIComponent(url);\n // Use encodeURI (not encodeURIComponent) to preserve URL structure\n // characters like /, ?, &, = while encoding spaces and unsafe chars\n const encodedUrl = encodeURI(decodedUrl);\n return `[${linkText}](${protocol}://${encodedUrl})`;\n } catch {\n // decodeURIComponent throws on a malformed percent sequence (raw `%`\n // or truncated `%X`), encodeURI on a lone surrogate. During streaming\n // this happens when chunks are concatenated mid-escape or a multi-byte\n // char is split. Leave the link untouched rather than throw — an\n // uncaught error here aborts the whole streaming parse and surfaces as\n // a 908 conversation-streaming-error even though the page rendered.\n return match;\n }\n },\n );\n}\n\n/**\n * Fix malformed markdown links with whitespace (spaces, tabs, newlines) between ] and (\n * e.g. [text] (url) → [text](url)\n * e.g. [text]\\n(url) → [text](url)\n *\n * @param markdown - The markdown string to process\n * @returns The markdown string with fixed link formatting\n */\nexport function fixMalformedLinks(markdown: string): string {\n // \\s matches spaces, tabs, and newlines; + means one or more\n // Also handle cases with newlines explicitly\n return markdown.replace(/\\][\\s\\r\\n]+\\(/g, '](');\n}\n\n/**\n * Recover inline CTA chips where the LLM emitted emphasized text followed by a\n * dangling markdown link close, e.g. `**label →**](web5://ask/query)`.\n */\nexport function recoverOrphanedEmphasisLinks(markdown: string): {\n result: string;\n diagnostics: PreprocessorDiagnostic[];\n} {\n const diagnostics: PreprocessorDiagnostic[] = [];\n const result = markdown.replace(\n /(^|[^\\[])\\*\\*([^\\n\\]*]+?)\\*\\*\\]\\((web5:\\/\\/(?:ask|action)\\/[^)]+)\\)/g,\n (match, prefix: string, linkText: string, href: string) => {\n const normalized = `${prefix}[${linkText.trim()}](${href})`;\n diagnostics.push({\n type: 'orphaned_emphasis_link_recovered',\n original: match,\n normalized,\n });\n return normalized;\n },\n );\n return { result, diagnostics };\n}\n\n/**\n * Trim trailing whitespace from lines that contain text\n *\n * @param markdown - The markdown string to process\n * @returns The markdown string with trailing whitespace trimmed from text lines\n */\nexport function trimTrailingWhitespace(markdown: string): string {\n const lines = markdown.split('\\n');\n const processedLines: string[] = [];\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n // If the line has content, trim trailing whitespace (keep leading spaces for indentation)\n if (trimmedLine.length > 0) {\n processedLines.push(line.trimEnd());\n } else {\n // Lines with only whitespace become empty lines\n processedLines.push('');\n }\n }\n\n return processedLines.join('\\n');\n}\n\n/**\n * Normalize malformed web5://icon URLs to the canonical web5://icon/{name} format.\n * Handles variants like web5://icon:arrow, web5://icon-arrow, web5://icon arrow → web5://icon/arrow.\n * Only alphanumeric characters and dashes are kept in the icon name.\n */\nexport function normalizeIconUrls(markdown: string): {\n result: string;\n diagnostics: PreprocessorDiagnostic[];\n} {\n const diagnostics: PreprocessorDiagnostic[] = [];\n const result = markdown.replace(\n /web5:\\/\\/icon(?:([:/-][^)\\s]+)|(?:\\s+([a-zA-Z0-9-]+)))/g,\n (match, rest: string | undefined, spaceName: string | undefined) => {\n const cleanName = (spaceName ?? rest ?? '')\n .replace(/[^a-zA-Z0-9-]/g, '')\n .replace(/^-+|-+$/g, '');\n const normalized = `web5://icon/${cleanName}`;\n if (match !== normalized) {\n diagnostics.push({\n type: 'icon_url_normalized',\n original: match,\n normalized,\n });\n }\n return normalized;\n },\n );\n return { result, diagnostics };\n}\n\nfunction isFenceToggle(line: string): boolean {\n return /^\\s*(`{3,}|~{3,})/.test(line);\n}\n\nfunction splitPipeRow(line: string): string[] {\n const trimmed = line.trim();\n if (!trimmed.startsWith('|') || !trimmed.endsWith('|')) {\n return [];\n }\n return trimmed\n .slice(1, -1)\n .split('|')\n .map((cell) => cell.trim());\n}\n\nfunction isPipeRow(line: string): boolean {\n return splitPipeRow(line).length >= 2;\n}\n\nfunction isTableDelimiterRow(line: string): boolean {\n const cells = splitPipeRow(line);\n return (\n cells.length >= 2 &&\n cells.every((cell) => /^:?-{3,}:?$/.test(cell.replace(/\\s+/g, '')))\n );\n}\n\n/**\n * Repair LLM-emitted pipe tables that omit the GFM delimiter row.\n * Without this line remark-gfm parses the rows as plain paragraphs, so\n * registry sections such as comparison never receive a `table` part.\n */\nexport function insertMissingTableSeparators(markdown: string): {\n result: string;\n diagnostics: PreprocessorDiagnostic[];\n} {\n const diagnostics: PreprocessorDiagnostic[] = [];\n const lines = markdown.split('\\n');\n const result: string[] = [];\n let inFence = false;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const previousLine = result[result.length - 1] ?? '';\n const nextLine = lines[i + 1] ?? '';\n\n if (isFenceToggle(line)) {\n inFence = !inFence;\n result.push(line);\n continue;\n }\n\n result.push(line);\n\n if (inFence || !isPipeRow(line) || isPipeRow(previousLine)) {\n continue;\n }\n if (!isPipeRow(nextLine) || isTableDelimiterRow(nextLine)) {\n continue;\n }\n\n const headerCells = splitPipeRow(line);\n const nextCells = splitPipeRow(nextLine);\n if (headerCells.length !== nextCells.length) {\n continue;\n }\n\n const separator = `| ${headerCells.map(() => '---').join(' | ')} |`;\n result.push(separator);\n diagnostics.push({\n type: 'table_separator_inserted',\n original: line,\n normalized: `${line}\\n${separator}`,\n });\n }\n\n return { result: result.join('\\n'), diagnostics };\n}\n\n/**\n * Decode URL-encoded text in markdown link labels.\n * e.g. [Some%20Text](https://example.com) → [Some Text](https://example.com)\n * e.g. [Which+solution%3F](web5://...) → [Which solution?](web5://...)\n *\n * Only decodes the text portion [text], never the URL portion (url).\n * Handles both `+` (form-encoded space) and `%XX` escapes; falls back to\n * the original string on malformed percent sequences.\n */\nexport function decodeLinkText(markdown: string): {\n result: string;\n diagnostics: PreprocessorDiagnostic[];\n} {\n const diagnostics: PreprocessorDiagnostic[] = [];\n const result = markdown.replace(\n /\\[([^\\]]+)\\]\\(/g,\n (match, linkText: string) => {\n try {\n const decoded = decodeURIComponent(linkText.replace(/\\+/g, '%20'));\n if (decoded !== linkText) {\n diagnostics.push({\n type: 'link_text_decoded',\n original: linkText,\n normalized: decoded,\n });\n }\n return `[${decoded}](`;\n } catch {\n // If decodeURIComponent fails (e.g. malformed percent sequence like %ZZ),\n // leave the text unchanged\n return match;\n }\n },\n );\n return { result, diagnostics };\n}\n\n/**\n * Preprocess markdown to fix common formatting issues before AST parsing.\n *\n * The preprocessing steps are applied in the following order:\n * 1. Recover orphaned emphasized web5 links\n * 2. Fix malformed links (remove whitespace between ] and () - must happen before web5 links are matched)\n * 3. Decode URL-encoded link text\n * 4. Escape web5:// links (URL-encode URLs)\n * 5. Normalize icon URLs\n * 6. Insert missing table separators for obvious pipe tables\n * 7. Trim trailing whitespace from lines\n *\n * @param markdown - The raw markdown string to preprocess\n * @returns The preprocessed markdown string ready for AST parsing\n */\nexport function preprocessMarkdown(markdown: string): PreprocessResult {\n const { result: recoveredLinks, diagnostics: recoveredLinkDiagnostics } =\n recoverOrphanedEmphasisLinks(markdown);\n let processed = fixMalformedLinks(recoveredLinks);\n const { result: decodedText, diagnostics: decodeDiagnostics } =\n decodeLinkText(processed);\n processed = escapeWeb5Links(decodedText);\n const { result: normalized, diagnostics: iconDiagnostics } =\n normalizeIconUrls(processed);\n const { result: tableNormalized, diagnostics: tableDiagnostics } =\n insertMissingTableSeparators(normalized);\n processed = trimTrailingWhitespace(tableNormalized);\n return {\n markdown: processed,\n diagnostics: [\n ...recoveredLinkDiagnostics,\n ...decodeDiagnostics,\n ...iconDiagnostics,\n ...tableDiagnostics,\n ],\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.clearForwardStack = clearForwardStack;
|
|
5
|
+
exports.getForwardStack = getForwardStack;
|
|
6
|
+
exports.popFromForwardStack = popFromForwardStack;
|
|
7
|
+
exports.pushToForwardStack = pushToForwardStack;
|
|
8
|
+
exports.setForwardStack = setForwardStack;
|
|
9
|
+
const FORWARD_STACK_KEY = 'web5_conversation_forward_stack';
|
|
10
|
+
function getForwardStack() {
|
|
11
|
+
try {
|
|
12
|
+
const raw = sessionStorage.getItem(FORWARD_STACK_KEY);
|
|
13
|
+
return raw ? JSON.parse(raw) : [];
|
|
14
|
+
} catch {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function setForwardStack(stack) {
|
|
19
|
+
sessionStorage.setItem(FORWARD_STACK_KEY, JSON.stringify(stack));
|
|
20
|
+
}
|
|
21
|
+
function clearForwardStack() {
|
|
22
|
+
sessionStorage.removeItem(FORWARD_STACK_KEY);
|
|
23
|
+
}
|
|
24
|
+
function pushToForwardStack(triggerId) {
|
|
25
|
+
const stack = getForwardStack();
|
|
26
|
+
stack.push(triggerId);
|
|
27
|
+
setForwardStack(stack);
|
|
28
|
+
}
|
|
29
|
+
function popFromForwardStack() {
|
|
30
|
+
const stack = getForwardStack();
|
|
31
|
+
const triggerId = stack.pop();
|
|
32
|
+
setForwardStack(stack);
|
|
33
|
+
return triggerId;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=navigationStack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FORWARD_STACK_KEY","getForwardStack","raw","sessionStorage","getItem","JSON","parse","setForwardStack","stack","setItem","stringify","clearForwardStack","removeItem","pushToForwardStack","triggerId","push","popFromForwardStack","pop"],"sources":["../../../src/utils/navigationStack.ts"],"sourcesContent":["const FORWARD_STACK_KEY = 'web5_conversation_forward_stack';\n\nexport function getForwardStack(): string[] {\n try {\n const raw = sessionStorage.getItem(FORWARD_STACK_KEY);\n return raw ? JSON.parse(raw) : [];\n } catch {\n return [];\n }\n}\n\nexport function setForwardStack(stack: string[]) {\n sessionStorage.setItem(FORWARD_STACK_KEY, JSON.stringify(stack));\n}\n\nexport function clearForwardStack() {\n sessionStorage.removeItem(FORWARD_STACK_KEY);\n}\n\nexport function pushToForwardStack(triggerId: string) {\n const stack = getForwardStack();\n stack.push(triggerId);\n setForwardStack(stack);\n}\n\nexport function popFromForwardStack(): string | undefined {\n const stack = getForwardStack();\n const triggerId = stack.pop();\n setForwardStack(stack);\n return triggerId;\n}\n"],"mappings":";;;;;;;;AAAA,MAAMA,iBAAiB,GAAG,iCAAiC;AAEpD,SAASC,eAAeA,CAAA,EAAa;EAC1C,IAAI;IACF,MAAMC,GAAG,GAAGC,cAAc,CAACC,OAAO,CAACJ,iBAAiB,CAAC;IACrD,OAAOE,GAAG,GAAGG,IAAI,CAACC,KAAK,CAACJ,GAAG,CAAC,GAAG,EAAE;EACnC,CAAC,CAAC,MAAM;IACN,OAAO,EAAE;EACX;AACF;AAEO,SAASK,eAAeA,CAACC,KAAe,EAAE;EAC/CL,cAAc,CAACM,OAAO,CAACT,iBAAiB,EAAEK,IAAI,CAACK,SAAS,CAACF,KAAK,CAAC,CAAC;AAClE;AAEO,SAASG,iBAAiBA,CAAA,EAAG;EAClCR,cAAc,CAACS,UAAU,CAACZ,iBAAiB,CAAC;AAC9C;AAEO,SAASa,kBAAkBA,CAACC,SAAiB,EAAE;EACpD,MAAMN,KAAK,GAAGP,eAAe,CAAC,CAAC;EAC/BO,KAAK,CAACO,IAAI,CAACD,SAAS,CAAC;EACrBP,eAAe,CAACC,KAAK,CAAC;AACxB;AAEO,SAASQ,mBAAmBA,CAAA,EAAuB;EACxD,MAAMR,KAAK,GAAGP,eAAe,CAAC,CAAC;EAC/B,MAAMa,SAAS,GAAGN,KAAK,CAACS,GAAG,CAAC,CAAC;EAC7BV,eAAe,CAACC,KAAK,CAAC;EACtB,OAAOM,SAAS;AAClB","ignoreList":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.hasImage = hasImage;
|
|
5
|
+
exports.isHtmlComment = isHtmlComment;
|
|
6
|
+
/**
|
|
7
|
+
* Check if an HTML node is a comment
|
|
8
|
+
*/
|
|
9
|
+
function isHtmlComment(node) {
|
|
10
|
+
if (node.type !== 'html') {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const value = node.value;
|
|
14
|
+
return value.trim().startsWith('<!--') && value.trim().endsWith('-->');
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Check if a node has images nested within it (for paragraphs with images)
|
|
19
|
+
*/
|
|
20
|
+
function hasImage(node) {
|
|
21
|
+
if (node.type === 'image') {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
const checkChildren = children => {
|
|
25
|
+
if (!children) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
for (const child of children) {
|
|
29
|
+
if (child.type === 'image') {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
if (child.children && checkChildren(child.children)) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
};
|
|
38
|
+
if ('children' in node && node.children) {
|
|
39
|
+
return checkChildren(node.children);
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=nodeMatchers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isHtmlComment","node","type","value","trim","startsWith","endsWith","hasImage","checkChildren","children","child"],"sources":["../../../src/utils/nodeMatchers.ts"],"sourcesContent":["import type { RootContent } from 'mdast';\n\n/**\n * Check if an HTML node is a comment\n */\nexport function isHtmlComment(node: any): boolean {\n if (node.type !== 'html') {\n return false;\n }\n const value = node.value as string;\n return value.trim().startsWith('<!--') && value.trim().endsWith('-->');\n}\n\n/**\n * Check if a node has images nested within it (for paragraphs with images)\n */\nexport function hasImage(node: RootContent): boolean {\n if (node.type === 'image') {\n return true;\n }\n\n const checkChildren = (children: any[]): boolean => {\n if (!children) {\n return false;\n }\n for (const child of children) {\n if (child.type === 'image') {\n return true;\n }\n if (child.children && checkChildren(child.children)) {\n return true;\n }\n }\n return false;\n };\n\n if ('children' in node && node.children) {\n return checkChildren(node.children);\n }\n\n return false;\n}\n"],"mappings":";;;;;AAEA;AACA;AACA;AACO,SAASA,aAAaA,CAACC,IAAS,EAAW;EAChD,IAAIA,IAAI,CAACC,IAAI,KAAK,MAAM,EAAE;IACxB,OAAO,KAAK;EACd;EACA,MAAMC,KAAK,GAAGF,IAAI,CAACE,KAAe;EAClC,OAAOA,KAAK,CAACC,IAAI,CAAC,CAAC,CAACC,UAAU,CAAC,MAAM,CAAC,IAAIF,KAAK,CAACC,IAAI,CAAC,CAAC,CAACE,QAAQ,CAAC,KAAK,CAAC;AACxE;;AAEA;AACA;AACA;AACO,SAASC,QAAQA,CAACN,IAAiB,EAAW;EACnD,IAAIA,IAAI,CAACC,IAAI,KAAK,OAAO,EAAE;IACzB,OAAO,IAAI;EACb;EAEA,MAAMM,aAAa,GAAIC,QAAe,IAAc;IAClD,IAAI,CAACA,QAAQ,EAAE;MACb,OAAO,KAAK;IACd;IACA,KAAK,MAAMC,KAAK,IAAID,QAAQ,EAAE;MAC5B,IAAIC,KAAK,CAACR,IAAI,KAAK,OAAO,EAAE;QAC1B,OAAO,IAAI;MACb;MACA,IAAIQ,KAAK,CAACD,QAAQ,IAAID,aAAa,CAACE,KAAK,CAACD,QAAQ,CAAC,EAAE;QACnD,OAAO,IAAI;MACb;IACF;IACA,OAAO,KAAK;EACd,CAAC;EAED,IAAI,UAAU,IAAIR,IAAI,IAAIA,IAAI,CAACQ,QAAQ,EAAE;IACvC,OAAOD,aAAa,CAACP,IAAI,CAACQ,QAAQ,CAAC;EACrC;EAEA,OAAO,KAAK;AACd","ignoreList":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.createPageSection = createPageSection;
|
|
5
|
+
exports.findImageInNode = exports.findImageInChildren = void 0;
|
|
6
|
+
exports.generateId = generateId;
|
|
7
|
+
exports.generateSectionId = generateSectionId;
|
|
8
|
+
const findImageInNode = node => {
|
|
9
|
+
if (node.type === 'image') {
|
|
10
|
+
return node.url || '';
|
|
11
|
+
}
|
|
12
|
+
if ('children' in node && node.children) {
|
|
13
|
+
for (const child of node.children) {
|
|
14
|
+
const imageUrl = findImageInNode(child);
|
|
15
|
+
if (imageUrl) {
|
|
16
|
+
return imageUrl;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
};
|
|
22
|
+
exports.findImageInNode = findImageInNode;
|
|
23
|
+
const findImageInChildren = children => {
|
|
24
|
+
for (const child of children) {
|
|
25
|
+
if (child.type === 'image') {
|
|
26
|
+
return child.url || '';
|
|
27
|
+
}
|
|
28
|
+
if ('children' in child && child.children) {
|
|
29
|
+
const imageUrl = findImageInChildren(child.children);
|
|
30
|
+
if (imageUrl) {
|
|
31
|
+
return imageUrl;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return '';
|
|
36
|
+
};
|
|
37
|
+
exports.findImageInChildren = findImageInChildren;
|
|
38
|
+
function generateSectionId(componentName, index) {
|
|
39
|
+
return `markdown-section-${componentName.toLowerCase()}-${index}`;
|
|
40
|
+
}
|
|
41
|
+
function createPageSection({
|
|
42
|
+
component,
|
|
43
|
+
sectionType,
|
|
44
|
+
componentName,
|
|
45
|
+
semantic,
|
|
46
|
+
componentOptions,
|
|
47
|
+
index,
|
|
48
|
+
id,
|
|
49
|
+
sourceMarkdown,
|
|
50
|
+
debugProps
|
|
51
|
+
}) {
|
|
52
|
+
return {
|
|
53
|
+
id: id ?? generateSectionId(sectionType, index),
|
|
54
|
+
sectionType,
|
|
55
|
+
componentName,
|
|
56
|
+
semantic,
|
|
57
|
+
componentOptions,
|
|
58
|
+
component,
|
|
59
|
+
sourceMarkdown: sourceMarkdown ?? '',
|
|
60
|
+
debugProps
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function generateId() {
|
|
64
|
+
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=propsExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["findImageInNode","node","type","url","children","child","imageUrl","exports","findImageInChildren","generateSectionId","componentName","index","toLowerCase","createPageSection","component","sectionType","semantic","componentOptions","id","sourceMarkdown","debugProps","generateId","Date","now","Math","random","toString","substr"],"sources":["../../../src/utils/propsExtractor.ts"],"sourcesContent":["import type { RootContent } from 'mdast';\nimport type { PageSection } from '../types/page-section';\nimport { ReactElement } from 'react';\n\nexport interface Product {\n id: string;\n imageUrl: string;\n productName: string;\n description?: string;\n price?: string;\n onClick?: string;\n linkText?: string;\n linkUrl?: string;\n colorSwatches?: string[];\n badgeText?: string;\n rating?: number;\n reviewCount?: number;\n}\n\nexport interface ComparisonProduct {\n id: string;\n imageUrl: string;\n name: string;\n price: string;\n onClick?: string;\n features: Record<string, string>;\n}\n\nexport interface ProductComparisonSectionProps {\n title: string;\n subtitle?: string;\n products: ComparisonProduct[];\n backgroundColor?: string;\n highlightDifferences?: boolean;\n showImages?: boolean;\n onProductClick?: string;\n ready: boolean;\n}\n\nexport const findImageInNode = (node: RootContent): string | null => {\n if (node.type === 'image') {\n return node.url || '';\n }\n if ('children' in node && node.children) {\n for (const child of node.children) {\n const imageUrl = findImageInNode(child);\n if (imageUrl) {\n return imageUrl;\n }\n }\n }\n return null;\n};\n\nexport const findImageInChildren = (children: RootContent[]): string => {\n for (const child of children) {\n if (child.type === 'image') {\n return child.url || '';\n }\n if ('children' in child && child.children) {\n const imageUrl = findImageInChildren(child.children);\n if (imageUrl) {\n return imageUrl;\n }\n }\n }\n return '';\n};\n\nexport function generateSectionId(\n componentName: string,\n index: number,\n): string {\n return `markdown-section-${componentName.toLowerCase()}-${index}`;\n}\n\nexport function createPageSection({\n component,\n sectionType,\n componentName,\n semantic,\n componentOptions,\n index,\n id,\n sourceMarkdown,\n debugProps,\n}: {\n component: ReactElement | null;\n sectionType: string;\n componentName?: string;\n semantic?: string;\n componentOptions?: Record<string, any>;\n index: number;\n id?: string;\n sourceMarkdown?: string;\n debugProps?: any;\n}): PageSection {\n return {\n id: id ?? generateSectionId(sectionType, index),\n sectionType,\n componentName,\n semantic,\n componentOptions,\n component,\n sourceMarkdown: sourceMarkdown ?? '',\n debugProps,\n };\n}\n\nexport function generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n"],"mappings":";;;;;;;AAuCO,MAAMA,eAAe,GAAIC,IAAiB,IAAoB;EACnE,IAAIA,IAAI,CAACC,IAAI,KAAK,OAAO,EAAE;IACzB,OAAOD,IAAI,CAACE,GAAG,IAAI,EAAE;EACvB;EACA,IAAI,UAAU,IAAIF,IAAI,IAAIA,IAAI,CAACG,QAAQ,EAAE;IACvC,KAAK,MAAMC,KAAK,IAAIJ,IAAI,CAACG,QAAQ,EAAE;MACjC,MAAME,QAAQ,GAAGN,eAAe,CAACK,KAAK,CAAC;MACvC,IAAIC,QAAQ,EAAE;QACZ,OAAOA,QAAQ;MACjB;IACF;EACF;EACA,OAAO,IAAI;AACb,CAAC;AAACC,OAAA,CAAAP,eAAA,GAAAA,eAAA;AAEK,MAAMQ,mBAAmB,GAAIJ,QAAuB,IAAa;EACtE,KAAK,MAAMC,KAAK,IAAID,QAAQ,EAAE;IAC5B,IAAIC,KAAK,CAACH,IAAI,KAAK,OAAO,EAAE;MAC1B,OAAOG,KAAK,CAACF,GAAG,IAAI,EAAE;IACxB;IACA,IAAI,UAAU,IAAIE,KAAK,IAAIA,KAAK,CAACD,QAAQ,EAAE;MACzC,MAAME,QAAQ,GAAGE,mBAAmB,CAACH,KAAK,CAACD,QAAQ,CAAC;MACpD,IAAIE,QAAQ,EAAE;QACZ,OAAOA,QAAQ;MACjB;IACF;EACF;EACA,OAAO,EAAE;AACX,CAAC;AAACC,OAAA,CAAAC,mBAAA,GAAAA,mBAAA;AAEK,SAASC,iBAAiBA,CAC/BC,aAAqB,EACrBC,KAAa,EACL;EACR,OAAO,oBAAoBD,aAAa,CAACE,WAAW,CAAC,CAAC,IAAID,KAAK,EAAE;AACnE;AAEO,SAASE,iBAAiBA,CAAC;EAChCC,SAAS;EACTC,WAAW;EACXL,aAAa;EACbM,QAAQ;EACRC,gBAAgB;EAChBN,KAAK;EACLO,EAAE;EACFC,cAAc;EACdC;AAWF,CAAC,EAAe;EACd,OAAO;IACLF,EAAE,EAAEA,EAAE,IAAIT,iBAAiB,CAACM,WAAW,EAAEJ,KAAK,CAAC;IAC/CI,WAAW;IACXL,aAAa;IACbM,QAAQ;IACRC,gBAAgB;IAChBH,SAAS;IACTK,cAAc,EAAEA,cAAc,IAAI,EAAE;IACpCC;EACF,CAAC;AACH;AAEO,SAASC,UAAUA,CAAA,EAAW;EACnC,OAAO,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,IAAIC,IAAI,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACnE","ignoreList":[]}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.startNewChatId = exports.setChatId = exports.resetChatIdForTests = exports.getSessionId = exports.getOrCreateSessionId = exports.getChatId = void 0;
|
|
5
|
+
/**
|
|
6
|
+
* Session identity shared across every surface that calls `/conversation`.
|
|
7
|
+
*
|
|
8
|
+
* Lives in web5-core (lifted from web50-server-ui, same move as
|
|
9
|
+
* `conversationBackend.ts`) so the main app and the embed-placement bundle
|
|
10
|
+
* send the same `sessionId` structure — a GUID persisted in sessionStorage
|
|
11
|
+
* under one key/codec. Surfaces on the same origin literally share the id;
|
|
12
|
+
* on different origins they still agree on the wire shape.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const SESSION_ID_KEY = 'sessionId';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Generates a random GUID
|
|
19
|
+
*/
|
|
20
|
+
const generateGuid = () => {
|
|
21
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
|
|
22
|
+
const r = Math.random() * 16 | 0;
|
|
23
|
+
const v = c === 'x' ? r : r & 0x3 | 0x8;
|
|
24
|
+
return v.toString(16);
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
const readStoredSessionId = () => {
|
|
28
|
+
try {
|
|
29
|
+
const raw = sessionStorage.getItem(SESSION_ID_KEY);
|
|
30
|
+
return raw ? JSON.parse(raw) : null;
|
|
31
|
+
} catch {
|
|
32
|
+
// sessionStorage can throw in privacy mode / non-DOM environments.
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Gets or creates a session ID from sessionStorage.
|
|
39
|
+
* If no session ID exists, creates a new one and stores it.
|
|
40
|
+
* If it exists, returns the existing one without overriding.
|
|
41
|
+
* Falls back to an ephemeral GUID when sessionStorage is unavailable
|
|
42
|
+
* (SSR, storage disabled).
|
|
43
|
+
*/
|
|
44
|
+
const getOrCreateSessionId = () => {
|
|
45
|
+
const existing = readStoredSessionId();
|
|
46
|
+
if (existing) {
|
|
47
|
+
return existing;
|
|
48
|
+
}
|
|
49
|
+
const id = generateGuid();
|
|
50
|
+
try {
|
|
51
|
+
sessionStorage.setItem(SESSION_ID_KEY, JSON.stringify(id));
|
|
52
|
+
} catch {
|
|
53
|
+
// Quota exceeded / storage disabled — ephemeral id still works
|
|
54
|
+
}
|
|
55
|
+
return id;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Gets the current session ID without creating a new one
|
|
60
|
+
*/
|
|
61
|
+
exports.getOrCreateSessionId = getOrCreateSessionId;
|
|
62
|
+
const getSessionId = () => {
|
|
63
|
+
return readStoredSessionId();
|
|
64
|
+
};
|
|
65
|
+
exports.getSessionId = getSessionId;
|
|
66
|
+
const CHAT_ID_KEY = 'chatId';
|
|
67
|
+
let chatId = null;
|
|
68
|
+
const readStoredChatId = () => {
|
|
69
|
+
try {
|
|
70
|
+
const raw = sessionStorage.getItem(CHAT_ID_KEY);
|
|
71
|
+
return raw ? JSON.parse(raw) : null;
|
|
72
|
+
} catch {
|
|
73
|
+
// sessionStorage can throw in privacy mode / non-DOM environments.
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const persistChatId = id => {
|
|
78
|
+
try {
|
|
79
|
+
sessionStorage.setItem(CHAT_ID_KEY, JSON.stringify(id));
|
|
80
|
+
} catch {
|
|
81
|
+
// Quota exceeded / storage disabled — ephemeral id still works.
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Mints a `chat-id-<epoch>-<random>` id. The random suffix prevents two
|
|
87
|
+
* pages (or two visitors on the same site) that start a conversation in
|
|
88
|
+
* the same millisecond from colliding on the same conversation id — the
|
|
89
|
+
* backend locks per conversation and rejects the loser with
|
|
90
|
+
* "Conversation is busy".
|
|
91
|
+
*/
|
|
92
|
+
const mintChatId = () => `chat-id-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Session-stable chat id (`chat-id-<epoch>-<random>`), persisted in
|
|
96
|
+
* sessionStorage under the same key/codec convention as the session id.
|
|
97
|
+
*
|
|
98
|
+
* Persisted (changed from the original in-memory-only page-visit scope) so
|
|
99
|
+
* the chat CARRIES OVER across same-origin navigations — main web5 page →
|
|
100
|
+
* product page and between PDPs. On the markdown-history backend the chat id
|
|
101
|
+
* is the conversation id, so this threads all of a visit's turns into one
|
|
102
|
+
* conversation (history/BO grouping) and keeps the BE's history cache
|
|
103
|
+
* (`msid_chatId`) warm across pages — classify's `<last_turn>` sees the
|
|
104
|
+
* previous page's turn. Placement prompt isolation is NOT affected: the BE's
|
|
105
|
+
* running-context key prefers the per-placement `session_id` that
|
|
106
|
+
* embed-placement sends, falling back to this chat id only for surfaces
|
|
107
|
+
* that don't send one (the main app).
|
|
108
|
+
*
|
|
109
|
+
* In-memory memo remains the fast path and the fallback when storage is
|
|
110
|
+
* unavailable (SSR, privacy mode) — there the id is page-load-stable, the
|
|
111
|
+
* previous behavior.
|
|
112
|
+
*/
|
|
113
|
+
const getChatId = () => {
|
|
114
|
+
if (chatId !== null) return chatId;
|
|
115
|
+
const stored = readStoredChatId();
|
|
116
|
+
if (stored) {
|
|
117
|
+
chatId = stored;
|
|
118
|
+
return chatId;
|
|
119
|
+
}
|
|
120
|
+
chatId = mintChatId();
|
|
121
|
+
persistChatId(chatId);
|
|
122
|
+
return chatId;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Mint a fresh chat id, replacing the memoized AND persisted one. Call when
|
|
127
|
+
* the user starts a NEW conversation (main app's first send of a fresh
|
|
128
|
+
* thread) — the previous conversation's id must not leak into the new one,
|
|
129
|
+
* or into the placement calls of the pages visited next.
|
|
130
|
+
*/
|
|
131
|
+
exports.getChatId = getChatId;
|
|
132
|
+
const startNewChatId = () => {
|
|
133
|
+
chatId = mintChatId();
|
|
134
|
+
persistChatId(chatId);
|
|
135
|
+
return chatId;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Adopt an externally resolved chat id — e.g. a conversation restored from
|
|
140
|
+
* history by trigger id — as the session's current chat. Memoized and
|
|
141
|
+
* persisted so the next pages' placement calls continue that conversation.
|
|
142
|
+
*/
|
|
143
|
+
exports.startNewChatId = startNewChatId;
|
|
144
|
+
const setChatId = id => {
|
|
145
|
+
if (!id) return;
|
|
146
|
+
chatId = id;
|
|
147
|
+
persistChatId(id);
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
/** Test-only: reset the memoized chat id and its persisted copy. */
|
|
151
|
+
exports.setChatId = setChatId;
|
|
152
|
+
const resetChatIdForTests = () => {
|
|
153
|
+
chatId = null;
|
|
154
|
+
try {
|
|
155
|
+
sessionStorage.removeItem(CHAT_ID_KEY);
|
|
156
|
+
} catch {
|
|
157
|
+
// Storage unavailable — nothing persisted to clear.
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
exports.resetChatIdForTests = resetChatIdForTests;
|
|
161
|
+
//# sourceMappingURL=sessionManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SESSION_ID_KEY","generateGuid","replace","c","r","Math","random","v","toString","readStoredSessionId","raw","sessionStorage","getItem","JSON","parse","getOrCreateSessionId","existing","id","setItem","stringify","exports","getSessionId","CHAT_ID_KEY","chatId","readStoredChatId","persistChatId","mintChatId","Date","now","slice","getChatId","stored","startNewChatId","setChatId","resetChatIdForTests","removeItem"],"sources":["../../../src/utils/sessionManager.ts"],"sourcesContent":["/**\n * Session identity shared across every surface that calls `/conversation`.\n *\n * Lives in web5-core (lifted from web50-server-ui, same move as\n * `conversationBackend.ts`) so the main app and the embed-placement bundle\n * send the same `sessionId` structure — a GUID persisted in sessionStorage\n * under one key/codec. Surfaces on the same origin literally share the id;\n * on different origins they still agree on the wire shape.\n */\n\nconst SESSION_ID_KEY = 'sessionId';\n\n/**\n * Generates a random GUID\n */\nconst generateGuid = (): string => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n\nconst readStoredSessionId = (): string | null => {\n try {\n const raw = sessionStorage.getItem(SESSION_ID_KEY);\n return raw ? (JSON.parse(raw) as string) : null;\n } catch {\n // sessionStorage can throw in privacy mode / non-DOM environments.\n return null;\n }\n};\n\n/**\n * Gets or creates a session ID from sessionStorage.\n * If no session ID exists, creates a new one and stores it.\n * If it exists, returns the existing one without overriding.\n * Falls back to an ephemeral GUID when sessionStorage is unavailable\n * (SSR, storage disabled).\n */\nexport const getOrCreateSessionId = (): string => {\n const existing = readStoredSessionId();\n if (existing) {\n return existing;\n }\n const id = generateGuid();\n try {\n sessionStorage.setItem(SESSION_ID_KEY, JSON.stringify(id));\n } catch {\n // Quota exceeded / storage disabled — ephemeral id still works\n }\n return id;\n};\n\n/**\n * Gets the current session ID without creating a new one\n */\nexport const getSessionId = (): string | null => {\n return readStoredSessionId();\n};\n\nconst CHAT_ID_KEY = 'chatId';\n\nlet chatId: string | null = null;\n\nconst readStoredChatId = (): string | null => {\n try {\n const raw = sessionStorage.getItem(CHAT_ID_KEY);\n return raw ? (JSON.parse(raw) as string) : null;\n } catch {\n // sessionStorage can throw in privacy mode / non-DOM environments.\n return null;\n }\n};\n\nconst persistChatId = (id: string): void => {\n try {\n sessionStorage.setItem(CHAT_ID_KEY, JSON.stringify(id));\n } catch {\n // Quota exceeded / storage disabled — ephemeral id still works.\n }\n};\n\n/**\n * Mints a `chat-id-<epoch>-<random>` id. The random suffix prevents two\n * pages (or two visitors on the same site) that start a conversation in\n * the same millisecond from colliding on the same conversation id — the\n * backend locks per conversation and rejects the loser with\n * \"Conversation is busy\".\n */\nconst mintChatId = (): string =>\n `chat-id-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n\n/**\n * Session-stable chat id (`chat-id-<epoch>-<random>`), persisted in\n * sessionStorage under the same key/codec convention as the session id.\n *\n * Persisted (changed from the original in-memory-only page-visit scope) so\n * the chat CARRIES OVER across same-origin navigations — main web5 page →\n * product page and between PDPs. On the markdown-history backend the chat id\n * is the conversation id, so this threads all of a visit's turns into one\n * conversation (history/BO grouping) and keeps the BE's history cache\n * (`msid_chatId`) warm across pages — classify's `<last_turn>` sees the\n * previous page's turn. Placement prompt isolation is NOT affected: the BE's\n * running-context key prefers the per-placement `session_id` that\n * embed-placement sends, falling back to this chat id only for surfaces\n * that don't send one (the main app).\n *\n * In-memory memo remains the fast path and the fallback when storage is\n * unavailable (SSR, privacy mode) — there the id is page-load-stable, the\n * previous behavior.\n */\nexport const getChatId = (): string => {\n if (chatId !== null) return chatId;\n const stored = readStoredChatId();\n if (stored) {\n chatId = stored;\n return chatId;\n }\n chatId = mintChatId();\n persistChatId(chatId);\n return chatId;\n};\n\n/**\n * Mint a fresh chat id, replacing the memoized AND persisted one. Call when\n * the user starts a NEW conversation (main app's first send of a fresh\n * thread) — the previous conversation's id must not leak into the new one,\n * or into the placement calls of the pages visited next.\n */\nexport const startNewChatId = (): string => {\n chatId = mintChatId();\n persistChatId(chatId);\n return chatId;\n};\n\n/**\n * Adopt an externally resolved chat id — e.g. a conversation restored from\n * history by trigger id — as the session's current chat. Memoized and\n * persisted so the next pages' placement calls continue that conversation.\n */\nexport const setChatId = (id: string): void => {\n if (!id) return;\n chatId = id;\n persistChatId(id);\n};\n\n/** Test-only: reset the memoized chat id and its persisted copy. */\nexport const resetChatIdForTests = (): void => {\n chatId = null;\n try {\n sessionStorage.removeItem(CHAT_ID_KEY);\n } catch {\n // Storage unavailable — nothing persisted to clear.\n }\n};\n"],"mappings":"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","ignoreList":[]}
|