@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,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown preprocessing utilities
|
|
3
|
+
*
|
|
4
|
+
* These functions fix common markdown formatting issues before AST parsing.
|
|
5
|
+
* They are applied in a specific order to ensure proper processing.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Escape web5:// links by URL-encoding the URL part
|
|
10
|
+
* e.g. [text](web5://some text with spaces) → [text](web5://some%20text%20with%20spaces)
|
|
11
|
+
*
|
|
12
|
+
* @param markdown - The markdown string to process
|
|
13
|
+
* @returns The markdown string with web5:// URLs properly encoded
|
|
14
|
+
*/
|
|
15
|
+
export function escapeWeb5Links(markdown) {
|
|
16
|
+
// Match markdown links with web5:// protocol
|
|
17
|
+
// Pattern: [text](web5://...)
|
|
18
|
+
return markdown.replace(/\[([^\]]+)\]\((web5|entity|image):\/\/([^)]+)\)/g, (match, linkText, protocol, url) => {
|
|
19
|
+
try {
|
|
20
|
+
// Decode first to avoid double-encoding (e.g. %20 → %2520)
|
|
21
|
+
const decodedUrl = decodeURIComponent(url);
|
|
22
|
+
// Use encodeURI (not encodeURIComponent) to preserve URL structure
|
|
23
|
+
// characters like /, ?, &, = while encoding spaces and unsafe chars
|
|
24
|
+
const encodedUrl = encodeURI(decodedUrl);
|
|
25
|
+
return `[${linkText}](${protocol}://${encodedUrl})`;
|
|
26
|
+
} catch {
|
|
27
|
+
// decodeURIComponent throws on a malformed percent sequence (raw `%`
|
|
28
|
+
// or truncated `%X`), encodeURI on a lone surrogate. During streaming
|
|
29
|
+
// this happens when chunks are concatenated mid-escape or a multi-byte
|
|
30
|
+
// char is split. Leave the link untouched rather than throw — an
|
|
31
|
+
// uncaught error here aborts the whole streaming parse and surfaces as
|
|
32
|
+
// a 908 conversation-streaming-error even though the page rendered.
|
|
33
|
+
return match;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Fix malformed markdown links with whitespace (spaces, tabs, newlines) between ] and (
|
|
40
|
+
* e.g. [text] (url) → [text](url)
|
|
41
|
+
* e.g. [text]\n(url) → [text](url)
|
|
42
|
+
*
|
|
43
|
+
* @param markdown - The markdown string to process
|
|
44
|
+
* @returns The markdown string with fixed link formatting
|
|
45
|
+
*/
|
|
46
|
+
export function fixMalformedLinks(markdown) {
|
|
47
|
+
// \s matches spaces, tabs, and newlines; + means one or more
|
|
48
|
+
// Also handle cases with newlines explicitly
|
|
49
|
+
return markdown.replace(/\][\s\r\n]+\(/g, '](');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Recover inline CTA chips where the LLM emitted emphasized text followed by a
|
|
54
|
+
* dangling markdown link close, e.g. `**label →**](web5://ask/query)`.
|
|
55
|
+
*/
|
|
56
|
+
export function recoverOrphanedEmphasisLinks(markdown) {
|
|
57
|
+
const diagnostics = [];
|
|
58
|
+
const result = markdown.replace(/(^|[^\[])\*\*([^\n\]*]+?)\*\*\]\((web5:\/\/(?:ask|action)\/[^)]+)\)/g, (match, prefix, linkText, href) => {
|
|
59
|
+
const normalized = `${prefix}[${linkText.trim()}](${href})`;
|
|
60
|
+
diagnostics.push({
|
|
61
|
+
type: 'orphaned_emphasis_link_recovered',
|
|
62
|
+
original: match,
|
|
63
|
+
normalized
|
|
64
|
+
});
|
|
65
|
+
return normalized;
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
result,
|
|
69
|
+
diagnostics
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Trim trailing whitespace from lines that contain text
|
|
75
|
+
*
|
|
76
|
+
* @param markdown - The markdown string to process
|
|
77
|
+
* @returns The markdown string with trailing whitespace trimmed from text lines
|
|
78
|
+
*/
|
|
79
|
+
export function trimTrailingWhitespace(markdown) {
|
|
80
|
+
const lines = markdown.split('\n');
|
|
81
|
+
const processedLines = [];
|
|
82
|
+
for (const line of lines) {
|
|
83
|
+
const trimmedLine = line.trim();
|
|
84
|
+
|
|
85
|
+
// If the line has content, trim trailing whitespace (keep leading spaces for indentation)
|
|
86
|
+
if (trimmedLine.length > 0) {
|
|
87
|
+
processedLines.push(line.trimEnd());
|
|
88
|
+
} else {
|
|
89
|
+
// Lines with only whitespace become empty lines
|
|
90
|
+
processedLines.push('');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return processedLines.join('\n');
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Normalize malformed web5://icon URLs to the canonical web5://icon/{name} format.
|
|
98
|
+
* Handles variants like web5://icon:arrow, web5://icon-arrow, web5://icon arrow → web5://icon/arrow.
|
|
99
|
+
* Only alphanumeric characters and dashes are kept in the icon name.
|
|
100
|
+
*/
|
|
101
|
+
export function normalizeIconUrls(markdown) {
|
|
102
|
+
const diagnostics = [];
|
|
103
|
+
const result = markdown.replace(/web5:\/\/icon(?:([:/-][^)\s]+)|(?:\s+([a-zA-Z0-9-]+)))/g, (match, rest, spaceName) => {
|
|
104
|
+
const cleanName = (spaceName ?? rest ?? '').replace(/[^a-zA-Z0-9-]/g, '').replace(/^-+|-+$/g, '');
|
|
105
|
+
const normalized = `web5://icon/${cleanName}`;
|
|
106
|
+
if (match !== normalized) {
|
|
107
|
+
diagnostics.push({
|
|
108
|
+
type: 'icon_url_normalized',
|
|
109
|
+
original: match,
|
|
110
|
+
normalized
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return normalized;
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
result,
|
|
117
|
+
diagnostics
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function isFenceToggle(line) {
|
|
121
|
+
return /^\s*(`{3,}|~{3,})/.test(line);
|
|
122
|
+
}
|
|
123
|
+
function splitPipeRow(line) {
|
|
124
|
+
const trimmed = line.trim();
|
|
125
|
+
if (!trimmed.startsWith('|') || !trimmed.endsWith('|')) {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
return trimmed.slice(1, -1).split('|').map(cell => cell.trim());
|
|
129
|
+
}
|
|
130
|
+
function isPipeRow(line) {
|
|
131
|
+
return splitPipeRow(line).length >= 2;
|
|
132
|
+
}
|
|
133
|
+
function isTableDelimiterRow(line) {
|
|
134
|
+
const cells = splitPipeRow(line);
|
|
135
|
+
return cells.length >= 2 && cells.every(cell => /^:?-{3,}:?$/.test(cell.replace(/\s+/g, '')));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Repair LLM-emitted pipe tables that omit the GFM delimiter row.
|
|
140
|
+
* Without this line remark-gfm parses the rows as plain paragraphs, so
|
|
141
|
+
* registry sections such as comparison never receive a `table` part.
|
|
142
|
+
*/
|
|
143
|
+
export function insertMissingTableSeparators(markdown) {
|
|
144
|
+
const diagnostics = [];
|
|
145
|
+
const lines = markdown.split('\n');
|
|
146
|
+
const result = [];
|
|
147
|
+
let inFence = false;
|
|
148
|
+
for (let i = 0; i < lines.length; i++) {
|
|
149
|
+
const line = lines[i];
|
|
150
|
+
const previousLine = result[result.length - 1] ?? '';
|
|
151
|
+
const nextLine = lines[i + 1] ?? '';
|
|
152
|
+
if (isFenceToggle(line)) {
|
|
153
|
+
inFence = !inFence;
|
|
154
|
+
result.push(line);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
result.push(line);
|
|
158
|
+
if (inFence || !isPipeRow(line) || isPipeRow(previousLine)) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (!isPipeRow(nextLine) || isTableDelimiterRow(nextLine)) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
const headerCells = splitPipeRow(line);
|
|
165
|
+
const nextCells = splitPipeRow(nextLine);
|
|
166
|
+
if (headerCells.length !== nextCells.length) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
const separator = `| ${headerCells.map(() => '---').join(' | ')} |`;
|
|
170
|
+
result.push(separator);
|
|
171
|
+
diagnostics.push({
|
|
172
|
+
type: 'table_separator_inserted',
|
|
173
|
+
original: line,
|
|
174
|
+
normalized: `${line}\n${separator}`
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
result: result.join('\n'),
|
|
179
|
+
diagnostics
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Decode URL-encoded text in markdown link labels.
|
|
185
|
+
* e.g. [Some%20Text](https://example.com) → [Some Text](https://example.com)
|
|
186
|
+
* e.g. [Which+solution%3F](web5://...) → [Which solution?](web5://...)
|
|
187
|
+
*
|
|
188
|
+
* Only decodes the text portion [text], never the URL portion (url).
|
|
189
|
+
* Handles both `+` (form-encoded space) and `%XX` escapes; falls back to
|
|
190
|
+
* the original string on malformed percent sequences.
|
|
191
|
+
*/
|
|
192
|
+
export function decodeLinkText(markdown) {
|
|
193
|
+
const diagnostics = [];
|
|
194
|
+
const result = markdown.replace(/\[([^\]]+)\]\(/g, (match, linkText) => {
|
|
195
|
+
try {
|
|
196
|
+
const decoded = decodeURIComponent(linkText.replace(/\+/g, '%20'));
|
|
197
|
+
if (decoded !== linkText) {
|
|
198
|
+
diagnostics.push({
|
|
199
|
+
type: 'link_text_decoded',
|
|
200
|
+
original: linkText,
|
|
201
|
+
normalized: decoded
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
return `[${decoded}](`;
|
|
205
|
+
} catch {
|
|
206
|
+
// If decodeURIComponent fails (e.g. malformed percent sequence like %ZZ),
|
|
207
|
+
// leave the text unchanged
|
|
208
|
+
return match;
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
return {
|
|
212
|
+
result,
|
|
213
|
+
diagnostics
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Preprocess markdown to fix common formatting issues before AST parsing.
|
|
219
|
+
*
|
|
220
|
+
* The preprocessing steps are applied in the following order:
|
|
221
|
+
* 1. Recover orphaned emphasized web5 links
|
|
222
|
+
* 2. Fix malformed links (remove whitespace between ] and () - must happen before web5 links are matched)
|
|
223
|
+
* 3. Decode URL-encoded link text
|
|
224
|
+
* 4. Escape web5:// links (URL-encode URLs)
|
|
225
|
+
* 5. Normalize icon URLs
|
|
226
|
+
* 6. Insert missing table separators for obvious pipe tables
|
|
227
|
+
* 7. Trim trailing whitespace from lines
|
|
228
|
+
*
|
|
229
|
+
* @param markdown - The raw markdown string to preprocess
|
|
230
|
+
* @returns The preprocessed markdown string ready for AST parsing
|
|
231
|
+
*/
|
|
232
|
+
export function preprocessMarkdown(markdown) {
|
|
233
|
+
const {
|
|
234
|
+
result: recoveredLinks,
|
|
235
|
+
diagnostics: recoveredLinkDiagnostics
|
|
236
|
+
} = recoverOrphanedEmphasisLinks(markdown);
|
|
237
|
+
let processed = fixMalformedLinks(recoveredLinks);
|
|
238
|
+
const {
|
|
239
|
+
result: decodedText,
|
|
240
|
+
diagnostics: decodeDiagnostics
|
|
241
|
+
} = decodeLinkText(processed);
|
|
242
|
+
processed = escapeWeb5Links(decodedText);
|
|
243
|
+
const {
|
|
244
|
+
result: normalized,
|
|
245
|
+
diagnostics: iconDiagnostics
|
|
246
|
+
} = normalizeIconUrls(processed);
|
|
247
|
+
const {
|
|
248
|
+
result: tableNormalized,
|
|
249
|
+
diagnostics: tableDiagnostics
|
|
250
|
+
} = insertMissingTableSeparators(normalized);
|
|
251
|
+
processed = trimTrailingWhitespace(tableNormalized);
|
|
252
|
+
return {
|
|
253
|
+
markdown: processed,
|
|
254
|
+
diagnostics: [...recoveredLinkDiagnostics, ...decodeDiagnostics, ...iconDiagnostics, ...tableDiagnostics]
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
//# 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,27 @@
|
|
|
1
|
+
const FORWARD_STACK_KEY = 'web5_conversation_forward_stack';
|
|
2
|
+
export function getForwardStack() {
|
|
3
|
+
try {
|
|
4
|
+
const raw = sessionStorage.getItem(FORWARD_STACK_KEY);
|
|
5
|
+
return raw ? JSON.parse(raw) : [];
|
|
6
|
+
} catch {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function setForwardStack(stack) {
|
|
11
|
+
sessionStorage.setItem(FORWARD_STACK_KEY, JSON.stringify(stack));
|
|
12
|
+
}
|
|
13
|
+
export function clearForwardStack() {
|
|
14
|
+
sessionStorage.removeItem(FORWARD_STACK_KEY);
|
|
15
|
+
}
|
|
16
|
+
export function pushToForwardStack(triggerId) {
|
|
17
|
+
const stack = getForwardStack();
|
|
18
|
+
stack.push(triggerId);
|
|
19
|
+
setForwardStack(stack);
|
|
20
|
+
}
|
|
21
|
+
export function popFromForwardStack() {
|
|
22
|
+
const stack = getForwardStack();
|
|
23
|
+
const triggerId = stack.pop();
|
|
24
|
+
setForwardStack(stack);
|
|
25
|
+
return triggerId;
|
|
26
|
+
}
|
|
27
|
+
//# 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;AAE3D,OAAO,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;AAEA,OAAO,SAASK,eAAeA,CAACC,KAAe,EAAE;EAC/CL,cAAc,CAACM,OAAO,CAACT,iBAAiB,EAAEK,IAAI,CAACK,SAAS,CAACF,KAAK,CAAC,CAAC;AAClE;AAEA,OAAO,SAASG,iBAAiBA,CAAA,EAAG;EAClCR,cAAc,CAACS,UAAU,CAACZ,iBAAiB,CAAC;AAC9C;AAEA,OAAO,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;AAEA,OAAO,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,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if an HTML node is a comment
|
|
3
|
+
*/
|
|
4
|
+
export function isHtmlComment(node) {
|
|
5
|
+
if (node.type !== 'html') {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const value = node.value;
|
|
9
|
+
return value.trim().startsWith('<!--') && value.trim().endsWith('-->');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Check if a node has images nested within it (for paragraphs with images)
|
|
14
|
+
*/
|
|
15
|
+
export function hasImage(node) {
|
|
16
|
+
if (node.type === 'image') {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
const checkChildren = children => {
|
|
20
|
+
if (!children) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
for (const child of children) {
|
|
24
|
+
if (child.type === 'image') {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if (child.children && checkChildren(child.children)) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
};
|
|
33
|
+
if ('children' in node && node.children) {
|
|
34
|
+
return checkChildren(node.children);
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
//# 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;AACA,OAAO,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;AACA,OAAO,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,58 @@
|
|
|
1
|
+
export const findImageInNode = node => {
|
|
2
|
+
if (node.type === 'image') {
|
|
3
|
+
return node.url || '';
|
|
4
|
+
}
|
|
5
|
+
if ('children' in node && node.children) {
|
|
6
|
+
for (const child of node.children) {
|
|
7
|
+
const imageUrl = findImageInNode(child);
|
|
8
|
+
if (imageUrl) {
|
|
9
|
+
return imageUrl;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return null;
|
|
14
|
+
};
|
|
15
|
+
export const findImageInChildren = children => {
|
|
16
|
+
for (const child of children) {
|
|
17
|
+
if (child.type === 'image') {
|
|
18
|
+
return child.url || '';
|
|
19
|
+
}
|
|
20
|
+
if ('children' in child && child.children) {
|
|
21
|
+
const imageUrl = findImageInChildren(child.children);
|
|
22
|
+
if (imageUrl) {
|
|
23
|
+
return imageUrl;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return '';
|
|
28
|
+
};
|
|
29
|
+
export function generateSectionId(componentName, index) {
|
|
30
|
+
return `markdown-section-${componentName.toLowerCase()}-${index}`;
|
|
31
|
+
}
|
|
32
|
+
export function createPageSection(_ref) {
|
|
33
|
+
let {
|
|
34
|
+
component,
|
|
35
|
+
sectionType,
|
|
36
|
+
componentName,
|
|
37
|
+
semantic,
|
|
38
|
+
componentOptions,
|
|
39
|
+
index,
|
|
40
|
+
id,
|
|
41
|
+
sourceMarkdown,
|
|
42
|
+
debugProps
|
|
43
|
+
} = _ref;
|
|
44
|
+
return {
|
|
45
|
+
id: id ?? generateSectionId(sectionType, index),
|
|
46
|
+
sectionType,
|
|
47
|
+
componentName,
|
|
48
|
+
semantic,
|
|
49
|
+
componentOptions,
|
|
50
|
+
component,
|
|
51
|
+
sourceMarkdown: sourceMarkdown ?? '',
|
|
52
|
+
debugProps
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function generateId() {
|
|
56
|
+
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=propsExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["findImageInNode","node","type","url","children","child","imageUrl","findImageInChildren","generateSectionId","componentName","index","toLowerCase","createPageSection","_ref","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":"AAuCA,OAAO,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;AAED,OAAO,MAAMC,mBAAmB,GAAIH,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,GAAGC,mBAAmB,CAACF,KAAK,CAACD,QAAQ,CAAC;MACpD,IAAIE,QAAQ,EAAE;QACZ,OAAOA,QAAQ;MACjB;IACF;EACF;EACA,OAAO,EAAE;AACX,CAAC;AAED,OAAO,SAASE,iBAAiBA,CAC/BC,aAAqB,EACrBC,KAAa,EACL;EACR,OAAO,oBAAoBD,aAAa,CAACE,WAAW,CAAC,CAAC,IAAID,KAAK,EAAE;AACnE;AAEA,OAAO,SAASE,iBAAiBA,CAAAC,IAAA,EAoBjB;EAAA,IApBkB;IAChCC,SAAS;IACTC,WAAW;IACXN,aAAa;IACbO,QAAQ;IACRC,gBAAgB;IAChBP,KAAK;IACLQ,EAAE;IACFC,cAAc;IACdC;EAWF,CAAC,GAAAP,IAAA;EACC,OAAO;IACLK,EAAE,EAAEA,EAAE,IAAIV,iBAAiB,CAACO,WAAW,EAAEL,KAAK,CAAC;IAC/CK,WAAW;IACXN,aAAa;IACbO,QAAQ;IACRC,gBAAgB;IAChBH,SAAS;IACTK,cAAc,EAAEA,cAAc,IAAI,EAAE;IACpCC;EACF,CAAC;AACH;AAEA,OAAO,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,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session identity shared across every surface that calls `/conversation`.
|
|
3
|
+
*
|
|
4
|
+
* Lives in web5-core (lifted from web50-server-ui, same move as
|
|
5
|
+
* `conversationBackend.ts`) so the main app and the embed-placement bundle
|
|
6
|
+
* send the same `sessionId` structure — a GUID persisted in sessionStorage
|
|
7
|
+
* under one key/codec. Surfaces on the same origin literally share the id;
|
|
8
|
+
* on different origins they still agree on the wire shape.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const SESSION_ID_KEY = 'sessionId';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Generates a random GUID
|
|
15
|
+
*/
|
|
16
|
+
const generateGuid = () => {
|
|
17
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
|
|
18
|
+
const r = Math.random() * 16 | 0;
|
|
19
|
+
const v = c === 'x' ? r : r & 0x3 | 0x8;
|
|
20
|
+
return v.toString(16);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
const readStoredSessionId = () => {
|
|
24
|
+
try {
|
|
25
|
+
const raw = sessionStorage.getItem(SESSION_ID_KEY);
|
|
26
|
+
return raw ? JSON.parse(raw) : null;
|
|
27
|
+
} catch {
|
|
28
|
+
// sessionStorage can throw in privacy mode / non-DOM environments.
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Gets or creates a session ID from sessionStorage.
|
|
35
|
+
* If no session ID exists, creates a new one and stores it.
|
|
36
|
+
* If it exists, returns the existing one without overriding.
|
|
37
|
+
* Falls back to an ephemeral GUID when sessionStorage is unavailable
|
|
38
|
+
* (SSR, storage disabled).
|
|
39
|
+
*/
|
|
40
|
+
export const getOrCreateSessionId = () => {
|
|
41
|
+
const existing = readStoredSessionId();
|
|
42
|
+
if (existing) {
|
|
43
|
+
return existing;
|
|
44
|
+
}
|
|
45
|
+
const id = generateGuid();
|
|
46
|
+
try {
|
|
47
|
+
sessionStorage.setItem(SESSION_ID_KEY, JSON.stringify(id));
|
|
48
|
+
} catch {
|
|
49
|
+
// Quota exceeded / storage disabled — ephemeral id still works
|
|
50
|
+
}
|
|
51
|
+
return id;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Gets the current session ID without creating a new one
|
|
56
|
+
*/
|
|
57
|
+
export const getSessionId = () => {
|
|
58
|
+
return readStoredSessionId();
|
|
59
|
+
};
|
|
60
|
+
const CHAT_ID_KEY = 'chatId';
|
|
61
|
+
let chatId = null;
|
|
62
|
+
const readStoredChatId = () => {
|
|
63
|
+
try {
|
|
64
|
+
const raw = sessionStorage.getItem(CHAT_ID_KEY);
|
|
65
|
+
return raw ? JSON.parse(raw) : null;
|
|
66
|
+
} catch {
|
|
67
|
+
// sessionStorage can throw in privacy mode / non-DOM environments.
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const persistChatId = id => {
|
|
72
|
+
try {
|
|
73
|
+
sessionStorage.setItem(CHAT_ID_KEY, JSON.stringify(id));
|
|
74
|
+
} catch {
|
|
75
|
+
// Quota exceeded / storage disabled — ephemeral id still works.
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Mints a `chat-id-<epoch>-<random>` id. The random suffix prevents two
|
|
81
|
+
* pages (or two visitors on the same site) that start a conversation in
|
|
82
|
+
* the same millisecond from colliding on the same conversation id — the
|
|
83
|
+
* backend locks per conversation and rejects the loser with
|
|
84
|
+
* "Conversation is busy".
|
|
85
|
+
*/
|
|
86
|
+
const mintChatId = () => `chat-id-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Session-stable chat id (`chat-id-<epoch>-<random>`), persisted in
|
|
90
|
+
* sessionStorage under the same key/codec convention as the session id.
|
|
91
|
+
*
|
|
92
|
+
* Persisted (changed from the original in-memory-only page-visit scope) so
|
|
93
|
+
* the chat CARRIES OVER across same-origin navigations — main web5 page →
|
|
94
|
+
* product page and between PDPs. On the markdown-history backend the chat id
|
|
95
|
+
* is the conversation id, so this threads all of a visit's turns into one
|
|
96
|
+
* conversation (history/BO grouping) and keeps the BE's history cache
|
|
97
|
+
* (`msid_chatId`) warm across pages — classify's `<last_turn>` sees the
|
|
98
|
+
* previous page's turn. Placement prompt isolation is NOT affected: the BE's
|
|
99
|
+
* running-context key prefers the per-placement `session_id` that
|
|
100
|
+
* embed-placement sends, falling back to this chat id only for surfaces
|
|
101
|
+
* that don't send one (the main app).
|
|
102
|
+
*
|
|
103
|
+
* In-memory memo remains the fast path and the fallback when storage is
|
|
104
|
+
* unavailable (SSR, privacy mode) — there the id is page-load-stable, the
|
|
105
|
+
* previous behavior.
|
|
106
|
+
*/
|
|
107
|
+
export const getChatId = () => {
|
|
108
|
+
if (chatId !== null) return chatId;
|
|
109
|
+
const stored = readStoredChatId();
|
|
110
|
+
if (stored) {
|
|
111
|
+
chatId = stored;
|
|
112
|
+
return chatId;
|
|
113
|
+
}
|
|
114
|
+
chatId = mintChatId();
|
|
115
|
+
persistChatId(chatId);
|
|
116
|
+
return chatId;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Mint a fresh chat id, replacing the memoized AND persisted one. Call when
|
|
121
|
+
* the user starts a NEW conversation (main app's first send of a fresh
|
|
122
|
+
* thread) — the previous conversation's id must not leak into the new one,
|
|
123
|
+
* or into the placement calls of the pages visited next.
|
|
124
|
+
*/
|
|
125
|
+
export const startNewChatId = () => {
|
|
126
|
+
chatId = mintChatId();
|
|
127
|
+
persistChatId(chatId);
|
|
128
|
+
return chatId;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Adopt an externally resolved chat id — e.g. a conversation restored from
|
|
133
|
+
* history by trigger id — as the session's current chat. Memoized and
|
|
134
|
+
* persisted so the next pages' placement calls continue that conversation.
|
|
135
|
+
*/
|
|
136
|
+
export const setChatId = id => {
|
|
137
|
+
if (!id) return;
|
|
138
|
+
chatId = id;
|
|
139
|
+
persistChatId(id);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
/** Test-only: reset the memoized chat id and its persisted copy. */
|
|
143
|
+
export const resetChatIdForTests = () => {
|
|
144
|
+
chatId = null;
|
|
145
|
+
try {
|
|
146
|
+
sessionStorage.removeItem(CHAT_ID_KEY);
|
|
147
|
+
} catch {
|
|
148
|
+
// Storage unavailable — nothing persisted to clear.
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
//# 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","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":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import { unified } from 'unified';
|
|
3
|
+
import remarkParse from 'remark-parse';
|
|
4
|
+
import remarkGfm from 'remark-gfm';
|
|
5
|
+
import { toMarkdown } from 'mdast-util-to-markdown';
|
|
6
|
+
import { gfmToMarkdown } from 'mdast-util-gfm';
|
|
7
|
+
export class UnifiedMarkdownParser {
|
|
8
|
+
constructor() {
|
|
9
|
+
_defineProperty(this, "processor", void 0);
|
|
10
|
+
this.processor = unified().use(remarkParse).use(remarkGfm);
|
|
11
|
+
}
|
|
12
|
+
parse(markdown) {
|
|
13
|
+
try {
|
|
14
|
+
return this.processor.parse(markdown);
|
|
15
|
+
} catch (error) {
|
|
16
|
+
console.error('Unified parse error:', error);
|
|
17
|
+
return {
|
|
18
|
+
type: 'root',
|
|
19
|
+
children: []
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function parseMarkdownToAst(markdown) {
|
|
25
|
+
const parser = new UnifiedMarkdownParser();
|
|
26
|
+
return parser.parse(markdown);
|
|
27
|
+
}
|
|
28
|
+
export const parseAstToMarkdown = nodes => {
|
|
29
|
+
return toMarkdown({
|
|
30
|
+
type: 'root',
|
|
31
|
+
children: nodes
|
|
32
|
+
}, {
|
|
33
|
+
extensions: [gfmToMarkdown()]
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=unifiedMarkdownParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["unified","remarkParse","remarkGfm","toMarkdown","gfmToMarkdown","UnifiedMarkdownParser","constructor","_defineProperty","processor","use","parse","markdown","error","console","type","children","parseMarkdownToAst","parser","parseAstToMarkdown","nodes","extensions"],"sources":["../../../src/utils/unifiedMarkdownParser.ts"],"sourcesContent":["import { unified } from 'unified';\nimport remarkParse from 'remark-parse';\nimport type { Root, Node, RootContent } from 'mdast';\nimport remarkGfm from 'remark-gfm';\nimport { toMarkdown } from 'mdast-util-to-markdown';\nimport { gfmToMarkdown } from 'mdast-util-gfm';\n\nexport class UnifiedMarkdownParser {\n private processor;\n\n constructor() {\n this.processor = unified().use(remarkParse).use(remarkGfm);\n }\n\n parse(markdown: string): Root {\n try {\n return this.processor.parse(markdown) as Root;\n } catch (error) {\n console.error('Unified parse error:', error);\n return { type: 'root', children: [] };\n }\n }\n}\n\nexport function parseMarkdownToAst(markdown: string): Root {\n const parser = new UnifiedMarkdownParser();\n return parser.parse(markdown);\n}\n\nexport const parseAstToMarkdown = (nodes: Node[]): string => {\n return toMarkdown(\n { type: 'root', children: nodes as RootContent[] },\n {\n extensions: [gfmToMarkdown()],\n },\n );\n};\n"],"mappings":";AAAA,SAASA,OAAO,QAAQ,SAAS;AACjC,OAAOC,WAAW,MAAM,cAAc;AAEtC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,UAAU,QAAQ,wBAAwB;AACnD,SAASC,aAAa,QAAQ,gBAAgB;AAE9C,OAAO,MAAMC,qBAAqB,CAAC;EAGjCC,WAAWA,CAAA,EAAG;IAAAC,eAAA;IACZ,IAAI,CAACC,SAAS,GAAGR,OAAO,CAAC,CAAC,CAACS,GAAG,CAACR,WAAW,CAAC,CAACQ,GAAG,CAACP,SAAS,CAAC;EAC5D;EAEAQ,KAAKA,CAACC,QAAgB,EAAQ;IAC5B,IAAI;MACF,OAAO,IAAI,CAACH,SAAS,CAACE,KAAK,CAACC,QAAQ,CAAC;IACvC,CAAC,CAAC,OAAOC,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,sBAAsB,EAAEA,KAAK,CAAC;MAC5C,OAAO;QAAEE,IAAI,EAAE,MAAM;QAAEC,QAAQ,EAAE;MAAG,CAAC;IACvC;EACF;AACF;AAEA,OAAO,SAASC,kBAAkBA,CAACL,QAAgB,EAAQ;EACzD,MAAMM,MAAM,GAAG,IAAIZ,qBAAqB,CAAC,CAAC;EAC1C,OAAOY,MAAM,CAACP,KAAK,CAACC,QAAQ,CAAC;AAC/B;AAEA,OAAO,MAAMO,kBAAkB,GAAIC,KAAa,IAAa;EAC3D,OAAOhB,UAAU,CACf;IAAEW,IAAI,EAAE,MAAM;IAAEC,QAAQ,EAAEI;EAAuB,CAAC,EAClD;IACEC,UAAU,EAAE,CAAChB,aAAa,CAAC,CAAC;EAC9B,CACF,CAAC;AACH,CAAC","ignoreList":[]}
|