riksdagsmonitor 0.8.23 → 0.8.24

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.
Files changed (546) hide show
  1. package/README.md +53 -1
  2. package/dist/lib/dashboards/party-dashboard.js +2 -1
  3. package/dist/lib/dashboards/party-dashboard.js.map +1 -1
  4. package/dist/lib/dashboards/risk-dashboard.js +2 -1
  5. package/dist/lib/dashboards/risk-dashboard.js.map +1 -1
  6. package/dist/lib/shared/index.d.ts +0 -1
  7. package/dist/lib/shared/index.d.ts.map +1 -1
  8. package/dist/lib/shared/index.js +3 -1
  9. package/dist/lib/shared/index.js.map +1 -1
  10. package/dist/lib/shared/register-globals.d.ts +1 -1
  11. package/dist/lib/shared/register-globals.d.ts.map +1 -1
  12. package/dist/lib/shared/register-globals.js +7 -1
  13. package/dist/lib/shared/register-globals.js.map +1 -1
  14. package/package.json +53 -21
  15. package/dist/scripts/analysis-reader.d.ts +0 -241
  16. package/dist/scripts/analysis-reader.d.ts.map +0 -1
  17. package/dist/scripts/analysis-reader.js +0 -531
  18. package/dist/scripts/analysis-reader.js.map +0 -1
  19. package/dist/scripts/article-quality-enhancer.d.ts +0 -148
  20. package/dist/scripts/article-quality-enhancer.d.ts.map +0 -1
  21. package/dist/scripts/article-quality-enhancer.js +0 -430
  22. package/dist/scripts/article-quality-enhancer.js.map +0 -1
  23. package/dist/scripts/article-template/constants.d.ts +0 -104
  24. package/dist/scripts/article-template/constants.d.ts.map +0 -1
  25. package/dist/scripts/article-template/constants.js +0 -225
  26. package/dist/scripts/article-template/constants.js.map +0 -1
  27. package/dist/scripts/article-template/helpers.d.ts +0 -83
  28. package/dist/scripts/article-template/helpers.d.ts.map +0 -1
  29. package/dist/scripts/article-template/helpers.js +0 -236
  30. package/dist/scripts/article-template/helpers.js.map +0 -1
  31. package/dist/scripts/article-template/index.d.ts +0 -39
  32. package/dist/scripts/article-template/index.d.ts.map +0 -1
  33. package/dist/scripts/article-template/index.js +0 -37
  34. package/dist/scripts/article-template/index.js.map +0 -1
  35. package/dist/scripts/article-template/registry.d.ts +0 -64
  36. package/dist/scripts/article-template/registry.d.ts.map +0 -1
  37. package/dist/scripts/article-template/registry.js +0 -405
  38. package/dist/scripts/article-template/registry.js.map +0 -1
  39. package/dist/scripts/article-template/template.d.ts +0 -18
  40. package/dist/scripts/article-template/template.d.ts.map +0 -1
  41. package/dist/scripts/article-template/template.js +0 -359
  42. package/dist/scripts/article-template/template.js.map +0 -1
  43. package/dist/scripts/article-template/types.d.ts +0 -90
  44. package/dist/scripts/article-template/types.d.ts.map +0 -1
  45. package/dist/scripts/article-template/types.js +0 -96
  46. package/dist/scripts/article-template/types.js.map +0 -1
  47. package/dist/scripts/article-template.d.ts +0 -18
  48. package/dist/scripts/article-template.d.ts.map +0 -1
  49. package/dist/scripts/article-template.js +0 -18
  50. package/dist/scripts/article-template.js.map +0 -1
  51. package/dist/scripts/catalog-downloaded-data.d.ts +0 -66
  52. package/dist/scripts/catalog-downloaded-data.d.ts.map +0 -1
  53. package/dist/scripts/catalog-downloaded-data.js +0 -239
  54. package/dist/scripts/catalog-downloaded-data.js.map +0 -1
  55. package/dist/scripts/check-cia-schema-updates.d.ts +0 -186
  56. package/dist/scripts/check-cia-schema-updates.d.ts.map +0 -1
  57. package/dist/scripts/check-cia-schema-updates.js +0 -363
  58. package/dist/scripts/check-cia-schema-updates.js.map +0 -1
  59. package/dist/scripts/data-transformers/calendar.d.ts +0 -16
  60. package/dist/scripts/data-transformers/calendar.d.ts.map +0 -1
  61. package/dist/scripts/data-transformers/calendar.js +0 -137
  62. package/dist/scripts/data-transformers/calendar.js.map +0 -1
  63. package/dist/scripts/data-transformers/constants/committee-names.d.ts +0 -15
  64. package/dist/scripts/data-transformers/constants/committee-names.d.ts.map +0 -1
  65. package/dist/scripts/data-transformers/constants/committee-names.js +0 -30
  66. package/dist/scripts/data-transformers/constants/committee-names.js.map +0 -1
  67. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts +0 -11
  68. package/dist/scripts/data-transformers/constants/content-labels-part1.d.ts.map +0 -1
  69. package/dist/scripts/data-transformers/constants/content-labels-part1.js +0 -900
  70. package/dist/scripts/data-transformers/constants/content-labels-part1.js.map +0 -1
  71. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts +0 -11
  72. package/dist/scripts/data-transformers/constants/content-labels-part2.d.ts.map +0 -1
  73. package/dist/scripts/data-transformers/constants/content-labels-part2.js +0 -900
  74. package/dist/scripts/data-transformers/constants/content-labels-part2.js.map +0 -1
  75. package/dist/scripts/data-transformers/constants/content-labels.d.ts +0 -13
  76. package/dist/scripts/data-transformers/constants/content-labels.d.ts.map +0 -1
  77. package/dist/scripts/data-transformers/constants/content-labels.js +0 -18
  78. package/dist/scripts/data-transformers/constants/content-labels.js.map +0 -1
  79. package/dist/scripts/data-transformers/constants/index.d.ts +0 -15
  80. package/dist/scripts/data-transformers/constants/index.d.ts.map +0 -1
  81. package/dist/scripts/data-transformers/constants/index.js +0 -15
  82. package/dist/scripts/data-transformers/constants/index.js.map +0 -1
  83. package/dist/scripts/data-transformers/constants/locale-map.d.ts +0 -13
  84. package/dist/scripts/data-transformers/constants/locale-map.d.ts.map +0 -1
  85. package/dist/scripts/data-transformers/constants/locale-map.js +0 -17
  86. package/dist/scripts/data-transformers/constants/locale-map.js.map +0 -1
  87. package/dist/scripts/data-transformers/constants.d.ts +0 -14
  88. package/dist/scripts/data-transformers/constants.d.ts.map +0 -1
  89. package/dist/scripts/data-transformers/constants.js +0 -14
  90. package/dist/scripts/data-transformers/constants.js.map +0 -1
  91. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts +0 -64
  92. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.d.ts.map +0 -1
  93. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js +0 -805
  94. package/dist/scripts/data-transformers/content-generators/ai-mindmap-analyzer.js.map +0 -1
  95. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts +0 -50
  96. package/dist/scripts/data-transformers/content-generators/cia-overview-section.d.ts.map +0 -1
  97. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js +0 -310
  98. package/dist/scripts/data-transformers/content-generators/cia-overview-section.js.map +0 -1
  99. package/dist/scripts/data-transformers/content-generators/committee.d.ts +0 -12
  100. package/dist/scripts/data-transformers/content-generators/committee.d.ts.map +0 -1
  101. package/dist/scripts/data-transformers/content-generators/committee.js +0 -247
  102. package/dist/scripts/data-transformers/content-generators/committee.js.map +0 -1
  103. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts +0 -124
  104. package/dist/scripts/data-transformers/content-generators/dashboard-section.d.ts.map +0 -1
  105. package/dist/scripts/data-transformers/content-generators/dashboard-section.js +0 -564
  106. package/dist/scripts/data-transformers/content-generators/dashboard-section.js.map +0 -1
  107. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts +0 -82
  108. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.d.ts.map +0 -1
  109. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js +0 -321
  110. package/dist/scripts/data-transformers/content-generators/economic-dashboard-section.js.map +0 -1
  111. package/dist/scripts/data-transformers/content-generators/generic.d.ts +0 -12
  112. package/dist/scripts/data-transformers/content-generators/generic.d.ts.map +0 -1
  113. package/dist/scripts/data-transformers/content-generators/generic.js +0 -295
  114. package/dist/scripts/data-transformers/content-generators/generic.js.map +0 -1
  115. package/dist/scripts/data-transformers/content-generators/index.d.ts +0 -84
  116. package/dist/scripts/data-transformers/content-generators/index.d.ts.map +0 -1
  117. package/dist/scripts/data-transformers/content-generators/index.js +0 -47
  118. package/dist/scripts/data-transformers/content-generators/index.js.map +0 -1
  119. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts +0 -12
  120. package/dist/scripts/data-transformers/content-generators/interpellations.d.ts.map +0 -1
  121. package/dist/scripts/data-transformers/content-generators/interpellations.js +0 -124
  122. package/dist/scripts/data-transformers/content-generators/interpellations.js.map +0 -1
  123. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts +0 -137
  124. package/dist/scripts/data-transformers/content-generators/mindmap-section.d.ts.map +0 -1
  125. package/dist/scripts/data-transformers/content-generators/mindmap-section.js +0 -286
  126. package/dist/scripts/data-transformers/content-generators/mindmap-section.js.map +0 -1
  127. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts +0 -17
  128. package/dist/scripts/data-transformers/content-generators/month-ahead.d.ts.map +0 -1
  129. package/dist/scripts/data-transformers/content-generators/month-ahead.js +0 -212
  130. package/dist/scripts/data-transformers/content-generators/month-ahead.js.map +0 -1
  131. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts +0 -17
  132. package/dist/scripts/data-transformers/content-generators/monthly-review.d.ts.map +0 -1
  133. package/dist/scripts/data-transformers/content-generators/monthly-review.js +0 -173
  134. package/dist/scripts/data-transformers/content-generators/monthly-review.js.map +0 -1
  135. package/dist/scripts/data-transformers/content-generators/motions.d.ts +0 -12
  136. package/dist/scripts/data-transformers/content-generators/motions.d.ts.map +0 -1
  137. package/dist/scripts/data-transformers/content-generators/motions.js +0 -158
  138. package/dist/scripts/data-transformers/content-generators/motions.js.map +0 -1
  139. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts +0 -62
  140. package/dist/scripts/data-transformers/content-generators/newsworthiness.d.ts.map +0 -1
  141. package/dist/scripts/data-transformers/content-generators/newsworthiness.js +0 -254
  142. package/dist/scripts/data-transformers/content-generators/newsworthiness.js.map +0 -1
  143. package/dist/scripts/data-transformers/content-generators/propositions.d.ts +0 -12
  144. package/dist/scripts/data-transformers/content-generators/propositions.d.ts.map +0 -1
  145. package/dist/scripts/data-transformers/content-generators/propositions.js +0 -263
  146. package/dist/scripts/data-transformers/content-generators/propositions.js.map +0 -1
  147. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts +0 -92
  148. package/dist/scripts/data-transformers/content-generators/sankey-section.d.ts.map +0 -1
  149. package/dist/scripts/data-transformers/content-generators/sankey-section.js +0 -257
  150. package/dist/scripts/data-transformers/content-generators/sankey-section.js.map +0 -1
  151. package/dist/scripts/data-transformers/content-generators/shared.d.ts +0 -139
  152. package/dist/scripts/data-transformers/content-generators/shared.d.ts.map +0 -1
  153. package/dist/scripts/data-transformers/content-generators/shared.js +0 -935
  154. package/dist/scripts/data-transformers/content-generators/shared.js.map +0 -1
  155. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts +0 -50
  156. package/dist/scripts/data-transformers/content-generators/swot-section.d.ts.map +0 -1
  157. package/dist/scripts/data-transformers/content-generators/swot-section.js +0 -177
  158. package/dist/scripts/data-transformers/content-generators/swot-section.js.map +0 -1
  159. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts +0 -12
  160. package/dist/scripts/data-transformers/content-generators/week-ahead.d.ts.map +0 -1
  161. package/dist/scripts/data-transformers/content-generators/week-ahead.js +0 -332
  162. package/dist/scripts/data-transformers/content-generators/week-ahead.js.map +0 -1
  163. package/dist/scripts/data-transformers/content-generators.d.ts +0 -15
  164. package/dist/scripts/data-transformers/content-generators.d.ts.map +0 -1
  165. package/dist/scripts/data-transformers/content-generators.js +0 -14
  166. package/dist/scripts/data-transformers/content-generators.js.map +0 -1
  167. package/dist/scripts/data-transformers/document-analysis.d.ts +0 -58
  168. package/dist/scripts/data-transformers/document-analysis.d.ts.map +0 -1
  169. package/dist/scripts/data-transformers/document-analysis.js +0 -396
  170. package/dist/scripts/data-transformers/document-analysis.js.map +0 -1
  171. package/dist/scripts/data-transformers/helpers.d.ts +0 -144
  172. package/dist/scripts/data-transformers/helpers.d.ts.map +0 -1
  173. package/dist/scripts/data-transformers/helpers.js +0 -408
  174. package/dist/scripts/data-transformers/helpers.js.map +0 -1
  175. package/dist/scripts/data-transformers/index.d.ts +0 -45
  176. package/dist/scripts/data-transformers/index.d.ts.map +0 -1
  177. package/dist/scripts/data-transformers/index.js +0 -66
  178. package/dist/scripts/data-transformers/index.js.map +0 -1
  179. package/dist/scripts/data-transformers/metadata.d.ts +0 -42
  180. package/dist/scripts/data-transformers/metadata.d.ts.map +0 -1
  181. package/dist/scripts/data-transformers/metadata.js +0 -385
  182. package/dist/scripts/data-transformers/metadata.js.map +0 -1
  183. package/dist/scripts/data-transformers/policy-analysis.d.ts +0 -105
  184. package/dist/scripts/data-transformers/policy-analysis.d.ts.map +0 -1
  185. package/dist/scripts/data-transformers/policy-analysis.js +0 -686
  186. package/dist/scripts/data-transformers/policy-analysis.js.map +0 -1
  187. package/dist/scripts/data-transformers/risk-analysis.d.ts +0 -104
  188. package/dist/scripts/data-transformers/risk-analysis.d.ts.map +0 -1
  189. package/dist/scripts/data-transformers/risk-analysis.js +0 -279
  190. package/dist/scripts/data-transformers/risk-analysis.js.map +0 -1
  191. package/dist/scripts/data-transformers/types.d.ts +0 -260
  192. package/dist/scripts/data-transformers/types.d.ts.map +0 -1
  193. package/dist/scripts/data-transformers/types.js +0 -11
  194. package/dist/scripts/data-transformers/types.js.map +0 -1
  195. package/dist/scripts/data-transformers.d.ts +0 -23
  196. package/dist/scripts/data-transformers.d.ts.map +0 -1
  197. package/dist/scripts/data-transformers.js +0 -35
  198. package/dist/scripts/data-transformers.js.map +0 -1
  199. package/dist/scripts/deep-inspection/index.d.ts +0 -55
  200. package/dist/scripts/deep-inspection/index.d.ts.map +0 -1
  201. package/dist/scripts/deep-inspection/index.js +0 -66
  202. package/dist/scripts/deep-inspection/index.js.map +0 -1
  203. package/dist/scripts/detect-swedish-leakage.d.ts +0 -69
  204. package/dist/scripts/detect-swedish-leakage.d.ts.map +0 -1
  205. package/dist/scripts/detect-swedish-leakage.js +0 -417
  206. package/dist/scripts/detect-swedish-leakage.js.map +0 -1
  207. package/dist/scripts/editorial-framework.d.ts +0 -121
  208. package/dist/scripts/editorial-framework.d.ts.map +0 -1
  209. package/dist/scripts/editorial-framework.js +0 -364
  210. package/dist/scripts/editorial-framework.js.map +0 -1
  211. package/dist/scripts/editorial-pillars.d.ts +0 -43
  212. package/dist/scripts/editorial-pillars.d.ts.map +0 -1
  213. package/dist/scripts/editorial-pillars.js +0 -215
  214. package/dist/scripts/editorial-pillars.js.map +0 -1
  215. package/dist/scripts/extract-news-metadata.d.ts +0 -12
  216. package/dist/scripts/extract-news-metadata.d.ts.map +0 -1
  217. package/dist/scripts/extract-news-metadata.js +0 -107
  218. package/dist/scripts/extract-news-metadata.js.map +0 -1
  219. package/dist/scripts/extract-vocabulary.d.ts +0 -15
  220. package/dist/scripts/extract-vocabulary.d.ts.map +0 -1
  221. package/dist/scripts/extract-vocabulary.js +0 -255
  222. package/dist/scripts/extract-vocabulary.js.map +0 -1
  223. package/dist/scripts/fix-article-navigation.d.ts +0 -37
  224. package/dist/scripts/fix-article-navigation.d.ts.map +0 -1
  225. package/dist/scripts/fix-article-navigation.js +0 -198
  226. package/dist/scripts/fix-article-navigation.js.map +0 -1
  227. package/dist/scripts/fix-keywords-localization.d.ts +0 -18
  228. package/dist/scripts/fix-keywords-localization.d.ts.map +0 -1
  229. package/dist/scripts/fix-keywords-localization.js +0 -270
  230. package/dist/scripts/fix-keywords-localization.js.map +0 -1
  231. package/dist/scripts/fix-old-articles-branding.d.ts +0 -17
  232. package/dist/scripts/fix-old-articles-branding.d.ts.map +0 -1
  233. package/dist/scripts/fix-old-articles-branding.js +0 -229
  234. package/dist/scripts/fix-old-articles-branding.js.map +0 -1
  235. package/dist/scripts/generate-news-backport.d.ts +0 -16
  236. package/dist/scripts/generate-news-backport.d.ts.map +0 -1
  237. package/dist/scripts/generate-news-backport.js +0 -379
  238. package/dist/scripts/generate-news-backport.js.map +0 -1
  239. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts +0 -141
  240. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.d.ts.map +0 -1
  241. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js +0 -546
  242. package/dist/scripts/generate-news-enhanced/ai-analysis-pipeline.js.map +0 -1
  243. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts +0 -59
  244. package/dist/scripts/generate-news-enhanced/analysis-cache.d.ts.map +0 -1
  245. package/dist/scripts/generate-news-enhanced/analysis-cache.js +0 -116
  246. package/dist/scripts/generate-news-enhanced/analysis-cache.js.map +0 -1
  247. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts +0 -58
  248. package/dist/scripts/generate-news-enhanced/analysis-labels.d.ts.map +0 -1
  249. package/dist/scripts/generate-news-enhanced/analysis-labels.js +0 -144
  250. package/dist/scripts/generate-news-enhanced/analysis-labels.js.map +0 -1
  251. package/dist/scripts/generate-news-enhanced/config.d.ts +0 -58
  252. package/dist/scripts/generate-news-enhanced/config.d.ts.map +0 -1
  253. package/dist/scripts/generate-news-enhanced/config.js +0 -286
  254. package/dist/scripts/generate-news-enhanced/config.js.map +0 -1
  255. package/dist/scripts/generate-news-enhanced/generators.d.ts +0 -119
  256. package/dist/scripts/generate-news-enhanced/generators.d.ts.map +0 -1
  257. package/dist/scripts/generate-news-enhanced/generators.js +0 -2131
  258. package/dist/scripts/generate-news-enhanced/generators.js.map +0 -1
  259. package/dist/scripts/generate-news-enhanced/helpers.d.ts +0 -122
  260. package/dist/scripts/generate-news-enhanced/helpers.d.ts.map +0 -1
  261. package/dist/scripts/generate-news-enhanced/helpers.js +0 -468
  262. package/dist/scripts/generate-news-enhanced/helpers.js.map +0 -1
  263. package/dist/scripts/generate-news-enhanced/index.d.ts +0 -19
  264. package/dist/scripts/generate-news-enhanced/index.d.ts.map +0 -1
  265. package/dist/scripts/generate-news-enhanced/index.js +0 -221
  266. package/dist/scripts/generate-news-enhanced/index.js.map +0 -1
  267. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts +0 -46
  268. package/dist/scripts/generate-news-enhanced/swot-analyzer.d.ts.map +0 -1
  269. package/dist/scripts/generate-news-enhanced/swot-analyzer.js +0 -1227
  270. package/dist/scripts/generate-news-enhanced/swot-analyzer.js.map +0 -1
  271. package/dist/scripts/generate-news-enhanced/types.d.ts +0 -34
  272. package/dist/scripts/generate-news-enhanced/types.d.ts.map +0 -1
  273. package/dist/scripts/generate-news-enhanced/types.js +0 -9
  274. package/dist/scripts/generate-news-enhanced/types.js.map +0 -1
  275. package/dist/scripts/generate-news-enhanced.d.ts +0 -25
  276. package/dist/scripts/generate-news-enhanced.d.ts.map +0 -1
  277. package/dist/scripts/generate-news-enhanced.js +0 -37
  278. package/dist/scripts/generate-news-enhanced.js.map +0 -1
  279. package/dist/scripts/generate-news-indexes/constants.d.ts +0 -20
  280. package/dist/scripts/generate-news-indexes/constants.d.ts.map +0 -1
  281. package/dist/scripts/generate-news-indexes/constants.js +0 -308
  282. package/dist/scripts/generate-news-indexes/constants.js.map +0 -1
  283. package/dist/scripts/generate-news-indexes/helpers.d.ts +0 -73
  284. package/dist/scripts/generate-news-indexes/helpers.d.ts.map +0 -1
  285. package/dist/scripts/generate-news-indexes/helpers.js +0 -352
  286. package/dist/scripts/generate-news-indexes/helpers.js.map +0 -1
  287. package/dist/scripts/generate-news-indexes/index.d.ts +0 -20
  288. package/dist/scripts/generate-news-indexes/index.d.ts.map +0 -1
  289. package/dist/scripts/generate-news-indexes/index.js +0 -75
  290. package/dist/scripts/generate-news-indexes/index.js.map +0 -1
  291. package/dist/scripts/generate-news-indexes/template.d.ts +0 -25
  292. package/dist/scripts/generate-news-indexes/template.d.ts.map +0 -1
  293. package/dist/scripts/generate-news-indexes/template.js +0 -644
  294. package/dist/scripts/generate-news-indexes/template.js.map +0 -1
  295. package/dist/scripts/generate-news-indexes/types.d.ts +0 -96
  296. package/dist/scripts/generate-news-indexes/types.d.ts.map +0 -1
  297. package/dist/scripts/generate-news-indexes/types.js +0 -9
  298. package/dist/scripts/generate-news-indexes/types.js.map +0 -1
  299. package/dist/scripts/generate-news-indexes.d.ts +0 -20
  300. package/dist/scripts/generate-news-indexes.d.ts.map +0 -1
  301. package/dist/scripts/generate-news-indexes.js +0 -19
  302. package/dist/scripts/generate-news-indexes.js.map +0 -1
  303. package/dist/scripts/generate-rss.d.ts +0 -48
  304. package/dist/scripts/generate-rss.d.ts.map +0 -1
  305. package/dist/scripts/generate-rss.js +0 -299
  306. package/dist/scripts/generate-rss.js.map +0 -1
  307. package/dist/scripts/generate-sitemap-html.d.ts +0 -79
  308. package/dist/scripts/generate-sitemap-html.d.ts.map +0 -1
  309. package/dist/scripts/generate-sitemap-html.js +0 -878
  310. package/dist/scripts/generate-sitemap-html.js.map +0 -1
  311. package/dist/scripts/generate-sitemap.d.ts +0 -23
  312. package/dist/scripts/generate-sitemap.d.ts.map +0 -1
  313. package/dist/scripts/generate-sitemap.js +0 -476
  314. package/dist/scripts/generate-sitemap.js.map +0 -1
  315. package/dist/scripts/generate-types-from-cia-schemas.d.ts +0 -176
  316. package/dist/scripts/generate-types-from-cia-schemas.d.ts.map +0 -1
  317. package/dist/scripts/generate-types-from-cia-schemas.js +0 -318
  318. package/dist/scripts/generate-types-from-cia-schemas.js.map +0 -1
  319. package/dist/scripts/government-role-validator.d.ts +0 -65
  320. package/dist/scripts/government-role-validator.d.ts.map +0 -1
  321. package/dist/scripts/government-role-validator.js +0 -217
  322. package/dist/scripts/government-role-validator.js.map +0 -1
  323. package/dist/scripts/html-utils.d.ts +0 -17
  324. package/dist/scripts/html-utils.d.ts.map +0 -1
  325. package/dist/scripts/html-utils.js +0 -29
  326. package/dist/scripts/html-utils.js.map +0 -1
  327. package/dist/scripts/load-cia-stats.d.ts +0 -89
  328. package/dist/scripts/load-cia-stats.d.ts.map +0 -1
  329. package/dist/scripts/load-cia-stats.js +0 -400
  330. package/dist/scripts/load-cia-stats.js.map +0 -1
  331. package/dist/scripts/mcp-client/client.d.ts +0 -73
  332. package/dist/scripts/mcp-client/client.d.ts.map +0 -1
  333. package/dist/scripts/mcp-client/client.js +0 -526
  334. package/dist/scripts/mcp-client/client.js.map +0 -1
  335. package/dist/scripts/mcp-client/document-types.d.ts +0 -23
  336. package/dist/scripts/mcp-client/document-types.d.ts.map +0 -1
  337. package/dist/scripts/mcp-client/document-types.js +0 -62
  338. package/dist/scripts/mcp-client/document-types.js.map +0 -1
  339. package/dist/scripts/mcp-client/index.d.ts +0 -34
  340. package/dist/scripts/mcp-client/index.d.ts.map +0 -1
  341. package/dist/scripts/mcp-client/index.js +0 -67
  342. package/dist/scripts/mcp-client/index.js.map +0 -1
  343. package/dist/scripts/mcp-client/transport.d.ts +0 -32
  344. package/dist/scripts/mcp-client/transport.d.ts.map +0 -1
  345. package/dist/scripts/mcp-client/transport.js +0 -102
  346. package/dist/scripts/mcp-client/transport.js.map +0 -1
  347. package/dist/scripts/mcp-client.d.ts +0 -18
  348. package/dist/scripts/mcp-client.d.ts.map +0 -1
  349. package/dist/scripts/mcp-client.js +0 -18
  350. package/dist/scripts/mcp-client.js.map +0 -1
  351. package/dist/scripts/mcp-query-cli.d.ts +0 -25
  352. package/dist/scripts/mcp-query-cli.d.ts.map +0 -1
  353. package/dist/scripts/mcp-query-cli.js +0 -66
  354. package/dist/scripts/mcp-query-cli.js.map +0 -1
  355. package/dist/scripts/news-types/breaking-news.d.ts +0 -178
  356. package/dist/scripts/news-types/breaking-news.d.ts.map +0 -1
  357. package/dist/scripts/news-types/breaking-news.js +0 -432
  358. package/dist/scripts/news-types/breaking-news.js.map +0 -1
  359. package/dist/scripts/news-types/committee-reports.d.ts +0 -212
  360. package/dist/scripts/news-types/committee-reports.d.ts.map +0 -1
  361. package/dist/scripts/news-types/committee-reports.js +0 -404
  362. package/dist/scripts/news-types/committee-reports.js.map +0 -1
  363. package/dist/scripts/news-types/month-ahead.d.ts +0 -71
  364. package/dist/scripts/news-types/month-ahead.d.ts.map +0 -1
  365. package/dist/scripts/news-types/month-ahead.js +0 -392
  366. package/dist/scripts/news-types/month-ahead.js.map +0 -1
  367. package/dist/scripts/news-types/monthly-review.d.ts +0 -61
  368. package/dist/scripts/news-types/monthly-review.d.ts.map +0 -1
  369. package/dist/scripts/news-types/monthly-review.js +0 -417
  370. package/dist/scripts/news-types/monthly-review.js.map +0 -1
  371. package/dist/scripts/news-types/motions.d.ts +0 -214
  372. package/dist/scripts/news-types/motions.d.ts.map +0 -1
  373. package/dist/scripts/news-types/motions.js +0 -447
  374. package/dist/scripts/news-types/motions.js.map +0 -1
  375. package/dist/scripts/news-types/propositions.d.ts +0 -204
  376. package/dist/scripts/news-types/propositions.d.ts.map +0 -1
  377. package/dist/scripts/news-types/propositions.js +0 -401
  378. package/dist/scripts/news-types/propositions.js.map +0 -1
  379. package/dist/scripts/news-types/week-ahead.d.ts +0 -231
  380. package/dist/scripts/news-types/week-ahead.d.ts.map +0 -1
  381. package/dist/scripts/news-types/week-ahead.js +0 -441
  382. package/dist/scripts/news-types/week-ahead.js.map +0 -1
  383. package/dist/scripts/news-types/weekly-review/analysis.d.ts +0 -47
  384. package/dist/scripts/news-types/weekly-review/analysis.d.ts.map +0 -1
  385. package/dist/scripts/news-types/weekly-review/analysis.js +0 -276
  386. package/dist/scripts/news-types/weekly-review/analysis.js.map +0 -1
  387. package/dist/scripts/news-types/weekly-review/data-loader.d.ts +0 -51
  388. package/dist/scripts/news-types/weekly-review/data-loader.d.ts.map +0 -1
  389. package/dist/scripts/news-types/weekly-review/data-loader.js +0 -298
  390. package/dist/scripts/news-types/weekly-review/data-loader.js.map +0 -1
  391. package/dist/scripts/news-types/weekly-review/generator.d.ts +0 -18
  392. package/dist/scripts/news-types/weekly-review/generator.d.ts.map +0 -1
  393. package/dist/scripts/news-types/weekly-review/generator.js +0 -284
  394. package/dist/scripts/news-types/weekly-review/generator.js.map +0 -1
  395. package/dist/scripts/news-types/weekly-review/index.d.ts +0 -20
  396. package/dist/scripts/news-types/weekly-review/index.d.ts.map +0 -1
  397. package/dist/scripts/news-types/weekly-review/index.js +0 -23
  398. package/dist/scripts/news-types/weekly-review/index.js.map +0 -1
  399. package/dist/scripts/news-types/weekly-review/types.d.ts +0 -72
  400. package/dist/scripts/news-types/weekly-review/types.d.ts.map +0 -1
  401. package/dist/scripts/news-types/weekly-review/types.js +0 -20
  402. package/dist/scripts/news-types/weekly-review/types.js.map +0 -1
  403. package/dist/scripts/news-types/weekly-review/validation.d.ts +0 -10
  404. package/dist/scripts/news-types/weekly-review/validation.d.ts.map +0 -1
  405. package/dist/scripts/news-types/weekly-review/validation.js +0 -95
  406. package/dist/scripts/news-types/weekly-review/validation.js.map +0 -1
  407. package/dist/scripts/news-types/weekly-review.d.ts +0 -15
  408. package/dist/scripts/news-types/weekly-review.d.ts.map +0 -1
  409. package/dist/scripts/news-types/weekly-review.js +0 -14
  410. package/dist/scripts/news-types/weekly-review.js.map +0 -1
  411. package/dist/scripts/party-variants.d.ts +0 -23
  412. package/dist/scripts/party-variants.d.ts.map +0 -1
  413. package/dist/scripts/party-variants.js +0 -50
  414. package/dist/scripts/party-variants.js.map +0 -1
  415. package/dist/scripts/pipeline/index.d.ts +0 -19
  416. package/dist/scripts/pipeline/index.d.ts.map +0 -1
  417. package/dist/scripts/pipeline/index.js +0 -17
  418. package/dist/scripts/pipeline/index.js.map +0 -1
  419. package/dist/scripts/pipeline/orchestrator.d.ts +0 -56
  420. package/dist/scripts/pipeline/orchestrator.d.ts.map +0 -1
  421. package/dist/scripts/pipeline/orchestrator.js +0 -147
  422. package/dist/scripts/pipeline/orchestrator.js.map +0 -1
  423. package/dist/scripts/pipeline/types.d.ts +0 -117
  424. package/dist/scripts/pipeline/types.d.ts.map +0 -1
  425. package/dist/scripts/pipeline/types.js +0 -13
  426. package/dist/scripts/pipeline/types.js.map +0 -1
  427. package/dist/scripts/pipeline/validation.d.ts +0 -66
  428. package/dist/scripts/pipeline/validation.d.ts.map +0 -1
  429. package/dist/scripts/pipeline/validation.js +0 -129
  430. package/dist/scripts/pipeline/validation.js.map +0 -1
  431. package/dist/scripts/populate-analysis-data.d.ts +0 -41
  432. package/dist/scripts/populate-analysis-data.d.ts.map +0 -1
  433. package/dist/scripts/populate-analysis-data.js +0 -255
  434. package/dist/scripts/populate-analysis-data.js.map +0 -1
  435. package/dist/scripts/pre-article-analysis/data-downloader.d.ts +0 -80
  436. package/dist/scripts/pre-article-analysis/data-downloader.d.ts.map +0 -1
  437. package/dist/scripts/pre-article-analysis/data-downloader.js +0 -230
  438. package/dist/scripts/pre-article-analysis/data-downloader.js.map +0 -1
  439. package/dist/scripts/pre-article-analysis/data-persistence.d.ts +0 -141
  440. package/dist/scripts/pre-article-analysis/data-persistence.d.ts.map +0 -1
  441. package/dist/scripts/pre-article-analysis/data-persistence.js +0 -345
  442. package/dist/scripts/pre-article-analysis/data-persistence.js.map +0 -1
  443. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts +0 -158
  444. package/dist/scripts/pre-article-analysis/markdown-serializer.d.ts.map +0 -1
  445. package/dist/scripts/pre-article-analysis/markdown-serializer.js +0 -648
  446. package/dist/scripts/pre-article-analysis/markdown-serializer.js.map +0 -1
  447. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts +0 -58
  448. package/dist/scripts/pre-article-analysis/pdf-converter.d.ts.map +0 -1
  449. package/dist/scripts/pre-article-analysis/pdf-converter.js +0 -142
  450. package/dist/scripts/pre-article-analysis/pdf-converter.js.map +0 -1
  451. package/dist/scripts/pre-article-analysis.d.ts +0 -42
  452. package/dist/scripts/pre-article-analysis.d.ts.map +0 -1
  453. package/dist/scripts/pre-article-analysis.js +0 -642
  454. package/dist/scripts/pre-article-analysis.js.map +0 -1
  455. package/dist/scripts/scb-client.d.ts +0 -104
  456. package/dist/scripts/scb-client.d.ts.map +0 -1
  457. package/dist/scripts/scb-client.js +0 -286
  458. package/dist/scripts/scb-client.js.map +0 -1
  459. package/dist/scripts/scb-context.d.ts +0 -88
  460. package/dist/scripts/scb-context.d.ts.map +0 -1
  461. package/dist/scripts/scb-context.js +0 -307
  462. package/dist/scripts/scb-context.js.map +0 -1
  463. package/dist/scripts/shared/version.d.ts +0 -9
  464. package/dist/scripts/shared/version.d.ts.map +0 -1
  465. package/dist/scripts/shared/version.js +0 -28
  466. package/dist/scripts/shared/version.js.map +0 -1
  467. package/dist/scripts/statistical-claims-detector.d.ts +0 -119
  468. package/dist/scripts/statistical-claims-detector.d.ts.map +0 -1
  469. package/dist/scripts/statistical-claims-detector.js +0 -391
  470. package/dist/scripts/statistical-claims-detector.js.map +0 -1
  471. package/dist/scripts/sync-cia-schemas.d.ts +0 -52
  472. package/dist/scripts/sync-cia-schemas.d.ts.map +0 -1
  473. package/dist/scripts/sync-cia-schemas.js +0 -195
  474. package/dist/scripts/sync-cia-schemas.js.map +0 -1
  475. package/dist/scripts/translation-dictionary.d.ts +0 -45
  476. package/dist/scripts/translation-dictionary.d.ts.map +0 -1
  477. package/dist/scripts/translation-dictionary.js +0 -3642
  478. package/dist/scripts/translation-dictionary.js.map +0 -1
  479. package/dist/scripts/types/article.d.ts +0 -392
  480. package/dist/scripts/types/article.d.ts.map +0 -1
  481. package/dist/scripts/types/article.js +0 -6
  482. package/dist/scripts/types/article.js.map +0 -1
  483. package/dist/scripts/types/content.d.ts +0 -167
  484. package/dist/scripts/types/content.d.ts.map +0 -1
  485. package/dist/scripts/types/content.js +0 -6
  486. package/dist/scripts/types/content.js.map +0 -1
  487. package/dist/scripts/types/editorial.d.ts +0 -17
  488. package/dist/scripts/types/editorial.d.ts.map +0 -1
  489. package/dist/scripts/types/editorial.js +0 -6
  490. package/dist/scripts/types/editorial.js.map +0 -1
  491. package/dist/scripts/types/language.d.ts +0 -7
  492. package/dist/scripts/types/language.d.ts.map +0 -1
  493. package/dist/scripts/types/language.js +0 -6
  494. package/dist/scripts/types/language.js.map +0 -1
  495. package/dist/scripts/types/mcp.d.ts +0 -117
  496. package/dist/scripts/types/mcp.d.ts.map +0 -1
  497. package/dist/scripts/types/mcp.js +0 -6
  498. package/dist/scripts/types/mcp.js.map +0 -1
  499. package/dist/scripts/types/party.d.ts +0 -9
  500. package/dist/scripts/types/party.d.ts.map +0 -1
  501. package/dist/scripts/types/party.js +0 -6
  502. package/dist/scripts/types/party.js.map +0 -1
  503. package/dist/scripts/types/validation.d.ts +0 -136
  504. package/dist/scripts/types/validation.d.ts.map +0 -1
  505. package/dist/scripts/types/validation.js +0 -6
  506. package/dist/scripts/types/validation.js.map +0 -1
  507. package/dist/scripts/types/workflow.d.ts +0 -78
  508. package/dist/scripts/types/workflow.d.ts.map +0 -1
  509. package/dist/scripts/types/workflow.js +0 -6
  510. package/dist/scripts/types/workflow.js.map +0 -1
  511. package/dist/scripts/update-stats-from-cia.d.ts +0 -44
  512. package/dist/scripts/update-stats-from-cia.d.ts.map +0 -1
  513. package/dist/scripts/update-stats-from-cia.js +0 -310
  514. package/dist/scripts/update-stats-from-cia.js.map +0 -1
  515. package/dist/scripts/validate-against-cia-schemas.d.ts +0 -126
  516. package/dist/scripts/validate-against-cia-schemas.d.ts.map +0 -1
  517. package/dist/scripts/validate-against-cia-schemas.js +0 -299
  518. package/dist/scripts/validate-against-cia-schemas.js.map +0 -1
  519. package/dist/scripts/validate-cross-references.d.ts +0 -49
  520. package/dist/scripts/validate-cross-references.d.ts.map +0 -1
  521. package/dist/scripts/validate-cross-references.js +0 -183
  522. package/dist/scripts/validate-cross-references.js.map +0 -1
  523. package/dist/scripts/validate-file-ownership.d.ts +0 -68
  524. package/dist/scripts/validate-file-ownership.d.ts.map +0 -1
  525. package/dist/scripts/validate-file-ownership.js +0 -135
  526. package/dist/scripts/validate-file-ownership.js.map +0 -1
  527. package/dist/scripts/validate-news-translations.d.ts +0 -27
  528. package/dist/scripts/validate-news-translations.d.ts.map +0 -1
  529. package/dist/scripts/validate-news-translations.js +0 -258
  530. package/dist/scripts/validate-news-translations.js.map +0 -1
  531. package/dist/scripts/validate-translations.d.ts +0 -162
  532. package/dist/scripts/validate-translations.d.ts.map +0 -1
  533. package/dist/scripts/validate-translations.js +0 -378
  534. package/dist/scripts/validate-translations.js.map +0 -1
  535. package/dist/scripts/workflow-state-coordinator.d.ts +0 -354
  536. package/dist/scripts/workflow-state-coordinator.d.ts.map +0 -1
  537. package/dist/scripts/workflow-state-coordinator.js +0 -876
  538. package/dist/scripts/workflow-state-coordinator.js.map +0 -1
  539. package/dist/scripts/world-bank-client.d.ts +0 -122
  540. package/dist/scripts/world-bank-client.d.ts.map +0 -1
  541. package/dist/scripts/world-bank-client.js +0 -192
  542. package/dist/scripts/world-bank-client.js.map +0 -1
  543. package/dist/scripts/world-bank-context.d.ts +0 -88
  544. package/dist/scripts/world-bank-context.d.ts.map +0 -1
  545. package/dist/scripts/world-bank-context.js +0 -331
  546. package/dist/scripts/world-bank-context.js.map +0 -1
@@ -1,396 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-analysis.js","sourceRoot":"","sources":["../../../scripts/data-transformers/document-analysis.ts"],"names":[],"mappings":"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"}
@@ -1,144 +0,0 @@
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
@@ -1 +0,0 @@
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"}