@crownpeak/dqm-react-component-dev-mcp 1.2.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 +138 -0
- package/data/.env.example +22 -0
- package/data/.gitattributes +47 -0
- package/data/.glfrc.json +7 -0
- package/data/.husky/pre-commit +5 -0
- package/data/.nvmrc +1 -0
- package/data/CHANGELOG.md +75 -0
- package/data/CODE_OF_CONDUCT.md +129 -0
- package/data/CONTRIBUTING.md +203 -0
- package/data/DOCS-STRUCTURE.md +307 -0
- package/data/I18N.md +292 -0
- package/data/LICENSE +22 -0
- package/data/README.md +315 -0
- package/data/SECURITY.md +125 -0
- package/data/WIKI-DEPLOYMENT.md +348 -0
- package/data/docs/AI-FEATURES.md +610 -0
- package/data/docs/API-REFERENCE.md +1022 -0
- package/data/docs/AUTHENTICATION.md +301 -0
- package/data/docs/BACKEND-API.md +468 -0
- package/data/docs/DEVELOPMENT.md +375 -0
- package/data/docs/EXAMPLES.md +622 -0
- package/data/docs/MCP-SERVER.md +307 -0
- package/data/docs/MIGRATION-GUIDE.md +367 -0
- package/data/docs/NPM-PUBLISH.md +193 -0
- package/data/docs/QUICKSTART.md +206 -0
- package/data/docs/REDIS-SETUP.md +162 -0
- package/data/docs/SERVER.md +228 -0
- package/data/docs/TROUBLESHOOTING.md +657 -0
- package/data/docs/WIDGET-GUIDE.md +638 -0
- package/data/docs/WIKI-HOME.md +58 -0
- package/data/docs/WIKI-SIDEBAR.md +39 -0
- package/data/package.json +171 -0
- package/data/playwright.config.ts +64 -0
- package/data/probe/.cargo/config.toml +10 -0
- package/data/probe/.claude/commands/performance-review.md +15 -0
- package/data/probe/.clinerules +288 -0
- package/data/probe/.dockerignore +57 -0
- package/data/probe/.githooks/post-commit +11 -0
- package/data/probe/.githooks/pre-commit +99 -0
- package/data/probe/.githooks/pre-commit-vow +9 -0
- package/data/probe/.prompts/engineer.md +41 -0
- package/data/probe/.roomodes +28 -0
- package/data/probe/.windsurfrules +0 -0
- package/data/probe/BASH_TOOL_SUMMARY.md +148 -0
- package/data/probe/BENCHMARKING.md +256 -0
- package/data/probe/CLAUDE.md +226 -0
- package/data/probe/CODE_OF_CONDUCT.md +128 -0
- package/data/probe/CONTRIBUTING.md +193 -0
- package/data/probe/Cargo.toml +120 -0
- package/data/probe/Cross.toml +10 -0
- package/data/probe/DOCKER-README.md +224 -0
- package/data/probe/Dockerfile +32 -0
- package/data/probe/ENHANCED_DEBUG_TELEMETRY.md +188 -0
- package/data/probe/LICENSE +201 -0
- package/data/probe/Makefile +210 -0
- package/data/probe/README.md +824 -0
- package/data/probe/SECURITY.md +67 -0
- package/data/probe/WINDOWS-GUIDE.md +294 -0
- package/data/probe/benches/parsing_benchmarks.rs +370 -0
- package/data/probe/benches/search_benchmarks.rs +599 -0
- package/data/probe/benches/simd_benchmarks.rs +372 -0
- package/data/probe/benches/timing_benchmarks.rs +287 -0
- package/data/probe/build-windows.bat +229 -0
- package/data/probe/codex-config/config.toml +6 -0
- package/data/probe/docs/PERFORMANCE_OPTIMIZATION.md +161 -0
- package/data/probe/examples/cache_demo.rs +46 -0
- package/data/probe/examples/chat/.dockerignore +37 -0
- package/data/probe/examples/chat/ChatSessionManager.js +295 -0
- package/data/probe/examples/chat/Dockerfile +98 -0
- package/data/probe/examples/chat/LICENSE +201 -0
- package/data/probe/examples/chat/LOCAL_IMAGE_SUPPORT.md +195 -0
- package/data/probe/examples/chat/MCP_INTEGRATION.md +400 -0
- package/data/probe/examples/chat/README.md +338 -0
- package/data/probe/examples/chat/TRACING.md +226 -0
- package/data/probe/examples/chat/appTracer.js +968 -0
- package/data/probe/examples/chat/auth.js +76 -0
- package/data/probe/examples/chat/bin/probe-chat.js +13 -0
- package/data/probe/examples/chat/build.js +104 -0
- package/data/probe/examples/chat/cancelRequest.js +84 -0
- package/data/probe/examples/chat/demo-agentic-image-flow.js +88 -0
- package/data/probe/examples/chat/demo-local-images.js +128 -0
- package/data/probe/examples/chat/fileSpanExporter.js +181 -0
- package/data/probe/examples/chat/implement/README.md +228 -0
- package/data/probe/examples/chat/implement/backends/AiderBackend.js +750 -0
- package/data/probe/examples/chat/implement/backends/BaseBackend.js +276 -0
- package/data/probe/examples/chat/implement/backends/ClaudeCodeBackend.js +767 -0
- package/data/probe/examples/chat/implement/backends/MockBackend.js +237 -0
- package/data/probe/examples/chat/implement/backends/registry.js +85 -0
- package/data/probe/examples/chat/implement/core/BackendManager.js +567 -0
- package/data/probe/examples/chat/implement/core/ImplementTool.js +354 -0
- package/data/probe/examples/chat/implement/core/config.js +428 -0
- package/data/probe/examples/chat/implement/core/timeouts.js +58 -0
- package/data/probe/examples/chat/implement/core/utils.js +496 -0
- package/data/probe/examples/chat/implement/types/BackendTypes.js +126 -0
- package/data/probe/examples/chat/index.js +669 -0
- package/data/probe/examples/chat/mcpServer.js +341 -0
- package/data/probe/examples/chat/npm/LICENSE +15 -0
- package/data/probe/examples/chat/npm/README.md +168 -0
- package/data/probe/examples/chat/npm/bin/probe-chat.js +156 -0
- package/data/probe/examples/chat/npm/index.js +259 -0
- package/data/probe/examples/chat/npm/package.json +54 -0
- package/data/probe/examples/chat/package.json +102 -0
- package/data/probe/examples/chat/probeChat.js +456 -0
- package/data/probe/examples/chat/probeTool.js +491 -0
- package/data/probe/examples/chat/storage/JsonChatStorage.js +476 -0
- package/data/probe/examples/chat/telemetry.js +281 -0
- package/data/probe/examples/chat/test/integration/chatFlows.test.js +320 -0
- package/data/probe/examples/chat/test/integration/toolCalling.test.js +471 -0
- package/data/probe/examples/chat/test/mocks/mockLLMProvider.js +269 -0
- package/data/probe/examples/chat/test/test-backends.js +90 -0
- package/data/probe/examples/chat/test/testUtils.js +530 -0
- package/data/probe/examples/chat/test/unit/backendTimeout.test.js +161 -0
- package/data/probe/examples/chat/test/unit/packageFiles.test.js +120 -0
- package/data/probe/examples/chat/test/verify-tests.js +118 -0
- package/data/probe/examples/chat/test-agentic-image-loading.js +294 -0
- package/data/probe/examples/chat/test-ai-sdk-telemetry.js +204 -0
- package/data/probe/examples/chat/test-chat-tracing.js +38 -0
- package/data/probe/examples/chat/test-direct-function.js +49 -0
- package/data/probe/examples/chat/test-file-size-validation.js +103 -0
- package/data/probe/examples/chat/test-full-mcp-integration.js +258 -0
- package/data/probe/examples/chat/test-github-context.txt +12 -0
- package/data/probe/examples/chat/test-hierarchy.js +203 -0
- package/data/probe/examples/chat/test-image-spans.js +37 -0
- package/data/probe/examples/chat/test-local-image-reading.js +176 -0
- package/data/probe/examples/chat/test-mcp-integration.js +136 -0
- package/data/probe/examples/chat/test-mcp-probe-server.js +161 -0
- package/data/probe/examples/chat/test-mcp-with-ai.js +279 -0
- package/data/probe/examples/chat/test-multiple-allowed-dirs.js +111 -0
- package/data/probe/examples/chat/test-probe-mcp-server.js +110 -0
- package/data/probe/examples/chat/test-security-validation.js +145 -0
- package/data/probe/examples/chat/test-simple-tracing.js +32 -0
- package/data/probe/examples/chat/test-trace-verification.js +235 -0
- package/data/probe/examples/chat/test-tracing.js +114 -0
- package/data/probe/examples/chat/tokenCounter.js +419 -0
- package/data/probe/examples/chat/tokenUsageDisplay.js +134 -0
- package/data/probe/examples/chat/webServer.js +1103 -0
- package/data/probe/examples/reranker/Cargo.toml +33 -0
- package/data/probe/examples/reranker/DEBUG_OUTPUT_ANALYSIS.md +71 -0
- package/data/probe/examples/reranker/MODELS.md +66 -0
- package/data/probe/examples/reranker/MODEL_COMPARISON.md +60 -0
- package/data/probe/examples/reranker/MULTI_MODEL_ANALYSIS.md +176 -0
- package/data/probe/examples/reranker/PERFORMANCE_SUMMARY.md +156 -0
- package/data/probe/examples/reranker/README.md +347 -0
- package/data/probe/examples/reranker/RUST_BERT_COMPARISON.md +82 -0
- package/data/probe/examples/reranker/TOKENIZATION_GUIDE.md +120 -0
- package/data/probe/examples/reranker/check_rust_tokenizer.py +108 -0
- package/data/probe/examples/reranker/convert_to_torchscript.py +109 -0
- package/data/probe/examples/reranker/debug_scoring.py +189 -0
- package/data/probe/examples/reranker/debug_tokenization.py +154 -0
- package/data/probe/examples/reranker/download_models.sh +73 -0
- package/data/probe/examples/reranker/requirements.txt +13 -0
- package/data/probe/examples/reranker/run_comprehensive_benchmark.sh +83 -0
- package/data/probe/examples/reranker/rust_bert_test/Cargo.toml +12 -0
- package/data/probe/examples/reranker/rust_bert_test/README.md +54 -0
- package/data/probe/examples/reranker/simple_test.py +50 -0
- package/data/probe/examples/reranker/test_all_models.sh +63 -0
- package/data/probe/examples/reranker/test_bert_results.sh +44 -0
- package/data/probe/examples/reranker/test_cross_encoder.py +334 -0
- package/data/probe/examples/reranker/test_cross_encoder.sh +80 -0
- package/data/probe/examples/reranker/test_exact_comparison.py +151 -0
- package/data/probe/examples/reranker/test_parallel_performance.sh +56 -0
- package/data/probe/examples/reranker/test_scores.py +132 -0
- package/data/probe/install.ps1 +508 -0
- package/data/probe/install.sh +460 -0
- package/data/probe/npm/CLONE_METHOD_EXAMPLES.md +596 -0
- package/data/probe/npm/CONTEXT_COMPACTION.md +303 -0
- package/data/probe/npm/DELEGATE_TOOL_README.md +166 -0
- package/data/probe/npm/MAID_INTEGRATION.md +313 -0
- package/data/probe/npm/MCP_INTEGRATION_SUMMARY.md +241 -0
- package/data/probe/npm/README.md +824 -0
- package/data/probe/npm/bin/.gitignore +7 -0
- package/data/probe/npm/bin/.gitkeep +0 -0
- package/data/probe/npm/bin/README.md +12 -0
- package/data/probe/npm/bin/probe +167 -0
- package/data/probe/npm/docs/CLAUDE_CODE_INTEGRATION.md +414 -0
- package/data/probe/npm/docs/CODEX_INTEGRATION.md +502 -0
- package/data/probe/npm/docs/EDIT_CREATE_TOOLS.md +233 -0
- package/data/probe/npm/docs/RETRY_AND_FALLBACK.md +674 -0
- package/data/probe/npm/example-usage.js +335 -0
- package/data/probe/npm/examples/multi-engine-demo.js +117 -0
- package/data/probe/npm/examples/probe-agent-cli.js +113 -0
- package/data/probe/npm/examples/test-agent-edit.js +114 -0
- package/data/probe/npm/examples/test-edit-create.js +120 -0
- package/data/probe/npm/examples/test-edit-direct.js +114 -0
- package/data/probe/npm/index.d.ts +744 -0
- package/data/probe/npm/jest.config.js +52 -0
- package/data/probe/npm/package.json +117 -0
- package/data/probe/npm/scripts/build-agent.cjs +75 -0
- package/data/probe/npm/scripts/build-cjs.js +124 -0
- package/data/probe/npm/scripts/build-mcp.cjs +36 -0
- package/data/probe/npm/scripts/postinstall.js +216 -0
- package/data/probe/npm/test-codex-e2e.js +78 -0
- package/data/probe/npm/test-download-lock.js +109 -0
- package/data/probe/npm/test-grep-security.js +94 -0
- package/data/probe/npm/test-grep-simplified.js +63 -0
- package/data/probe/npm/test-grep.js +51 -0
- package/data/probe/npm/tests/README.md +96 -0
- package/data/probe/npm/tests/agent-compact-history.test.js +174 -0
- package/data/probe/npm/tests/allow-tests-default.test.js +151 -0
- package/data/probe/npm/tests/contextCompactor.test.js +498 -0
- package/data/probe/npm/tests/delegate-config.test.js +353 -0
- package/data/probe/npm/tests/delegate-integration.test.js +348 -0
- package/data/probe/npm/tests/extractor-integration.test.js +162 -0
- package/data/probe/npm/tests/extractor.test.js +317 -0
- package/data/probe/npm/tests/fixtures/sampleDiagrams.js +267 -0
- package/data/probe/npm/tests/integration/claude-code-auto-fallback.spec.js +148 -0
- package/data/probe/npm/tests/integration/claude-code-multi-step.spec.js +127 -0
- package/data/probe/npm/tests/integration/claude-code-tool-events.spec.js +163 -0
- package/data/probe/npm/tests/integration/codex-auto-fallback.spec.js +191 -0
- package/data/probe/npm/tests/integration/codex-tool-events.spec.js +147 -0
- package/data/probe/npm/tests/integration/examplesChatMcp.test.js +402 -0
- package/data/probe/npm/tests/integration/mcpDotenvSupport.test.js +174 -0
- package/data/probe/npm/tests/integration/mcpErrorHandling.test.js +566 -0
- package/data/probe/npm/tests/integration/mcpRobustness.test.js +564 -0
- package/data/probe/npm/tests/integration/mcpStdoutPurity.test.js +355 -0
- package/data/probe/npm/tests/integration/probeAgentMcp.test.js +398 -0
- package/data/probe/npm/tests/integration/retryFallback.test.js +368 -0
- package/data/probe/npm/tests/integration/schema-in-initial-message.test.js +318 -0
- package/data/probe/npm/tests/integration/schema-validation-loop-prevention.test.js +244 -0
- package/data/probe/npm/tests/integration/schemaRetryLogic.test.js +94 -0
- package/data/probe/npm/tests/integration/validationFlow.test.js +329 -0
- package/data/probe/npm/tests/manual/test-codex-basic.js +110 -0
- package/data/probe/npm/tests/mcp/mcpClientManager.test.js +614 -0
- package/data/probe/npm/tests/mcp/mcpConfig.test.js +359 -0
- package/data/probe/npm/tests/mcp/mcpXmlBridge.test.js +436 -0
- package/data/probe/npm/tests/mcp/mockMcpServer.js +510 -0
- package/data/probe/npm/tests/mcp-strict-syntax.test.js +319 -0
- package/data/probe/npm/tests/mermaidQuoteEscaping.test.js +214 -0
- package/data/probe/npm/tests/nestedQuoteFix.test.js +40 -0
- package/data/probe/npm/tests/setup.js +46 -0
- package/data/probe/npm/tests/unit/allowed-tools.test.js +513 -0
- package/data/probe/npm/tests/unit/attempt-completion-closing-tag-in-content.test.js +188 -0
- package/data/probe/npm/tests/unit/attemptCompletionJsonFix.test.js +238 -0
- package/data/probe/npm/tests/unit/attemptCompletionJsonIssue.test.js +128 -0
- package/data/probe/npm/tests/unit/backtickAutoFix.test.js +35 -0
- package/data/probe/npm/tests/unit/bash-probe-agent-integration.test.js +389 -0
- package/data/probe/npm/tests/unit/bash-simple-commands.test.js +324 -0
- package/data/probe/npm/tests/unit/bash-tool-comprehensive.test.js +371 -0
- package/data/probe/npm/tests/unit/bash-tool-integration.test.js +310 -0
- package/data/probe/npm/tests/unit/bash-tool.test.js +341 -0
- package/data/probe/npm/tests/unit/completion-prompt.test.js +379 -0
- package/data/probe/npm/tests/unit/cwd-path-options.test.js +287 -0
- package/data/probe/npm/tests/unit/delegate-limits.test.js +422 -0
- package/data/probe/npm/tests/unit/direct-content-attempt-completion.test.js +235 -0
- package/data/probe/npm/tests/unit/edit-create-tools.test.js +609 -0
- package/data/probe/npm/tests/unit/enhancedMermaidValidation.test.js +577 -0
- package/data/probe/npm/tests/unit/extract-content.test.js +83 -0
- package/data/probe/npm/tests/unit/extract-multiple-targets.test.js +89 -0
- package/data/probe/npm/tests/unit/fallbackManager.test.js +442 -0
- package/data/probe/npm/tests/unit/githubCompatibilityValidation.test.js +258 -0
- package/data/probe/npm/tests/unit/imageConfig.test.js +149 -0
- package/data/probe/npm/tests/unit/imagePathResolution.test.js +345 -0
- package/data/probe/npm/tests/unit/json-fixing-agent.test.js +238 -0
- package/data/probe/npm/tests/unit/json-validation-enhanced-errors.test.js +199 -0
- package/data/probe/npm/tests/unit/jsonValidationInfiniteLoopFix.test.js +228 -0
- package/data/probe/npm/tests/unit/maidIntegration.test.js +139 -0
- package/data/probe/npm/tests/unit/maxIterationsWarning.test.js +195 -0
- package/data/probe/npm/tests/unit/mermaidEdgeLabelFix.test.js +161 -0
- package/data/probe/npm/tests/unit/mermaidHtmlEntities.test.js +76 -0
- package/data/probe/npm/tests/unit/mermaidInfiniteLoopFix.test.js +64 -0
- package/data/probe/npm/tests/unit/mermaidValidation.test.js +723 -0
- package/data/probe/npm/tests/unit/mermaidValidationVisorExample.test.js +309 -0
- package/data/probe/npm/tests/unit/probe-agent-clone-realistic.test.js +643 -0
- package/data/probe/npm/tests/unit/probe-agent-clone.test.js +476 -0
- package/data/probe/npm/tests/unit/probe-agent-delegate.test.js +400 -0
- package/data/probe/npm/tests/unit/probe-agent-model-option.test.js +118 -0
- package/data/probe/npm/tests/unit/probeTool-security.test.js +283 -0
- package/data/probe/npm/tests/unit/readImageTool.test.js +418 -0
- package/data/probe/npm/tests/unit/retryManager.test.js +317 -0
- package/data/probe/npm/tests/unit/schema-aware-reminders.test.js +288 -0
- package/data/probe/npm/tests/unit/schemaDefinitionDetection.test.js +115 -0
- package/data/probe/npm/tests/unit/schemaUtils.test.js +1268 -0
- package/data/probe/npm/tests/unit/simpleTelemetry.test.js +282 -0
- package/data/probe/npm/tests/unit/simplified-attempt-completion.test.js +274 -0
- package/data/probe/npm/tests/unit/single-quote-json-bug.test.js +231 -0
- package/data/probe/npm/tests/unit/subgraphAutoFix.test.js +110 -0
- package/data/probe/npm/tests/unit/system-prompt.test.js +32 -0
- package/data/probe/npm/tests/unit/types-probe-agent-options.test.js +42 -0
- package/data/probe/npm/tests/unit/xmlParsing.test.js +720 -0
- package/data/probe/npm/tsconfig.json +21 -0
- package/data/probe/result1.txt +19 -0
- package/data/probe/result2.txt +26 -0
- package/data/probe/scripts/benchmark.sh +270 -0
- package/data/probe/scripts/cache_memory_analysis.rs +844 -0
- package/data/probe/scripts/claude-hook-wrapper.sh +56 -0
- package/data/probe/site/.env.example +10 -0
- package/data/probe/site/DEPLOYMENT.md +86 -0
- package/data/probe/site/README.md +183 -0
- package/data/probe/site/adding-languages.md +135 -0
- package/data/probe/site/ai-chat.md +427 -0
- package/data/probe/site/ai-integration.md +1488 -0
- package/data/probe/site/blog/agentic-flow-custom-xml-protocol.md +407 -0
- package/data/probe/site/blog/index.md +118 -0
- package/data/probe/site/blog/v0.6.0-release.md +426 -0
- package/data/probe/site/blog.md +8 -0
- package/data/probe/site/changelog.md +200 -0
- package/data/probe/site/cli-mode.md +437 -0
- package/data/probe/site/code-extraction.md +436 -0
- package/data/probe/site/contributing/README.md +9 -0
- package/data/probe/site/contributing/documentation-cross-references.md +215 -0
- package/data/probe/site/contributing/documentation-maintenance.md +275 -0
- package/data/probe/site/contributing/documentation-structure.md +75 -0
- package/data/probe/site/documentation-cross-references.md +215 -0
- package/data/probe/site/documentation-guide.md +132 -0
- package/data/probe/site/documentation-maintenance.md +275 -0
- package/data/probe/site/features.md +147 -0
- package/data/probe/site/how-it-works.md +118 -0
- package/data/probe/site/index.md +175 -0
- package/data/probe/site/index.md.bak +133 -0
- package/data/probe/site/installation.md +235 -0
- package/data/probe/site/integrations/docker.md +248 -0
- package/data/probe/site/integrations/github-actions.md +413 -0
- package/data/probe/site/language-support-overview.md +168 -0
- package/data/probe/site/mcp-integration.md +587 -0
- package/data/probe/site/mcp-server.md +304 -0
- package/data/probe/site/navigation-structure.md +76 -0
- package/data/probe/site/nodejs-sdk.md +798 -0
- package/data/probe/site/output-formats.md +625 -0
- package/data/probe/site/package.json +21 -0
- package/data/probe/site/public/_headers +28 -0
- package/data/probe/site/public/_redirects +11 -0
- package/data/probe/site/quick-start.md +289 -0
- package/data/probe/site/search-functionality.md +291 -0
- package/data/probe/site/search-reference.md +291 -0
- package/data/probe/site/supported-languages.md +215 -0
- package/data/probe/site/use-cases/README.md +8 -0
- package/data/probe/site/use-cases/advanced-cli.md +253 -0
- package/data/probe/site/use-cases/ai-code-editors.md +239 -0
- package/data/probe/site/use-cases/building-ai-tools.md +529 -0
- package/data/probe/site/use-cases/cli-ai-workflows.md +285 -0
- package/data/probe/site/use-cases/deploying-probe-web-interface.md +255 -0
- package/data/probe/site/use-cases/integrating-probe-into-ai-code-editors.md +161 -0
- package/data/probe/site/use-cases/nodejs-sdk.md +596 -0
- package/data/probe/site/use-cases/team-chat.md +350 -0
- package/data/probe/site/web-interface.md +434 -0
- package/data/probe/site/wrangler.toml +9 -0
- package/data/probe/test-api-key.sh +1 -0
- package/data/probe/test-probe-implementation/hello.js +7 -0
- package/data/probe/test_cases/demonstrate_early_termination_issues.sh +176 -0
- package/data/probe/test_cases/early_termination_issues.rs +533 -0
- package/data/probe/test_data/test_nested_struct.go +26 -0
- package/data/probe/tests/README.md +286 -0
- package/data/probe/tests/README_search_determinism_tests.md +116 -0
- package/data/probe/tests/adjacent_comment_test.rs +152 -0
- package/data/probe/tests/apostrophe_handling_tests.rs +132 -0
- package/data/probe/tests/block_filtering_with_ast_tests.rs +669 -0
- package/data/probe/tests/block_merging_tests.rs +396 -0
- package/data/probe/tests/c_outline_format_tests.rs +2179 -0
- package/data/probe/tests/cache_invalidation_issues.rs.disabled +682 -0
- package/data/probe/tests/cache_order_tests.rs +147 -0
- package/data/probe/tests/cache_query_scoping_tests.rs +221 -0
- package/data/probe/tests/cli_tests.rs +680 -0
- package/data/probe/tests/comment_context_integration_test.rs +240 -0
- package/data/probe/tests/common.rs +33 -0
- package/data/probe/tests/complex_block_merging_tests.rs +599 -0
- package/data/probe/tests/complex_query_block_filtering_tests.rs +422 -0
- package/data/probe/tests/control_flow_closing_braces_test.rs +91 -0
- package/data/probe/tests/cpp_outline_format_tests.rs +1507 -0
- package/data/probe/tests/csharp_outline_format_tests.rs +941 -0
- package/data/probe/tests/elastic_query_integration_tests.rs +922 -0
- package/data/probe/tests/extract_command_tests.rs +1848 -0
- package/data/probe/tests/extract_deduplication_tests.rs +146 -0
- package/data/probe/tests/extract_input_file_tests.rs +84 -0
- package/data/probe/tests/extract_prompt_tests.rs +102 -0
- package/data/probe/tests/filename_search_tests.rs +96 -0
- package/data/probe/tests/fixtures/user/AssemblyInfo.cs +3 -0
- package/data/probe/tests/github_extract_tests.rs +234 -0
- package/data/probe/tests/go_comment_test.rs +253 -0
- package/data/probe/tests/go_outline_format_tests.rs +2587 -0
- package/data/probe/tests/go_path_resolver_tests.rs +96 -0
- package/data/probe/tests/html_outline_format_tests.rs +637 -0
- package/data/probe/tests/integration_tests.rs +837 -0
- package/data/probe/tests/ip_whitelist_test.rs +148 -0
- package/data/probe/tests/java_outline_format_tests.rs +1611 -0
- package/data/probe/tests/javascript_extract_tests.rs +315 -0
- package/data/probe/tests/javascript_outline_format_tests.rs +1464 -0
- package/data/probe/tests/json_format_tests.rs +436 -0
- package/data/probe/tests/json_schema_validation_tests.rs +450 -0
- package/data/probe/tests/lib_usage.rs +60 -0
- package/data/probe/tests/line_comment_context_extension_test.rs +459 -0
- package/data/probe/tests/line_map_cache_tests.rs +114 -0
- package/data/probe/tests/markdown_integration_tests.rs +190 -0
- package/data/probe/tests/mocks/test_ip_whitelist.go +11 -0
- package/data/probe/tests/mocks/test_object.js +27 -0
- package/data/probe/tests/mocks/test_struct.go +50 -0
- package/data/probe/tests/multi_keyword_pattern_tests.rs +464 -0
- package/data/probe/tests/multi_language_syntax_integration_tests.rs +218 -0
- package/data/probe/tests/multiple_capture_groups_tests.rs +169 -0
- package/data/probe/tests/negative_compound_word_tests.rs +246 -0
- package/data/probe/tests/nested_symbol_extraction_tests.rs +99 -0
- package/data/probe/tests/outline_cross_file_interference_test.rs +335 -0
- package/data/probe/tests/outline_keyword_preservation_test.rs +67 -0
- package/data/probe/tests/output_format_edge_cases_tests.rs +693 -0
- package/data/probe/tests/parallel_extraction_tests.rs +178 -0
- package/data/probe/tests/parallel_search_tests.rs +355 -0
- package/data/probe/tests/path_resolver_tests.rs +698 -0
- package/data/probe/tests/php_outline_format_extended_tests.rs +928 -0
- package/data/probe/tests/php_outline_format_tests.rs +768 -0
- package/data/probe/tests/property_tests.proptest-regressions +9 -0
- package/data/probe/tests/property_tests.rs +118 -0
- package/data/probe/tests/python_outline_format_tests.rs +1538 -0
- package/data/probe/tests/query_command_json_tests.rs +438 -0
- package/data/probe/tests/query_command_tests.rs +232 -0
- package/data/probe/tests/query_command_xml_tests.rs +569 -0
- package/data/probe/tests/quoted_term_with_negative_keyword_tests.rs +216 -0
- package/data/probe/tests/required_terms_filename_tests.rs +116 -0
- package/data/probe/tests/ruby_outline_format_tests.rs +1011 -0
- package/data/probe/tests/rust_line_comment_context_test.rs +151 -0
- package/data/probe/tests/rust_outline_format_enhanced_tests.rs +725 -0
- package/data/probe/tests/rust_outline_format_tests.rs +843 -0
- package/data/probe/tests/schemas/xml_output_schema.xsd +38 -0
- package/data/probe/tests/search_determinism_tests.rs +451 -0
- package/data/probe/tests/search_hints_tests.rs +253 -0
- package/data/probe/tests/special_character_escaping_tests.rs +417 -0
- package/data/probe/tests/stemming_compound_word_filtering_tests.rs +535 -0
- package/data/probe/tests/strict_elastic_syntax_tests.rs +404 -0
- package/data/probe/tests/swift_outline_format_tests.rs +3319 -0
- package/data/probe/tests/symbols_tests.rs +166 -0
- package/data/probe/tests/test_file.rs +45 -0
- package/data/probe/tests/test_tokenize.rs +28 -0
- package/data/probe/tests/timeout_tests.rs +82 -0
- package/data/probe/tests/tokenization_tests.rs +195 -0
- package/data/probe/tests/tokenized_block_filtering_tests.rs +174 -0
- package/data/probe/tests/typescript_extract_tests.rs +214 -0
- package/data/probe/tests/typescript_outline_format_tests.rs +2188 -0
- package/data/probe/tests/xml_format_tests.rs +568 -0
- package/data/probe/tests/xml_schema_validation_tests.rs +497 -0
- package/data/scripts/postinstall.mjs +9 -0
- package/data/scripts/set-version.js +0 -0
- package/data/scripts/wiki-build.sh +111 -0
- package/data/scripts/wiki-deploy.sh +73 -0
- package/data/serve.json +12 -0
- package/data/test/demo-dynamic.html +134 -0
- package/data/test/demo-esm.html +105 -0
- package/data/test/demo-iife.html +78 -0
- package/data/tsconfig.json +7 -0
- package/data/vite.server.ts +483 -0
- package/data/vitest.config.ts +40 -0
- package/data/wiki/Home.md +58 -0
- package/data/wiki/_Sidebar.md +39 -0
- package/docs-mcp.config.json +20 -0
- package/package.json +56 -0
- package/src/config.js +111 -0
- package/src/index.js +395 -0
|
@@ -0,0 +1,1022 @@
|
|
|
1
|
+
Complete TypeScript API documentation for `@crownpeak/dqm-react-component`.
|
|
2
|
+
|
|
3
|
+
## Table of Contents
|
|
4
|
+
- [Components](#components)
|
|
5
|
+
- [Configuration](#configuration)
|
|
6
|
+
- [Hooks](#hooks)
|
|
7
|
+
- [Types](#types)
|
|
8
|
+
- [Redux Store](#redux-store)
|
|
9
|
+
- [Utilities](#utilities)
|
|
10
|
+
|
|
11
|
+
## Components
|
|
12
|
+
|
|
13
|
+
### DQMSidebar
|
|
14
|
+
|
|
15
|
+
Main component for displaying DQM quality analysis in a sidebar.
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { DQMSidebar } from '@crownpeak/dqm-react-component';
|
|
19
|
+
|
|
20
|
+
interface DQMSidebarProps {
|
|
21
|
+
open: boolean;
|
|
22
|
+
onOpen: () => void;
|
|
23
|
+
onClose: () => void;
|
|
24
|
+
config?: DQMConfig;
|
|
25
|
+
onAuthSuccess?: (credentials: AuthCredentials) => void;
|
|
26
|
+
onAuthError?: (error: Error) => void;
|
|
27
|
+
debugHtml?: string; // DEBUG ONLY
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
#### Props
|
|
32
|
+
|
|
33
|
+
| Prop | Type | Required | Description |
|
|
34
|
+
|------|------|----------|-------------|
|
|
35
|
+
| `open` | `boolean` | ✅ | Controls sidebar visibility |
|
|
36
|
+
| `onOpen` | `() => void` | ✅ | Callback when sidebar opens |
|
|
37
|
+
| `onClose` | `() => void` | ✅ | Callback when sidebar closes |
|
|
38
|
+
| `config` | `DQMConfig` | ❌ | Configuration options (auth, AI, overlay) |
|
|
39
|
+
| `onAuthSuccess` | `(credentials) => void` | ❌ | Callback on successful authentication |
|
|
40
|
+
| `onAuthError` | `(error) => void` | ❌ | Callback on authentication error |
|
|
41
|
+
| `debugHtml` | `string` | ❌ | Custom HTML for testing (dev only) |
|
|
42
|
+
|
|
43
|
+
#### AuthCredentials
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
interface AuthCredentials {
|
|
47
|
+
apiKey: string;
|
|
48
|
+
websiteId: string;
|
|
49
|
+
sessionToken?: string;
|
|
50
|
+
sessionType: 'direct' | 'backend';
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
#### Example
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
import { DQMSidebar } from '@crownpeak/dqm-react-component';
|
|
58
|
+
|
|
59
|
+
function App() {
|
|
60
|
+
const [open, setOpen] = useState(false);
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<DQMSidebar
|
|
64
|
+
open={open}
|
|
65
|
+
onOpen={() => setOpen(true)}
|
|
66
|
+
onClose={() => setOpen(false)}
|
|
67
|
+
config={{
|
|
68
|
+
websiteId: 'your-website-id',
|
|
69
|
+
apiKey: 'your-api-key',
|
|
70
|
+
}}
|
|
71
|
+
onAuthSuccess={(credentials) => {
|
|
72
|
+
console.log('Authenticated:', credentials.sessionType);
|
|
73
|
+
}}
|
|
74
|
+
onAuthError={(error) => {
|
|
75
|
+
console.error('Auth failed:', error.message);
|
|
76
|
+
}}
|
|
77
|
+
/>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
### ErrorBoundary
|
|
85
|
+
|
|
86
|
+
React Error Boundary for catching and displaying component errors.
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
import { ErrorBoundary } from '@crownpeak/dqm-react-component';
|
|
90
|
+
|
|
91
|
+
interface ErrorBoundaryProps {
|
|
92
|
+
children: React.ReactNode;
|
|
93
|
+
resetKeys?: unknown[];
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
#### Props
|
|
98
|
+
|
|
99
|
+
| Prop | Type | Required | Description |
|
|
100
|
+
|------|------|----------|-------------|
|
|
101
|
+
| `children` | `React.ReactNode` | ✅ | Child components to wrap |
|
|
102
|
+
| `resetKeys` | `unknown[]` | ❌ | Array of values - boundary resets when any value changes |
|
|
103
|
+
|
|
104
|
+
#### Example
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
import { ErrorBoundary, DQMSidebar } from '@crownpeak/dqm-react-component';
|
|
108
|
+
import { useLocation } from 'react-router-dom';
|
|
109
|
+
|
|
110
|
+
function App() {
|
|
111
|
+
const location = useLocation();
|
|
112
|
+
|
|
113
|
+
return (
|
|
114
|
+
<ErrorBoundary resetKeys={[location.pathname]}>
|
|
115
|
+
<DQMSidebar
|
|
116
|
+
open={open}
|
|
117
|
+
onOpen={() => setOpen(true)}
|
|
118
|
+
onClose={() => setOpen(false)}
|
|
119
|
+
/>
|
|
120
|
+
</ErrorBoundary>
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
### withErrorBoundary
|
|
128
|
+
|
|
129
|
+
Higher-Order Component (HOC) to wrap any component with an ErrorBoundary.
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
import { withErrorBoundary } from '@crownpeak/dqm-react-component';
|
|
133
|
+
|
|
134
|
+
const SafeComponent = withErrorBoundary(MyComponent, {
|
|
135
|
+
resetKeys: ['some-key'],
|
|
136
|
+
});
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
#### Signature
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
function withErrorBoundary<P extends object>(
|
|
143
|
+
Component: React.ComponentType<P>,
|
|
144
|
+
errorBoundaryProps?: Omit<ErrorBoundaryProps, 'children'>
|
|
145
|
+
): React.FC<P>;
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
#### Example
|
|
149
|
+
|
|
150
|
+
```typescript
|
|
151
|
+
import { withErrorBoundary } from '@crownpeak/dqm-react-component';
|
|
152
|
+
|
|
153
|
+
// Wrap a component that might throw errors
|
|
154
|
+
const SafeDQMIntegration = withErrorBoundary(DQMIntegration, {
|
|
155
|
+
resetKeys: [userId, pageId],
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
function App() {
|
|
159
|
+
return <SafeDQMIntegration userId={userId} pageId={pageId} />;
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Configuration
|
|
166
|
+
|
|
167
|
+
### DQMConfig
|
|
168
|
+
|
|
169
|
+
Root configuration interface for DQM component.
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
interface DQMConfig {
|
|
173
|
+
// Authentication
|
|
174
|
+
apiKey?: string;
|
|
175
|
+
websiteId?: string;
|
|
176
|
+
authBackendUrl?: string;
|
|
177
|
+
|
|
178
|
+
// Storage & Behavior
|
|
179
|
+
useLocalStorage?: boolean; // Default: true
|
|
180
|
+
disabled?: boolean; // Default: false
|
|
181
|
+
disableLogout?: boolean; // Default: false
|
|
182
|
+
apiEndpoint?: string; // Default: Crownpeak API
|
|
183
|
+
shadowDomMode?: boolean; // Default: false
|
|
184
|
+
|
|
185
|
+
// Features
|
|
186
|
+
overlayConfig?: OverlayConfig;
|
|
187
|
+
translation?: TranslationConfig;
|
|
188
|
+
summary?: SummaryConfig;
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
#### Authentication Properties
|
|
193
|
+
|
|
194
|
+
| Property | Type | Default | Description |
|
|
195
|
+
|----------|------|---------|-------------|
|
|
196
|
+
| `apiKey` | `string` | - | DQM API key (direct auth, highest priority) |
|
|
197
|
+
| `websiteId` | `string` | - | DQM Website ID (direct auth) |
|
|
198
|
+
| `authBackendUrl` | `string` | - | Backend server URL for proxy auth |
|
|
199
|
+
|
|
200
|
+
#### Storage & Behavior Properties
|
|
201
|
+
|
|
202
|
+
| Property | Type | Default | Description |
|
|
203
|
+
|----------|------|---------|-------------|
|
|
204
|
+
| `useLocalStorage` | `boolean` | `true` | Store credentials in localStorage |
|
|
205
|
+
| `disabled` | `boolean` | `false` | Disable DQM completely (shows "Permission Denied") |
|
|
206
|
+
| `disableLogout` | `boolean` | `false` | Hide logout button (host app manages session) |
|
|
207
|
+
| `apiEndpoint` | `string` | Crownpeak | Custom DQM API endpoint |
|
|
208
|
+
| `shadowDomMode` | `boolean` | `false` | Disable React portals for Shadow DOM compatibility |
|
|
209
|
+
|
|
210
|
+
#### Feature Properties
|
|
211
|
+
|
|
212
|
+
| Property | Type | Default | Description |
|
|
213
|
+
|----------|------|---------|-------------|
|
|
214
|
+
| `overlayConfig` | `OverlayConfig` | - | Overlay/toolbar detection configuration |
|
|
215
|
+
| `translation` | `TranslationConfig` | - | AI translation configuration |
|
|
216
|
+
| `summary` | `SummaryConfig` | - | AI summary configuration |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
### OverlayConfig
|
|
221
|
+
|
|
222
|
+
Configuration for adapting sidebar position to overlays (toolbars, preview bars).
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
interface OverlayConfig {
|
|
226
|
+
selector?: string | null;
|
|
227
|
+
validateIframe?: boolean;
|
|
228
|
+
pollMs?: number;
|
|
229
|
+
manualOffset?: {
|
|
230
|
+
position: 'top' | 'bottom' | 'left' | 'right';
|
|
231
|
+
pixels: number;
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
| Property | Type | Default | Description |
|
|
237
|
+
|----------|------|---------|-------------|
|
|
238
|
+
| `selector` | `string \| null` | - | CSS selector for overlay element |
|
|
239
|
+
| `validateIframe` | `boolean` | `true` | Check if iFrame.contentWindow exists |
|
|
240
|
+
| `pollMs` | `number` | `1000` | Polling interval for cross-origin iFrames (0 = disable) |
|
|
241
|
+
| `manualOffset` | `object` | - | Manual offset (overrides auto-detection) |
|
|
242
|
+
|
|
243
|
+
#### Example
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
// Auto-detect toolbar
|
|
247
|
+
overlayConfig: {
|
|
248
|
+
selector: '.admin-toolbar',
|
|
249
|
+
validateIframe: true,
|
|
250
|
+
pollMs: 1000,
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Manual offset
|
|
254
|
+
overlayConfig: {
|
|
255
|
+
manualOffset: {
|
|
256
|
+
position: 'top',
|
|
257
|
+
pixels: 50,
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
### TranslationConfig
|
|
265
|
+
|
|
266
|
+
AI translation configuration.
|
|
267
|
+
|
|
268
|
+
```typescript
|
|
269
|
+
interface TranslationConfig {
|
|
270
|
+
enabledByDefault?: boolean; // Default: false
|
|
271
|
+
computeBudgetMs?: number; // Default: 15000
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
| Property | Type | Default | Description |
|
|
276
|
+
|----------|------|---------|-------------|
|
|
277
|
+
| `enabledByDefault` | `boolean` | `false` | Enable auto-translation by default (user can toggle at runtime) |
|
|
278
|
+
| `computeBudgetMs` | `number` | `15000` | Translation compute budget in milliseconds |
|
|
279
|
+
|
|
280
|
+
> **Note:** OpenAI API configuration (API key, model, target language) is managed via localStorage keys. See [localStorage Keys](#localstorage-keys) section.
|
|
281
|
+
|
|
282
|
+
#### Example
|
|
283
|
+
|
|
284
|
+
```typescript
|
|
285
|
+
translation: {
|
|
286
|
+
enabledByDefault: true,
|
|
287
|
+
computeBudgetMs: 30000,
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
### SummaryConfig
|
|
294
|
+
|
|
295
|
+
AI summary generation configuration.
|
|
296
|
+
|
|
297
|
+
```typescript
|
|
298
|
+
interface SummaryConfig {
|
|
299
|
+
timeoutMs?: number; // Default: 45000
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
| Property | Type | Default | Description |
|
|
304
|
+
|----------|------|---------|-------------|
|
|
305
|
+
| `timeoutMs` | `number` | `45000` | Summary generation timeout in milliseconds |
|
|
306
|
+
|
|
307
|
+
> **Note:** OpenAI API configuration (API key, model) is managed via localStorage keys. See [localStorage Keys](#localstorage-keys) section.
|
|
308
|
+
|
|
309
|
+
#### Example
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
summary: {
|
|
313
|
+
timeoutMs: 60000,
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Hooks
|
|
320
|
+
|
|
321
|
+
### AI Hooks
|
|
322
|
+
|
|
323
|
+
The AI hooks are exported from `@crownpeak/dqm-react-component` for advanced usage. They are designed to work together as a composable system.
|
|
324
|
+
|
|
325
|
+
#### useAIEngine
|
|
326
|
+
|
|
327
|
+
Hook for managing AI engine initialization and access (OpenAI client).
|
|
328
|
+
|
|
329
|
+
```typescript
|
|
330
|
+
import { useAIEngine } from '@crownpeak/dqm-react-component';
|
|
331
|
+
import type { UseAIEngineOptions, UseAIEngineReturn } from '@crownpeak/dqm-react-component';
|
|
332
|
+
|
|
333
|
+
function MyComponent() {
|
|
334
|
+
const engine = useAIEngine({
|
|
335
|
+
enabled: true,
|
|
336
|
+
openAiApiKey: 'sk-...',
|
|
337
|
+
openAiModel: 'gpt-4.1-mini', // Optional, default: 'gpt-4.1-mini'
|
|
338
|
+
openAiBaseUrl: 'https://api.openai.com/v1', // Optional
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
##### Options (UseAIEngineOptions)
|
|
344
|
+
|
|
345
|
+
| Property | Type | Required | Description |
|
|
346
|
+
|----------|------|----------|-------------|
|
|
347
|
+
| `enabled` | `boolean` | ✅ | Whether AI features are enabled |
|
|
348
|
+
| `openAiApiKey` | `string` | ❌ | OpenAI API key |
|
|
349
|
+
| `openAiModel` | `string` | ❌ | OpenAI model name (default: 'gpt-4.1-mini') |
|
|
350
|
+
| `openAiBaseUrl` | `string` | ❌ | OpenAI base URL (default: 'https://api.openai.com/v1') |
|
|
351
|
+
|
|
352
|
+
##### Returns (UseAIEngineReturn)
|
|
353
|
+
|
|
354
|
+
| Property | Type | Description |
|
|
355
|
+
|----------|------|-------------|
|
|
356
|
+
| `client` | `JsonChatClient \| null` | The OpenAI client instance |
|
|
357
|
+
| `state` | `TranslationState` | Current engine state |
|
|
358
|
+
| `loadedModelId` | `string \| null` | Currently loaded model ID |
|
|
359
|
+
| `isReady` | `boolean` | True when engine is ready for inference |
|
|
360
|
+
| `error` | `string \| null` | Error message if state is 'error' |
|
|
361
|
+
| `runWithLock` | `<T>(task: () => Promise<T>) => Promise<T>` | Run task with exclusive access |
|
|
362
|
+
| `stop` | `() => void` | Stop any ongoing AI operation |
|
|
363
|
+
|
|
364
|
+
##### TranslationState
|
|
365
|
+
|
|
366
|
+
```typescript
|
|
367
|
+
type TranslationState = 'disabled' | 'initializing' | 'ready' | 'translating' | 'error';
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
#### useAITranslation
|
|
373
|
+
|
|
374
|
+
Hook for translating DQM analysis results using AI. **Note:** Translation runs automatically when enabled - there is no manual `translate()` function.
|
|
375
|
+
|
|
376
|
+
```typescript
|
|
377
|
+
import { useAITranslation } from '@crownpeak/dqm-react-component';
|
|
378
|
+
import type { UseAITranslationOptions, UseAITranslationReturn } from '@crownpeak/dqm-react-component';
|
|
379
|
+
|
|
380
|
+
function MyComponent() {
|
|
381
|
+
const engine = useAIEngine({ enabled: true, openAiApiKey: '...' });
|
|
382
|
+
const cacheManager = useTranslationCache();
|
|
383
|
+
|
|
384
|
+
const translation = useAITranslation({
|
|
385
|
+
engine,
|
|
386
|
+
cacheManager,
|
|
387
|
+
originalData: analysisData,
|
|
388
|
+
targetLang: 'de',
|
|
389
|
+
modelId: 'gpt-4.1-mini',
|
|
390
|
+
enabled: true,
|
|
391
|
+
mode: 'fast',
|
|
392
|
+
computeBudgetMs: 15000,
|
|
393
|
+
persistentCache: cacheManager.cache,
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
// Use translation.translatedData instead of originalData
|
|
397
|
+
}
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
##### Options (UseAITranslationOptions)
|
|
401
|
+
|
|
402
|
+
| Property | Type | Required | Description |
|
|
403
|
+
|----------|------|----------|-------------|
|
|
404
|
+
| `engine` | `UseAIEngineReturn` | ✅ | AI engine hook return value |
|
|
405
|
+
| `cacheManager` | `UseTranslationCacheReturn` | ✅ | Translation cache hook return value |
|
|
406
|
+
| `originalData` | `AnalysisData \| null` | ✅ | Original analysis data |
|
|
407
|
+
| `targetLang` | `string` | ✅ | Target language code (e.g., 'de', 'fr') |
|
|
408
|
+
| `modelId` | `string` | ✅ | Model ID being used |
|
|
409
|
+
| `enabled` | `boolean` | ✅ | Whether translation is enabled |
|
|
410
|
+
| `mode` | `TranslationMode` | ✅ | Translation mode ('fast' or 'full') |
|
|
411
|
+
| `computeBudgetMs` | `number` | ✅ | Compute budget in milliseconds |
|
|
412
|
+
| `persistentCache` | `TranslationCache` | ✅ | IndexedDB translation cache |
|
|
413
|
+
| `summaryGenerating` | `boolean` | ❌ | Whether summary is generating (translation waits) |
|
|
414
|
+
|
|
415
|
+
##### Returns (UseAITranslationReturn)
|
|
416
|
+
|
|
417
|
+
| Property | Type | Description |
|
|
418
|
+
|----------|------|-------------|
|
|
419
|
+
| `translatedData` | `AnalysisData \| null` | Translated data (or original if not translated) |
|
|
420
|
+
| `progress` | `TranslationProgress \| null` | Translation progress |
|
|
421
|
+
| `error` | `string \| null` | Error message |
|
|
422
|
+
| `translatingIds` | `Set<string>` | Checkpoint IDs currently being translated |
|
|
423
|
+
| `translatedIds` | `Set<string>` | Checkpoint IDs that have been translated |
|
|
424
|
+
| `isTranslating` | `boolean` | Whether translation is in progress |
|
|
425
|
+
| `restart` | `() => void` | Restart translation (clears cache for current asset) |
|
|
426
|
+
| `stop` | `() => void` | Stop ongoing translation |
|
|
427
|
+
| `retrySingleCheckpoint` | `(checkpointId: string) => Promise<void>` | Retry single checkpoint |
|
|
428
|
+
| `resetToOriginal` | `() => void` | Reset to original data |
|
|
429
|
+
|
|
430
|
+
##### TranslationProgress
|
|
431
|
+
|
|
432
|
+
```typescript
|
|
433
|
+
interface TranslationProgress {
|
|
434
|
+
translated: number; // Number of checkpoints translated
|
|
435
|
+
total: number; // Total checkpoints to translate
|
|
436
|
+
tokens: number; // Tokens used
|
|
437
|
+
fromCache: number; // Checkpoints retrieved from cache
|
|
438
|
+
errors: number; // Number of errors
|
|
439
|
+
}
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
##### TranslationMode
|
|
443
|
+
|
|
444
|
+
```typescript
|
|
445
|
+
type TranslationMode = 'fast' | 'full';
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
- `fast` - Budget-limited translation (stops after `computeBudgetMs`)
|
|
449
|
+
- `full` - Translate all checkpoints (120s budget)
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
#### useAISummary
|
|
454
|
+
|
|
455
|
+
Hook for generating AI-powered summary of DQM results. **Note:** Summary generation runs automatically when enabled - there is no manual `generateSummary()` function.
|
|
456
|
+
|
|
457
|
+
```typescript
|
|
458
|
+
import { useAISummary } from '@crownpeak/dqm-react-component';
|
|
459
|
+
import type { UseAISummaryOptions, UseAISummaryReturn } from '@crownpeak/dqm-react-component';
|
|
460
|
+
|
|
461
|
+
function MyComponent() {
|
|
462
|
+
const engine = useAIEngine({ enabled: true, openAiApiKey: '...' });
|
|
463
|
+
const cacheManager = useTranslationCache();
|
|
464
|
+
|
|
465
|
+
const summary = useAISummary({
|
|
466
|
+
engine,
|
|
467
|
+
originalData: analysisData,
|
|
468
|
+
targetLang: 'de',
|
|
469
|
+
modelId: 'gpt-4.1-mini',
|
|
470
|
+
enabled: true,
|
|
471
|
+
cache: cacheManager.cache,
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
// Use summary.bullets for the generated summary points
|
|
475
|
+
}
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
##### Options (UseAISummaryOptions)
|
|
479
|
+
|
|
480
|
+
| Property | Type | Required | Description |
|
|
481
|
+
|----------|------|----------|-------------|
|
|
482
|
+
| `engine` | `UseAIEngineReturn` | ✅ | AI engine hook return value |
|
|
483
|
+
| `originalData` | `AnalysisData \| null` | ✅ | Original analysis data |
|
|
484
|
+
| `targetLang` | `string` | ✅ | Target language for summary |
|
|
485
|
+
| `modelId` | `string` | ✅ | Model ID being used |
|
|
486
|
+
| `enabled` | `boolean` | ✅ | Whether summary is enabled |
|
|
487
|
+
| `cache` | `TranslationCache` | ✅ | Translation cache for summary caching |
|
|
488
|
+
| `timeoutMs` | `number` | ❌ | Timeout in milliseconds (default: 45000) |
|
|
489
|
+
| `translationInProgress` | `boolean` | ❌ | Whether translation is in progress (summary waits) |
|
|
490
|
+
|
|
491
|
+
##### Returns (UseAISummaryReturn)
|
|
492
|
+
|
|
493
|
+
| Property | Type | Description |
|
|
494
|
+
|----------|------|-------------|
|
|
495
|
+
| `state` | `SummaryState` | Current summary state |
|
|
496
|
+
| `bullets` | `string[] \| null` | Generated bullet points |
|
|
497
|
+
| `error` | `string \| null` | Error message |
|
|
498
|
+
| `stats` | `SummaryStats \| null` | Stats for last summary run |
|
|
499
|
+
| `restart` | `() => void` | Restart summary generation |
|
|
500
|
+
|
|
501
|
+
##### SummaryState
|
|
502
|
+
|
|
503
|
+
```typescript
|
|
504
|
+
type SummaryState = 'idle' | 'generating' | 'ready' | 'error';
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
##### SummaryStats
|
|
508
|
+
|
|
509
|
+
```typescript
|
|
510
|
+
interface SummaryStats {
|
|
511
|
+
durationMs: number;
|
|
512
|
+
inputTokens: number;
|
|
513
|
+
outputTokens: number;
|
|
514
|
+
totalTokens: number;
|
|
515
|
+
model: string;
|
|
516
|
+
cached: boolean;
|
|
517
|
+
}
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
---
|
|
521
|
+
|
|
522
|
+
#### useTranslationCache
|
|
523
|
+
|
|
524
|
+
Hook for managing translation cache (IndexedDB + in-memory).
|
|
525
|
+
|
|
526
|
+
```typescript
|
|
527
|
+
import { useTranslationCache } from '@crownpeak/dqm-react-component';
|
|
528
|
+
import type { UseTranslationCacheReturn } from '@crownpeak/dqm-react-component';
|
|
529
|
+
|
|
530
|
+
function MyComponent() {
|
|
531
|
+
const cacheManager = useTranslationCache();
|
|
532
|
+
|
|
533
|
+
// Clear all caches
|
|
534
|
+
await cacheManager.clearAll();
|
|
535
|
+
}
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
##### Returns (UseTranslationCacheReturn)
|
|
539
|
+
|
|
540
|
+
| Property | Type | Description |
|
|
541
|
+
|----------|------|-------------|
|
|
542
|
+
| `cache` | `TranslationCache` | IndexedDB-backed translation cache |
|
|
543
|
+
| `assetCache` | `Map<string, AnalysisData>` | In-memory cache per asset |
|
|
544
|
+
| `storagePersisted` | `boolean \| null` | Whether storage survives browser eviction |
|
|
545
|
+
| `refreshStorageState` | `() => Promise<void>` | Refresh persistence state |
|
|
546
|
+
| `clearAll` | `() => Promise<void>` | Clear all cached translations |
|
|
547
|
+
| `clearAssetCache` | `() => void` | Clear in-memory cache only |
|
|
548
|
+
|
|
549
|
+
---
|
|
550
|
+
|
|
551
|
+
### AI Context
|
|
552
|
+
|
|
553
|
+
#### AIProvider
|
|
554
|
+
|
|
555
|
+
Provider component for AI features configuration. Wrap your app with this to use AI hooks.
|
|
556
|
+
|
|
557
|
+
```typescript
|
|
558
|
+
import { AIProvider } from '@crownpeak/dqm-react-component';
|
|
559
|
+
import type { AIProviderProps } from '@crownpeak/dqm-react-component';
|
|
560
|
+
|
|
561
|
+
function App() {
|
|
562
|
+
return (
|
|
563
|
+
<AIProvider
|
|
564
|
+
translationConfig={{ enabledByDefault: false, computeBudgetMs: 15000 }}
|
|
565
|
+
summaryConfig={{ timeoutMs: 45000 }}
|
|
566
|
+
>
|
|
567
|
+
<MyApp />
|
|
568
|
+
</AIProvider>
|
|
569
|
+
);
|
|
570
|
+
}
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
##### Props (AIProviderProps)
|
|
574
|
+
|
|
575
|
+
| Prop | Type | Required | Description |
|
|
576
|
+
|------|------|----------|-------------|
|
|
577
|
+
| `children` | `React.ReactNode` | ✅ | Child components |
|
|
578
|
+
| `translationConfig` | `TranslationConfig` | ❌ | Translation configuration |
|
|
579
|
+
| `summaryConfig` | `SummaryConfig` | ❌ | Summary configuration |
|
|
580
|
+
|
|
581
|
+
---
|
|
582
|
+
|
|
583
|
+
#### useAI
|
|
584
|
+
|
|
585
|
+
Hook to access AI context settings. Must be used within an AIProvider.
|
|
586
|
+
|
|
587
|
+
```typescript
|
|
588
|
+
import { useAI } from '@crownpeak/dqm-react-component';
|
|
589
|
+
import type { AIContextValue } from '@crownpeak/dqm-react-component';
|
|
590
|
+
|
|
591
|
+
function MyComponent() {
|
|
592
|
+
const ai = useAI();
|
|
593
|
+
|
|
594
|
+
// Toggle translation
|
|
595
|
+
ai.setTranslationEnabled(!ai.translationEnabled);
|
|
596
|
+
|
|
597
|
+
// Change translation mode
|
|
598
|
+
ai.setTranslationMode('full');
|
|
599
|
+
|
|
600
|
+
// Update OpenAI settings
|
|
601
|
+
ai.setOpenAiApiKey('sk-...');
|
|
602
|
+
ai.setOpenAiModel('gpt-4o-mini');
|
|
603
|
+
}
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
##### Returns (AIContextValue)
|
|
607
|
+
|
|
608
|
+
| Property | Type | Description |
|
|
609
|
+
|----------|------|-------------|
|
|
610
|
+
| `translationEnabled` | `boolean` | Translation feature enabled |
|
|
611
|
+
| `setTranslationEnabled` | `(value: boolean) => void` | Toggle translation |
|
|
612
|
+
| `translationMode` | `TranslationMode` | Current translation mode |
|
|
613
|
+
| `setTranslationMode` | `(value: TranslationMode) => void` | Set translation mode |
|
|
614
|
+
| `translationDialogOpen` | `boolean` | Translation dialog visibility |
|
|
615
|
+
| `setTranslationDialogOpen` | `(value: boolean) => void` | Toggle dialog |
|
|
616
|
+
| `summaryEnabled` | `boolean` | Summary feature enabled |
|
|
617
|
+
| `setSummaryEnabled` | `(value: boolean) => void` | Toggle summary |
|
|
618
|
+
| `openAiApiKey` | `string` | Current OpenAI API key |
|
|
619
|
+
| `setOpenAiApiKey` | `(value: string) => void` | Set API key |
|
|
620
|
+
| `openAiModel` | `string` | Current OpenAI model |
|
|
621
|
+
| `setOpenAiModel` | `(value: string) => void` | Set model |
|
|
622
|
+
| `openAiBaseUrl` | `string` | Current OpenAI base URL |
|
|
623
|
+
| `setOpenAiBaseUrl` | `(value: string) => void` | Set base URL |
|
|
624
|
+
| `targetLang` | `string` | Target language (from i18n) |
|
|
625
|
+
| `translationNeeded` | `boolean` | True if target !== 'en' |
|
|
626
|
+
| `aiEnabled` | `boolean` | Any AI feature enabled |
|
|
627
|
+
| `computeBudgetMs` | `number` | Current compute budget |
|
|
628
|
+
| `effectiveModelId` | `string` | Resolved model ID |
|
|
629
|
+
|
|
630
|
+
---
|
|
631
|
+
|
|
632
|
+
### Utility Hooks
|
|
633
|
+
|
|
634
|
+
#### useOverlayResistant
|
|
635
|
+
|
|
636
|
+
Hook for detecting overlays and calculating content offsets.
|
|
637
|
+
|
|
638
|
+
```typescript
|
|
639
|
+
import { useOverlayResistant } from '@crownpeak/dqm-react-component';
|
|
640
|
+
|
|
641
|
+
function MyComponent() {
|
|
642
|
+
const overlay = useOverlayResistant({
|
|
643
|
+
selector: '.admin-toolbar',
|
|
644
|
+
validateIframe: true,
|
|
645
|
+
pollMs: 1000,
|
|
646
|
+
});
|
|
647
|
+
}
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
##### Returns
|
|
651
|
+
|
|
652
|
+
```typescript
|
|
653
|
+
interface OverlayInfo {
|
|
654
|
+
present: boolean;
|
|
655
|
+
height: number;
|
|
656
|
+
width: number;
|
|
657
|
+
position: 'top' | 'bottom' | 'left' | 'right' | 'center' | null;
|
|
658
|
+
contentOffset: {
|
|
659
|
+
top: number;
|
|
660
|
+
bottom: number;
|
|
661
|
+
left: number;
|
|
662
|
+
right: number;
|
|
663
|
+
};
|
|
664
|
+
isManualOffset: boolean;
|
|
665
|
+
}
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
##### Example
|
|
669
|
+
|
|
670
|
+
```typescript
|
|
671
|
+
const overlay = useOverlayResistant({ selector: '.toolbar' });
|
|
672
|
+
|
|
673
|
+
<div style={{
|
|
674
|
+
marginTop: overlay.present ? `${overlay.contentOffset.top}px` : 0
|
|
675
|
+
}}>
|
|
676
|
+
Content adjusted for toolbar
|
|
677
|
+
</div>
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
---
|
|
681
|
+
|
|
682
|
+
## Types
|
|
683
|
+
|
|
684
|
+
### Core Types
|
|
685
|
+
|
|
686
|
+
#### AnalysisState
|
|
687
|
+
|
|
688
|
+
```typescript
|
|
689
|
+
type AnalysisState = 'idle' | 'analyzing' | 'completed' | 'error';
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
---
|
|
693
|
+
|
|
694
|
+
#### SessionType
|
|
695
|
+
|
|
696
|
+
```typescript
|
|
697
|
+
type SessionType = 'direct' | 'backend';
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
- `direct` - Direct API calls to Crownpeak DQM
|
|
701
|
+
- `backend` - Proxy API calls through backend server
|
|
702
|
+
|
|
703
|
+
---
|
|
704
|
+
|
|
705
|
+
#### Checkpoint
|
|
706
|
+
|
|
707
|
+
```typescript
|
|
708
|
+
interface Checkpoint {
|
|
709
|
+
colors: { bg: string; text: string };
|
|
710
|
+
id: string;
|
|
711
|
+
name: string;
|
|
712
|
+
description?: string;
|
|
713
|
+
reference: string;
|
|
714
|
+
number: number;
|
|
715
|
+
categoryNumber: number;
|
|
716
|
+
category: string;
|
|
717
|
+
priority: boolean;
|
|
718
|
+
failed: boolean;
|
|
719
|
+
topics: string[];
|
|
720
|
+
canHighlight: {
|
|
721
|
+
page: boolean;
|
|
722
|
+
source: boolean;
|
|
723
|
+
};
|
|
724
|
+
restricted: boolean;
|
|
725
|
+
checkpointType?: {
|
|
726
|
+
name: string;
|
|
727
|
+
modifiedBy: string;
|
|
728
|
+
modified: string;
|
|
729
|
+
};
|
|
730
|
+
created: string;
|
|
731
|
+
modified: string;
|
|
732
|
+
}
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
---
|
|
736
|
+
|
|
737
|
+
#### AnalysisData
|
|
738
|
+
|
|
739
|
+
```typescript
|
|
740
|
+
interface AnalysisData {
|
|
741
|
+
assetId: string;
|
|
742
|
+
created: string;
|
|
743
|
+
siteName: string;
|
|
744
|
+
totalCheckpoints: number;
|
|
745
|
+
totalErrors: number;
|
|
746
|
+
checkpoints: Checkpoint[];
|
|
747
|
+
}
|
|
748
|
+
```
|
|
749
|
+
|
|
750
|
+
---
|
|
751
|
+
|
|
752
|
+
## Redux Store
|
|
753
|
+
|
|
754
|
+
> **Note:** The Redux store is used internally by the DQM component. These types are documented for advanced users who need to integrate with the store directly. Most users should use the provided hooks instead.
|
|
755
|
+
|
|
756
|
+
### Store Structure
|
|
757
|
+
|
|
758
|
+
```typescript
|
|
759
|
+
interface RootState {
|
|
760
|
+
locale: LocaleState;
|
|
761
|
+
analysis: AnalysisSliceState;
|
|
762
|
+
highlight: HighlightSliceState;
|
|
763
|
+
auth: AuthSliceState;
|
|
764
|
+
ai: AISliceState;
|
|
765
|
+
dqmApi: RTKQueryState; // RTK Query cache
|
|
766
|
+
}
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
### AnalysisSliceState
|
|
770
|
+
|
|
771
|
+
```typescript
|
|
772
|
+
interface AnalysisSliceState {
|
|
773
|
+
state: AnalysisState; // 'idle' | 'analyzing' | 'completed' | 'error'
|
|
774
|
+
assetId: string | null;
|
|
775
|
+
data: AnalysisData | null;
|
|
776
|
+
error: string | null;
|
|
777
|
+
isAnalyzing: boolean;
|
|
778
|
+
startedAt: number | null;
|
|
779
|
+
completedAt: number | null;
|
|
780
|
+
}
|
|
781
|
+
```
|
|
782
|
+
|
|
783
|
+
### AuthSliceState
|
|
784
|
+
|
|
785
|
+
```typescript
|
|
786
|
+
interface AuthSliceState {
|
|
787
|
+
apiKey: string | null;
|
|
788
|
+
websiteId: string | null;
|
|
789
|
+
isAuthenticated: boolean;
|
|
790
|
+
sessionType: 'direct' | 'backend' | null;
|
|
791
|
+
sessionToken: string | null;
|
|
792
|
+
accessToken: string | null;
|
|
793
|
+
refreshToken: string | null;
|
|
794
|
+
rememberMe: boolean;
|
|
795
|
+
isLoading: boolean;
|
|
796
|
+
error: string | null;
|
|
797
|
+
storageWarningAcknowledged: boolean;
|
|
798
|
+
}
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
### HighlightSliceState
|
|
802
|
+
|
|
803
|
+
```typescript
|
|
804
|
+
interface HighlightSliceState {
|
|
805
|
+
selectedCheckpoint: Checkpoint | null;
|
|
806
|
+
selectedCheckpointId: string | null;
|
|
807
|
+
viewMode: 'browser' | 'source';
|
|
808
|
+
showAllHighlights: boolean;
|
|
809
|
+
currentHighlightIndex: number; // 1-based
|
|
810
|
+
totalHighlights: number;
|
|
811
|
+
visibleHighlightIndex: number; // 1-based
|
|
812
|
+
cache: Record<string, HighlightCacheEntry>;
|
|
813
|
+
scrollPositions: Record<string, { browser: number; source: number }>;
|
|
814
|
+
isModalOpen: boolean;
|
|
815
|
+
isLoading: boolean;
|
|
816
|
+
error: string | null;
|
|
817
|
+
highlightedContent: string;
|
|
818
|
+
scriptsDisabled: boolean;
|
|
819
|
+
hasAutoScrolled: boolean;
|
|
820
|
+
}
|
|
821
|
+
```
|
|
822
|
+
|
|
823
|
+
### AISliceState
|
|
824
|
+
|
|
825
|
+
```typescript
|
|
826
|
+
interface AISliceState {
|
|
827
|
+
settings: {
|
|
828
|
+
provider: 'openai' | 'none';
|
|
829
|
+
openaiApiKey: string | null;
|
|
830
|
+
openaiModel: string;
|
|
831
|
+
enabled: boolean;
|
|
832
|
+
translationProvider: 'openai' | 'none';
|
|
833
|
+
};
|
|
834
|
+
summaries: Record<string, AISummary>;
|
|
835
|
+
isSettingsOpen: boolean;
|
|
836
|
+
isGenerating: boolean;
|
|
837
|
+
generatingFor: string | null;
|
|
838
|
+
error: string | null;
|
|
839
|
+
}
|
|
840
|
+
```
|
|
841
|
+
|
|
842
|
+
### LocaleState
|
|
843
|
+
|
|
844
|
+
```typescript
|
|
845
|
+
interface LocaleState {
|
|
846
|
+
locale: 'en' | 'de' | 'es';
|
|
847
|
+
}
|
|
848
|
+
```
|
|
849
|
+
|
|
850
|
+
---
|
|
851
|
+
|
|
852
|
+
## Utilities
|
|
853
|
+
|
|
854
|
+
### i18n
|
|
855
|
+
|
|
856
|
+
The library exports its i18next instance and locale utilities for language management.
|
|
857
|
+
|
|
858
|
+
```typescript
|
|
859
|
+
import {
|
|
860
|
+
i18n,
|
|
861
|
+
resolveLanguage,
|
|
862
|
+
SUPPORTED_LOCALES,
|
|
863
|
+
DEFAULT_LOCALE,
|
|
864
|
+
normalizeLocale,
|
|
865
|
+
} from '@crownpeak/dqm-react-component';
|
|
866
|
+
import type { SupportedLocale, AvailableLanguage } from '@crownpeak/dqm-react-component';
|
|
867
|
+
```
|
|
868
|
+
|
|
869
|
+
#### Exports
|
|
870
|
+
|
|
871
|
+
| Export | Type | Description |
|
|
872
|
+
|--------|------|-------------|
|
|
873
|
+
| `i18n` | `i18n` | i18next instance used by the library |
|
|
874
|
+
| `resolveLanguage` | `(locale: string) => AvailableLanguage` | Resolve locale to available language (handles regional variants) |
|
|
875
|
+
| `SUPPORTED_LOCALES` | `readonly ['en', 'de', 'es']` | Array of supported locale codes |
|
|
876
|
+
| `DEFAULT_LOCALE` | `'en'` | Default fallback locale |
|
|
877
|
+
| `normalizeLocale` | `(input: string) => SupportedLocale \| null` | Normalize locale string to supported locale |
|
|
878
|
+
|
|
879
|
+
#### Changing Language
|
|
880
|
+
|
|
881
|
+
```typescript
|
|
882
|
+
import { i18n } from '@crownpeak/dqm-react-component';
|
|
883
|
+
|
|
884
|
+
// Change language programmatically
|
|
885
|
+
i18n.changeLanguage('de');
|
|
886
|
+
|
|
887
|
+
// Get current language
|
|
888
|
+
const currentLang = i18n.language; // 'de'
|
|
889
|
+
|
|
890
|
+
// Listen for language changes
|
|
891
|
+
i18n.on('languageChanged', (lng) => {
|
|
892
|
+
console.log('Language changed to:', lng);
|
|
893
|
+
});
|
|
894
|
+
```
|
|
895
|
+
|
|
896
|
+
#### Handling Regional Variants
|
|
897
|
+
|
|
898
|
+
```typescript
|
|
899
|
+
import { resolveLanguage } from '@crownpeak/dqm-react-component';
|
|
900
|
+
|
|
901
|
+
resolveLanguage('de-AT'); // Returns 'de'
|
|
902
|
+
resolveLanguage('es-MX'); // Returns 'es'
|
|
903
|
+
resolveLanguage('fr'); // Returns 'en' (fallback)
|
|
904
|
+
```
|
|
905
|
+
|
|
906
|
+
#### Validating Locales
|
|
907
|
+
|
|
908
|
+
```typescript
|
|
909
|
+
import { normalizeLocale, SUPPORTED_LOCALES } from '@crownpeak/dqm-react-component';
|
|
910
|
+
|
|
911
|
+
normalizeLocale('de'); // 'de'
|
|
912
|
+
normalizeLocale('de-AT'); // 'de'
|
|
913
|
+
normalizeLocale('fr'); // null (not supported)
|
|
914
|
+
|
|
915
|
+
// Check if locale is supported
|
|
916
|
+
const isSupported = SUPPORTED_LOCALES.includes('de'); // true
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
---
|
|
920
|
+
|
|
921
|
+
### loadDQMWidget (IIFE/ESM Only)
|
|
922
|
+
|
|
923
|
+
Load DQM widget in standalone mode (for IIFE/ESM bundles).
|
|
924
|
+
|
|
925
|
+
```typescript
|
|
926
|
+
interface DQMWidget {
|
|
927
|
+
loadDQMWidget(options: {
|
|
928
|
+
config: DQMConfig;
|
|
929
|
+
containerId?: string;
|
|
930
|
+
open?: boolean;
|
|
931
|
+
}): () => void;
|
|
932
|
+
|
|
933
|
+
version: string;
|
|
934
|
+
}
|
|
935
|
+
```
|
|
936
|
+
|
|
937
|
+
#### Example (IIFE)
|
|
938
|
+
|
|
939
|
+
```html
|
|
940
|
+
<script src="https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.iife.js"></script>
|
|
941
|
+
<script>
|
|
942
|
+
const cleanup = window.DQMWidget.loadDQMWidget({
|
|
943
|
+
open: true,
|
|
944
|
+
config: {
|
|
945
|
+
websiteId: 'your-website-id',
|
|
946
|
+
apiKey: 'your-api-key',
|
|
947
|
+
}
|
|
948
|
+
});
|
|
949
|
+
|
|
950
|
+
// Later: cleanup() to remove widget
|
|
951
|
+
</script>
|
|
952
|
+
```
|
|
953
|
+
|
|
954
|
+
#### Example (ESM)
|
|
955
|
+
|
|
956
|
+
```html
|
|
957
|
+
<script type="module">
|
|
958
|
+
import { loadDQMWidget } from 'https://unpkg.com/@crownpeak/dqm-react-component/dist/dqm-widget.esm.js';
|
|
959
|
+
|
|
960
|
+
const cleanup = loadDQMWidget({
|
|
961
|
+
config: {
|
|
962
|
+
websiteId: 'your-website-id',
|
|
963
|
+
apiKey: 'your-api-key',
|
|
964
|
+
}
|
|
965
|
+
});
|
|
966
|
+
</script>
|
|
967
|
+
```
|
|
968
|
+
|
|
969
|
+
---
|
|
970
|
+
|
|
971
|
+
## localStorage Keys
|
|
972
|
+
|
|
973
|
+
The DQM component uses localStorage for persisting user preferences and authentication state.
|
|
974
|
+
|
|
975
|
+
### Authentication Keys
|
|
976
|
+
|
|
977
|
+
| Key | Type | Description |
|
|
978
|
+
|-----|------|-------------|
|
|
979
|
+
| `dqm_apiKey` | `string` | DQM API key (direct auth mode) |
|
|
980
|
+
| `dqm_websiteID` | `string` | DQM Website ID |
|
|
981
|
+
| `dqm_sessionToken` | `string` | Backend session token (backend auth mode) |
|
|
982
|
+
| `dqm_sessionType` | `'direct' \| 'backend'` | Current authentication mode |
|
|
983
|
+
| `dqm_rememberMe` | `'true' \| 'false'` | Remember credentials preference |
|
|
984
|
+
| `dqm_storageWarningAcknowledged` | `'true'` | User acknowledged localStorage security warning |
|
|
985
|
+
|
|
986
|
+
### AI Feature Keys
|
|
987
|
+
|
|
988
|
+
| Key | Type | Description |
|
|
989
|
+
|-----|------|-------------|
|
|
990
|
+
| `dqm_openai_apiKey` | `string` | OpenAI API key for translation/summary |
|
|
991
|
+
| `dqm_openai_model` | `string` | OpenAI model (default: 'gpt-4.1-mini') |
|
|
992
|
+
| `dqm_target_language` | `string` | Target language for translation (ISO 639-1) |
|
|
993
|
+
| `dqm_translate_results_enabled` | `'true' \| 'false'` | Translation feature enabled |
|
|
994
|
+
| `dqm_ai_summary_enabled` | `'true' \| 'false'` | AI summary feature enabled |
|
|
995
|
+
| `dqm_ai_provider` | `'openai' \| 'none'` | AI provider selection |
|
|
996
|
+
|
|
997
|
+
### UI State Keys
|
|
998
|
+
|
|
999
|
+
| Key | Type | Description |
|
|
1000
|
+
|-----|------|-------------|
|
|
1001
|
+
| `dqm_locale` | `'en' \| 'de' \| 'es'` | UI language |
|
|
1002
|
+
| `dqm_debug` | `'true' \| 'false'` | Debug logging enabled |
|
|
1003
|
+
| `dqm_quality_breakdown_expanded` | `'true' \| 'false'` | Quality breakdown accordion state |
|
|
1004
|
+
|
|
1005
|
+
#### Example: Pre-configure AI settings
|
|
1006
|
+
|
|
1007
|
+
```typescript
|
|
1008
|
+
// Set OpenAI configuration before loading DQM
|
|
1009
|
+
localStorage.setItem('dqm_openai_apiKey', 'sk-...');
|
|
1010
|
+
localStorage.setItem('dqm_openai_model', 'gpt-4o-mini');
|
|
1011
|
+
localStorage.setItem('dqm_target_language', 'de');
|
|
1012
|
+
localStorage.setItem('dqm_translate_results_enabled', 'true');
|
|
1013
|
+
```
|
|
1014
|
+
|
|
1015
|
+
---
|
|
1016
|
+
|
|
1017
|
+
## See Also
|
|
1018
|
+
|
|
1019
|
+
- **[Examples](./EXAMPLES.md)** - Integration examples with code
|
|
1020
|
+
- **[AI Features Guide](./AI-FEATURES.md)** - AI translation and summary
|
|
1021
|
+
- **[Widget Guide](./WIDGET-GUIDE.md)** - Standalone widget usage
|
|
1022
|
+
- **[Troubleshooting](./TROUBLESHOOTING.md)** - Common issues and solutions
|