reviewflow 3.37.1 → 3.39.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/CHANGELOG.md +34 -0
- package/dist/dashboard/index.html +45 -1
- package/dist/dashboard/modules/i18n.d.ts.map +1 -1
- package/dist/dashboard/modules/i18n.js +30 -0
- package/dist/dashboard/modules/i18n.js.map +1 -1
- package/dist/dashboard/modules/keyInsights.d.ts +19 -0
- package/dist/dashboard/modules/keyInsights.d.ts.map +1 -0
- package/dist/dashboard/modules/keyInsights.js +68 -0
- package/dist/dashboard/modules/keyInsights.js.map +1 -0
- package/dist/dashboard/modules/statsCharts.d.ts +26 -0
- package/dist/dashboard/modules/statsCharts.d.ts.map +1 -1
- package/dist/dashboard/modules/statsCharts.js +184 -0
- package/dist/dashboard/modules/statsCharts.js.map +1 -1
- package/dist/dashboard/styles.css +54 -0
- package/dist/frameworks/claude/claudeInvoker.d.ts +2 -0
- package/dist/frameworks/claude/claudeInvoker.d.ts.map +1 -1
- package/dist/frameworks/claude/claudeInvoker.js +12 -2
- package/dist/frameworks/claude/claudeInvoker.js.map +1 -1
- package/dist/main/dependencies.d.ts +1 -1
- package/dist/main/dependencies.d.ts.map +1 -1
- package/dist/main/dependencies.js.map +1 -1
- package/dist/main/routes.js +2 -2
- package/dist/main/routes.js.map +1 -1
- package/dist/mcp/mcpServerStdio.d.ts +190 -0
- package/dist/mcp/mcpServerStdio.d.ts.map +1 -1
- package/dist/mcp/mcpServerStdio.js +23 -1
- package/dist/mcp/mcpServerStdio.js.map +1 -1
- package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.guard.d.ts +1 -1
- package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.schema.d.ts +2 -2
- package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.d.ts +1 -0
- package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.d.ts.map +1 -1
- package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.js +2 -1
- package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.js.map +1 -1
- package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.d.ts +16 -0
- package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.d.ts.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.js +40 -0
- package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.js.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.d.ts +7 -3
- package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.d.ts.map +1 -1
- package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.js +7 -4
- package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.js.map +1 -1
- package/dist/modules/ember-chat/interface-adapters/gateways/emberMemory.fileSystem.gateway.d.ts.map +1 -1
- package/dist/modules/ember-chat/interface-adapters/gateways/emberMemory.fileSystem.gateway.js +8 -1
- package/dist/modules/ember-chat/interface-adapters/gateways/emberMemory.fileSystem.gateway.js.map +1 -1
- package/dist/modules/ember-chat/services/emberSystemPrompt.d.ts +1 -1
- package/dist/modules/ember-chat/services/emberSystemPrompt.d.ts.map +1 -1
- package/dist/modules/ember-chat/services/emberSystemPrompt.js +15 -2
- package/dist/modules/ember-chat/services/emberSystemPrompt.js.map +1 -1
- package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.d.ts.map +1 -1
- package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.js +1 -1
- package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js +1 -1
- package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
- package/dist/modules/setup-wizard/entities/setupState/setupState.guard.d.ts +1 -1
- package/dist/modules/setup-wizard/entities/setupState/setupState.schema.d.ts +1 -1
- package/dist/modules/setup-wizard/entities/stepId/stepId.schema.d.ts +1 -1
- package/dist/modules/setup-wizard/entities/wizardStreamEvent/wizardStreamEvent.guard.d.ts +4 -4
- package/dist/modules/setup-wizard/entities/wizardStreamEvent/wizardStreamEvent.schema.d.ts +8 -8
- package/dist/modules/statistics-insights/entities/insight/developerInsight.guard.d.ts +8 -8
- package/dist/modules/statistics-insights/entities/insight/developerInsight.schema.d.ts +9 -9
- package/dist/modules/statistics-insights/entities/insight/insightTrend.d.ts +1 -1
- package/dist/modules/statistics-insights/entities/stats/bugCategory.d.ts +10 -0
- package/dist/modules/statistics-insights/entities/stats/bugCategory.d.ts.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/bugCategory.js +31 -0
- package/dist/modules/statistics-insights/entities/stats/bugCategory.js.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.guard.d.ts +20 -0
- package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.guard.d.ts.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.guard.js +27 -0
- package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.guard.js.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.schema.d.ts +10 -0
- package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.schema.d.ts.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.schema.js +11 -0
- package/dist/modules/statistics-insights/entities/stats/categoryBreakdown.schema.js.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/keyInsights.d.ts +21 -0
- package/dist/modules/statistics-insights/entities/stats/keyInsights.d.ts.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/keyInsights.js +101 -0
- package/dist/modules/statistics-insights/entities/stats/keyInsights.js.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/monthlyVolume.d.ts +20 -0
- package/dist/modules/statistics-insights/entities/stats/monthlyVolume.d.ts.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/monthlyVolume.js +36 -0
- package/dist/modules/statistics-insights/entities/stats/monthlyVolume.js.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/projectStats.d.ts +10 -30
- package/dist/modules/statistics-insights/entities/stats/projectStats.d.ts.map +1 -1
- package/dist/modules/statistics-insights/entities/stats/projectStats.guard.d.ts +97 -0
- package/dist/modules/statistics-insights/entities/stats/projectStats.guard.d.ts.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/projectStats.guard.js +6 -0
- package/dist/modules/statistics-insights/entities/stats/projectStats.guard.js.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/projectStats.js +21 -1
- package/dist/modules/statistics-insights/entities/stats/projectStats.js.map +1 -1
- package/dist/modules/statistics-insights/entities/stats/projectStats.schema.d.ts +74 -0
- package/dist/modules/statistics-insights/entities/stats/projectStats.schema.d.ts.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/projectStats.schema.js +39 -0
- package/dist/modules/statistics-insights/entities/stats/projectStats.schema.js.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/reviewDuration.format.d.ts +7 -0
- package/dist/modules/statistics-insights/entities/stats/reviewDuration.format.d.ts.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/reviewDuration.format.js +13 -0
- package/dist/modules/statistics-insights/entities/stats/reviewDuration.format.js.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/reviewOutput.parser.d.ts +29 -0
- package/dist/modules/statistics-insights/entities/stats/reviewOutput.parser.d.ts.map +1 -0
- package/dist/modules/statistics-insights/entities/stats/reviewOutput.parser.js +103 -0
- package/dist/modules/statistics-insights/entities/stats/reviewOutput.parser.js.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/controllers/http/stats.routes.d.ts.map +1 -1
- package/dist/modules/statistics-insights/interface-adapters/controllers/http/stats.routes.js +20 -5
- package/dist/modules/statistics-insights/interface-adapters/controllers/http/stats.routes.js.map +1 -1
- package/dist/modules/statistics-insights/interface-adapters/gateways/fileSystem/stats.fileSystem.d.ts.map +1 -1
- package/dist/modules/statistics-insights/interface-adapters/gateways/fileSystem/stats.fileSystem.js +15 -4
- package/dist/modules/statistics-insights/interface-adapters/gateways/fileSystem/stats.fileSystem.js.map +1 -1
- package/dist/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.d.ts +19 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.d.ts.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.js +24 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.js.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.d.ts +16 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.d.ts.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.js +21 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.js.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.d.ts +14 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.d.ts.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.js +16 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.js.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.d.ts +25 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.d.ts.map +1 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.js +52 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.js.map +1 -0
- package/dist/modules/statistics-insights/usecases/stats/addReviewStats.usecase.d.ts +19 -0
- package/dist/modules/statistics-insights/usecases/stats/addReviewStats.usecase.d.ts.map +1 -0
- package/dist/modules/statistics-insights/usecases/stats/addReviewStats.usecase.js +85 -0
- package/dist/modules/statistics-insights/usecases/stats/addReviewStats.usecase.js.map +1 -0
- package/dist/modules/statistics-insights/usecases/stats/getProjectStats.usecase.d.ts +12 -0
- package/dist/modules/statistics-insights/usecases/stats/getProjectStats.usecase.d.ts.map +1 -0
- package/dist/modules/statistics-insights/usecases/stats/getProjectStats.usecase.js +10 -0
- package/dist/modules/statistics-insights/usecases/stats/getProjectStats.usecase.js.map +1 -0
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts.map +1 -1
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js +1 -1
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js.map +1 -1
- package/dist/tests/acceptance/190-ember-live-answers-subscription.acceptance.test.js +1 -1
- package/dist/tests/acceptance/190-ember-live-answers-subscription.acceptance.test.js.map +1 -1
- package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.d.ts +2 -0
- package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.js +100 -0
- package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/203-bugs-found-by-category.acceptance.test.d.ts +15 -0
- package/dist/tests/acceptance/203-bugs-found-by-category.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/203-bugs-found-by-category.acceptance.test.js +183 -0
- package/dist/tests/acceptance/203-bugs-found-by-category.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/204-analytics-overview-header.acceptance.test.d.ts +15 -0
- package/dist/tests/acceptance/204-analytics-overview-header.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/204-analytics-overview-header.acceptance.test.js +115 -0
- package/dist/tests/acceptance/204-analytics-overview-header.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/205-analytics-key-insight-cards.acceptance.test.d.ts +15 -0
- package/dist/tests/acceptance/205-analytics-key-insight-cards.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/205-analytics-key-insight-cards.acceptance.test.js +136 -0
- package/dist/tests/acceptance/205-analytics-key-insight-cards.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/47-capture-git-diff-stats.acceptance.test.js +21 -1
- package/dist/tests/acceptance/47-capture-git-diff-stats.acceptance.test.js.map +1 -1
- package/dist/tests/acceptance/80-split-stats-service.acceptance.test.d.ts +20 -0
- package/dist/tests/acceptance/80-split-stats-service.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/80-split-stats-service.acceptance.test.js +254 -0
- package/dist/tests/acceptance/80-split-stats-service.acceptance.test.js.map +1 -0
- package/dist/tests/factories/persistedInsightsData.factory.d.ts +1 -1
- package/dist/tests/factories/persistedInsightsData.factory.d.ts.map +1 -1
- package/dist/tests/stubs/emberMemory.stub.d.ts.map +1 -1
- package/dist/tests/stubs/emberMemory.stub.js +8 -1
- package/dist/tests/stubs/emberMemory.stub.js.map +1 -1
- package/dist/tests/units/dashboard/modules/i18n.test.js +13 -0
- package/dist/tests/units/dashboard/modules/i18n.test.js.map +1 -1
- package/dist/tests/units/dashboard/modules/keyInsights.test.d.ts +2 -0
- package/dist/tests/units/dashboard/modules/keyInsights.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/keyInsights.test.js +40 -0
- package/dist/tests/units/dashboard/modules/keyInsights.test.js.map +1 -0
- package/dist/tests/units/dashboard/modules/statsCharts.test.js +160 -1
- package/dist/tests/units/dashboard/modules/statsCharts.test.js.map +1 -1
- package/dist/tests/units/entities/stats/projectStats.schema.test.d.ts +2 -0
- package/dist/tests/units/entities/stats/projectStats.schema.test.d.ts.map +1 -0
- package/dist/tests/units/entities/stats/projectStats.schema.test.js +50 -0
- package/dist/tests/units/entities/stats/projectStats.schema.test.js.map +1 -0
- package/dist/tests/units/entities/stats/reviewDuration.format.test.d.ts +2 -0
- package/dist/tests/units/entities/stats/reviewDuration.format.test.d.ts.map +1 -0
- package/dist/tests/units/entities/stats/reviewDuration.format.test.js +14 -0
- package/dist/tests/units/entities/stats/reviewDuration.format.test.js.map +1 -0
- package/dist/tests/units/entities/stats/reviewOutput.parser.test.d.ts +2 -0
- package/dist/tests/units/entities/stats/reviewOutput.parser.test.d.ts.map +1 -0
- package/dist/tests/units/entities/stats/reviewOutput.parser.test.js +136 -0
- package/dist/tests/units/entities/stats/reviewOutput.parser.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.js +101 -0
- package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.js.map +1 -1
- package/dist/tests/units/interface-adapters/presenters/statsSummary.presenter.test.d.ts +2 -0
- package/dist/tests/units/interface-adapters/presenters/statsSummary.presenter.test.d.ts.map +1 -0
- package/dist/tests/units/interface-adapters/presenters/statsSummary.presenter.test.js +99 -0
- package/dist/tests/units/interface-adapters/presenters/statsSummary.presenter.test.js.map +1 -0
- package/dist/tests/units/mcp/mcpServerStdioTools.test.d.ts +2 -0
- package/dist/tests/units/mcp/mcpServerStdioTools.test.d.ts.map +1 -0
- package/dist/tests/units/mcp/mcpServerStdioTools.test.js +21 -0
- package/dist/tests/units/mcp/mcpServerStdioTools.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.js +79 -0
- package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/entities/emberMemory.guard.test.js +22 -1
- package/dist/tests/units/modules/ember-chat/entities/emberMemory.guard.test.js.map +1 -1
- package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js +20 -2
- package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js.map +1 -1
- package/dist/tests/units/modules/ember-chat/gateways/emberMemory.fileSystem.gateway.test.js +33 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberMemory.fileSystem.gateway.test.js.map +1 -1
- package/dist/tests/units/modules/ember-chat/services/emberSystemPrompt.test.js +25 -14
- package/dist/tests/units/modules/ember-chat/services/emberSystemPrompt.test.js.map +1 -1
- package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.js +24 -0
- package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/bugCategory.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/bugCategory.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/bugCategory.test.js +35 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/bugCategory.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/categoryBreakdown.guard.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/categoryBreakdown.guard.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/categoryBreakdown.guard.test.js +93 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/categoryBreakdown.guard.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/keyInsights.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/keyInsights.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/keyInsights.test.js +156 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/keyInsights.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/monthlyVolume.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/monthlyVolume.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/monthlyVolume.test.js +43 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/monthlyVolume.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.js +13 -0
- package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.js.map +1 -1
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.test.js +49 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/analyticsHeader.presenter.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.test.js +71 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/bugsByCategory.presenter.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.test.js +59 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.test.js.map +1 -0
- package/dist/tests/units/usecases/stats/addReviewStats.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/stats/addReviewStats.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/stats/addReviewStats.usecase.test.js +251 -0
- package/dist/tests/units/usecases/stats/addReviewStats.usecase.test.js.map +1 -0
- package/dist/tests/units/usecases/stats/getProjectStats.usecase.test.d.ts +2 -0
- package/dist/tests/units/usecases/stats/getProjectStats.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/usecases/stats/getProjectStats.usecase.test.js +18 -0
- package/dist/tests/units/usecases/stats/getProjectStats.usecase.test.js.map +1 -0
- package/package.json +1 -1
- package/dist/modules/statistics-insights/interface-adapters/gateways/stats.gateway.d.ts +0 -2
- package/dist/modules/statistics-insights/interface-adapters/gateways/stats.gateway.d.ts.map +0 -1
- package/dist/modules/statistics-insights/interface-adapters/gateways/stats.gateway.js +0 -2
- package/dist/modules/statistics-insights/interface-adapters/gateways/stats.gateway.js.map +0 -1
- package/dist/modules/statistics-insights/services/statsService.d.ts +0 -57
- package/dist/modules/statistics-insights/services/statsService.d.ts.map +0 -1
- package/dist/modules/statistics-insights/services/statsService.js +0 -282
- package/dist/modules/statistics-insights/services/statsService.js.map +0 -1
- package/dist/tests/units/services/statsService.addReview.test.d.ts +0 -2
- package/dist/tests/units/services/statsService.addReview.test.d.ts.map +0 -1
- package/dist/tests/units/services/statsService.addReview.test.js +0 -103
- package/dist/tests/units/services/statsService.addReview.test.js.map +0 -1
- package/dist/tests/units/services/statsService.branches.test.d.ts +0 -2
- package/dist/tests/units/services/statsService.branches.test.d.ts.map +0 -1
- package/dist/tests/units/services/statsService.branches.test.js +0 -266
- package/dist/tests/units/services/statsService.branches.test.js.map +0 -1
- package/dist/tests/units/services/statsService.summary.test.d.ts +0 -2
- package/dist/tests/units/services/statsService.summary.test.d.ts.map +0 -1
- package/dist/tests/units/services/statsService.summary.test.js +0 -43
- package/dist/tests/units/services/statsService.summary.test.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,40 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.39.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.38.0...reviewflow-v3.39.0) (2026-06-20)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
* **analytics:** emit spec-203 bug categories from review skills ([37f8d8b](https://github.com/DGouron/review-flow/commit/37f8d8ba288c3131719e4fec795d501f25f2790d))
|
|
14
|
+
* **analytics:** emit spec-203 bug categories from review skills ([1c8c9fd](https://github.com/DGouron/review-flow/commit/1c8c9fdf5f7480ea349698b07f09cb7f7b7493dc))
|
|
15
|
+
* **analytics:** implement spec-203 bugs found by category ([b78cee4](https://github.com/DGouron/review-flow/commit/b78cee493da2a1de7015adfd913aca80f1c7a903))
|
|
16
|
+
* **analytics:** implement spec-203 bugs found by category ([8eb783b](https://github.com/DGouron/review-flow/commit/8eb783b57bf3e9558a94fa8c8197d419a202ccc4))
|
|
17
|
+
* **analytics:** implement spec-204 analytics overview header ([ae0d2c5](https://github.com/DGouron/review-flow/commit/ae0d2c5f5dcb46687300acc782a9fbe55532e32d))
|
|
18
|
+
* **analytics:** implement spec-204 analytics overview header ([48864da](https://github.com/DGouron/review-flow/commit/48864da6f158cccc488fdb69eaf4706602f3c36d))
|
|
19
|
+
* **analytics:** implement spec-205 key insight cards ([29b1917](https://github.com/DGouron/review-flow/commit/29b19176b7c816d0af328983513c389d831f241f))
|
|
20
|
+
* **analytics:** implement spec-205 key insight cards ([54b1ea0](https://github.com/DGouron/review-flow/commit/54b1ea07cf6c70058ca3e9e33f105bcf50dc6dc7))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
* **dashboard:** style key insight cards (spec-205) ([b2055f5](https://github.com/DGouron/review-flow/commit/b2055f55d00fa5a5a650290cecdbd5e20e8e9f83))
|
|
26
|
+
* **dashboard:** style key insight cards (spec-205) ([a6670b2](https://github.com/DGouron/review-flow/commit/a6670b2b534407ea11848f8237f3bf8c3c92d2ba))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
* **stats:** split statsService god object into layers (spec-80) ([7e2b73d](https://github.com/DGouron/review-flow/commit/7e2b73d70ddd9067d3582ac8f9f6105bcec5edea))
|
|
32
|
+
* **stats:** split statsService god object into layers (spec-80) ([07ec13d](https://github.com/DGouron/review-flow/commit/07ec13daab22bffadf40bee91a132ab566f07a7e))
|
|
33
|
+
|
|
34
|
+
## [3.38.0](https://github.com/DGouron/review-flow/compare/reviewflow-v3.37.1...reviewflow-v3.38.0) (2026-06-18)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
* **ember-chat:** implement spec-193 record recurring insight ([7e409b3](https://github.com/DGouron/review-flow/commit/7e409b3729311d797b140f4c0f393760e663d55c))
|
|
40
|
+
* **ember-chat:** implement spec-193 record recurring insight ([94192d8](https://github.com/DGouron/review-flow/commit/94192d8746761e20d6a17c2e9ca97eb0b5a91bbc))
|
|
41
|
+
|
|
8
42
|
## [3.37.1](https://github.com/DGouron/review-flow/compare/reviewflow-v3.37.0...reviewflow-v3.37.1) (2026-06-17)
|
|
9
43
|
|
|
10
44
|
|
|
@@ -423,7 +423,8 @@
|
|
|
423
423
|
import { renderVersionUpdateArea, setVersionCheckState } from './modules/versionUpdate.js';
|
|
424
424
|
import { renderCollapsibleList, toggleCollapsibleList } from './modules/collapsibleList.js';
|
|
425
425
|
import { renderMrSheetContent, drawScoreTimeline, drawIssuesBreakdown } from './modules/mrSheet.js';
|
|
426
|
-
import { drawScoreTrendChart, drawReviewActivityChart, drawScoreDistributionChart, animateCounter } from './modules/statsCharts.js';
|
|
426
|
+
import { drawScoreTrendChart, drawReviewActivityChart, drawScoreDistributionChart, drawBugsByCategoryChart, drawReviewsPerMonthChart, animateCounter } from './modules/statsCharts.js';
|
|
427
|
+
import { renderKeyInsightsHtml } from './modules/keyInsights.js';
|
|
427
428
|
import { renderTeamTab, fetchAndRenderTeamTab } from './modules/teamTab.js';
|
|
428
429
|
import { renderDeveloperSheetContent, drawRadarChart } from './modules/developerSheet.js';
|
|
429
430
|
import { buildInsightsReport } from './modules/insightsReport.js';
|
|
@@ -1097,8 +1098,38 @@
|
|
|
1097
1098
|
|
|
1098
1099
|
const numericScore = parseFloat(s.averageScore);
|
|
1099
1100
|
const isScoreNumeric = !isNaN(numericScore);
|
|
1101
|
+
const header = data.analyticsHeader;
|
|
1102
|
+
|
|
1103
|
+
const analyticsHeaderMarkup = header && header.isEmpty
|
|
1104
|
+
? `<div class="empty-state">${header.emptyMessage || t('stats.noReviews')}</div>`
|
|
1105
|
+
: header
|
|
1106
|
+
? `
|
|
1107
|
+
<div class="stats-kpi-row">
|
|
1108
|
+
<div class="stat-card metric-reviews">
|
|
1109
|
+
<div class="stat-value"><span class="stat-main" data-target="${header.prsReviewed.value}">0</span></div>
|
|
1110
|
+
<div class="stat-label"><i data-lucide="git-pull-request"></i> ${t(header.prsReviewed.labelKey)}</div>
|
|
1111
|
+
</div>
|
|
1112
|
+
<div class="stat-card warning metric-blocking">
|
|
1113
|
+
<div class="stat-value"><span class="stat-main" data-target="${header.bugsCaught.value}">0</span></div>
|
|
1114
|
+
<div class="stat-label"><i data-lucide="bug"></i> ${t(header.bugsCaught.labelKey)}</div>
|
|
1115
|
+
</div>
|
|
1116
|
+
<div class="stat-card metric-average-time">
|
|
1117
|
+
<div class="stat-value"><span class="stat-main">${header.averageReviewTime.value}</span></div>
|
|
1118
|
+
<div class="stat-label"><i data-lucide="clock"></i> ${t(header.averageReviewTime.labelKey)}</div>
|
|
1119
|
+
</div>
|
|
1120
|
+
</div>
|
|
1121
|
+
<div class="stats-charts-row">
|
|
1122
|
+
<div class="stats-chart-card full-width">
|
|
1123
|
+
<div class="stats-chart-title"><i data-lucide="calendar"></i> ${t('stats.reviewsPerMonth')}</div>
|
|
1124
|
+
<canvas id="stats-reviews-per-month" class="stats-canvas-wide"></canvas>
|
|
1125
|
+
</div>
|
|
1126
|
+
</div>`
|
|
1127
|
+
: '';
|
|
1128
|
+
|
|
1129
|
+
const keyInsightsMarkup = data.keyInsights ? renderKeyInsightsHtml(data.keyInsights) : '';
|
|
1100
1130
|
|
|
1101
1131
|
statsEl.innerHTML = `
|
|
1132
|
+
${analyticsHeaderMarkup}
|
|
1102
1133
|
<div class="stat-card metric-reviews">
|
|
1103
1134
|
<div class="stat-value"><span class="stat-main" data-target="${s.totalReviews}">0</span></div>
|
|
1104
1135
|
<div class="stat-label"><i data-lucide="file-search"></i> ${t('stats.reviews')}</div>
|
|
@@ -1145,6 +1176,13 @@
|
|
|
1145
1176
|
<canvas id="stats-distribution" class="stats-canvas-wide"></canvas>
|
|
1146
1177
|
</div>
|
|
1147
1178
|
</div>
|
|
1179
|
+
<div class="stats-charts-row">
|
|
1180
|
+
<div class="stats-chart-card full-width">
|
|
1181
|
+
<div class="stats-chart-title"><i data-lucide="bug"></i> ${t('stats.bugsByCategory')}</div>
|
|
1182
|
+
<canvas id="stats-bugs-category" class="stats-canvas-wide"></canvas>
|
|
1183
|
+
</div>
|
|
1184
|
+
</div>
|
|
1185
|
+
${keyInsightsMarkup}
|
|
1148
1186
|
`;
|
|
1149
1187
|
refreshIcons();
|
|
1150
1188
|
|
|
@@ -1166,6 +1204,12 @@
|
|
|
1166
1204
|
drawReviewActivityChart('stats-activity', reviews);
|
|
1167
1205
|
drawScoreDistributionChart('stats-distribution', reviews);
|
|
1168
1206
|
}
|
|
1207
|
+
if (data.bugsByCategory) {
|
|
1208
|
+
drawBugsByCategoryChart('stats-bugs-category', data.bugsByCategory);
|
|
1209
|
+
}
|
|
1210
|
+
if (data.analyticsHeader && !data.analyticsHeader.isEmpty) {
|
|
1211
|
+
drawReviewsPerMonthChart('stats-reviews-per-month', data.analyticsHeader.reviewsPerMonth);
|
|
1212
|
+
}
|
|
1169
1213
|
});
|
|
1170
1214
|
} else {
|
|
1171
1215
|
statsEl.innerHTML = `<div class="empty-state">${t('empty.statsNoData')}</div>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/i18n.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/i18n.js"],"names":[],"mappings":"AA26BA,6BAA6B;AAC7B,+BADc,IAAI,GAAG,IAAI,CAGxB;AAED,oCAAoC;AACpC,sCADY,IAAI,GAAG,IAAI,QAGtB;AAED;;;;GAIG;AACH,uBAJW,MAAM,WACN,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAC7B,MAAM,CAUlB"}
|
|
@@ -214,6 +214,21 @@ const translations = {
|
|
|
214
214
|
'stats.reviewActivity': 'Review Activity',
|
|
215
215
|
'stats.scoreDistribution': 'Score Distribution',
|
|
216
216
|
'stats.noChartData': 'Not enough data',
|
|
217
|
+
'stats.bugsByCategory': 'Bugs Found by Category',
|
|
218
|
+
'stats.noCategoryData': 'No category data available',
|
|
219
|
+
'stats.kpi.prsReviewed': 'PRs Reviewed',
|
|
220
|
+
'stats.kpi.bugsCaught': 'Bugs Caught',
|
|
221
|
+
'stats.kpi.averageReviewTime': 'Average Review Time',
|
|
222
|
+
'stats.reviewsPerMonth': 'Reviews per Month',
|
|
223
|
+
'stats.keyInsights': 'Key Insights',
|
|
224
|
+
'stats.noKeyInsights': 'Aucun insight disponible pour le moment',
|
|
225
|
+
'stats.noReviews': 'Aucune review enregistrée',
|
|
226
|
+
'stats.category.security': 'Security',
|
|
227
|
+
'stats.category.logic': 'Logic',
|
|
228
|
+
'stats.category.performance': 'Performance',
|
|
229
|
+
'stats.category.typeSafety': 'Type Safety',
|
|
230
|
+
'stats.category.style': 'Style',
|
|
231
|
+
'stats.category.dependencies': 'Dependencies',
|
|
217
232
|
'error.recalculateStats': 'Recalculation error',
|
|
218
233
|
|
|
219
234
|
// Review types
|
|
@@ -663,6 +678,21 @@ const translations = {
|
|
|
663
678
|
'stats.reviewActivity': 'Activité des reviews',
|
|
664
679
|
'stats.scoreDistribution': 'Distribution des scores',
|
|
665
680
|
'stats.noChartData': 'Pas assez de données',
|
|
681
|
+
'stats.bugsByCategory': 'Bugs trouvés par catégorie',
|
|
682
|
+
'stats.noCategoryData': 'Aucune donnée de catégorie disponible',
|
|
683
|
+
'stats.kpi.prsReviewed': 'PR examinées',
|
|
684
|
+
'stats.kpi.bugsCaught': 'Bugs détectés',
|
|
685
|
+
'stats.kpi.averageReviewTime': 'Durée moyenne de review',
|
|
686
|
+
'stats.reviewsPerMonth': 'Reviews par mois',
|
|
687
|
+
'stats.keyInsights': 'Insights clés',
|
|
688
|
+
'stats.noKeyInsights': 'Aucun insight disponible pour le moment',
|
|
689
|
+
'stats.noReviews': 'Aucune review enregistrée',
|
|
690
|
+
'stats.category.security': 'Sécurité',
|
|
691
|
+
'stats.category.logic': 'Logique',
|
|
692
|
+
'stats.category.performance': 'Performance',
|
|
693
|
+
'stats.category.typeSafety': 'Typage',
|
|
694
|
+
'stats.category.style': 'Style',
|
|
695
|
+
'stats.category.dependencies': 'Dépendances',
|
|
666
696
|
'error.recalculateStats': 'Erreur de recalcul',
|
|
667
697
|
|
|
668
698
|
// Review types
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/dashboard/modules/i18n.js"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,IAAI,eAAe,GAAG,IAAI,CAAC;AAE3B,MAAM,YAAY,GAAG;IACnB,EAAE,EAAE;QACF,OAAO;QACP,cAAc,EAAE,UAAU;QAC1B,iBAAiB,EAAE,qBAAqB;QACxC,eAAe,EAAE,gBAAgB;QAEjC,SAAS;QACT,oBAAoB,EAAE,cAAc;QACpC,sBAAsB,EAAE,gBAAgB;QACxC,oBAAoB,EAAE,cAAc;QACpC,kBAAkB,EAAE,YAAY;QAChC,iBAAiB,EAAE,WAAW;QAE9B,SAAS;QACT,oBAAoB,EAAE,cAAc;QACpC,aAAa,EAAE,MAAM;QACrB,iBAAiB,EAAE,WAAW;QAE9B,QAAQ;QACR,cAAc,EAAE,SAAS;QACzB,aAAa,EAAE,QAAQ;QACvB,gBAAgB,EAAE,WAAW;QAC7B,gBAAgB,EAAE,YAAY;QAC9B,YAAY,EAAE,OAAO;QACrB,kBAAkB,EAAE,SAAS;QAC7B,eAAe,EAAE,UAAU;QAC3B,aAAa,EAAE,SAAS;QACxB,gBAAgB,EAAE,YAAY;QAC9B,gBAAgB,EAAE,YAAY;QAE9B,cAAc;QACd,WAAW,EAAE,eAAe;QAC5B,eAAe,EAAE,mCAAmC;QACpD,YAAY,EAAE,SAAS;QACvB,gBAAgB,EAAE,uCAAuC;QACzD,eAAe,EAAE,mBAAmB;QACpC,mBAAmB,EAAE,6BAA6B;QAClD,mBAAmB,EAAE,cAAc;QACnC,oBAAoB,EAAE,eAAe;QAErC,gBAAgB;QAChB,gBAAgB,EAAE,iBAAiB;QACnC,cAAc,EAAE,qCAAqC;QACrD,YAAY,EAAE,kBAAkB;QAEhC,gBAAgB;QAChB,gBAAgB,EAAE,eAAe;QACjC,gBAAgB,EAAE,sBAAsB;QACxC,sBAAsB,EAAE,cAAc;QACtC,iBAAiB,EAAE,iBAAiB;QACpC,kBAAkB,EAAE,WAAW;QAC/B,qBAAqB,EAAE,oBAAoB;QAC3C,wBAAwB,EAAE,iBAAiB;QAC3C,kBAAkB,EAAE,UAAU;QAC9B,iBAAiB,EAAE,qBAAqB;QACxC,mBAAmB,EAAE,oBAAoB;QACzC,mBAAmB,EAAE,QAAQ;QAC7B,sBAAsB,EAAE,cAAc;QAEtC,yCAAyC;QACzC,sBAAsB,EAAE,kCAAkC;QAC1D,wBAAwB,EAAE,qCAAqC;QAC/D,wBAAwB,EAAE,oCAAoC;QAC9D,0BAA0B,EAAE,uCAAuC;QACnE,qBAAqB,EAAE,iCAAiC;QACxD,0BAA0B,EAAE,uCAAuC;QACnE,kCAAkC,EAAE,qDAAqD;QACzF,qBAAqB,EAAE,kBAAkB;QACzC,+DAA+D;QAC/D,4BAA4B,EAAE,QAAQ;QACtC,8BAA8B,EAAE,WAAW;QAC3C,8BAA8B,EAAE,aAAa;QAC7C,gCAAgC,EAAE,gBAAgB;QAClD,2BAA2B,EAAE,eAAe;QAC5C,wCAAwC,EAAE,uBAAuB;QAEjE,UAAU;QACV,cAAc,EAAE,2BAA2B;QAC3C,iBAAiB,EAAE,YAAY;QAC/B,gBAAgB,EAAE,2BAA2B;QAC7C,qBAAqB,EAAE,yBAAyB;QAChD,eAAe,EAAE,0BAA0B;QAC3C,oBAAoB,EAAE,2BAA2B;QAEjD,kBAAkB;QAClB,iBAAiB,EAAE,SAAS;QAC5B,qBAAqB,EAAE,qBAAqB;QAC5C,iBAAiB,EAAE,SAAS;QAC5B,iBAAiB,EAAE,SAAS;QAC5B,4BAA4B,EAAE,qBAAqB;QACnD,mBAAmB,EAAE,kBAAkB;QACvC,yBAAyB,EAAE,UAAU;QACrC,qBAAqB,EAAE,MAAM;QAC7B,wBAAwB,EAAE,SAAS;QACnC,6BAA6B,EAAE,QAAQ;QACvC,4BAA4B,EAAE,MAAM;QAEpC,gBAAgB;QAChB,YAAY,EAAE,iBAAiB;QAC/B,cAAc,EAAE,eAAe;QAE/B,uBAAuB;QACvB,sBAAsB,EAAE,WAAW;QACnC,sBAAsB,EAAE,qBAAqB;QAE7C,SAAS;QACT,mBAAmB,EAAE,eAAe;QACpC,iBAAiB,EAAE,aAAa;QAChC,gBAAgB,EAAE,YAAY;QAC9B,oBAAoB,EAAE,mBAAmB;QACzC,oBAAoB,EAAE,aAAa;QACnC,kBAAkB,EAAE,SAAS;QAE7B,aAAa;QACb,sBAAsB,EAAE,qBAAqB;QAC7C,qBAAqB,EAAE,qBAAqB;QAC5C,mBAAmB,EAAE,QAAQ;QAC7B,0BAA0B,EAAE,kBAAkB;QAC9C,oBAAoB,EAAE,SAAS;QAC/B,yBAAyB,EAAE,cAAc;QACzC,oBAAoB,EAAE,cAAc;QAEpC,iBAAiB;QACjB,2BAA2B,EAAE,wBAAwB;QACrD,0BAA0B,EAAE,wBAAwB;QACpD,cAAc,EAAE,MAAM;QACtB,uBAAuB,EAAE,kBAAkB;QAC3C,iBAAiB,EAAE,iBAAiB;QACpC,2BAA2B,EAAE,qBAAqB;QAElD,eAAe;QACf,oBAAoB,EAAE,6BAA6B;QACnD,0BAA0B,EAAE,iCAAiC;QAC7D,qBAAqB,EAAE,wBAAwB;QAC/C,iBAAiB,EAAE,uBAAuB;QAC1C,oBAAoB,EAAE,8BAA8B;QACpD,oBAAoB,EAAE,8BAA8B;QAEpD,qBAAqB;QACrB,sBAAsB,EAAE,sCAAsC;QAC9D,wBAAwB,EAAE,wCAAwC;QAClE,mBAAmB,EAAE,mCAAmC;QACxD,cAAc,EAAE,wBAAwB;QACxC,0BAA0B,EAAE,gCAAgC;QAC5D,qBAAqB,EAAE,uBAAuB;QAC9C,sBAAsB,EAAE,+BAA+B;QAEvD,WAAW;QACX,cAAc,EAAE,aAAa;QAC7B,eAAe,EAAE,oBAAoB;QACrC,wBAAwB,EAAE,iBAAiB;QAC3C,uBAAuB,EAAE,gBAAgB;QACzC,yBAAyB,EAAE,kBAAkB;QAC7C,oBAAoB,EAAE,aAAa;QACnC,yBAAyB,EAAE,kBAAkB;QAC7C,oBAAoB,EAAE,gBAAgB;QACtC,0BAA0B,EAAE,mBAAmB;QAC/C,yBAAyB,EAAE,kBAAkB;QAC7C,sBAAsB,EAAE,gBAAgB;QACxC,yBAAyB,EAAE,mBAAmB;QAE9C,cAAc;QACd,eAAe,EAAE,YAAY;QAC7B,oBAAoB,EAAE,aAAa;QACnC,0BAA0B,EAAE,oBAAoB;QAChD,oBAAoB,EAAE,uBAAuB;QAC7C,yBAAyB,EAAE,yBAAyB;QACpD,+BAA+B,EAAE,wBAAwB;QAEzD,eAAe;QACf,YAAY,EAAE,SAAS;QACvB,aAAa,EAAE,6BAA6B;QAC5C,mBAAmB,EAAE,yBAAyB;QAC9C,uBAAuB,EAAE,0BAA0B;QACnD,kBAAkB,EAAE,mBAAmB;QACvC,uBAAuB,EAAE,wBAAwB;QACjD,mBAAmB,EAAE,iBAAiB;QACtC,qBAAqB,EAAE,aAAa;QACpC,gCAAgC,EAAE,yBAAyB;QAC3D,uBAAuB,EAAE,eAAe;QACxC,sBAAsB,EAAE,cAAc;QACtC,8BAA8B,EAAE,uBAAuB;QACvD,uBAAuB,EAAE,uBAAuB;QAChD,kCAAkC,EAAE,gCAAgC;QACpE,2BAA2B,EAAE,0BAA0B;QACvD,sCAAsC,EAAE,QAAQ;QAChD,+BAA+B,EAC7B,qFAAqF;QACvF,+BAA+B,EAAE,+BAA+B;QAChE,mCAAmC,EACjC,sHAAsH;QACxH,iBAAiB,EAAE,QAAQ;QAC3B,eAAe,EAAE,MAAM;QACvB,wBAAwB,EAAE,+BAA+B;QACzD,sBAAsB,EAAE,6BAA6B;QACrD,2BAA2B,EAAE,uBAAuB;QAEpD,eAAe;QACf,eAAe,EAAE,SAAS;QAC1B,oBAAoB,EAAE,eAAe;QACrC,iBAAiB,EAAE,YAAY;QAC/B,mBAAmB,EAAE,cAAc;QACnC,gBAAgB,EAAE,UAAU;QAC5B,gBAAgB,EAAE,WAAW;QAC7B,mBAAmB,EAAE,aAAa;QAClC,wBAAwB,EAAE,iCAAiC;QAC3D,wBAAwB,EAAE,wBAAwB;QAClD,sBAAsB,EAAE,mBAAmB;QAC3C,kBAAkB,EAAE,aAAa;QACjC,sBAAsB,EAAE,iBAAiB;QACzC,yBAAyB,EAAE,oBAAoB;QAC/C,mBAAmB,EAAE,iBAAiB;QACtC,wBAAwB,EAAE,qBAAqB;QAE/C,eAAe;QACf,oBAAoB,EAAE,QAAQ;QAC9B,sBAAsB,EAAE,WAAW;QACnC,oBAAoB,EAAE,aAAa;QACnC,uBAAuB,EAAE,oBAAoB;QAC7C,sBAAsB,EAAE,kBAAkB;QAC1C,yBAAyB,EAAE,kBAAkB;QAC7C,sBAAsB,EAAE,eAAe;QAEvC,UAAU;QACV,eAAe,EAAE,QAAQ;QACzB,aAAa,EAAE,MAAM;QACrB,iBAAiB,EAAE,eAAe;QAClC,qBAAqB,EAAE,gBAAgB;QACvC,eAAe,EAAE,QAAQ;QACzB,oBAAoB,EAAE,qBAAqB;QAC3C,qBAAqB,EAAE,gBAAgB;QAEvC,aAAa;QACb,iBAAiB,EAAE,gBAAgB;QACnC,qBAAqB,EAAE,UAAU;QACjC,uBAAuB,EAAE,0BAA0B;QACnD,0BAA0B,EAAE,6CAA6C;QACzE,2BAA2B,EAAE,iCAAiC;QAC9D,kBAAkB,EAAE,SAAS;QAC7B,kBAAkB,EAAE,SAAS;QAC7B,mBAAmB,EAAE,UAAU;QAC/B,sBAAsB,EAAE,cAAc;QACtC,mBAAmB,EAAE,sBAAsB;QAC3C,oBAAoB,EAAE,oBAAoB;QAE1C,OAAO;QACP,iBAAiB,EAAE,kBAAkB;QACrC,YAAY,EAAE,YAAY;QAE1B,QAAQ;QACR,oBAAoB,EAAE,0DAA0D;QAChF,sBAAsB,EAAE,sEAAsE;QAC9F,YAAY,EAAE,SAAS;QACvB,eAAe,EAAE,SAAS;QAC1B,wBAAwB,EAAE,uCAAuC;QACjE,0BAA0B,EACxB,mFAAmF;QACrF,uBAAuB,EAAE,SAAS;QAClC,0BAA0B,EAAE,gBAAgB;QAE5C,kBAAkB;QAClB,sBAAsB,EAAE,sBAAsB;QAC9C,uBAAuB,EAAE,kCAAkC;QAC3D,mBAAmB,EAAE,kCAAkC;QAEvD,UAAU;QACV,yBAAyB,EAAE,kBAAkB;QAC7C,gCAAgC,EAAE,kCAAkC;QACpE,wBAAwB,EAAE,qBAAqB;QAE/C,SAAS;QACT,eAAe,EAAE,eAAe;QAChC,oBAAoB,EAAE,qBAAqB;QAC3C,qBAAqB,EAAE,eAAe;QACtC,mBAAmB,EAAE,aAAa;QAClC,oBAAoB,EAAE,uBAAuB;QAC7C,uBAAuB,EAAE,2BAA2B;QACpD,0BAA0B,EAAE,+BAA+B;QAC3D,iBAAiB,EAAE,iBAAiB;QACpC,mBAAmB,EAAE,uBAAuB;QAC5C,oBAAoB,EAAE,yBAAyB;QAC/C,oBAAoB,EAAE,yBAAyB;QAC/C,yBAAyB,EAAE,wBAAwB;QACnD,wBAAwB,EAAE,sBAAsB;QAEhD,oBAAoB;QACpB,sBAAsB,EAAE,wBAAwB;QAChD,sBAAsB,EAAE,WAAW;QAEnC,WAAW;QACX,qBAAqB,EAAE,gBAAgB;QACvC,uBAAuB,EAAE,kBAAkB;QAC3C,qBAAqB,EAAE,gBAAgB;QACvC,eAAe,EAAE,SAAS;QAC1B,oBAAoB,EAAE,eAAe;QACrC,mBAAmB,EAAE,cAAc;QACnC,sBAAsB,EAAE,iBAAiB;QACzC,mBAAmB,EAAE,cAAc;QACnC,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,MAAM;QACpB,YAAY,EAAE,MAAM;QACpB,aAAa,EAAE,OAAO;QACtB,gBAAgB,EAAE,UAAU;QAC5B,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,uBAAuB;QACvC,eAAe,EAAE,SAAS;QAC1B,eAAe,EAAE,SAAS;QAC1B,iBAAiB,EAAE,WAAW;QAC9B,iBAAiB,EAAE,WAAW;QAE9B,gBAAgB;QAChB,eAAe,EAAE,KAAK;QACtB,mBAAmB,EAAE,qBAAqB;QAE1C,WAAW;QACX,YAAY,EAAE,MAAM;QACpB,eAAe,EAAE,eAAe;QAChC,gBAAgB,EAAE,WAAW;QAC7B,iBAAiB,EAAE,kBAAkB;QACrC,WAAW,EAAE,MAAM;QACnB,aAAa,EACX,kFAAkF;QACpF,uBAAuB,EAAE,qDAAqD;QAC9E,oBAAoB,EAAE,2CAA2C;QACjE,cAAc,EAAE,0BAA0B;QAC1C,mBAAmB,EAAE,OAAO;QAC5B,cAAc,EAAE,mBAAmB;QACnC,6BAA6B,EAAE,sBAAsB;QACrD,0BAA0B,EAAE,wBAAwB;QACpD,2BAA2B,EAAE,oBAAoB;QAEjD,aAAa;QACb,kBAAkB,EAAE,SAAS;QAC7B,yBAAyB,EAAE,gBAAgB;QAC3C,qBAAqB,EAAE,aAAa;QACpC,oBAAoB,EAAE,WAAW;QAEjC,eAAe;QACf,iBAAiB,EAAE,eAAe;QAClC,mBAAmB,EAAE,iBAAiB;QACtC,iBAAiB,EAAE,eAAe;QAClC,gBAAgB,EAAE,cAAc;QAChC,kBAAkB,EAAE,gBAAgB;QACpC,kBAAkB,EAAE,iBAAiB;QAErC,SAAS;QACT,iBAAiB,EAAE,WAAW;QAC9B,iBAAiB,EAAE,WAAW;QAC9B,cAAc,EAAE,QAAQ;QAExB,kBAAkB;QAClB,oBAAoB,EAAE,WAAW;QACjC,qBAAqB,EAAE,kBAAkB;QACzC,sBAAsB,EAAE,cAAc;QACtC,wBAAwB,EAAE,0BAA0B;QACpD,qBAAqB,EAAE,aAAa;QACpC,sBAAsB,EAAE,4BAA4B;QACpD,kBAAkB,EAAE,aAAa;QACjC,+BAA+B,EAAE,eAAe;QAChD,oCAAoC,EAAE,qBAAqB;QAC3D,oCAAoC,EAAE,qBAAqB;QAC3D,mCAAmC,EAAE,eAAe;QACpD,mCAAmC,EAAE,eAAe;QACpD,mCAAmC,EAAE,oBAAoB;QAEzD,uBAAuB;QACvB,2BAA2B,EAAE,8DAA8D;QAC3F,0BAA0B,EAAE,8DAA8D;QAC1F,6BAA6B,EAAE,yDAAyD;QACxF,8BAA8B,EAC5B,mEAAmE;QACrE,6BAA6B,EAC3B,uEAAuE;QACzE,6BAA6B,EAAE,+DAA+D;QAC9F,yBAAyB,EAAE,+CAA+C;QAC1E,wBAAwB,EAAE,+CAA+C;QACzE,wBAAwB,EAAE,mEAAmE;QAC7F,wBAAwB,EACtB,wEAAwE;QAC1E,2BAA2B,EAAE,4CAA4C;QACzE,kCAAkC,EAAE,0DAA0D;QAC9F,8BAA8B,EAAE,qDAAqD;QACrF,6BAA6B,EAC3B,oEAAoE;QAEtE,cAAc;QACd,aAAa,EAAE,sBAAsB;QACrC,YAAY,EAAE,qBAAqB;QACnC,eAAe,EAAE,eAAe;QAChC,kBAAkB,EAAE,2BAA2B;QAC/C,qBAAqB,EAAE,uBAAuB;QAC9C,YAAY,EAAE,aAAa;QAC3B,eAAe,EAAE,4CAA4C;QAC7D,iBAAiB,EAAE,eAAe;QAClC,cAAc,EAAE,WAAW;QAC3B,eAAe,EAAE,kBAAkB;QACnC,oBAAoB,EAAE,iBAAiB;QACvC,aAAa,EAAE,eAAe;QAC9B,YAAY,EAAE,SAAS;QACvB,UAAU,EAAE,2BAA2B;QACvC,qBAAqB,EAAE,gBAAgB;QAEvC,aAAa;QACb,YAAY,EAAE,YAAY;QAC1B,cAAc,EAAE,sBAAsB;QACtC,oBAAoB,EAAE,uBAAuB;QAC7C,oBAAoB,EAAE,yBAAyB;QAC/C,oBAAoB,EAAE,eAAe;QACrC,yBAAyB,EAAE,oBAAoB;QAC/C,gBAAgB,EAAE,aAAa;QAC/B,iBAAiB,EAAE,WAAW;QAC9B,oBAAoB,EAAE,cAAc;QACpC,sBAAsB,EAAE,oBAAoB;QAC5C,oBAAoB,EAAE,cAAc;QACpC,qBAAqB,EAAE,eAAe;QAEtC,iBAAiB;QACjB,yBAAyB,EAAE,wBAAwB;QACnD,kBAAkB,EAAE,aAAa;QACjC,kBAAkB,EAAE,aAAa;QACjC,kBAAkB,EAAE,YAAY;QAChC,sBAAsB,EAAE,eAAe;QACvC,oBAAoB,EAAE,sBAAsB;QAC5C,sBAAsB,EAAE,mBAAmB;QAC3C,0BAA0B,EAAE,+CAA+C;QAC3E,qBAAqB,EAAE,cAAc;QACrC,uBAAuB,EAAE,iBAAiB;QAC1C,+BAA+B,EAC7B,kEAAkE;QACpE,8BAA8B,EAC5B,+EAA+E;QAEjF,4BAA4B;QAC5B,wBAAwB,EAAE,eAAe;QACzC,sBAAsB,EAAE,YAAY;QACpC,yBAAyB,EACvB,sEAAsE;QACxE,0BAA0B,EAAE,WAAW;QACvC,0BAA0B,EAAE,WAAW;QACvC,wBAAwB,EAAE,QAAQ;QAClC,sBAAsB,EAAE,MAAM;QAC9B,uBAAuB,EAAE,OAAO;QAChC,0BAA0B,EAAE,YAAY;QACxC,0BAA0B,EAAE,OAAO;QACnC,0BAA0B,EAAE,YAAY;QACxC,yBAAyB,EAAE,6BAA6B;QACxD,sBAAsB,EAAE,eAAe;KACxC;IACD,EAAE,EAAE;QACF,OAAO;QACP,cAAc,EAAE,aAAa;QAC7B,iBAAiB,EAAE,wBAAwB;QAC3C,eAAe,EAAE,mBAAmB;QAEpC,SAAS;QACT,oBAAoB,EAAE,gBAAgB;QACtC,sBAAsB,EAAE,iBAAiB;QACzC,oBAAoB,EAAE,UAAU;QAChC,kBAAkB,EAAE,aAAa;QACjC,iBAAiB,EAAE,SAAS;QAE5B,SAAS;QACT,oBAAoB,EAAE,iBAAiB;QACvC,aAAa,EAAE,MAAM;QACrB,iBAAiB,EAAE,cAAc;QAEjC,QAAQ;QACR,cAAc,EAAE,UAAU;QAC1B,aAAa,EAAE,YAAY;QAC3B,gBAAgB,EAAE,WAAW;QAC7B,gBAAgB,EAAE,YAAY;QAC9B,YAAY,EAAE,QAAQ;QACtB,kBAAkB,EAAE,eAAe;QACnC,eAAe,EAAE,QAAQ;QACzB,aAAa,EAAE,SAAS;QACxB,gBAAgB,EAAE,YAAY;QAC9B,gBAAgB,EAAE,YAAY;QAE9B,cAAc;QACd,WAAW,EAAE,WAAW;QACxB,eAAe,EAAE,+CAA+C;QAChE,YAAY,EAAE,SAAS;QACvB,gBAAgB,EAAE,+CAA+C;QACjE,eAAe,EAAE,mBAAmB;QACpC,mBAAmB,EAAE,6BAA6B;QAClD,mBAAmB,EAAE,cAAc;QACnC,oBAAoB,EAAE,eAAe;QAErC,gBAAgB;QAChB,gBAAgB,EAAE,oBAAoB;QACtC,cAAc,EAAE,wCAAwC;QACxD,YAAY,EAAE,wBAAwB;QAEtC,gBAAgB;QAChB,gBAAgB,EAAE,eAAe;QACjC,gBAAgB,EAAE,qBAAqB;QACvC,sBAAsB,EAAE,oBAAoB;QAC5C,iBAAiB,EAAE,kBAAkB;QACrC,kBAAkB,EAAE,kBAAkB;QACtC,qBAAqB,EAAE,wBAAwB;QAC/C,wBAAwB,EAAE,iBAAiB;QAC3C,kBAAkB,EAAE,aAAa;QACjC,iBAAiB,EAAE,2BAA2B;QAC9C,mBAAmB,EAAE,qBAAqB;QAC1C,mBAAmB,EAAE,QAAQ;QAC7B,sBAAsB,EAAE,iBAAiB;QAEzC,yCAAyC;QACzC,sBAAsB,EAAE,oCAAoC;QAC5D,wBAAwB,EAAE,sCAAsC;QAChE,wBAAwB,EAAE,oCAAoC;QAC9D,0BAA0B,EAAE,sCAAsC;QAClE,qBAAqB,EAAE,oCAAoC;QAC3D,0BAA0B,EAAE,sCAAsC;QAClE,kCAAkC,EAChC,4DAA4D;QAC9D,qBAAqB,EAAE,mBAAmB;QAC1C,+DAA+D;QAC/D,4BAA4B,EAAE,QAAQ;QACtC,8BAA8B,EAAE,WAAW;QAC3C,8BAA8B,EAAE,iBAAiB;QACjD,gCAAgC,EAAE,mBAAmB;QACrD,2BAA2B,EAAE,gBAAgB;QAC7C,wCAAwC,EAAE,YAAY;QAEtD,UAAU;QACV,cAAc,EAAE,6CAA6C;QAC7D,iBAAiB,EAAE,eAAe;QAClC,gBAAgB,EAAE,yCAAyC;QAC3D,qBAAqB,EAAE,sCAAsC;QAC7D,eAAe,EAAE,uCAAuC;QACxD,oBAAoB,EAAE,iCAAiC;QAEvD,kBAAkB;QAClB,iBAAiB,EAAE,SAAS;QAC5B,qBAAqB,EAAE,mBAAmB;QAC1C,iBAAiB,EAAE,SAAS;QAC5B,iBAAiB,EAAE,YAAY;QAC/B,4BAA4B,EAAE,0BAA0B;QACxD,mBAAmB,EAAE,oBAAoB;QACzC,yBAAyB,EAAE,UAAU;QACrC,qBAAqB,EAAE,QAAQ;QAC/B,wBAAwB,EAAE,WAAW;QACrC,6BAA6B,EAAE,SAAS;QACxC,4BAA4B,EAAE,cAAc;QAE5C,gBAAgB;QAChB,YAAY,EAAE,iBAAiB;QAC/B,cAAc,EAAE,iBAAiB;QAEjC,uBAAuB;QACvB,sBAAsB,EAAE,cAAc;QACtC,sBAAsB,EAAE,0BAA0B;QAElD,SAAS;QACT,mBAAmB,EAAE,cAAc;QACnC,iBAAiB,EAAE,iBAAiB;QACpC,gBAAgB,EAAE,eAAe;QACjC,oBAAoB,EAAE,sBAAsB;QAC5C,oBAAoB,EAAE,cAAc;QACpC,kBAAkB,EAAE,YAAY;QAEhC,aAAa;QACb,sBAAsB,EAAE,sBAAsB;QAC9C,qBAAqB,EAAE,qBAAqB;QAC5C,mBAAmB,EAAE,UAAU;QAC/B,0BAA0B,EAAE,oBAAoB;QAChD,oBAAoB,EAAE,YAAY;QAClC,yBAAyB,EAAE,YAAY;QACvC,oBAAoB,EAAE,cAAc;QAEpC,iBAAiB;QACjB,2BAA2B,EAAE,8BAA8B;QAC3D,0BAA0B,EAAE,gCAAgC;QAC5D,cAAc,EAAE,SAAS;QACzB,uBAAuB,EAAE,qBAAqB;QAC9C,iBAAiB,EAAE,eAAe;QAClC,2BAA2B,EAAE,0BAA0B;QAEvD,eAAe;QACf,oBAAoB,EAAE,8BAA8B;QACpD,0BAA0B,EAAE,4CAA4C;QACxE,qBAAqB,EAAE,4BAA4B;QACnD,iBAAiB,EAAE,qBAAqB;QACxC,oBAAoB,EAAE,4BAA4B;QAClD,oBAAoB,EAAE,4BAA4B;QAElD,qBAAqB;QACrB,sBAAsB,EAAE,wCAAwC;QAChE,wBAAwB,EAAE,yCAAyC;QACnE,mBAAmB,EAAE,mCAAmC;QACxD,cAAc,EAAE,4BAA4B;QAC5C,0BAA0B,EAAE,gCAAgC;QAC5D,qBAAqB,EAAE,uBAAuB;QAC9C,sBAAsB,EAAE,+BAA+B;QAEvD,WAAW;QACX,cAAc,EAAE,cAAc;QAC9B,eAAe,EAAE,wBAAwB;QACzC,wBAAwB,EAAE,oBAAoB;QAC9C,uBAAuB,EAAE,iBAAiB;QAC1C,yBAAyB,EAAE,kBAAkB;QAC7C,oBAAoB,EAAE,yBAAyB;QAC/C,yBAAyB,EAAE,0BAA0B;QACrD,oBAAoB,EAAE,UAAU;QAChC,0BAA0B,EAAE,mBAAmB;QAC/C,yBAAyB,EAAE,iBAAiB;QAC5C,sBAAsB,EAAE,wBAAwB;QAChD,yBAAyB,EAAE,mBAAmB;QAE9C,cAAc;QACd,eAAe,EAAE,sBAAsB;QACvC,oBAAoB,EAAE,sBAAsB;QAC5C,0BAA0B,EAAE,yBAAyB;QACrD,oBAAoB,EAAE,2BAA2B;QACjD,yBAAyB,EAAE,oCAAoC;QAC/D,+BAA+B,EAAE,6BAA6B;QAE9D,eAAe;QACf,YAAY,EAAE,WAAW;QACzB,aAAa,EAAE,uCAAuC;QACtD,mBAAmB,EAAE,+BAA+B;QACpD,uBAAuB,EAAE,0BAA0B;QACnD,kBAAkB,EAAE,mCAAmC;QACvD,uBAAuB,EAAE,oCAAoC;QAC7D,mBAAmB,EAAE,yBAAyB;QAC9C,qBAAqB,EAAE,uBAAuB;QAC9C,gCAAgC,EAAE,2BAA2B;QAC7D,uBAAuB,EAAE,mBAAmB;QAC5C,sBAAsB,EAAE,iBAAiB;QACzC,8BAA8B,EAAE,0BAA0B;QAC1D,uBAAuB,EAAE,sBAAsB;QAC/C,kCAAkC,EAAE,+BAA+B;QACnE,2BAA2B,EAAE,yBAAyB;QACtD,sCAAsC,EAAE,OAAO;QAC/C,+BAA+B,EAC7B,0FAA0F;QAC5F,+BAA+B,EAAE,iCAAiC;QAClE,mCAAmC,EACjC,sIAAsI;QACxI,iBAAiB,EAAE,SAAS;QAC5B,eAAe,EAAE,aAAa;QAC9B,wBAAwB,EAAE,yCAAyC;QACnE,sBAAsB,EAAE,uCAAuC;QAC/D,2BAA2B,EAAE,wBAAwB;QAErD,eAAe;QACf,eAAe,EAAE,SAAS;QAC1B,oBAAoB,EAAE,aAAa;QACnC,iBAAiB,EAAE,aAAa;QAChC,mBAAmB,EAAE,eAAe;QACpC,gBAAgB,EAAE,WAAW;QAC7B,gBAAgB,EAAE,YAAY;QAC9B,mBAAmB,EAAE,YAAY;QACjC,wBAAwB,EAAE,iCAAiC;QAC3D,wBAAwB,EAAE,kBAAkB;QAC5C,sBAAsB,EAAE,oBAAoB;QAC5C,kBAAkB,EAAE,mBAAmB;QACvC,sBAAsB,EAAE,sBAAsB;QAC9C,yBAAyB,EAAE,yBAAyB;QACpD,mBAAmB,EAAE,sBAAsB;QAC3C,wBAAwB,EAAE,oBAAoB;QAE9C,eAAe;QACf,oBAAoB,EAAE,QAAQ;QAC9B,sBAAsB,EAAE,WAAW;QACnC,oBAAoB,EAAE,aAAa;QACnC,uBAAuB,EAAE,iBAAiB;QAC1C,sBAAsB,EAAE,yBAAyB;QACjD,yBAAyB,EAAE,iBAAiB;QAC5C,sBAAsB,EAAE,gBAAgB;QAExC,UAAU;QACV,eAAe,EAAE,SAAS;QAC1B,aAAa,EAAE,QAAQ;QACvB,iBAAiB,EAAE,qBAAqB;QACxC,qBAAqB,EAAE,gBAAgB;QACvC,eAAe,EAAE,WAAW;QAC5B,oBAAoB,EAAE,iCAAiC;QACvD,qBAAqB,EAAE,sBAAsB;QAE7C,aAAa;QACb,iBAAiB,EAAE,qBAAqB;QACxC,qBAAqB,EAAE,SAAS;QAChC,uBAAuB,EAAE,2CAA2C;QACpE,0BAA0B,EAAE,qDAAqD;QACjF,2BAA2B,EAAE,gCAAgC;QAC7D,kBAAkB,EAAE,UAAU;QAC9B,kBAAkB,EAAE,UAAU;QAC9B,mBAAmB,EAAE,SAAS;QAC9B,sBAAsB,EAAE,mBAAmB;QAC3C,mBAAmB,EAAE,0BAA0B;QAC/C,oBAAoB,EAAE,uBAAuB;QAE7C,OAAO;QACP,iBAAiB,EAAE,mBAAmB;QACtC,YAAY,EAAE,gBAAgB;QAE9B,QAAQ;QACR,oBAAoB,EAAE,8DAA8D;QACpF,sBAAsB,EAAE,sEAAsE;QAC9F,YAAY,EAAE,SAAS;QACvB,eAAe,EAAE,WAAW;QAC5B,wBAAwB,EAAE,iDAAiD;QAC3E,0BAA0B,EACxB,mFAAmF;QACrF,uBAAuB,EAAE,SAAS;QAClC,0BAA0B,EAAE,sBAAsB;QAElD,kBAAkB;QAClB,sBAAsB,EAAE,0BAA0B;QAClD,uBAAuB,EAAE,kCAAkC;QAC3D,mBAAmB,EAAE,2CAA2C;QAEhE,UAAU;QACV,yBAAyB,EAAE,gBAAgB;QAC3C,gCAAgC,EAAE,gCAAgC;QAClE,wBAAwB,EAAE,yBAAyB;QAEnD,SAAS;QACT,eAAe,EAAE,sBAAsB;QACvC,oBAAoB,EAAE,gCAAgC;QACtD,qBAAqB,EAAE,sBAAsB;QAC7C,mBAAmB,EAAE,wBAAwB;QAC7C,oBAAoB,EAAE,+BAA+B;QACrD,uBAAuB,EAAE,0CAA0C;QACnE,0BAA0B,EAAE,6CAA6C;QACzE,iBAAiB,EAAE,8BAA8B;QACjD,mBAAmB,EAAE,+CAA+C;QACpE,oBAAoB,EAAE,6BAA6B;QACnD,oBAAoB,EAAE,yBAAyB;QAC/C,yBAAyB,EAAE,kCAAkC;QAC7D,wBAAwB,EAAE,2BAA2B;QAErD,WAAW;QACX,qBAAqB,EAAE,oBAAoB;QAC3C,uBAAuB,EAAE,2BAA2B;QACpD,qBAAqB,EAAE,wBAAwB;QAC/C,eAAe,EAAE,SAAS;QAC1B,oBAAoB,EAAE,eAAe;QACrC,mBAAmB,EAAE,iBAAiB;QACtC,sBAAsB,EAAE,iBAAiB;QACzC,mBAAmB,EAAE,iBAAiB;QACtC,cAAc,EAAE,uBAAuB;QACvC,YAAY,EAAE,MAAM;QACpB,YAAY,EAAE,MAAM;QACpB,aAAa,EAAE,OAAO;QACtB,gBAAgB,EAAE,WAAW;QAC7B,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,uBAAuB;QACvC,eAAe,EAAE,UAAU;QAC3B,eAAe,EAAE,SAAS;QAC1B,iBAAiB,EAAE,QAAQ;QAC3B,iBAAiB,EAAE,cAAc;QAEjC,gBAAgB;QAChB,eAAe,EAAE,MAAM;QACvB,mBAAmB,EAAE,yBAAyB;QAE9C,oBAAoB;QACpB,sBAAsB,EAAE,+BAA+B;QACvD,sBAAsB,EAAE,SAAS;QAEjC,WAAW;QACX,YAAY,EAAE,QAAQ;QACtB,eAAe,EAAE,iBAAiB;QAClC,gBAAgB,EAAE,cAAc;QAChC,iBAAiB,EAAE,qBAAqB;QACxC,WAAW,EAAE,UAAU;QACvB,aAAa,EACX,qGAAqG;QACvG,uBAAuB,EAAE,gEAAgE;QACzF,oBAAoB,EAAE,yDAAyD;QAC/E,cAAc,EAAE,mCAAmC;QACnD,mBAAmB,EAAE,QAAQ;QAC7B,cAAc,EAAE,mBAAmB;QACnC,6BAA6B,EAAE,wBAAwB;QACvD,0BAA0B,EAAE,2BAA2B;QACvD,2BAA2B,EAAE,0BAA0B;QAEvD,aAAa;QACb,kBAAkB,EAAE,SAAS;QAC7B,yBAAyB,EAAE,YAAY;QACvC,qBAAqB,EAAE,gBAAgB;QACvC,oBAAoB,EAAE,WAAW;QAEjC,eAAe;QACf,iBAAiB,EAAE,cAAc;QACjC,mBAAmB,EAAE,YAAY;QACjC,iBAAiB,EAAE,YAAY;QAC/B,gBAAgB,EAAE,eAAe;QACjC,kBAAkB,EAAE,eAAe;QACnC,kBAAkB,EAAE,mBAAmB;QAEvC,SAAS;QACT,iBAAiB,EAAE,iBAAiB;QACpC,iBAAiB,EAAE,WAAW;QAC9B,cAAc,EAAE,QAAQ;QAExB,kBAAkB;QAClB,oBAAoB,EAAE,cAAc;QACpC,qBAAqB,EAAE,qBAAqB;QAC5C,sBAAsB,EAAE,UAAU;QAClC,wBAAwB,EAAE,uCAAuC;QACjE,qBAAqB,EAAE,mBAAmB;QAC1C,sBAAsB,EAAE,6BAA6B;QACrD,kBAAkB,EAAE,kBAAkB;QACtC,+BAA+B,EAAE,aAAa;QAC9C,oCAAoC,EAAE,sBAAsB;QAC5D,oCAAoC,EAAE,2BAA2B;QACjE,mCAAmC,EAAE,eAAe;QACpD,mCAAmC,EAAE,uBAAuB;QAC5D,mCAAmC,EAAE,mBAAmB;QAExD,uBAAuB;QACvB,2BAA2B,EACzB,wEAAwE;QAC1E,0BAA0B,EACxB,yEAAyE;QAC3E,6BAA6B,EAC3B,kEAAkE;QACpE,8BAA8B,EAC5B,kFAAkF;QACpF,6BAA6B,EAC3B,uFAAuF;QACzF,6BAA6B,EAC3B,oFAAoF;QACtF,yBAAyB,EAAE,6CAA6C;QACxE,wBAAwB,EAAE,qDAAqD;QAC/E,wBAAwB,EACtB,mFAAmF;QACrF,wBAAwB,EACtB,sFAAsF;QACxF,2BAA2B,EAAE,+CAA+C;QAC5E,kCAAkC,EAChC,qEAAqE;QACvE,8BAA8B,EAC5B,qEAAqE;QACvE,6BAA6B,EAC3B,8EAA8E;QAEhF,cAAc;QACd,aAAa,EAAE,yBAAyB;QACxC,YAAY,EAAE,4BAA4B;QAC1C,eAAe,EAAE,wBAAwB;QACzC,kBAAkB,EAAE,yBAAyB;QAC7C,qBAAqB,EAAE,+BAA+B;QACtD,YAAY,EAAE,YAAY;QAC1B,eAAe,EAAE,oDAAoD;QACrE,iBAAiB,EAAE,kBAAkB;QACrC,cAAc,EAAE,cAAc;QAC9B,eAAe,EAAE,qBAAqB;QACtC,oBAAoB,EAAE,iBAAiB;QACvC,aAAa,EAAE,oBAAoB;QACnC,YAAY,EAAE,QAAQ;QACtB,UAAU,EAAE,2CAA2C;QACvD,qBAAqB,EAAE,mBAAmB;QAE1C,aAAa;QACb,YAAY,EAAE,cAAc;QAC5B,cAAc,EAAE,gCAAgC;QAChD,oBAAoB,EAAE,mCAAmC;QACzD,oBAAoB,EAAE,sCAAsC;QAC5D,oBAAoB,EAAE,uBAAuB;QAC7C,yBAAyB,EAAE,2BAA2B;QACtD,gBAAgB,EAAE,0BAA0B;QAC5C,iBAAiB,EAAE,aAAa;QAChC,oBAAoB,EAAE,kBAAkB;QACxC,sBAAsB,EAAE,kCAAkC;QAC1D,oBAAoB,EAAE,oBAAoB;QAC1C,qBAAqB,EAAE,eAAe;QAEtC,iBAAiB;QACjB,yBAAyB,EAAE,iCAAiC;QAC5D,kBAAkB,EAAE,iBAAiB;QACrC,kBAAkB,EAAE,gBAAgB;QACpC,kBAAkB,EAAE,QAAQ;QAC5B,sBAAsB,EAAE,yBAAyB;QACjD,oBAAoB,EAAE,2BAA2B;QACjD,sBAAsB,EAAE,2BAA2B;QACnD,0BAA0B,EAAE,4DAA4D;QACxF,qBAAqB,EAAE,oBAAoB;QAC3C,uBAAuB,EAAE,mBAAmB;QAC5C,+BAA+B,EAC7B,4FAA4F;QAC9F,8BAA8B,EAC5B,+GAA+G;QAEjH,4BAA4B;QAC5B,wBAAwB,EAAE,oBAAoB;QAC9C,sBAAsB,EAAE,WAAW;QACnC,yBAAyB,EAAE,8DAA8D;QACzF,0BAA0B,EAAE,qBAAqB;QACjD,0BAA0B,EAAE,YAAY;QACxC,wBAAwB,EAAE,OAAO;QACjC,sBAAsB,EAAE,SAAS;QACjC,uBAAuB,EAAE,QAAQ;QACjC,0BAA0B,EAAE,mBAAmB;QAC/C,0BAA0B,EAAE,QAAQ;QACpC,0BAA0B,EAAE,oBAAoB;QAChD,yBAAyB,EAAE,iCAAiC;QAC5D,sBAAsB,EAAE,wBAAwB;KACjD;CACF,CAAC;AAEF,6BAA6B;AAC7B,MAAM,UAAU,WAAW;IACzB,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,WAAW,CAAC,QAAQ;IAClC,eAAe,GAAG,QAAQ,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,CAAC,CAAC,GAAG,EAAE,MAAM;IAC3B,IAAI,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;IACxD,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/dashboard/modules/i18n.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the key insights panel from a server-provided view-model. Tolerates a
|
|
3
|
+
* missing or malformed payload by falling back to the French empty state — the
|
|
4
|
+
* server is a boundary, so this guards against partial fetches or stale deploys.
|
|
5
|
+
*
|
|
6
|
+
* @param {unknown} viewModel
|
|
7
|
+
* @returns {string}
|
|
8
|
+
*/
|
|
9
|
+
export function renderKeyInsightsHtml(viewModel: unknown): string;
|
|
10
|
+
export type KeyInsightCard = {
|
|
11
|
+
title: string;
|
|
12
|
+
body: string;
|
|
13
|
+
};
|
|
14
|
+
export type KeyInsightsViewModel = {
|
|
15
|
+
cards: KeyInsightCard[];
|
|
16
|
+
isEmpty: boolean;
|
|
17
|
+
emptyMessage: string;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=keyInsights.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyInsights.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/keyInsights.js"],"names":[],"mappings":"AAuCA;;;;;;;GAOG;AACH,iDAHW,OAAO,GACL,MAAM,CAsBlB;;WApDa,MAAM;UACN,MAAM;;;WAKN,cAAc,EAAE;aAChB,OAAO;kBACP,MAAM"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dashboard module — key insight cards humble object (SPEC-205).
|
|
3
|
+
* Pure functions, no global state, no DOM access, no fetch. All gating,
|
|
4
|
+
* ranking and text generation live server-side in the deriver / presenter;
|
|
5
|
+
* this module only renders the provided view-model as HTML.
|
|
6
|
+
*
|
|
7
|
+
* Visual DNA: "Agentic OS" — see project_agentic_os_design_dna.md.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { escapeHtml } from './html.js';
|
|
11
|
+
|
|
12
|
+
const EMPTY_MESSAGE = 'Aucun insight disponible pour le moment';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {Object} KeyInsightCard
|
|
16
|
+
* @property {string} title
|
|
17
|
+
* @property {string} body
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @typedef {Object} KeyInsightsViewModel
|
|
22
|
+
* @property {KeyInsightCard[]} cards
|
|
23
|
+
* @property {boolean} isEmpty
|
|
24
|
+
* @property {string} emptyMessage
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @param {KeyInsightCard} card
|
|
29
|
+
* @returns {string}
|
|
30
|
+
*/
|
|
31
|
+
function renderCard(card) {
|
|
32
|
+
return `
|
|
33
|
+
<div class="key-insight-card">
|
|
34
|
+
<div class="key-insight-card-title">${escapeHtml(card.title)}</div>
|
|
35
|
+
<div class="key-insight-card-body">${escapeHtml(card.body)}</div>
|
|
36
|
+
</div>
|
|
37
|
+
`.trim();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Renders the key insights panel from a server-provided view-model. Tolerates a
|
|
42
|
+
* missing or malformed payload by falling back to the French empty state — the
|
|
43
|
+
* server is a boundary, so this guards against partial fetches or stale deploys.
|
|
44
|
+
*
|
|
45
|
+
* @param {unknown} viewModel
|
|
46
|
+
* @returns {string}
|
|
47
|
+
*/
|
|
48
|
+
export function renderKeyInsightsHtml(viewModel) {
|
|
49
|
+
const source =
|
|
50
|
+
viewModel && typeof viewModel === 'object'
|
|
51
|
+
? /** @type {Record<string, unknown>} */ (viewModel)
|
|
52
|
+
: {};
|
|
53
|
+
const cards = Array.isArray(source.cards) ? source.cards : [];
|
|
54
|
+
const emptyMessage =
|
|
55
|
+
typeof source.emptyMessage === 'string' ? source.emptyMessage : EMPTY_MESSAGE;
|
|
56
|
+
|
|
57
|
+
const body =
|
|
58
|
+
cards.length === 0
|
|
59
|
+
? `<div class="key-insights-empty">${escapeHtml(emptyMessage)}</div>`
|
|
60
|
+
: cards.map((card) => renderCard(/** @type {KeyInsightCard} */ (card))).join('');
|
|
61
|
+
|
|
62
|
+
return `
|
|
63
|
+
<section class="key-insights-panel" data-section="key-insights">
|
|
64
|
+
<div class="key-insights-title">// KEY INSIGHTS</div>
|
|
65
|
+
${body}
|
|
66
|
+
</section>
|
|
67
|
+
`.trim();
|
|
68
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyInsights.js","sourceRoot":"","sources":["../../../src/dashboard/modules/keyInsights.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,aAAa,GAAG,yCAAyC,CAAC;AAEhE;;;;GAIG;AAEH;;;;;GAKG;AAEH;;;GAGG;AACH,SAAS,UAAU,CAAC,IAAI;IACtB,OAAO;;4CAEmC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;2CACvB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;GAE7D,CAAC,IAAI,EAAE,CAAC;AACX,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAS;IAC7C,MAAM,MAAM,GACV,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;QACxC,CAAC,CAAC,sCAAsC,CAAC,CAAC,SAAS,CAAC;QACpD,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,YAAY,GAChB,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;IAEhF,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,KAAK,CAAC;QAChB,CAAC,CAAC,mCAAmC,UAAU,CAAC,YAAY,CAAC,QAAQ;QACrE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAErF,OAAO;;;QAGD,IAAI;;GAET,CAAC,IAAI,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -8,6 +8,17 @@ export function drawScoreTrendChart(canvasId: string, reviews: Array<{
|
|
|
8
8
|
score: number | null;
|
|
9
9
|
type?: string;
|
|
10
10
|
}>): void;
|
|
11
|
+
/**
|
|
12
|
+
* Draw a line chart showing the number of reviews per month across the
|
|
13
|
+
* trailing twelve months. The points are already computed and zero-filled
|
|
14
|
+
* by the presenter, so this renders them as-is.
|
|
15
|
+
* @param {string} canvasId
|
|
16
|
+
* @param {Array<{ month: string, count: number }>} monthlyVolume
|
|
17
|
+
*/
|
|
18
|
+
export function drawReviewsPerMonthChart(canvasId: string, monthlyVolume: Array<{
|
|
19
|
+
month: string;
|
|
20
|
+
count: number;
|
|
21
|
+
}>): void;
|
|
11
22
|
/**
|
|
12
23
|
* Draw a bar chart showing number of reviews per week
|
|
13
24
|
* @param {string} canvasId
|
|
@@ -24,6 +35,21 @@ export function drawReviewActivityChart(canvasId: string, reviews: Array<{
|
|
|
24
35
|
export function drawScoreDistributionChart(canvasId: string, reviews: Array<{
|
|
25
36
|
score: number | null;
|
|
26
37
|
}>): void;
|
|
38
|
+
/**
|
|
39
|
+
* Draw a vertical bar chart showing the project-wide bug count per category.
|
|
40
|
+
* The view model bars are already sorted from highest to lowest count.
|
|
41
|
+
* @param {string} canvasId
|
|
42
|
+
* @param {{ isEmpty: boolean, emptyMessage: string, bars: Array<{ categoryKey: string, label: string, count: number }> }} bugsByCategory
|
|
43
|
+
*/
|
|
44
|
+
export function drawBugsByCategoryChart(canvasId: string, bugsByCategory: {
|
|
45
|
+
isEmpty: boolean;
|
|
46
|
+
emptyMessage: string;
|
|
47
|
+
bars: Array<{
|
|
48
|
+
categoryKey: string;
|
|
49
|
+
label: string;
|
|
50
|
+
count: number;
|
|
51
|
+
}>;
|
|
52
|
+
}): void;
|
|
27
53
|
/**
|
|
28
54
|
* Animate a counter from 0 to targetValue
|
|
29
55
|
* @param {HTMLElement} element
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statsCharts.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/statsCharts.js"],"names":[],"mappings":"AAsGA;;;;GAIG;AACH,8CAHW,MAAM,WACN,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,QAwIvE;AAmBD;;;;GAIG;AACH,kDAHW,MAAM,WACN,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,CAAC,QA+FpC;AAED;;;;GAIG;AACH,qDAHW,MAAM,WACN,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,GAAC,IAAI,CAAA;CAAC,CAAC,QAwErC;AAED;;;;;;GAMG;AACH,wCALW,WAAW,eACX,MAAM,YACN,MAAM,WACN,MAAM,QAmChB"}
|
|
1
|
+
{"version":3,"file":"statsCharts.d.ts","sourceRoot":"","sources":["../../../src/dashboard/modules/statsCharts.js"],"names":[],"mappings":"AAsGA;;;;GAIG;AACH,8CAHW,MAAM,WACN,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,QAwIvE;AAED;;;;;;GAMG;AACH,mDAHW,MAAM,iBACN,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,QAyFjD;AAmBD;;;;GAIG;AACH,kDAHW,MAAM,WACN,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,CAAC,QA+FpC;AAED;;;;GAIG;AACH,qDAHW,MAAM,WACN,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,GAAC,IAAI,CAAA;CAAC,CAAC,QAwErC;AAED;;;;;GAKG;AACH,kDAHW,MAAM,kBACN;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,QAkFxH;AAED;;;;;;GAMG;AACH,wCALW,WAAW,eACX,MAAM,YACN,MAAM,WACN,MAAM,QAmChB"}
|
|
@@ -241,6 +241,102 @@ export function drawScoreTrendChart(canvasId, reviews) {
|
|
|
241
241
|
}
|
|
242
242
|
}
|
|
243
243
|
|
|
244
|
+
/**
|
|
245
|
+
* Draw a line chart showing the number of reviews per month across the
|
|
246
|
+
* trailing twelve months. The points are already computed and zero-filled
|
|
247
|
+
* by the presenter, so this renders them as-is.
|
|
248
|
+
* @param {string} canvasId
|
|
249
|
+
* @param {Array<{ month: string, count: number }>} monthlyVolume
|
|
250
|
+
*/
|
|
251
|
+
export function drawReviewsPerMonthChart(canvasId, monthlyVolume) {
|
|
252
|
+
const setup = getCanvasContext(canvasId);
|
|
253
|
+
if (!setup) return;
|
|
254
|
+
const { ctx, cssWidth } = setup;
|
|
255
|
+
const cssHeight = 180;
|
|
256
|
+
setupHiDpiCanvas(ctx, cssWidth, cssHeight);
|
|
257
|
+
|
|
258
|
+
const series = monthlyVolume || [];
|
|
259
|
+
const hasReviews = series.some((point) => point.count > 0);
|
|
260
|
+
|
|
261
|
+
if (!hasReviews) {
|
|
262
|
+
drawNoDataMessage(ctx, t('stats.noChartData'), cssWidth, cssHeight);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const padding = { top: 20, right: 20, bottom: 30, left: 35 };
|
|
267
|
+
const chartWidth = cssWidth - padding.left - padding.right;
|
|
268
|
+
const chartHeight = cssHeight - padding.top - padding.bottom;
|
|
269
|
+
|
|
270
|
+
const maxCount = Math.max(...series.map((point) => point.count));
|
|
271
|
+
const yScale = maxCount > 0 ? chartHeight / (maxCount * 1.15) : 1;
|
|
272
|
+
|
|
273
|
+
ctx.font = '10px system-ui, -apple-system, sans-serif';
|
|
274
|
+
ctx.textAlign = 'right';
|
|
275
|
+
ctx.fillStyle = COLORS.textMuted;
|
|
276
|
+
const yTicks = Math.min(maxCount, 5);
|
|
277
|
+
for (let tick = 0; tick <= yTicks; tick++) {
|
|
278
|
+
const value = Math.round((maxCount / yTicks) * tick);
|
|
279
|
+
const y = padding.top + chartHeight - value * yScale;
|
|
280
|
+
ctx.beginPath();
|
|
281
|
+
ctx.strokeStyle = COLORS.gridLine;
|
|
282
|
+
ctx.lineWidth = 0.5;
|
|
283
|
+
ctx.moveTo(padding.left, y);
|
|
284
|
+
ctx.lineTo(cssWidth - padding.right, y);
|
|
285
|
+
ctx.stroke();
|
|
286
|
+
ctx.fillText(String(value), padding.left - 6, y + 3);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
const points = series.map((point, index) => {
|
|
290
|
+
const x =
|
|
291
|
+
series.length === 1
|
|
292
|
+
? padding.left + chartWidth / 2
|
|
293
|
+
: padding.left + (index / (series.length - 1)) * chartWidth;
|
|
294
|
+
const y = padding.top + chartHeight - point.count * yScale;
|
|
295
|
+
return { x, y, point };
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
if (points.length >= 2) {
|
|
299
|
+
const gradient = ctx.createLinearGradient(0, padding.top, 0, cssHeight - padding.bottom);
|
|
300
|
+
gradient.addColorStop(0, 'rgba(122, 216, 255, 0.12)');
|
|
301
|
+
gradient.addColorStop(1, 'rgba(122, 216, 255, 0)');
|
|
302
|
+
|
|
303
|
+
ctx.beginPath();
|
|
304
|
+
ctx.moveTo(points[0].x, cssHeight - padding.bottom);
|
|
305
|
+
drawSmoothPath(ctx, points);
|
|
306
|
+
ctx.lineTo(points[points.length - 1].x, cssHeight - padding.bottom);
|
|
307
|
+
ctx.closePath();
|
|
308
|
+
ctx.fillStyle = gradient;
|
|
309
|
+
ctx.fill();
|
|
310
|
+
|
|
311
|
+
ctx.beginPath();
|
|
312
|
+
drawSmoothPath(ctx, points);
|
|
313
|
+
ctx.strokeStyle = COLORS.focus;
|
|
314
|
+
ctx.lineWidth = 2;
|
|
315
|
+
ctx.lineJoin = 'round';
|
|
316
|
+
ctx.lineCap = 'round';
|
|
317
|
+
ctx.stroke();
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
for (const entry of points) {
|
|
321
|
+
ctx.beginPath();
|
|
322
|
+
ctx.arc(entry.x, entry.y, 3.5, 0, Math.PI * 2);
|
|
323
|
+
ctx.fillStyle = COLORS.reviewPoint;
|
|
324
|
+
ctx.fill();
|
|
325
|
+
ctx.strokeStyle = COLORS.textPrimary;
|
|
326
|
+
ctx.lineWidth = 1.2;
|
|
327
|
+
ctx.stroke();
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
ctx.fillStyle = COLORS.textMuted;
|
|
331
|
+
ctx.font = '9px system-ui, -apple-system, sans-serif';
|
|
332
|
+
ctx.textAlign = 'center';
|
|
333
|
+
ctx.textBaseline = 'top';
|
|
334
|
+
for (const entry of points) {
|
|
335
|
+
const label = entry.point.month.split('-')[1];
|
|
336
|
+
ctx.fillText(label, entry.x, cssHeight - padding.bottom + 6);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
244
340
|
/**
|
|
245
341
|
* Get ISO week number from a date
|
|
246
342
|
* @param {Date} date
|
|
@@ -435,6 +531,94 @@ export function drawScoreDistributionChart(canvasId, reviews) {
|
|
|
435
531
|
}
|
|
436
532
|
}
|
|
437
533
|
|
|
534
|
+
/**
|
|
535
|
+
* Draw a vertical bar chart showing the project-wide bug count per category.
|
|
536
|
+
* The view model bars are already sorted from highest to lowest count.
|
|
537
|
+
* @param {string} canvasId
|
|
538
|
+
* @param {{ isEmpty: boolean, emptyMessage: string, bars: Array<{ categoryKey: string, label: string, count: number }> }} bugsByCategory
|
|
539
|
+
*/
|
|
540
|
+
export function drawBugsByCategoryChart(canvasId, bugsByCategory) {
|
|
541
|
+
const setup = getCanvasContext(canvasId);
|
|
542
|
+
if (!setup) return;
|
|
543
|
+
const { ctx, cssWidth } = setup;
|
|
544
|
+
const cssHeight = 180;
|
|
545
|
+
setupHiDpiCanvas(ctx, cssWidth, cssHeight);
|
|
546
|
+
|
|
547
|
+
if (!bugsByCategory || bugsByCategory.isEmpty) {
|
|
548
|
+
const message = bugsByCategory?.emptyMessage || t('stats.noCategoryData');
|
|
549
|
+
drawNoDataMessage(ctx, message, cssWidth, cssHeight);
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
const bars = bugsByCategory.bars;
|
|
554
|
+
const padding = { top: 20, right: 20, bottom: 44, left: 35 };
|
|
555
|
+
const chartWidth = cssWidth - padding.left - padding.right;
|
|
556
|
+
const chartHeight = cssHeight - padding.top - padding.bottom;
|
|
557
|
+
|
|
558
|
+
const maxCount = Math.max(...bars.map((bar) => bar.count));
|
|
559
|
+
const yScale = maxCount > 0 ? chartHeight / (maxCount * 1.15) : 1;
|
|
560
|
+
|
|
561
|
+
ctx.font = '10px system-ui, -apple-system, sans-serif';
|
|
562
|
+
ctx.textAlign = 'right';
|
|
563
|
+
ctx.fillStyle = COLORS.textMuted;
|
|
564
|
+
const yTicks = Math.min(maxCount, 5);
|
|
565
|
+
for (let tick = 0; tick <= yTicks; tick++) {
|
|
566
|
+
const value = Math.round((maxCount / yTicks) * tick);
|
|
567
|
+
const y = padding.top + chartHeight - value * yScale;
|
|
568
|
+
ctx.beginPath();
|
|
569
|
+
ctx.strokeStyle = COLORS.gridLine;
|
|
570
|
+
ctx.lineWidth = 0.5;
|
|
571
|
+
ctx.moveTo(padding.left, y);
|
|
572
|
+
ctx.lineTo(cssWidth - padding.right, y);
|
|
573
|
+
ctx.stroke();
|
|
574
|
+
ctx.fillText(String(value), padding.left - 6, y + 3);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
const barGap = 8;
|
|
578
|
+
const totalBarWidth = chartWidth / bars.length;
|
|
579
|
+
const barWidth = Math.max(8, totalBarWidth - barGap);
|
|
580
|
+
const cornerRadius = Math.min(4, barWidth / 3);
|
|
581
|
+
|
|
582
|
+
for (let index = 0; index < bars.length; index++) {
|
|
583
|
+
const bar = bars[index];
|
|
584
|
+
const barHeight = bar.count * yScale;
|
|
585
|
+
const x = padding.left + index * totalBarWidth + (totalBarWidth - barWidth) / 2;
|
|
586
|
+
const y = padding.top + chartHeight - barHeight;
|
|
587
|
+
|
|
588
|
+
const gradient = ctx.createLinearGradient(x, y, x, padding.top + chartHeight);
|
|
589
|
+
gradient.addColorStop(0, COLORS.focus);
|
|
590
|
+
gradient.addColorStop(1, 'rgba(122, 216, 255, 0.3)');
|
|
591
|
+
|
|
592
|
+
ctx.beginPath();
|
|
593
|
+
ctx.moveTo(x, padding.top + chartHeight);
|
|
594
|
+
ctx.lineTo(x, y + cornerRadius);
|
|
595
|
+
ctx.arcTo(x, y, x + cornerRadius, y, cornerRadius);
|
|
596
|
+
ctx.arcTo(x + barWidth, y, x + barWidth, y + cornerRadius, cornerRadius);
|
|
597
|
+
ctx.lineTo(x + barWidth, padding.top + chartHeight);
|
|
598
|
+
ctx.closePath();
|
|
599
|
+
ctx.fillStyle = gradient;
|
|
600
|
+
ctx.fill();
|
|
601
|
+
|
|
602
|
+
if (bar.count > 0 && barHeight > 16) {
|
|
603
|
+
ctx.fillStyle = COLORS.textPrimary;
|
|
604
|
+
ctx.font = '10px system-ui, -apple-system, sans-serif';
|
|
605
|
+
ctx.textAlign = 'center';
|
|
606
|
+
ctx.textBaseline = 'bottom';
|
|
607
|
+
ctx.fillText(String(bar.count), x + barWidth / 2, y - 3);
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
ctx.fillStyle = COLORS.textMuted;
|
|
611
|
+
ctx.font = '9px system-ui, -apple-system, sans-serif';
|
|
612
|
+
ctx.textAlign = 'center';
|
|
613
|
+
ctx.textBaseline = 'top';
|
|
614
|
+
ctx.fillText(
|
|
615
|
+
t('stats.category.' + bar.categoryKey),
|
|
616
|
+
x + barWidth / 2,
|
|
617
|
+
cssHeight - padding.bottom + 6,
|
|
618
|
+
);
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
|
|
438
622
|
/**
|
|
439
623
|
* Animate a counter from 0 to targetValue
|
|
440
624
|
* @param {HTMLElement} element
|