riksdagsmonitor 0.8.12 → 0.8.15
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/dist/lib/cia/dashboard-init.d.ts +26 -0
- package/dist/lib/cia/dashboard-init.d.ts.map +1 -0
- package/dist/lib/cia/dashboard-init.js +108 -0
- package/dist/lib/cia/dashboard-init.js.map +1 -0
- package/dist/lib/cia/data-loader.d.ts +408 -0
- package/dist/lib/cia/data-loader.d.ts.map +1 -0
- package/dist/lib/cia/data-loader.js +867 -0
- package/dist/lib/cia/data-loader.js.map +1 -0
- package/dist/lib/cia/election-predictions.d.ts +78 -0
- package/dist/lib/cia/election-predictions.d.ts.map +1 -0
- package/dist/lib/cia/election-predictions.js +259 -0
- package/dist/lib/cia/election-predictions.js.map +1 -0
- package/dist/lib/cia/i18n-translations.d.ts +111 -0
- package/dist/lib/cia/i18n-translations.d.ts.map +1 -0
- package/dist/lib/cia/i18n-translations.js +619 -0
- package/dist/lib/cia/i18n-translations.js.map +1 -0
- package/dist/lib/cia/visualizations.d.ts +64 -0
- package/dist/lib/cia/visualizations.d.ts.map +1 -0
- package/dist/lib/cia/visualizations.js +662 -0
- package/dist/lib/cia/visualizations.js.map +1 -0
- package/dist/lib/dashboards/anomaly-detection.d.ts +44 -0
- package/dist/lib/dashboards/anomaly-detection.d.ts.map +1 -0
- package/dist/lib/dashboards/anomaly-detection.js +1017 -0
- package/dist/lib/dashboards/anomaly-detection.js.map +1 -0
- package/dist/lib/dashboards/coalition-dashboard.d.ts +36 -0
- package/dist/lib/dashboards/coalition-dashboard.d.ts.map +1 -0
- package/dist/lib/dashboards/coalition-dashboard.js +629 -0
- package/dist/lib/dashboards/coalition-dashboard.js.map +1 -0
- package/dist/lib/dashboards/coalition-loader.d.ts +43 -0
- package/dist/lib/dashboards/coalition-loader.d.ts.map +1 -0
- package/dist/lib/dashboards/coalition-loader.js +665 -0
- package/dist/lib/dashboards/coalition-loader.js.map +1 -0
- package/dist/lib/dashboards/committees-dashboard.d.ts +23 -0
- package/dist/lib/dashboards/committees-dashboard.d.ts.map +1 -0
- package/dist/lib/dashboards/committees-dashboard.js +886 -0
- package/dist/lib/dashboards/committees-dashboard.js.map +1 -0
- package/dist/lib/dashboards/election-cycle.d.ts +62 -0
- package/dist/lib/dashboards/election-cycle.d.ts.map +1 -0
- package/dist/lib/dashboards/election-cycle.js +484 -0
- package/dist/lib/dashboards/election-cycle.js.map +1 -0
- package/dist/lib/dashboards/ministry-dashboard.d.ts +46 -0
- package/dist/lib/dashboards/ministry-dashboard.d.ts.map +1 -0
- package/dist/lib/dashboards/ministry-dashboard.js +1114 -0
- package/dist/lib/dashboards/ministry-dashboard.js.map +1 -0
- package/dist/lib/dashboards/party-dashboard.d.ts +56 -0
- package/dist/lib/dashboards/party-dashboard.d.ts.map +1 -0
- package/dist/lib/dashboards/party-dashboard.js +981 -0
- package/dist/lib/dashboards/party-dashboard.js.map +1 -0
- package/dist/lib/dashboards/politician-dashboard.d.ts +41 -0
- package/dist/lib/dashboards/politician-dashboard.d.ts.map +1 -0
- package/dist/lib/dashboards/politician-dashboard.js +611 -0
- package/dist/lib/dashboards/politician-dashboard.js.map +1 -0
- package/dist/lib/dashboards/pre-election.d.ts +64 -0
- package/dist/lib/dashboards/pre-election.d.ts.map +1 -0
- package/dist/lib/dashboards/pre-election.js +604 -0
- package/dist/lib/dashboards/pre-election.js.map +1 -0
- package/dist/lib/dashboards/risk-dashboard.d.ts +37 -0
- package/dist/lib/dashboards/risk-dashboard.d.ts.map +1 -0
- package/dist/lib/dashboards/risk-dashboard.js +863 -0
- package/dist/lib/dashboards/risk-dashboard.js.map +1 -0
- package/dist/lib/dashboards/seasonal-patterns.d.ts +24 -0
- package/dist/lib/dashboards/seasonal-patterns.d.ts.map +1 -0
- package/dist/lib/dashboards/seasonal-patterns.js +535 -0
- package/dist/lib/dashboards/seasonal-patterns.js.map +1 -0
- package/dist/lib/dashboards/stats-loader.d.ts +35 -0
- package/dist/lib/dashboards/stats-loader.d.ts.map +1 -0
- package/dist/lib/dashboards/stats-loader.js +145 -0
- package/dist/lib/dashboards/stats-loader.js.map +1 -0
- package/dist/lib/shared/chart-factory.d.ts.map +1 -0
- package/dist/lib/shared/chart-factory.js.map +1 -0
- package/dist/lib/shared/data-loader.d.ts.map +1 -0
- package/dist/lib/shared/data-loader.js.map +1 -0
- package/dist/lib/shared/dom-utils.d.ts.map +1 -0
- package/dist/lib/shared/dom-utils.js.map +1 -0
- package/dist/lib/shared/error-boundary.d.ts.map +1 -0
- package/dist/lib/shared/error-boundary.js.map +1 -0
- package/dist/lib/shared/fallback-ui.d.ts.map +1 -0
- package/dist/lib/shared/fallback-ui.js.map +1 -0
- package/dist/lib/shared/index.d.ts.map +1 -0
- package/dist/lib/shared/index.js.map +1 -0
- package/dist/lib/shared/logger.d.ts.map +1 -0
- package/dist/lib/shared/logger.js.map +1 -0
- package/dist/lib/shared/register-globals.d.ts +14 -0
- package/dist/lib/shared/register-globals.d.ts.map +1 -0
- package/dist/lib/shared/register-globals.js +21 -0
- package/dist/lib/shared/register-globals.js.map +1 -0
- package/dist/lib/shared/theme.d.ts.map +1 -0
- package/dist/lib/shared/theme.js.map +1 -0
- package/dist/lib/shared/types.d.ts.map +1 -0
- package/dist/lib/shared/types.js.map +1 -0
- package/dist/lib/ui/back-to-top.d.ts +13 -0
- package/dist/lib/ui/back-to-top.d.ts.map +1 -0
- package/dist/lib/ui/back-to-top.js +48 -0
- package/dist/lib/ui/back-to-top.js.map +1 -0
- package/dist/scripts/ai-analysis/coalition-detector.d.ts +28 -0
- package/dist/scripts/ai-analysis/coalition-detector.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/coalition-detector.js +242 -0
- package/dist/scripts/ai-analysis/coalition-detector.js.map +1 -0
- package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts +73 -0
- package/dist/scripts/ai-analysis/dashboard-analyzer.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/dashboard-analyzer.js +511 -0
- package/dist/scripts/ai-analysis/dashboard-analyzer.js.map +1 -0
- package/dist/scripts/ai-analysis/document-analyzer.d.ts +196 -0
- package/dist/scripts/ai-analysis/document-analyzer.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/document-analyzer.js +1001 -0
- package/dist/scripts/ai-analysis/document-analyzer.js.map +1 -0
- package/dist/scripts/ai-analysis/domains/index.d.ts +15 -0
- package/dist/scripts/ai-analysis/domains/index.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/domains/index.js +494 -0
- package/dist/scripts/ai-analysis/domains/index.js.map +1 -0
- package/dist/scripts/ai-analysis/helpers.d.ts +43 -0
- package/dist/scripts/ai-analysis/helpers.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/helpers.js +79 -0
- package/dist/scripts/ai-analysis/helpers.js.map +1 -0
- package/dist/scripts/ai-analysis/index.d.ts +15 -0
- package/dist/scripts/ai-analysis/index.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/index.js +14 -0
- package/dist/scripts/ai-analysis/index.js.map +1 -0
- package/dist/scripts/ai-analysis/pipeline.d.ts +41 -0
- package/dist/scripts/ai-analysis/pipeline.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/pipeline.js +208 -0
- package/dist/scripts/ai-analysis/pipeline.js.map +1 -0
- package/dist/scripts/ai-analysis/political-significance.d.ts +63 -0
- package/dist/scripts/ai-analysis/political-significance.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/political-significance.js +227 -0
- package/dist/scripts/ai-analysis/political-significance.js.map +1 -0
- package/dist/scripts/ai-analysis/quality-assessor.d.ts +104 -0
- package/dist/scripts/ai-analysis/quality-assessor.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/quality-assessor.js +554 -0
- package/dist/scripts/ai-analysis/quality-assessor.js.map +1 -0
- package/dist/scripts/ai-analysis/swot/index.d.ts +56 -0
- package/dist/scripts/ai-analysis/swot/index.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/swot/index.js +360 -0
- package/dist/scripts/ai-analysis/swot/index.js.map +1 -0
- package/dist/scripts/ai-analysis/swot/placeholders.d.ts +30 -0
- package/dist/scripts/ai-analysis/swot/placeholders.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/swot/placeholders.js +381 -0
- package/dist/scripts/ai-analysis/swot/placeholders.js.map +1 -0
- package/dist/scripts/ai-analysis/types.d.ts +333 -0
- package/dist/scripts/ai-analysis/types.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/types.js +19 -0
- package/dist/scripts/ai-analysis/types.js.map +1 -0
- package/dist/scripts/ai-analysis/visualisation/index.d.ts +15 -0
- package/dist/scripts/ai-analysis/visualisation/index.d.ts.map +1 -0
- package/dist/scripts/ai-analysis/visualisation/index.js +179 -0
- package/dist/scripts/ai-analysis/visualisation/index.js.map +1 -0
- package/dist/scripts/analysis-framework/cross-reference.d.ts +35 -0
- package/dist/scripts/analysis-framework/cross-reference.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/cross-reference.js +290 -0
- package/dist/scripts/analysis-framework/cross-reference.js.map +1 -0
- package/dist/scripts/analysis-framework/index.d.ts +79 -0
- package/dist/scripts/analysis-framework/index.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/index.js +133 -0
- package/dist/scripts/analysis-framework/index.js.map +1 -0
- package/dist/scripts/analysis-framework/lenses/citizen.d.ts +29 -0
- package/dist/scripts/analysis-framework/lenses/citizen.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/lenses/citizen.js +220 -0
- package/dist/scripts/analysis-framework/lenses/citizen.js.map +1 -0
- package/dist/scripts/analysis-framework/lenses/economic.d.ts +29 -0
- package/dist/scripts/analysis-framework/lenses/economic.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/lenses/economic.js +227 -0
- package/dist/scripts/analysis-framework/lenses/economic.js.map +1 -0
- package/dist/scripts/analysis-framework/lenses/government.d.ts +32 -0
- package/dist/scripts/analysis-framework/lenses/government.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/lenses/government.js +265 -0
- package/dist/scripts/analysis-framework/lenses/government.js.map +1 -0
- package/dist/scripts/analysis-framework/lenses/international.d.ts +29 -0
- package/dist/scripts/analysis-framework/lenses/international.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/lenses/international.js +248 -0
- package/dist/scripts/analysis-framework/lenses/international.js.map +1 -0
- package/dist/scripts/analysis-framework/lenses/media.d.ts +29 -0
- package/dist/scripts/analysis-framework/lenses/media.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/lenses/media.js +211 -0
- package/dist/scripts/analysis-framework/lenses/media.js.map +1 -0
- package/dist/scripts/analysis-framework/lenses/opposition.d.ts +29 -0
- package/dist/scripts/analysis-framework/lenses/opposition.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/lenses/opposition.js +234 -0
- package/dist/scripts/analysis-framework/lenses/opposition.js.map +1 -0
- package/dist/scripts/analysis-framework/methodology-types.d.ts +309 -0
- package/dist/scripts/analysis-framework/methodology-types.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/methodology-types.js +38 -0
- package/dist/scripts/analysis-framework/methodology-types.js.map +1 -0
- package/dist/scripts/analysis-framework/political-classification.d.ts +58 -0
- package/dist/scripts/analysis-framework/political-classification.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/political-classification.js +414 -0
- package/dist/scripts/analysis-framework/political-classification.js.map +1 -0
- package/dist/scripts/analysis-framework/political-risk-assessment.d.ts +74 -0
- package/dist/scripts/analysis-framework/political-risk-assessment.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/political-risk-assessment.js +656 -0
- package/dist/scripts/analysis-framework/political-risk-assessment.js.map +1 -0
- package/dist/scripts/analysis-framework/political-threat-analysis.d.ts +65 -0
- package/dist/scripts/analysis-framework/political-threat-analysis.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/political-threat-analysis.js +553 -0
- package/dist/scripts/analysis-framework/political-threat-analysis.js.map +1 -0
- package/dist/scripts/analysis-framework/significance-scorer.d.ts +62 -0
- package/dist/scripts/analysis-framework/significance-scorer.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/significance-scorer.js +196 -0
- package/dist/scripts/analysis-framework/significance-scorer.js.map +1 -0
- package/dist/scripts/analysis-framework/types.d.ts +138 -0
- package/dist/scripts/analysis-framework/types.d.ts.map +1 -0
- package/dist/scripts/analysis-framework/types.js +12 -0
- package/dist/scripts/analysis-framework/types.js.map +1 -0
- package/dist/scripts/analysis-reader.d.ts +240 -0
- package/dist/scripts/analysis-reader.d.ts.map +1 -0
- package/dist/scripts/analysis-reader.js +495 -0
- package/dist/scripts/analysis-reader.js.map +1 -0
- package/dist/scripts/article-quality-enhancer.d.ts +148 -0
- package/dist/scripts/article-quality-enhancer.d.ts.map +1 -0
- package/dist/scripts/article-quality-enhancer.js +430 -0
- package/dist/scripts/article-quality-enhancer.js.map +1 -0
- package/dist/scripts/article-template/constants.d.ts +104 -0
- package/dist/scripts/article-template/constants.d.ts.map +1 -0
- package/dist/scripts/article-template/constants.js +225 -0
- package/dist/scripts/article-template/constants.js.map +1 -0
- package/dist/scripts/article-template/helpers.d.ts +83 -0
- package/dist/scripts/article-template/helpers.d.ts.map +1 -0
- package/dist/scripts/article-template/helpers.js +236 -0
- package/dist/scripts/article-template/helpers.js.map +1 -0
- package/dist/scripts/article-template/index.d.ts +39 -0
- package/dist/scripts/article-template/index.d.ts.map +1 -0
- package/dist/scripts/article-template/index.js +37 -0
- package/dist/scripts/article-template/index.js.map +1 -0
- package/dist/scripts/article-template/registry.d.ts +64 -0
- package/dist/scripts/article-template/registry.d.ts.map +1 -0
- package/dist/scripts/article-template/registry.js +405 -0
- package/dist/scripts/article-template/registry.js.map +1 -0
- package/dist/scripts/article-template/template.d.ts +18 -0
- package/dist/scripts/article-template/template.d.ts.map +1 -0
- package/dist/scripts/article-template/template.js +359 -0
- package/dist/scripts/article-template/template.js.map +1 -0
- package/dist/scripts/article-template/types.d.ts +90 -0
- package/dist/scripts/article-template/types.d.ts.map +1 -0
- package/dist/scripts/article-template/types.js +96 -0
- package/dist/scripts/article-template/types.js.map +1 -0
- package/dist/scripts/article-template.d.ts +18 -0
- package/dist/scripts/article-template.d.ts.map +1 -0
- package/dist/scripts/article-template.js +18 -0
- package/dist/scripts/article-template.js.map +1 -0
- package/dist/scripts/catalog-downloaded-data.d.ts +66 -0
- package/dist/scripts/catalog-downloaded-data.d.ts.map +1 -0
- package/dist/scripts/catalog-downloaded-data.js +239 -0
- package/dist/scripts/catalog-downloaded-data.js.map +1 -0
- package/dist/scripts/check-cia-schema-updates.d.ts +186 -0
- package/dist/scripts/check-cia-schema-updates.d.ts.map +1 -0
- package/dist/scripts/check-cia-schema-updates.js +363 -0
- package/dist/scripts/check-cia-schema-updates.js.map +1 -0
- package/dist/scripts/data-transformers/calendar.d.ts +16 -0
- package/dist/scripts/data-transformers/calendar.d.ts.map +1 -0
- package/dist/scripts/data-transformers/calendar.js +137 -0
- package/dist/scripts/data-transformers/calendar.js.map +1 -0
- package/dist/scripts/data-transformers/constants/committee-names.d.ts +15 -0
- package/dist/scripts/data-transformers/constants/committee-names.d.ts.map +1 -0
- package/dist/scripts/data-transformers/constants/committee-names.js +30 -0
- package/dist/scripts/data-transformers/constants/committee-names.js.map +1 -0
- package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts +11 -0
- package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts.map +1 -0
- package/dist/scripts/data-transformers/constants/content-labels-part1.js +900 -0
- package/dist/scripts/data-transformers/constants/content-labels-part1.js.map +1 -0
- package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts +11 -0
- package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts.map +1 -0
- package/dist/scripts/data-transformers/constants/content-labels-part2.js +900 -0
- package/dist/scripts/data-transformers/constants/content-labels-part2.js.map +1 -0
- package/dist/scripts/data-transformers/constants/content-labels.d.ts +13 -0
- package/dist/scripts/data-transformers/constants/content-labels.d.ts.map +1 -0
- package/dist/scripts/data-transformers/constants/content-labels.js +18 -0
- package/dist/scripts/data-transformers/constants/content-labels.js.map +1 -0
- package/dist/scripts/data-transformers/constants/index.d.ts +15 -0
- package/dist/scripts/data-transformers/constants/index.d.ts.map +1 -0
- package/dist/scripts/data-transformers/constants/index.js +15 -0
- package/dist/scripts/data-transformers/constants/index.js.map +1 -0
- package/dist/scripts/data-transformers/constants/locale-map.d.ts +13 -0
- package/dist/scripts/data-transformers/constants/locale-map.d.ts.map +1 -0
- package/dist/scripts/data-transformers/constants/locale-map.js +17 -0
- package/dist/scripts/data-transformers/constants/locale-map.js.map +1 -0
- package/dist/scripts/data-transformers/constants.d.ts +14 -0
- package/dist/scripts/data-transformers/constants.d.ts.map +1 -0
- package/dist/scripts/data-transformers/constants.js +14 -0
- package/dist/scripts/data-transformers/constants.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts +64 -0
- package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js +805 -0
- package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts +89 -0
- package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js +667 -0
- package/dist/scripts/data-transformers/content-generators/ai-swot-analyzer.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts +50 -0
- package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/cia-overview-section.js +310 -0
- package/dist/scripts/data-transformers/content-generators/cia-overview-section.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/committee.d.ts +12 -0
- package/dist/scripts/data-transformers/content-generators/committee.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/committee.js +247 -0
- package/dist/scripts/data-transformers/content-generators/committee.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts +124 -0
- package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/dashboard-section.js +564 -0
- package/dist/scripts/data-transformers/content-generators/dashboard-section.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts +82 -0
- package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js +321 -0
- package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/generic.d.ts +12 -0
- package/dist/scripts/data-transformers/content-generators/generic.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/generic.js +295 -0
- package/dist/scripts/data-transformers/content-generators/generic.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/index.d.ts +56 -0
- package/dist/scripts/data-transformers/content-generators/index.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/index.js +45 -0
- package/dist/scripts/data-transformers/content-generators/index.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/interpellations.d.ts +12 -0
- package/dist/scripts/data-transformers/content-generators/interpellations.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/interpellations.js +124 -0
- package/dist/scripts/data-transformers/content-generators/interpellations.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts +137 -0
- package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/mindmap-section.js +286 -0
- package/dist/scripts/data-transformers/content-generators/mindmap-section.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts +17 -0
- package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/month-ahead.js +212 -0
- package/dist/scripts/data-transformers/content-generators/month-ahead.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts +17 -0
- package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/monthly-review.js +173 -0
- package/dist/scripts/data-transformers/content-generators/monthly-review.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/motions.d.ts +12 -0
- package/dist/scripts/data-transformers/content-generators/motions.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/motions.js +158 -0
- package/dist/scripts/data-transformers/content-generators/motions.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts +52 -0
- package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/newsworthiness.js +244 -0
- package/dist/scripts/data-transformers/content-generators/newsworthiness.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/propositions.d.ts +12 -0
- package/dist/scripts/data-transformers/content-generators/propositions.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/propositions.js +263 -0
- package/dist/scripts/data-transformers/content-generators/propositions.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts +92 -0
- package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/sankey-section.js +257 -0
- package/dist/scripts/data-transformers/content-generators/sankey-section.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/shared.d.ts +81 -0
- package/dist/scripts/data-transformers/content-generators/shared.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/shared.js +913 -0
- package/dist/scripts/data-transformers/content-generators/shared.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts +83 -0
- package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js +219 -0
- package/dist/scripts/data-transformers/content-generators/stakeholder-swot-section.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/swot-section.d.ts +50 -0
- package/dist/scripts/data-transformers/content-generators/swot-section.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/swot-section.js +177 -0
- package/dist/scripts/data-transformers/content-generators/swot-section.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts +12 -0
- package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators/week-ahead.js +332 -0
- package/dist/scripts/data-transformers/content-generators/week-ahead.js.map +1 -0
- package/dist/scripts/data-transformers/content-generators.d.ts +15 -0
- package/dist/scripts/data-transformers/content-generators.d.ts.map +1 -0
- package/dist/scripts/data-transformers/content-generators.js +14 -0
- package/dist/scripts/data-transformers/content-generators.js.map +1 -0
- package/dist/scripts/data-transformers/document-analysis.d.ts +58 -0
- package/dist/scripts/data-transformers/document-analysis.d.ts.map +1 -0
- package/dist/scripts/data-transformers/document-analysis.js +396 -0
- package/dist/scripts/data-transformers/document-analysis.js.map +1 -0
- package/dist/scripts/data-transformers/helpers.d.ts +144 -0
- package/dist/scripts/data-transformers/helpers.d.ts.map +1 -0
- package/dist/scripts/data-transformers/helpers.js +408 -0
- package/dist/scripts/data-transformers/helpers.js.map +1 -0
- package/dist/scripts/data-transformers/index.d.ts +45 -0
- package/dist/scripts/data-transformers/index.d.ts.map +1 -0
- package/dist/scripts/data-transformers/index.js +66 -0
- package/dist/scripts/data-transformers/index.js.map +1 -0
- package/dist/scripts/data-transformers/metadata.d.ts +42 -0
- package/dist/scripts/data-transformers/metadata.d.ts.map +1 -0
- package/dist/scripts/data-transformers/metadata.js +385 -0
- package/dist/scripts/data-transformers/metadata.js.map +1 -0
- package/dist/scripts/data-transformers/policy-analysis.d.ts +105 -0
- package/dist/scripts/data-transformers/policy-analysis.d.ts.map +1 -0
- package/dist/scripts/data-transformers/policy-analysis.js +686 -0
- package/dist/scripts/data-transformers/policy-analysis.js.map +1 -0
- package/dist/scripts/data-transformers/risk-analysis.d.ts +104 -0
- package/dist/scripts/data-transformers/risk-analysis.d.ts.map +1 -0
- package/dist/scripts/data-transformers/risk-analysis.js +279 -0
- package/dist/scripts/data-transformers/risk-analysis.js.map +1 -0
- package/dist/scripts/data-transformers/types.d.ts +260 -0
- package/dist/scripts/data-transformers/types.d.ts.map +1 -0
- package/dist/scripts/data-transformers/types.js +11 -0
- package/dist/scripts/data-transformers/types.js.map +1 -0
- package/dist/scripts/data-transformers.d.ts +23 -0
- package/dist/scripts/data-transformers.d.ts.map +1 -0
- package/dist/scripts/data-transformers.js +35 -0
- package/dist/scripts/data-transformers.js.map +1 -0
- package/dist/scripts/deep-inspection/index.d.ts +55 -0
- package/dist/scripts/deep-inspection/index.d.ts.map +1 -0
- package/dist/scripts/deep-inspection/index.js +66 -0
- package/dist/scripts/deep-inspection/index.js.map +1 -0
- package/dist/scripts/detect-swedish-leakage.d.ts +69 -0
- package/dist/scripts/detect-swedish-leakage.d.ts.map +1 -0
- package/dist/scripts/detect-swedish-leakage.js +417 -0
- package/dist/scripts/detect-swedish-leakage.js.map +1 -0
- package/dist/scripts/editorial-framework.d.ts +121 -0
- package/dist/scripts/editorial-framework.d.ts.map +1 -0
- package/dist/scripts/editorial-framework.js +364 -0
- package/dist/scripts/editorial-framework.js.map +1 -0
- package/dist/scripts/editorial-pillars.d.ts +43 -0
- package/dist/scripts/editorial-pillars.d.ts.map +1 -0
- package/dist/scripts/editorial-pillars.js +215 -0
- package/dist/scripts/editorial-pillars.js.map +1 -0
- package/dist/scripts/extract-news-metadata.d.ts +12 -0
- package/dist/scripts/extract-news-metadata.d.ts.map +1 -0
- package/dist/scripts/extract-news-metadata.js +107 -0
- package/dist/scripts/extract-news-metadata.js.map +1 -0
- package/dist/scripts/extract-vocabulary.d.ts +15 -0
- package/dist/scripts/extract-vocabulary.d.ts.map +1 -0
- package/dist/scripts/extract-vocabulary.js +255 -0
- package/dist/scripts/extract-vocabulary.js.map +1 -0
- package/dist/scripts/fix-article-navigation.d.ts +37 -0
- package/dist/scripts/fix-article-navigation.d.ts.map +1 -0
- package/dist/scripts/fix-article-navigation.js +198 -0
- package/dist/scripts/fix-article-navigation.js.map +1 -0
- package/dist/scripts/fix-keywords-localization.d.ts +18 -0
- package/dist/scripts/fix-keywords-localization.d.ts.map +1 -0
- package/dist/scripts/fix-keywords-localization.js +270 -0
- package/dist/scripts/fix-keywords-localization.js.map +1 -0
- package/dist/scripts/fix-old-articles-branding.d.ts +17 -0
- package/dist/scripts/fix-old-articles-branding.d.ts.map +1 -0
- package/dist/scripts/fix-old-articles-branding.js +229 -0
- package/dist/scripts/fix-old-articles-branding.js.map +1 -0
- package/dist/scripts/generate-news-backport.d.ts +16 -0
- package/dist/scripts/generate-news-backport.d.ts.map +1 -0
- package/dist/scripts/generate-news-backport.js +379 -0
- package/dist/scripts/generate-news-backport.js.map +1 -0
- package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts +124 -0
- package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts.map +1 -0
- package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js +529 -0
- package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js.map +1 -0
- package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts +59 -0
- package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts.map +1 -0
- package/dist/scripts/generate-news-enhanced/analysis-cache.js +116 -0
- package/dist/scripts/generate-news-enhanced/analysis-cache.js.map +1 -0
- package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts +58 -0
- package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts.map +1 -0
- package/dist/scripts/generate-news-enhanced/analysis-labels.js +144 -0
- package/dist/scripts/generate-news-enhanced/analysis-labels.js.map +1 -0
- package/dist/scripts/generate-news-enhanced/config.d.ts +57 -0
- package/dist/scripts/generate-news-enhanced/config.d.ts.map +1 -0
- package/dist/scripts/generate-news-enhanced/config.js +286 -0
- package/dist/scripts/generate-news-enhanced/config.js.map +1 -0
- package/dist/scripts/generate-news-enhanced/generators.d.ts +119 -0
- package/dist/scripts/generate-news-enhanced/generators.d.ts.map +1 -0
- package/dist/scripts/generate-news-enhanced/generators.js +2108 -0
- package/dist/scripts/generate-news-enhanced/generators.js.map +1 -0
- package/dist/scripts/generate-news-enhanced/helpers.d.ts +123 -0
- package/dist/scripts/generate-news-enhanced/helpers.d.ts.map +1 -0
- package/dist/scripts/generate-news-enhanced/helpers.js +438 -0
- package/dist/scripts/generate-news-enhanced/helpers.js.map +1 -0
- package/dist/scripts/generate-news-enhanced/index.d.ts +19 -0
- package/dist/scripts/generate-news-enhanced/index.d.ts.map +1 -0
- package/dist/scripts/generate-news-enhanced/index.js +221 -0
- package/dist/scripts/generate-news-enhanced/index.js.map +1 -0
- package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts +35 -0
- package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts.map +1 -0
- package/dist/scripts/generate-news-enhanced/swot-analyzer.js +1179 -0
- package/dist/scripts/generate-news-enhanced/swot-analyzer.js.map +1 -0
- package/dist/scripts/generate-news-enhanced/types.d.ts +34 -0
- package/dist/scripts/generate-news-enhanced/types.d.ts.map +1 -0
- package/dist/scripts/generate-news-enhanced/types.js +9 -0
- package/dist/scripts/generate-news-enhanced/types.js.map +1 -0
- package/dist/scripts/generate-news-enhanced.d.ts +25 -0
- package/dist/scripts/generate-news-enhanced.d.ts.map +1 -0
- package/dist/scripts/generate-news-enhanced.js +37 -0
- package/dist/scripts/generate-news-enhanced.js.map +1 -0
- package/dist/scripts/generate-news-indexes/constants.d.ts +20 -0
- package/dist/scripts/generate-news-indexes/constants.d.ts.map +1 -0
- package/dist/scripts/generate-news-indexes/constants.js +308 -0
- package/dist/scripts/generate-news-indexes/constants.js.map +1 -0
- package/dist/scripts/generate-news-indexes/helpers.d.ts +73 -0
- package/dist/scripts/generate-news-indexes/helpers.d.ts.map +1 -0
- package/dist/scripts/generate-news-indexes/helpers.js +352 -0
- package/dist/scripts/generate-news-indexes/helpers.js.map +1 -0
- package/dist/scripts/generate-news-indexes/index.d.ts +20 -0
- package/dist/scripts/generate-news-indexes/index.d.ts.map +1 -0
- package/dist/scripts/generate-news-indexes/index.js +75 -0
- package/dist/scripts/generate-news-indexes/index.js.map +1 -0
- package/dist/scripts/generate-news-indexes/template.d.ts +25 -0
- package/dist/scripts/generate-news-indexes/template.d.ts.map +1 -0
- package/dist/scripts/generate-news-indexes/template.js +644 -0
- package/dist/scripts/generate-news-indexes/template.js.map +1 -0
- package/dist/scripts/generate-news-indexes/types.d.ts +96 -0
- package/dist/scripts/generate-news-indexes/types.d.ts.map +1 -0
- package/dist/scripts/generate-news-indexes/types.js +9 -0
- package/dist/scripts/generate-news-indexes/types.js.map +1 -0
- package/dist/scripts/generate-news-indexes.d.ts +20 -0
- package/dist/scripts/generate-news-indexes.d.ts.map +1 -0
- package/dist/scripts/generate-news-indexes.js +19 -0
- package/dist/scripts/generate-news-indexes.js.map +1 -0
- package/dist/scripts/generate-rss.d.ts +48 -0
- package/dist/scripts/generate-rss.d.ts.map +1 -0
- package/dist/scripts/generate-rss.js +299 -0
- package/dist/scripts/generate-rss.js.map +1 -0
- package/dist/scripts/generate-sitemap-html.d.ts +79 -0
- package/dist/scripts/generate-sitemap-html.d.ts.map +1 -0
- package/dist/scripts/generate-sitemap-html.js +878 -0
- package/dist/scripts/generate-sitemap-html.js.map +1 -0
- package/dist/scripts/generate-sitemap.d.ts +23 -0
- package/dist/scripts/generate-sitemap.d.ts.map +1 -0
- package/dist/scripts/generate-sitemap.js +476 -0
- package/dist/scripts/generate-sitemap.js.map +1 -0
- package/dist/scripts/generate-types-from-cia-schemas.d.ts +176 -0
- package/dist/scripts/generate-types-from-cia-schemas.d.ts.map +1 -0
- package/dist/scripts/generate-types-from-cia-schemas.js +318 -0
- package/dist/scripts/generate-types-from-cia-schemas.js.map +1 -0
- package/dist/scripts/government-role-validator.d.ts +65 -0
- package/dist/scripts/government-role-validator.d.ts.map +1 -0
- package/dist/scripts/government-role-validator.js +217 -0
- package/dist/scripts/government-role-validator.js.map +1 -0
- package/dist/scripts/html-utils.d.ts +17 -0
- package/dist/scripts/html-utils.d.ts.map +1 -0
- package/dist/scripts/html-utils.js +29 -0
- package/dist/scripts/html-utils.js.map +1 -0
- package/dist/scripts/load-cia-stats.d.ts +89 -0
- package/dist/scripts/load-cia-stats.d.ts.map +1 -0
- package/dist/scripts/load-cia-stats.js +400 -0
- package/dist/scripts/load-cia-stats.js.map +1 -0
- package/dist/scripts/mcp-client/client.d.ts +73 -0
- package/dist/scripts/mcp-client/client.d.ts.map +1 -0
- package/dist/scripts/mcp-client/client.js +526 -0
- package/dist/scripts/mcp-client/client.js.map +1 -0
- package/dist/scripts/mcp-client/document-types.d.ts +23 -0
- package/dist/scripts/mcp-client/document-types.d.ts.map +1 -0
- package/dist/scripts/mcp-client/document-types.js +62 -0
- package/dist/scripts/mcp-client/document-types.js.map +1 -0
- package/dist/scripts/mcp-client/index.d.ts +34 -0
- package/dist/scripts/mcp-client/index.d.ts.map +1 -0
- package/dist/scripts/mcp-client/index.js +67 -0
- package/dist/scripts/mcp-client/index.js.map +1 -0
- package/dist/scripts/mcp-client/transport.d.ts +32 -0
- package/dist/scripts/mcp-client/transport.d.ts.map +1 -0
- package/dist/scripts/mcp-client/transport.js +102 -0
- package/dist/scripts/mcp-client/transport.js.map +1 -0
- package/dist/scripts/mcp-client.d.ts +18 -0
- package/dist/scripts/mcp-client.d.ts.map +1 -0
- package/dist/scripts/mcp-client.js +18 -0
- package/dist/scripts/mcp-client.js.map +1 -0
- package/dist/scripts/mcp-query-cli.d.ts +25 -0
- package/dist/scripts/mcp-query-cli.d.ts.map +1 -0
- package/dist/scripts/mcp-query-cli.js +66 -0
- package/dist/scripts/mcp-query-cli.js.map +1 -0
- package/dist/scripts/news-types/breaking-news.d.ts +178 -0
- package/dist/scripts/news-types/breaking-news.d.ts.map +1 -0
- package/dist/scripts/news-types/breaking-news.js +428 -0
- package/dist/scripts/news-types/breaking-news.js.map +1 -0
- package/dist/scripts/news-types/committee-reports.d.ts +212 -0
- package/dist/scripts/news-types/committee-reports.d.ts.map +1 -0
- package/dist/scripts/news-types/committee-reports.js +404 -0
- package/dist/scripts/news-types/committee-reports.js.map +1 -0
- package/dist/scripts/news-types/month-ahead.d.ts +71 -0
- package/dist/scripts/news-types/month-ahead.d.ts.map +1 -0
- package/dist/scripts/news-types/month-ahead.js +392 -0
- package/dist/scripts/news-types/month-ahead.js.map +1 -0
- package/dist/scripts/news-types/monthly-review.d.ts +61 -0
- package/dist/scripts/news-types/monthly-review.d.ts.map +1 -0
- package/dist/scripts/news-types/monthly-review.js +417 -0
- package/dist/scripts/news-types/monthly-review.js.map +1 -0
- package/dist/scripts/news-types/motions.d.ts +214 -0
- package/dist/scripts/news-types/motions.d.ts.map +1 -0
- package/dist/scripts/news-types/motions.js +447 -0
- package/dist/scripts/news-types/motions.js.map +1 -0
- package/dist/scripts/news-types/propositions.d.ts +204 -0
- package/dist/scripts/news-types/propositions.d.ts.map +1 -0
- package/dist/scripts/news-types/propositions.js +401 -0
- package/dist/scripts/news-types/propositions.js.map +1 -0
- package/dist/scripts/news-types/week-ahead.d.ts +231 -0
- package/dist/scripts/news-types/week-ahead.d.ts.map +1 -0
- package/dist/scripts/news-types/week-ahead.js +441 -0
- package/dist/scripts/news-types/week-ahead.js.map +1 -0
- package/dist/scripts/news-types/weekly-review/analysis.d.ts +47 -0
- package/dist/scripts/news-types/weekly-review/analysis.d.ts.map +1 -0
- package/dist/scripts/news-types/weekly-review/analysis.js +276 -0
- package/dist/scripts/news-types/weekly-review/analysis.js.map +1 -0
- package/dist/scripts/news-types/weekly-review/data-loader.d.ts +51 -0
- package/dist/scripts/news-types/weekly-review/data-loader.d.ts.map +1 -0
- package/dist/scripts/news-types/weekly-review/data-loader.js +298 -0
- package/dist/scripts/news-types/weekly-review/data-loader.js.map +1 -0
- package/dist/scripts/news-types/weekly-review/generator.d.ts +18 -0
- package/dist/scripts/news-types/weekly-review/generator.d.ts.map +1 -0
- package/dist/scripts/news-types/weekly-review/generator.js +284 -0
- package/dist/scripts/news-types/weekly-review/generator.js.map +1 -0
- package/dist/scripts/news-types/weekly-review/index.d.ts +20 -0
- package/dist/scripts/news-types/weekly-review/index.d.ts.map +1 -0
- package/dist/scripts/news-types/weekly-review/index.js +23 -0
- package/dist/scripts/news-types/weekly-review/index.js.map +1 -0
- package/dist/scripts/news-types/weekly-review/types.d.ts +72 -0
- package/dist/scripts/news-types/weekly-review/types.d.ts.map +1 -0
- package/dist/scripts/news-types/weekly-review/types.js +20 -0
- package/dist/scripts/news-types/weekly-review/types.js.map +1 -0
- package/dist/scripts/news-types/weekly-review/validation.d.ts +10 -0
- package/dist/scripts/news-types/weekly-review/validation.d.ts.map +1 -0
- package/dist/scripts/news-types/weekly-review/validation.js +95 -0
- package/dist/scripts/news-types/weekly-review/validation.js.map +1 -0
- package/dist/scripts/news-types/weekly-review.d.ts +15 -0
- package/dist/scripts/news-types/weekly-review.d.ts.map +1 -0
- package/dist/scripts/news-types/weekly-review.js +14 -0
- package/dist/scripts/news-types/weekly-review.js.map +1 -0
- package/dist/scripts/party-variants.d.ts +23 -0
- package/dist/scripts/party-variants.d.ts.map +1 -0
- package/dist/scripts/party-variants.js +50 -0
- package/dist/scripts/party-variants.js.map +1 -0
- package/dist/scripts/pipeline/index.d.ts +19 -0
- package/dist/scripts/pipeline/index.d.ts.map +1 -0
- package/dist/scripts/pipeline/index.js +17 -0
- package/dist/scripts/pipeline/index.js.map +1 -0
- package/dist/scripts/pipeline/orchestrator.d.ts +56 -0
- package/dist/scripts/pipeline/orchestrator.d.ts.map +1 -0
- package/dist/scripts/pipeline/orchestrator.js +147 -0
- package/dist/scripts/pipeline/orchestrator.js.map +1 -0
- package/dist/scripts/pipeline/types.d.ts +117 -0
- package/dist/scripts/pipeline/types.d.ts.map +1 -0
- package/dist/scripts/pipeline/types.js +13 -0
- package/dist/scripts/pipeline/types.js.map +1 -0
- package/dist/scripts/pipeline/validation.d.ts +66 -0
- package/dist/scripts/pipeline/validation.d.ts.map +1 -0
- package/dist/scripts/pipeline/validation.js +129 -0
- package/dist/scripts/pipeline/validation.js.map +1 -0
- package/dist/scripts/populate-analysis-data.d.ts +41 -0
- package/dist/scripts/populate-analysis-data.d.ts.map +1 -0
- package/dist/scripts/populate-analysis-data.js +255 -0
- package/dist/scripts/populate-analysis-data.js.map +1 -0
- package/dist/scripts/pre-article-analysis/data-downloader.d.ts +80 -0
- package/dist/scripts/pre-article-analysis/data-downloader.d.ts.map +1 -0
- package/dist/scripts/pre-article-analysis/data-downloader.js +230 -0
- package/dist/scripts/pre-article-analysis/data-downloader.js.map +1 -0
- package/dist/scripts/pre-article-analysis/data-persistence.d.ts +141 -0
- package/dist/scripts/pre-article-analysis/data-persistence.d.ts.map +1 -0
- package/dist/scripts/pre-article-analysis/data-persistence.js +345 -0
- package/dist/scripts/pre-article-analysis/data-persistence.js.map +1 -0
- package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts +95 -0
- package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts.map +1 -0
- package/dist/scripts/pre-article-analysis/markdown-serializer.js +648 -0
- package/dist/scripts/pre-article-analysis/markdown-serializer.js.map +1 -0
- package/dist/scripts/pre-article-analysis/pdf-converter.d.ts +58 -0
- package/dist/scripts/pre-article-analysis/pdf-converter.d.ts.map +1 -0
- package/dist/scripts/pre-article-analysis/pdf-converter.js +142 -0
- package/dist/scripts/pre-article-analysis/pdf-converter.js.map +1 -0
- package/dist/scripts/pre-article-analysis.d.ts +41 -0
- package/dist/scripts/pre-article-analysis.d.ts.map +1 -0
- package/dist/scripts/pre-article-analysis.js +578 -0
- package/dist/scripts/pre-article-analysis.js.map +1 -0
- package/dist/scripts/scb-client.d.ts +104 -0
- package/dist/scripts/scb-client.d.ts.map +1 -0
- package/dist/scripts/scb-client.js +286 -0
- package/dist/scripts/scb-client.js.map +1 -0
- package/dist/scripts/scb-context.d.ts +88 -0
- package/dist/scripts/scb-context.d.ts.map +1 -0
- package/dist/scripts/scb-context.js +307 -0
- package/dist/scripts/scb-context.js.map +1 -0
- package/dist/scripts/shared/version.d.ts +9 -0
- package/dist/scripts/shared/version.d.ts.map +1 -0
- package/dist/scripts/shared/version.js +28 -0
- package/dist/scripts/shared/version.js.map +1 -0
- package/dist/scripts/statistical-claims-detector.d.ts +119 -0
- package/dist/scripts/statistical-claims-detector.d.ts.map +1 -0
- package/dist/scripts/statistical-claims-detector.js +391 -0
- package/dist/scripts/statistical-claims-detector.js.map +1 -0
- package/dist/scripts/sync-cia-schemas.d.ts +52 -0
- package/dist/scripts/sync-cia-schemas.d.ts.map +1 -0
- package/dist/scripts/sync-cia-schemas.js +195 -0
- package/dist/scripts/sync-cia-schemas.js.map +1 -0
- package/dist/scripts/translation-dictionary.d.ts +45 -0
- package/dist/scripts/translation-dictionary.d.ts.map +1 -0
- package/dist/scripts/translation-dictionary.js +3642 -0
- package/dist/scripts/translation-dictionary.js.map +1 -0
- package/dist/scripts/types/article.d.ts +362 -0
- package/dist/scripts/types/article.d.ts.map +1 -0
- package/dist/scripts/types/article.js +6 -0
- package/dist/scripts/types/article.js.map +1 -0
- package/dist/scripts/types/content.d.ts +167 -0
- package/dist/scripts/types/content.d.ts.map +1 -0
- package/dist/scripts/types/content.js +6 -0
- package/dist/scripts/types/content.js.map +1 -0
- package/dist/scripts/types/editorial.d.ts +17 -0
- package/dist/scripts/types/editorial.d.ts.map +1 -0
- package/dist/scripts/types/editorial.js +6 -0
- package/dist/scripts/types/editorial.js.map +1 -0
- package/dist/scripts/types/language.d.ts +7 -0
- package/dist/scripts/types/language.d.ts.map +1 -0
- package/dist/scripts/types/language.js +6 -0
- package/dist/scripts/types/language.js.map +1 -0
- package/dist/scripts/types/mcp.d.ts +117 -0
- package/dist/scripts/types/mcp.d.ts.map +1 -0
- package/dist/scripts/types/mcp.js +6 -0
- package/dist/scripts/types/mcp.js.map +1 -0
- package/dist/scripts/types/party.d.ts +9 -0
- package/dist/scripts/types/party.d.ts.map +1 -0
- package/dist/scripts/types/party.js +6 -0
- package/dist/scripts/types/party.js.map +1 -0
- package/dist/scripts/types/validation.d.ts +136 -0
- package/dist/scripts/types/validation.d.ts.map +1 -0
- package/dist/scripts/types/validation.js +6 -0
- package/dist/scripts/types/validation.js.map +1 -0
- package/dist/scripts/types/workflow.d.ts +78 -0
- package/dist/scripts/types/workflow.d.ts.map +1 -0
- package/dist/scripts/types/workflow.js +6 -0
- package/dist/scripts/types/workflow.js.map +1 -0
- package/dist/scripts/update-stats-from-cia.d.ts +44 -0
- package/dist/scripts/update-stats-from-cia.d.ts.map +1 -0
- package/dist/scripts/update-stats-from-cia.js +310 -0
- package/dist/scripts/update-stats-from-cia.js.map +1 -0
- package/dist/scripts/validate-against-cia-schemas.d.ts +126 -0
- package/dist/scripts/validate-against-cia-schemas.d.ts.map +1 -0
- package/dist/scripts/validate-against-cia-schemas.js +299 -0
- package/dist/scripts/validate-against-cia-schemas.js.map +1 -0
- package/dist/scripts/validate-cross-references.d.ts +49 -0
- package/dist/scripts/validate-cross-references.d.ts.map +1 -0
- package/dist/scripts/validate-cross-references.js +183 -0
- package/dist/scripts/validate-cross-references.js.map +1 -0
- package/dist/scripts/validate-file-ownership.d.ts +68 -0
- package/dist/scripts/validate-file-ownership.d.ts.map +1 -0
- package/dist/scripts/validate-file-ownership.js +135 -0
- package/dist/scripts/validate-file-ownership.js.map +1 -0
- package/dist/scripts/validate-news-translations.d.ts +27 -0
- package/dist/scripts/validate-news-translations.d.ts.map +1 -0
- package/dist/scripts/validate-news-translations.js +258 -0
- package/dist/scripts/validate-news-translations.js.map +1 -0
- package/dist/scripts/validate-translations.d.ts +162 -0
- package/dist/scripts/validate-translations.d.ts.map +1 -0
- package/dist/scripts/validate-translations.js +378 -0
- package/dist/scripts/validate-translations.js.map +1 -0
- package/dist/scripts/workflow-state-coordinator.d.ts +354 -0
- package/dist/scripts/workflow-state-coordinator.d.ts.map +1 -0
- package/dist/scripts/workflow-state-coordinator.js +876 -0
- package/dist/scripts/workflow-state-coordinator.js.map +1 -0
- package/dist/scripts/world-bank-client.d.ts +122 -0
- package/dist/scripts/world-bank-client.d.ts.map +1 -0
- package/dist/scripts/world-bank-client.js +192 -0
- package/dist/scripts/world-bank-client.js.map +1 -0
- package/dist/scripts/world-bank-context.d.ts +88 -0
- package/dist/scripts/world-bank-context.d.ts.map +1 -0
- package/dist/scripts/world-bank-context.js +331 -0
- package/dist/scripts/world-bank-context.js.map +1 -0
- package/package.json +32 -7
- package/dist/lib/chart-factory.d.ts.map +0 -1
- package/dist/lib/chart-factory.js.map +0 -1
- package/dist/lib/data-loader.d.ts.map +0 -1
- package/dist/lib/data-loader.js.map +0 -1
- package/dist/lib/dom-utils.d.ts.map +0 -1
- package/dist/lib/dom-utils.js.map +0 -1
- package/dist/lib/error-boundary.d.ts.map +0 -1
- package/dist/lib/error-boundary.js.map +0 -1
- package/dist/lib/fallback-ui.d.ts.map +0 -1
- package/dist/lib/fallback-ui.js.map +0 -1
- package/dist/lib/index.d.ts.map +0 -1
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/logger.d.ts.map +0 -1
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/theme.d.ts.map +0 -1
- package/dist/lib/theme.js.map +0 -1
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/types.js.map +0 -1
- /package/dist/lib/{chart-factory.d.ts → shared/chart-factory.d.ts} +0 -0
- /package/dist/lib/{chart-factory.js → shared/chart-factory.js} +0 -0
- /package/dist/lib/{data-loader.d.ts → shared/data-loader.d.ts} +0 -0
- /package/dist/lib/{data-loader.js → shared/data-loader.js} +0 -0
- /package/dist/lib/{dom-utils.d.ts → shared/dom-utils.d.ts} +0 -0
- /package/dist/lib/{dom-utils.js → shared/dom-utils.js} +0 -0
- /package/dist/lib/{error-boundary.d.ts → shared/error-boundary.d.ts} +0 -0
- /package/dist/lib/{error-boundary.js → shared/error-boundary.js} +0 -0
- /package/dist/lib/{fallback-ui.d.ts → shared/fallback-ui.d.ts} +0 -0
- /package/dist/lib/{fallback-ui.js → shared/fallback-ui.js} +0 -0
- /package/dist/lib/{index.d.ts → shared/index.d.ts} +0 -0
- /package/dist/lib/{index.js → shared/index.js} +0 -0
- /package/dist/lib/{logger.d.ts → shared/logger.d.ts} +0 -0
- /package/dist/lib/{logger.js → shared/logger.js} +0 -0
- /package/dist/lib/{theme.d.ts → shared/theme.d.ts} +0 -0
- /package/dist/lib/{theme.js → shared/theme.js} +0 -0
- /package/dist/lib/{types.d.ts → shared/types.d.ts} +0 -0
- /package/dist/lib/{types.js → shared/types.js} +0 -0
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module data-transformers/document-analysis
|
|
3
|
+
* @description Document grouping, opposition strategy analysis, and
|
|
4
|
+
* per-document intelligence analysis. Handles motion-to-proposition
|
|
5
|
+
* mapping, party activity breakdown, and speech-enriched analysis.
|
|
6
|
+
*
|
|
7
|
+
* @author Hack23 AB
|
|
8
|
+
* @license Apache-2.0
|
|
9
|
+
*/
|
|
10
|
+
import { escapeHtml } from '../html-utils.js';
|
|
11
|
+
import { L, svSpan, sanitizeUrl, isPersonProfileText, cleanMotionText, parseMotionAuthorParty, extractKeyPassage, generateEnhancedSummary, normalizePartyKey, partyMotionSuccessRate, formatDocumentDate, } from './helpers.js';
|
|
12
|
+
import { detectPolicyDomains, generatePolicySignificance, generateDeepPolicyAnalysis } from './policy-analysis.js';
|
|
13
|
+
/** Committee codes with known high-influence weighting */
|
|
14
|
+
const HIGH_INFLUENCE_COMMITTEES = new Set(['FiU', 'KU', 'JuU', 'UU', 'FöU', 'SoU']);
|
|
15
|
+
/** Document types that carry higher parliamentary influence */
|
|
16
|
+
const HIGH_INFLUENCE_TYPES = new Set(['prop', 'bet', 'skr', 'dir']);
|
|
17
|
+
/**
|
|
18
|
+
* Calculate an influence score (0-100) for a parliamentary document.
|
|
19
|
+
* Considers committee tier, document type, policy domain breadth,
|
|
20
|
+
* and the presence of full content as a proxy for document depth.
|
|
21
|
+
*
|
|
22
|
+
* @param doc - The document to score
|
|
23
|
+
* @returns Influence score 0-100
|
|
24
|
+
*/
|
|
25
|
+
export function calculateInfluenceScore(doc) {
|
|
26
|
+
let score = 0;
|
|
27
|
+
// Document type weighting (propositions > reports > motions)
|
|
28
|
+
const docType = doc.doktyp || doc.documentType || '';
|
|
29
|
+
if (HIGH_INFLUENCE_TYPES.has(docType)) {
|
|
30
|
+
score += docType === 'prop' ? 35 : docType === 'bet' ? 30 : 20;
|
|
31
|
+
}
|
|
32
|
+
else if (docType === 'mot') {
|
|
33
|
+
score += 10;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
score += 15; // unknown type gets moderate weight
|
|
37
|
+
}
|
|
38
|
+
// Committee tier weighting
|
|
39
|
+
const organ = doc.organ || doc.committee || '';
|
|
40
|
+
if (HIGH_INFLUENCE_COMMITTEES.has(organ)) {
|
|
41
|
+
score += 30;
|
|
42
|
+
}
|
|
43
|
+
else if (organ) {
|
|
44
|
+
score += 15;
|
|
45
|
+
}
|
|
46
|
+
// Policy domain breadth (more domains = broader impact)
|
|
47
|
+
const domains = detectPolicyDomains(doc);
|
|
48
|
+
score += Math.min(20, domains.length * 7);
|
|
49
|
+
// Content richness (full text available indicates substantive document)
|
|
50
|
+
if (doc.fullText || doc.fullContent) {
|
|
51
|
+
score += 10;
|
|
52
|
+
}
|
|
53
|
+
// Party sponsorship (government documents inherently carry more weight)
|
|
54
|
+
const isGovernment = !doc.parti || doc.doktyp === 'prop';
|
|
55
|
+
if (isGovernment && docType !== 'mot') {
|
|
56
|
+
score += 5;
|
|
57
|
+
}
|
|
58
|
+
return Math.min(100, score);
|
|
59
|
+
}
|
|
60
|
+
/** Matches a strict proposition ID (YYYY/YY:NNN) in a motion title. */
|
|
61
|
+
const PROP_REFERENCE_REGEX = /med anledning av prop\.\s+(\d{4}\/\d{2}:\d+)/i;
|
|
62
|
+
/** Captures the descriptive title portion that follows the prop ID. */
|
|
63
|
+
export const PROP_TITLE_SUFFIX_REGEX = /med anledning av prop\.\s+\d{4}\/\d{2}:\d+\s*(.*)/i;
|
|
64
|
+
/**
|
|
65
|
+
* Extract the parent proposition reference (e.g. "2025/26:118") from a motion title.
|
|
66
|
+
* Motions responding to a government proposition have titles like
|
|
67
|
+
* "med anledning av prop. 2025/26:118 Tillståndsprövning enligt förnybartdirektivet".
|
|
68
|
+
*/
|
|
69
|
+
export function extractPropRef(title) {
|
|
70
|
+
const m = title.match(PROP_REFERENCE_REGEX);
|
|
71
|
+
return m?.[1] || null;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Group motions by the parent government proposition they respond to.
|
|
75
|
+
* Motions without a proposition reference are returned separately as "independent".
|
|
76
|
+
*/
|
|
77
|
+
export function groupMotionsByProposition(motions) {
|
|
78
|
+
const grouped = new Map();
|
|
79
|
+
const independent = [];
|
|
80
|
+
for (const motion of motions) {
|
|
81
|
+
const title = motion.titel || motion.title || '';
|
|
82
|
+
const ref = extractPropRef(title);
|
|
83
|
+
if (ref) {
|
|
84
|
+
if (!grouped.has(ref))
|
|
85
|
+
grouped.set(ref, []);
|
|
86
|
+
grouped.get(ref).push(motion);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
independent.push(motion);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return { grouped, independent };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Group propositions by their referred committee (organ/committee field).
|
|
96
|
+
* Propositions without a committee use the empty-string key.
|
|
97
|
+
*/
|
|
98
|
+
export function groupPropositionsByCommittee(propositions) {
|
|
99
|
+
const map = new Map();
|
|
100
|
+
for (const prop of propositions) {
|
|
101
|
+
const key = prop.organ ?? prop.committee ?? '';
|
|
102
|
+
if (!map.has(key))
|
|
103
|
+
map.set(key, []);
|
|
104
|
+
map.get(key).push(prop);
|
|
105
|
+
}
|
|
106
|
+
return map;
|
|
107
|
+
}
|
|
108
|
+
export function generateOppositionStrategySection(motions, lang) {
|
|
109
|
+
const byParty = {};
|
|
110
|
+
motions.forEach(m => {
|
|
111
|
+
const party = normalizePartyKey(m.parti);
|
|
112
|
+
if (!byParty[party])
|
|
113
|
+
byParty[party] = [];
|
|
114
|
+
byParty[party].push(m);
|
|
115
|
+
});
|
|
116
|
+
const sortedParties = Object.entries(byParty)
|
|
117
|
+
.filter(([p]) => p !== 'other')
|
|
118
|
+
.sort(([, a], [, b]) => b.length - a.length);
|
|
119
|
+
if (sortedParties.length === 0)
|
|
120
|
+
return '';
|
|
121
|
+
const [topParty, topMotions] = sortedParties[0];
|
|
122
|
+
// Identify primary policy domain(s) for the most-active party
|
|
123
|
+
const topDomainSet = new Set();
|
|
124
|
+
topMotions.forEach(m => {
|
|
125
|
+
detectPolicyDomains(m, lang).forEach(d => topDomainSet.add(d));
|
|
126
|
+
});
|
|
127
|
+
const topDomains = Array.from(topDomainSet).slice(0, 2);
|
|
128
|
+
const count = topMotions.length;
|
|
129
|
+
const safeParty = escapeHtml(topParty);
|
|
130
|
+
// Per-language conjunction for domain list
|
|
131
|
+
const conjunctions = {
|
|
132
|
+
sv: ' och ', da: ' og ', no: ' og ', fi: ' ja ', de: ' und ', fr: ' et ',
|
|
133
|
+
es: ' y ', nl: ' en ', ar: ' و', he: ' ו', ja: '・', ko: '·', zh: '和',
|
|
134
|
+
};
|
|
135
|
+
const conjunction = conjunctions[lang] ?? ' and ';
|
|
136
|
+
const domainList = topDomains.join(conjunction);
|
|
137
|
+
// Per-language lead templates: {party} leads with {count} motions, focused on {domains}.
|
|
138
|
+
const leadsVal = L(lang, 'partyLeadsOpposition');
|
|
139
|
+
let text;
|
|
140
|
+
if (typeof leadsVal === 'string' && leadsVal !== '') {
|
|
141
|
+
// If constant available in CONTENT_LABELS — use it directly
|
|
142
|
+
text = leadsVal
|
|
143
|
+
.replace('{party}', `<strong>${safeParty}</strong>`)
|
|
144
|
+
.replace('{count}', String(count));
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
// Fallback inline templates per language
|
|
148
|
+
const templates = {
|
|
149
|
+
sv: (p, n) => `<strong>${p}</strong> är mest aktiv med ${n} motion${n !== 1 ? 'er' : ''}`,
|
|
150
|
+
da: (p, n) => `<strong>${p}</strong> fører med ${n} forslag`,
|
|
151
|
+
no: (p, n) => `<strong>${p}</strong> leder med ${n} forslag`,
|
|
152
|
+
fi: (p, n) => `<strong>${p}</strong> johtaa ${n} aloitteella`,
|
|
153
|
+
de: (p, n) => `<strong>${p}</strong> führt mit ${n} Antrag${n !== 1 ? 'en' : ''}`,
|
|
154
|
+
fr: (p, n) => `<strong>${p}</strong> mène avec ${n} motion${n !== 1 ? 's' : ''}`,
|
|
155
|
+
es: (p, n) => `<strong>${p}</strong> lidera con ${n} mocion${n !== 1 ? 'es' : ''}`,
|
|
156
|
+
nl: (p, n) => `<strong>${p}</strong> leidt met ${n} motie${n !== 1 ? 's' : ''}`,
|
|
157
|
+
ar: (p, n) => `<strong>${p}</strong> يتصدر بـ${n} اقتراح`,
|
|
158
|
+
he: (p, n) => `<strong>${p}</strong> מוביל עם ${n} הצעות`,
|
|
159
|
+
ja: (p, n) => `<strong>${p}</strong>が${n}件の動議で最も活発`,
|
|
160
|
+
ko: (p, n) => `<strong>${p}</strong>이(가) ${n}건의 동의로 선두`,
|
|
161
|
+
zh: (p, n) => `<strong>${p}</strong>以${n}项动议领先`,
|
|
162
|
+
};
|
|
163
|
+
const tpl = templates[lang];
|
|
164
|
+
text = tpl ? tpl(safeParty, count) : `<strong>${safeParty}</strong> leads opposition activity with ${count} motion${count !== 1 ? 's' : ''}`;
|
|
165
|
+
}
|
|
166
|
+
if (domainList) {
|
|
167
|
+
const focusTemplates = {
|
|
168
|
+
sv: ', med fokus på ', da: ', med fokus på ', no: ', med fokus på ',
|
|
169
|
+
fi: ', painopisteenä ', de: ', mit Fokus auf ', fr: ', axé sur ',
|
|
170
|
+
es: ', centrado en ', nl: ', gericht op ', ar: '، بالتركيز على ',
|
|
171
|
+
he: ', בדגש על ', ja: '、', ko: ', ', zh: ',重点关注',
|
|
172
|
+
};
|
|
173
|
+
const focusPrefix = focusTemplates[lang] ?? ', focused on ';
|
|
174
|
+
text += `${focusPrefix}${escapeHtml(domainList)}`;
|
|
175
|
+
}
|
|
176
|
+
text += '.';
|
|
177
|
+
if (sortedParties.length > 1) {
|
|
178
|
+
const [secondParty, secondMotions] = sortedParties[1];
|
|
179
|
+
const n = secondMotions.length;
|
|
180
|
+
const safeSecond = escapeHtml(secondParty);
|
|
181
|
+
const followTemplates = {
|
|
182
|
+
sv: (p, c) => ` ${p} följer med ${c} motion${c !== 1 ? 'er' : ''}.`,
|
|
183
|
+
da: (p, c) => ` ${p} følger med ${c} forslag.`,
|
|
184
|
+
no: (p, c) => ` ${p} følger med ${c} forslag.`,
|
|
185
|
+
fi: (p, c) => ` ${p} seuraa ${c} aloitteella.`,
|
|
186
|
+
de: (p, c) => ` ${p} folgt mit ${c} Antrag${c !== 1 ? 'en' : ''}.`,
|
|
187
|
+
fr: (p, c) => ` ${p} suit avec ${c} motion${c !== 1 ? 's' : ''}.`,
|
|
188
|
+
es: (p, c) => ` ${p} sigue con ${c} mocion${c !== 1 ? 'es' : ''}.`,
|
|
189
|
+
nl: (p, c) => ` ${p} volgt met ${c} motie${c !== 1 ? 's' : ''}.`,
|
|
190
|
+
ar: (p, c) => ` ${p} يتبع بـ${c} اقتراح.`,
|
|
191
|
+
he: (p, c) => ` ${p} עוקב עם ${c} הצעות.`,
|
|
192
|
+
ja: (p, c) => ` ${p}が${c}件で続きます。`,
|
|
193
|
+
ko: (p, c) => ` ${p}이(가) ${c}건으로 뒤를 잇습니다.`,
|
|
194
|
+
zh: (p, c) => ` ${p}以${c}项紧随其后。`,
|
|
195
|
+
};
|
|
196
|
+
const followTpl = followTemplates[lang];
|
|
197
|
+
text += followTpl
|
|
198
|
+
? followTpl(safeSecond, n)
|
|
199
|
+
: ` ${safeSecond} follows with ${n} motion${n !== 1 ? 's' : ''}.`;
|
|
200
|
+
}
|
|
201
|
+
return ` <p>${text}</p>\n`;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Render a single motion entry div (shared between flat list and themed sections).
|
|
205
|
+
*/
|
|
206
|
+
export function renderMotionEntry(motion, lang) {
|
|
207
|
+
const titleText = motion.titel || motion.title || '';
|
|
208
|
+
const escapedTitle = escapeHtml(titleText);
|
|
209
|
+
const titleHtml = (motion.titel && !motion.title)
|
|
210
|
+
? svSpan(escapedTitle, lang)
|
|
211
|
+
: escapedTitle;
|
|
212
|
+
const docName = escapeHtml(motion.dokumentnamn || motion.dok_id || titleText);
|
|
213
|
+
// Use enriched author and party data, with fallback parsing from raw notis.
|
|
214
|
+
// Treat 'Unknown' sentinel (set by enrichDocumentsWithContent) as missing so
|
|
215
|
+
// we attempt parseMotionAuthorParty before giving up.
|
|
216
|
+
const unknownVal = L(lang, 'unknown');
|
|
217
|
+
let authorName = (motion.intressent_namn !== 'Unknown' ? motion.intressent_namn : null)
|
|
218
|
+
|| (motion.author !== 'Unknown' ? motion.author : null)
|
|
219
|
+
|| '';
|
|
220
|
+
let partyName = (motion.parti !== 'Unknown' ? motion.parti : '') || '';
|
|
221
|
+
// Fire fallback when EITHER author or party is missing — covers the party-only sentinel case
|
|
222
|
+
// where intressent_namn is valid but parti was 'Unknown' and stripped to ''.
|
|
223
|
+
if (!authorName || !partyName) {
|
|
224
|
+
const rawText = motion.undertitel || motion.summary || motion.notis || motion.fullText || motion.titel || motion.rubrik || '';
|
|
225
|
+
const parsed = parseMotionAuthorParty(rawText);
|
|
226
|
+
if (parsed) {
|
|
227
|
+
if (parsed.author && !authorName)
|
|
228
|
+
authorName = parsed.author;
|
|
229
|
+
if (parsed.party && !partyName)
|
|
230
|
+
partyName = parsed.party;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (!authorName)
|
|
234
|
+
authorName = typeof unknownVal === 'string' ? unknownVal : 'Unknown';
|
|
235
|
+
const authorLine = partyName
|
|
236
|
+
? `${escapeHtml(authorName)} (${escapeHtml(partyName)})`
|
|
237
|
+
: escapeHtml(authorName);
|
|
238
|
+
// Use enhanced summary based on metadata (cleanMotionText strips Swedish boilerplate)
|
|
239
|
+
const summaryText = generateEnhancedSummary(motion, 'motion', lang);
|
|
240
|
+
const motionDefaultVal = L(lang, 'motionDefault');
|
|
241
|
+
// Only wrap in Swedish-language span when the content comes from a Swedish source
|
|
242
|
+
const isSwedishContent = (motion.titel && !motion.title)
|
|
243
|
+
|| (motion.summary || motion.notis || '').includes('Motion till riksdagen');
|
|
244
|
+
const summaryHtml = (summaryText && summaryText !== motionDefaultVal && isSwedishContent)
|
|
245
|
+
? svSpan(escapeHtml(summaryText), lang)
|
|
246
|
+
: escapeHtml(summaryText || (typeof motionDefaultVal === 'string' ? motionDefaultVal : ''));
|
|
247
|
+
const readFullVal = L(lang, 'readFullMotion');
|
|
248
|
+
const whyItMattersVal = L(lang, 'whyItMatters');
|
|
249
|
+
const dateHtml = formatDocumentDate(motion, lang);
|
|
250
|
+
return `
|
|
251
|
+
<div class="motion-entry">
|
|
252
|
+
<h3>${titleHtml}</h3>
|
|
253
|
+
<p><strong>${L(lang, 'filedBy')}:</strong> ${authorLine}</p>${dateHtml ? `\n <p>${dateHtml}</p>` : ''}
|
|
254
|
+
<p>${summaryHtml}</p>
|
|
255
|
+
<p><strong>${escapeHtml(String(whyItMattersVal))}:</strong> ${generateDeepPolicyAnalysis(motion, lang, 'mot')}</p>
|
|
256
|
+
<p><a href="${sanitizeUrl(motion.url)}" class="document-link" rel="noopener noreferrer">${escapeHtml(String(readFullVal))}: ${docName}</a></p>
|
|
257
|
+
</div>
|
|
258
|
+
`;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Render a single interpellation entry with interpellation-specific labels and CSS classes.
|
|
262
|
+
* Uses 'ip' doktyp for domain analysis and interpellation-specific link/default labels.
|
|
263
|
+
*/
|
|
264
|
+
export function renderInterpellationEntry(doc, lang) {
|
|
265
|
+
const titleText = doc.titel || doc.title || '';
|
|
266
|
+
const escapedTitle = escapeHtml(titleText);
|
|
267
|
+
const titleHtml = (doc.titel && !doc.title)
|
|
268
|
+
? svSpan(escapedTitle, lang)
|
|
269
|
+
: escapedTitle;
|
|
270
|
+
const docName = escapeHtml(doc.dokumentnamn || doc.dok_id || titleText);
|
|
271
|
+
const unknownVal = L(lang, 'unknown');
|
|
272
|
+
let authorName = (doc.intressent_namn !== 'Unknown' ? doc.intressent_namn : null)
|
|
273
|
+
|| (doc.author !== 'Unknown' ? doc.author : null)
|
|
274
|
+
|| '';
|
|
275
|
+
let partyName = (doc.parti !== 'Unknown' ? doc.parti : '') || '';
|
|
276
|
+
if (!authorName || !partyName) {
|
|
277
|
+
const rawText = doc.undertitel || doc.summary || doc.notis || doc.fullText || doc.titel || doc.rubrik || '';
|
|
278
|
+
const parsed = parseMotionAuthorParty(rawText);
|
|
279
|
+
if (parsed) {
|
|
280
|
+
if (parsed.author && !authorName)
|
|
281
|
+
authorName = parsed.author;
|
|
282
|
+
if (parsed.party && !partyName)
|
|
283
|
+
partyName = parsed.party;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (!authorName)
|
|
287
|
+
authorName = typeof unknownVal === 'string' ? unknownVal : 'Unknown';
|
|
288
|
+
const authorLine = partyName
|
|
289
|
+
? `${escapeHtml(authorName)} (${escapeHtml(partyName)})`
|
|
290
|
+
: escapeHtml(authorName);
|
|
291
|
+
const summaryText = generateEnhancedSummary(doc, 'interpellation', lang);
|
|
292
|
+
const interpDefaultVal = L(lang, 'interpellationDefault');
|
|
293
|
+
// Detect Swedish content: use titel-without-title heuristic (same as renderMotionEntry)
|
|
294
|
+
// or match Swedish-specific boilerplate (not just "Interpellation" which is the same in English)
|
|
295
|
+
const isSwedishContent = (doc.titel && !doc.title)
|
|
296
|
+
|| (doc.summary || doc.notis || '').includes('Interpellation till');
|
|
297
|
+
const summaryHtml = (summaryText && summaryText !== interpDefaultVal && isSwedishContent)
|
|
298
|
+
? svSpan(escapeHtml(summaryText), lang)
|
|
299
|
+
: escapeHtml(summaryText || (typeof interpDefaultVal === 'string' ? interpDefaultVal : ''));
|
|
300
|
+
const readFullVal = L(lang, 'readFullInterpellation');
|
|
301
|
+
const whyItMattersVal = L(lang, 'whyItMatters');
|
|
302
|
+
const dateHtml = formatDocumentDate(doc, lang);
|
|
303
|
+
return `
|
|
304
|
+
<div class="interpellation-entry">
|
|
305
|
+
<h3>${titleHtml}</h3>
|
|
306
|
+
<p><strong>${L(lang, 'filedBy')}:</strong> ${authorLine}</p>${dateHtml ? `\n <p>${dateHtml}</p>` : ''}
|
|
307
|
+
<p>${summaryHtml}</p>
|
|
308
|
+
<p><strong>${escapeHtml(String(whyItMattersVal))}:</strong> ${generateDeepPolicyAnalysis(doc, lang, 'ip')}</p>
|
|
309
|
+
<p><a href="${sanitizeUrl(doc.url)}" class="document-link" rel="noopener noreferrer">${escapeHtml(String(readFullVal))}: ${docName}</a></p>
|
|
310
|
+
</div>
|
|
311
|
+
`;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Generate per-document analysis.
|
|
315
|
+
* PRIMARY: full document text, policy significance, related speeches.
|
|
316
|
+
* SECONDARY (only when genuinely informative): CIA historical context footnote.
|
|
317
|
+
*/
|
|
318
|
+
export function generateDocumentIntelligenceAnalysis(doc, docType, cia, lang) {
|
|
319
|
+
const parts = [];
|
|
320
|
+
// Normalise short doktyp codes to the names used by generateEnhancedSummary
|
|
321
|
+
const normalizedType = docType === 'prop' ? 'proposition'
|
|
322
|
+
: docType === 'bet' ? 'report'
|
|
323
|
+
: docType === 'mot' ? 'motion'
|
|
324
|
+
: docType;
|
|
325
|
+
// ── PRIMARY: full document text or best available summary ────────────────
|
|
326
|
+
const rawText = doc.fullText || doc.fullContent || doc.summary || doc.notis || '';
|
|
327
|
+
// Discard person-profile data (MP status lines, deceased notices) — these are
|
|
328
|
+
// not document content and must never appear in article document entries.
|
|
329
|
+
const safeRawText = isPersonProfileText(rawText) ? '' : rawText;
|
|
330
|
+
// For motions, clean Swedish boilerplate before extracting passage
|
|
331
|
+
const cleanedText = (normalizedType === 'motion' && safeRawText.includes('Motion till riksdagen'))
|
|
332
|
+
? cleanMotionText(safeRawText)
|
|
333
|
+
: safeRawText;
|
|
334
|
+
const passage = extractKeyPassage(cleanedText, 500);
|
|
335
|
+
if (passage) {
|
|
336
|
+
const isSwedishSource = !!(doc.titel && !doc.title);
|
|
337
|
+
parts.push(isSwedishSource
|
|
338
|
+
? svSpan(escapeHtml(passage), lang)
|
|
339
|
+
: escapeHtml(passage));
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
parts.push(escapeHtml(generateEnhancedSummary(doc, normalizedType, lang)));
|
|
343
|
+
}
|
|
344
|
+
// ── PRIMARY: policy domain significance derived from document content ────
|
|
345
|
+
const significance = generatePolicySignificance(doc, lang, docType);
|
|
346
|
+
parts.push(`<strong>${escapeHtml(String(L(lang, 'whatThisMeans')))}:</strong> ${significance}`);
|
|
347
|
+
// ── PRIMARY: related speeches (direct evidence from the chamber) ─────────
|
|
348
|
+
const speeches = doc.speeches || [];
|
|
349
|
+
if (speeches.length > 0) {
|
|
350
|
+
const speakerLines = speeches.slice(0, 2).map(s => {
|
|
351
|
+
const who = [s.talare, s.parti ? `(${s.parti})` : ''].filter(Boolean).join(' ');
|
|
352
|
+
return who ? escapeHtml(who) : 'Unknown speaker';
|
|
353
|
+
}).join(', ');
|
|
354
|
+
parts.push(`<em>Debate contributions from: ${speakerLines}.</em>`);
|
|
355
|
+
}
|
|
356
|
+
// ── SECONDARY: CIA historical context — only where it adds real perspective
|
|
357
|
+
// For motions: historical passage rate is highly relevant context since
|
|
358
|
+
// almost all opposition motions are denied (~99%). Only show when we have
|
|
359
|
+
// an actual party-specific rate, so the note is concrete, not generic.
|
|
360
|
+
if (docType === 'mot' && cia) {
|
|
361
|
+
// Try to get party from doc fields, else parse from raw text
|
|
362
|
+
let party = doc.parti;
|
|
363
|
+
if (!party) {
|
|
364
|
+
const rawText2 = doc.summary || doc.notis || doc.fullText || '';
|
|
365
|
+
const parsed2 = parseMotionAuthorParty(rawText2);
|
|
366
|
+
if (parsed2)
|
|
367
|
+
party = parsed2.party;
|
|
368
|
+
}
|
|
369
|
+
const rate = partyMotionSuccessRate(party, cia);
|
|
370
|
+
if (rate !== null && party) {
|
|
371
|
+
parts.push(`<small class="cia-context">Historical context: ${escapeHtml(party)} motions have a ${escapeHtml(rate.toFixed(1))}% passage rate ` +
|
|
372
|
+
`(${escapeHtml(String(cia.overallMotionDenialRate))}% of all opposition motions are rejected). ` +
|
|
373
|
+
`This motion signals a policy position rather than an imminent legislative change.</small>`);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
// ── EARLY WARNING: high-influence documents with stability risk indicators ─
|
|
377
|
+
if (cia) {
|
|
378
|
+
const influenceScore = calculateInfluenceScore(doc);
|
|
379
|
+
const stabilityScore = cia.coalitionStability.stabilityScore;
|
|
380
|
+
const majorityMargin = cia.coalitionStability.majorityMargin;
|
|
381
|
+
// Flag high-influence documents during coalition instability
|
|
382
|
+
if (influenceScore >= 60 && stabilityScore < 50) {
|
|
383
|
+
parts.push(`<small class="early-warning">⚠ Early warning: This high-influence document (score: ${escapeHtml(String(influenceScore))}) ` +
|
|
384
|
+
`arrives during a period of coalition instability (stability: ${escapeHtml(String(stabilityScore))}). ` +
|
|
385
|
+
`Monitor closely for defections or procedural delays.</small>`);
|
|
386
|
+
}
|
|
387
|
+
else if (majorityMargin <= 2 && (docType === 'prop' || docType === 'bet')) {
|
|
388
|
+
parts.push(`<small class="early-warning">⚠ Thin majority alert: With only ${escapeHtml(String(majorityMargin))} seat majority, ` +
|
|
389
|
+
`this ${docType === 'prop' ? 'government bill' : 'committee report'} faces elevated defeat risk.</small>`);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// For propositions: coalition note is already in the article-level summary; skip per-document repetition.
|
|
393
|
+
// (Moved to generateGenericContent key-takeaways section.)
|
|
394
|
+
return parts.join(' ');
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=document-analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-analysis.js","sourceRoot":"","sources":["../../../scripts/data-transformers/document-analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module data-transformers/helpers
|
|
3
|
+
* @description Low-level utility functions for the data transformation
|
|
4
|
+
* pipeline: URL sanitisation, Swedish-language span generation, date
|
|
5
|
+
* formatting, text cleaning, and document metadata helpers.
|
|
6
|
+
*
|
|
7
|
+
* @author Hack23 AB
|
|
8
|
+
* @license Apache-2.0
|
|
9
|
+
*/
|
|
10
|
+
import type { Language } from '../types/language.js';
|
|
11
|
+
import type { ContentLabelSet } from '../types/content.js';
|
|
12
|
+
import type { RawCalendarEvent, RawDocument, CIAContext } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Sanitize a URL for safe use in href attributes.
|
|
15
|
+
* Rejects javascript:, data:, vbscript: schemes and returns '#' for invalid URLs.
|
|
16
|
+
* Also escapes HTML attribute characters in the URL.
|
|
17
|
+
*/
|
|
18
|
+
export declare function sanitizeUrl(url: string | undefined | null): string;
|
|
19
|
+
/**
|
|
20
|
+
* Emit a Swedish-language span.
|
|
21
|
+
*
|
|
22
|
+
* The span always carries both the `lang="sv"` accessibility attribute AND
|
|
23
|
+
* `data-translate="true"` so that `translateSwedishContent()` (in
|
|
24
|
+
* `translation-dictionary.ts`) can locate every Swedish phrase, look it up
|
|
25
|
+
* in the per-language dictionary, and replace or clean the marker before the
|
|
26
|
+
* article is written to disk.
|
|
27
|
+
*
|
|
28
|
+
* - **SV articles**: the marker lets validation tooling verify original text
|
|
29
|
+
* is present; `translateSwedishContent()` strips the marker but keeps the
|
|
30
|
+
* Swedish text unchanged.
|
|
31
|
+
* - **Non-SV articles**: `translateSwedishContent()` attempts dictionary
|
|
32
|
+
* translation via `translatePhrase()` and removes the marker regardless
|
|
33
|
+
* of whether a match was found, so no `data-translate` attributes remain
|
|
34
|
+
* in the final HTML.
|
|
35
|
+
*
|
|
36
|
+
* @param escapedText - Already HTML-escaped text content
|
|
37
|
+
* @param _lang - Target article language (kept only for backward
|
|
38
|
+
* compatibility; currently not used by this function)
|
|
39
|
+
*/
|
|
40
|
+
export declare function svSpan(escapedText: string, _lang: Language | string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Get localized label with fallback to English
|
|
43
|
+
*/
|
|
44
|
+
export declare function L(lang: Language | string, key: string): ContentLabelSet[keyof ContentLabelSet];
|
|
45
|
+
/**
|
|
46
|
+
* Check if date is today
|
|
47
|
+
*/
|
|
48
|
+
export declare function isTodayDate(date: Date): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Format day name (Monday, Tuesday, etc.) using Intl for all 14 languages
|
|
51
|
+
*/
|
|
52
|
+
export declare function formatDayName(date: Date, lang?: Language | string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Format day label (e.g., "February 10 - Monday") using Intl for all 14 languages
|
|
55
|
+
*/
|
|
56
|
+
export declare function formatDayLabel(date: Date, lang?: Language | string): string;
|
|
57
|
+
/**
|
|
58
|
+
* Determine if event is high priority
|
|
59
|
+
*/
|
|
60
|
+
export declare function isHighPriority(event: RawCalendarEvent): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Parse author and party from raw Swedish motion text.
|
|
63
|
+
* Handles "av Fredrik Olovsson m.fl. (S)" and similar patterns.
|
|
64
|
+
*/
|
|
65
|
+
export declare function parseMotionAuthorParty(text: string): {
|
|
66
|
+
author: string;
|
|
67
|
+
party: string;
|
|
68
|
+
} | null;
|
|
69
|
+
/**
|
|
70
|
+
* Clean raw Swedish motion notis text into a readable subject.
|
|
71
|
+
* Strips "Motion till riksdagen XXXX av AUTHOR (PARTY) med anledning av..."
|
|
72
|
+
* and truncates at "Förslag till riksdagsbeslut".
|
|
73
|
+
*/
|
|
74
|
+
export declare function cleanMotionText(raw: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* Detect when a text string is an MP/politician profile page excerpt rather than
|
|
77
|
+
* document content. Returns true for texts that begin with Swedish MP-status phrases
|
|
78
|
+
* or contain profile-specific markers such as:
|
|
79
|
+
* - "Tjänstgörande riksdagsledamot …" (active MP)
|
|
80
|
+
* - "Tidigare riksdagsledamot …" (former MP)
|
|
81
|
+
* - "Avgången riksdagsledamot …" (resigned MP)
|
|
82
|
+
* - "Tillgänglig ersättare …" (substitute MP)
|
|
83
|
+
* - "Tjänstgörande ersättare …" (active substitute)
|
|
84
|
+
* - "Tidigare ersättare …" (former substitute)
|
|
85
|
+
* - "Tjänstgörande statsrådsersättare" (acting minister substitute)
|
|
86
|
+
* - "Tidigare statsråd …" (former minister)
|
|
87
|
+
* - "Tidigare statsminister …" (former PM)
|
|
88
|
+
* - "Inga uppdrag" (no assignments)
|
|
89
|
+
* - "Avgången …" (resigned)
|
|
90
|
+
* - "Avliden YYYY-MM-DD …" (deceased MP)
|
|
91
|
+
*
|
|
92
|
+
* This data comes from the riksdag API's person/ledamot profile pages, and must never
|
|
93
|
+
* appear in article document-entry content.
|
|
94
|
+
*/
|
|
95
|
+
export declare function isPersonProfileText(text: string): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Build a descriptive proposition summary from the ministry organ.
|
|
98
|
+
* Returns a ministry-specific framing sentence.
|
|
99
|
+
*/
|
|
100
|
+
export declare function propSummaryFromOrgan(organ: string, lang: Language | string): string;
|
|
101
|
+
/**
|
|
102
|
+
* Generate enhanced summary from document metadata when summary field is missing
|
|
103
|
+
* Uses document type, subtype, organ, and other metadata to create informative placeholder
|
|
104
|
+
*/
|
|
105
|
+
export declare function generateEnhancedSummary(doc: RawDocument, type: string, lang: Language | string): string;
|
|
106
|
+
/**
|
|
107
|
+
* Get human-readable committee name from code
|
|
108
|
+
*/
|
|
109
|
+
export declare function getCommitteeName(code: string | undefined, lang: Language | string): string;
|
|
110
|
+
/**
|
|
111
|
+
* Extract the most analytically useful excerpt from full document text.
|
|
112
|
+
* Returns first substantive paragraph (skips short headings/metadata lines).
|
|
113
|
+
*/
|
|
114
|
+
export declare function extractKeyPassage(fullText: string | undefined, maxChars?: number): string;
|
|
115
|
+
/**
|
|
116
|
+
* Normalise a raw `parti` field to a canonical party key.
|
|
117
|
+
* Maps missing, empty, or any capitalisation of 'unknown' to 'other'.
|
|
118
|
+
* Used in both generateMotionsContent (party grouping) and
|
|
119
|
+
* generateOppositionStrategySection so both sections treat the sentinel
|
|
120
|
+
* identically regardless of capitalisation.
|
|
121
|
+
*/
|
|
122
|
+
export declare function normalizePartyKey(parti: unknown): string;
|
|
123
|
+
/**
|
|
124
|
+
* Look up party motion success rate from CIA context.
|
|
125
|
+
* Returns null when data is unavailable so callers can skip the annotation.
|
|
126
|
+
*/
|
|
127
|
+
export declare function partyMotionSuccessRate(party: string | undefined, cia: CIAContext | undefined): number | null;
|
|
128
|
+
/**
|
|
129
|
+
* Format a document publication date for display.
|
|
130
|
+
* Returns an HTML string like
|
|
131
|
+
* `<span class="doc-date"><strong>Published:</strong> <time datetime="2026-03-04">2026-03-04</time></span>`
|
|
132
|
+
* using the localized "Published" label, or empty string if datum is missing.
|
|
133
|
+
*/
|
|
134
|
+
export declare function formatDocumentDate(doc: RawDocument, lang: Language | string): string;
|
|
135
|
+
/**
|
|
136
|
+
* Filter documents to only include those published within a given number of days.
|
|
137
|
+
* Documents without a `datum` field are kept (benefit of the doubt).
|
|
138
|
+
*
|
|
139
|
+
* @param docs - Array of raw documents
|
|
140
|
+
* @param maxAgeDays - Maximum age in days (default 30)
|
|
141
|
+
* @returns Filtered array containing only fresh documents
|
|
142
|
+
*/
|
|
143
|
+
export declare function filterFreshDocuments(docs: RawDocument[], maxAgeDays?: number): RawDocument[];
|
|
144
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../scripts/data-transformers/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,qBAAqB,CAAC;AAE1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5E;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CASlE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAI5E;AAED;;GAEG;AACH,wBAAgB,CAAC,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,eAAe,CAAC,CAK9F;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAK/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,QAAQ,GAAG,MAAa,GAAG,MAAM,CAOhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,QAAQ,GAAG,MAAa,GAAG,MAAM,CAWjF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAW/D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAI7F;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYnD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAuBzD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAgBnF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAiGvG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAa1F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,SAAM,GAAG,MAAM,CActF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGxD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAI5G;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAKpF;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,UAAU,SAAK,GAAG,WAAW,EAAE,CAiBxF"}
|