@sevn/elections-components 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +297 -0
- package/dist/index.cjs +603 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +351 -0
- package/dist/index.d.ts +351 -0
- package/dist/index.js +15609 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +38 -0
- package/dist/umd/candidate-by-state.js +98 -0
- package/dist/umd/candidate-carrousel-state-results-viewer.js +108 -0
- package/dist/umd/candidate-counting-progress.js +77 -0
- package/dist/umd/candidate-duel-state-result-viewer.js +91 -0
- package/dist/umd/candidate-map-by-state.js +104 -0
- package/dist/umd/candidate-multi-ring-chart-performance-by-municipality.js +105 -0
- package/dist/umd/candidate-performance-by-municipality.js +105 -0
- package/dist/umd/candidate-ranking.js +59 -0
- package/dist/umd/candidate-results-by-municipality.js +103 -0
- package/dist/umd/counting-progress.js +125 -0
- package/dist/umd/current-leader.js +43 -0
- package/dist/umd/election-round-analysis.js +100 -0
- package/dist/umd/election-status.js +135 -0
- package/dist/umd/final-results.js +141 -0
- package/dist/umd/live-summary.js +36 -0
- package/dist/umd/municipality-perfomance-map.js +82 -0
- package/dist/umd/party-performance.js +99 -0
- package/dist/umd/results-by-office.js +94 -0
- package/dist/umd/round-results-analysis.js +99 -0
- package/dist/umd/state-leaders.js +118 -0
- package/dist/umd/state-winners.js +129 -0
- package/dist/umd/top-dispute.js +43 -0
- package/dist/umd/vote-comparison-by-round.js +76 -0
- package/dist/umd/vote-counting-progress.js +23 -0
- package/dist/umd/voting-map.js +112 -0
- package/package.json +96 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
interface HeaderProps {
|
|
2
|
+
title: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
tag?: string;
|
|
5
|
+
tagColor?: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface CandidateSummary {
|
|
9
|
+
candidate_id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
party_abbr: string;
|
|
12
|
+
party_color: string;
|
|
13
|
+
valid_votes_pct: number;
|
|
14
|
+
votes: number;
|
|
15
|
+
elected?: boolean;
|
|
16
|
+
}
|
|
17
|
+
interface StateResult {
|
|
18
|
+
state: string;
|
|
19
|
+
state_name: string;
|
|
20
|
+
status: string;
|
|
21
|
+
ballots_counted_pct: number;
|
|
22
|
+
leader: CandidateSummary;
|
|
23
|
+
runner_up: CandidateSummary;
|
|
24
|
+
}
|
|
25
|
+
interface StateResults {
|
|
26
|
+
office: string;
|
|
27
|
+
round: number;
|
|
28
|
+
last_updated: string;
|
|
29
|
+
states: StateResult[];
|
|
30
|
+
overview?: Overview;
|
|
31
|
+
}
|
|
32
|
+
interface Overview {
|
|
33
|
+
valid_votes: number;
|
|
34
|
+
null_votes: number;
|
|
35
|
+
blank_votes: number;
|
|
36
|
+
}
|
|
37
|
+
interface HeadToHeadCandidateMeta {
|
|
38
|
+
candidate_id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
party_abbr: string;
|
|
41
|
+
party_color: string;
|
|
42
|
+
}
|
|
43
|
+
interface HeadToHeadLivePoint {
|
|
44
|
+
minute_offset: number;
|
|
45
|
+
timestamp: string;
|
|
46
|
+
ballots_counted_pct: number;
|
|
47
|
+
candidate_a_pct: number;
|
|
48
|
+
candidate_b_pct: number;
|
|
49
|
+
candidate_a_votes: number;
|
|
50
|
+
candidate_b_votes: number;
|
|
51
|
+
}
|
|
52
|
+
interface HeadToHeadLiveTimeline {
|
|
53
|
+
office: string;
|
|
54
|
+
round: number;
|
|
55
|
+
state: string | null;
|
|
56
|
+
interval_minutes: number;
|
|
57
|
+
started_at: string;
|
|
58
|
+
candidate_a: HeadToHeadCandidateMeta;
|
|
59
|
+
candidate_b: HeadToHeadCandidateMeta;
|
|
60
|
+
points: HeadToHeadLivePoint[];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Props públicas dos componentes.
|
|
65
|
+
*
|
|
66
|
+
* Este arquivo é a fonte única da superfície pública do pacote: os `.svelte`
|
|
67
|
+
* anotam o `$props()` com estas interfaces, e o `.d.ts` publicado é gerado a
|
|
68
|
+
* partir daqui. Assim o tipo que o consumidor vê não tem como divergir do que
|
|
69
|
+
* o componente realmente aceita.
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
/** Props aceitas por todos os 25 componentes. */
|
|
73
|
+
interface BaseComponentProps {
|
|
74
|
+
/** Renderiza com dados de exemplo, sem tocar na API. */
|
|
75
|
+
mock?: boolean;
|
|
76
|
+
/** Remove o cartão externo (borda, fundo, respiro) para encaixar em layout próprio. */
|
|
77
|
+
rawStyle?: boolean;
|
|
78
|
+
/** Título, descrição e tag exibidos no topo do componente. */
|
|
79
|
+
header?: HeaderProps;
|
|
80
|
+
}
|
|
81
|
+
interface FinalResultsProps extends BaseComponentProps {
|
|
82
|
+
/** Exibe o espaço publicitário do componente. */
|
|
83
|
+
showAd?: boolean;
|
|
84
|
+
/** Dados prontos, para pular a chamada de API. Use com `mock: false`. */
|
|
85
|
+
data?: any | null;
|
|
86
|
+
/** Resultados por estado prontos, para pular a chamada de API. */
|
|
87
|
+
stateResults?: StateResults | null;
|
|
88
|
+
}
|
|
89
|
+
interface StateWinnersProps extends BaseComponentProps {
|
|
90
|
+
/** Dados prontos, para pular a chamada de API. Use com `mock: false`. */
|
|
91
|
+
data?: any | null;
|
|
92
|
+
}
|
|
93
|
+
interface VoteCountingProgressProps extends BaseComponentProps {
|
|
94
|
+
/** Dados prontos, para pular a chamada de API. Use com `mock: false`. */
|
|
95
|
+
data?: HeadToHeadLiveTimeline | null;
|
|
96
|
+
}
|
|
97
|
+
interface VoteComparisonByRoundProps extends BaseComponentProps {
|
|
98
|
+
/** Cargo selecionado ao abrir. O usuário pode trocar no filtro. */
|
|
99
|
+
defaultOffice?: 'president' | 'governor';
|
|
100
|
+
}
|
|
101
|
+
interface CountingProgressProps extends BaseComponentProps {
|
|
102
|
+
/** Ano da eleição consultada. */
|
|
103
|
+
year?: number;
|
|
104
|
+
/** Cargo selecionado ao abrir. O usuário pode trocar no filtro. */
|
|
105
|
+
defaultOffice?: 'president' | 'governor';
|
|
106
|
+
}
|
|
107
|
+
interface StateLeadersProps extends BaseComponentProps {
|
|
108
|
+
/** Ano da eleição consultada. */
|
|
109
|
+
year?: number;
|
|
110
|
+
/** Cargo selecionado ao abrir. O usuário pode trocar no filtro. */
|
|
111
|
+
defaultOffice?: 'president' | 'governor';
|
|
112
|
+
}
|
|
113
|
+
interface CurrentLeaderProps extends BaseComponentProps {
|
|
114
|
+
/** Dados prontos, para pular a chamada de API. Use com `mock: false`. */
|
|
115
|
+
data?: any | null;
|
|
116
|
+
}
|
|
117
|
+
interface TopDisputeProps extends BaseComponentProps {
|
|
118
|
+
/** Ano da eleição consultada. */
|
|
119
|
+
year?: number;
|
|
120
|
+
}
|
|
121
|
+
interface CandidateRankingProps extends BaseComponentProps {
|
|
122
|
+
/** Ano da eleição consultada. */
|
|
123
|
+
year?: number;
|
|
124
|
+
}
|
|
125
|
+
interface LiveSummaryProps extends BaseComponentProps {
|
|
126
|
+
/** Dados prontos, para pular a chamada de API. Use com `mock: false`. */
|
|
127
|
+
data?: any | null;
|
|
128
|
+
}
|
|
129
|
+
interface CandidatePerformanceByMunicipalityProps extends BaseComponentProps {
|
|
130
|
+
/** Ano da eleição consultada. */
|
|
131
|
+
year?: number;
|
|
132
|
+
/** Cargo selecionado ao abrir. O usuário pode trocar no filtro. */
|
|
133
|
+
defaultOffice?: 'president' | 'governor';
|
|
134
|
+
}
|
|
135
|
+
interface RoundResultsAnalysisProps extends BaseComponentProps {
|
|
136
|
+
/** Ano da eleição consultada. */
|
|
137
|
+
year?: number;
|
|
138
|
+
/** Cargo selecionado ao abrir. O usuário pode trocar no filtro. */
|
|
139
|
+
defaultOffice?: 'president' | 'governor';
|
|
140
|
+
}
|
|
141
|
+
interface ElectionStatusProps extends BaseComponentProps {
|
|
142
|
+
/** Ano da eleição consultada. */
|
|
143
|
+
year?: number;
|
|
144
|
+
/** Cargo selecionado ao abrir. O usuário pode trocar no filtro. */
|
|
145
|
+
defaultOffice?: 'president' | 'governor';
|
|
146
|
+
}
|
|
147
|
+
interface CandidateResultsByMunicipalityProps extends BaseComponentProps {
|
|
148
|
+
/** Ano da eleição consultada. */
|
|
149
|
+
year?: number;
|
|
150
|
+
}
|
|
151
|
+
interface MunicipalityPerfomanceMapProps extends BaseComponentProps {
|
|
152
|
+
/** Dados prontos, para pular a chamada de API. Use com `mock: false`. */
|
|
153
|
+
data?: any | null;
|
|
154
|
+
/** Ano da eleição consultada. */
|
|
155
|
+
year?: number;
|
|
156
|
+
}
|
|
157
|
+
interface CandidateByStateProps extends BaseComponentProps {
|
|
158
|
+
/** Dados prontos, para pular a chamada de API. Use com `mock: false`. */
|
|
159
|
+
data?: any | null;
|
|
160
|
+
/** Ano da eleição consultada. */
|
|
161
|
+
year?: number;
|
|
162
|
+
}
|
|
163
|
+
interface CandidateCarrouselStateResultsViewerProps extends BaseComponentProps {
|
|
164
|
+
/** Ano da eleição consultada. */
|
|
165
|
+
year?: number;
|
|
166
|
+
/** Cargo consultado. */
|
|
167
|
+
office?: string;
|
|
168
|
+
}
|
|
169
|
+
interface CandidateDuelStateResultViewerProps extends BaseComponentProps {
|
|
170
|
+
/** Dados prontos, para pular a chamada de API. Use com `mock: false`. */
|
|
171
|
+
data?: any | null;
|
|
172
|
+
/** Ano da eleição consultada. */
|
|
173
|
+
year?: number;
|
|
174
|
+
/** Exibe a tag de posição (1º, 2º…) ao lado do candidato. */
|
|
175
|
+
showPosition?: boolean;
|
|
176
|
+
/** Cor da tag de posição. Padrão: a cor do próprio candidato. */
|
|
177
|
+
positionTagColor?: string;
|
|
178
|
+
}
|
|
179
|
+
interface CandidateMapByStateProps extends BaseComponentProps {
|
|
180
|
+
/** Dados prontos, para pular a chamada de API. Use com `mock: false`. */
|
|
181
|
+
data?: any | null;
|
|
182
|
+
}
|
|
183
|
+
interface ElectionRoundAnalysisProps extends BaseComponentProps {
|
|
184
|
+
/** Ano da eleição consultada. */
|
|
185
|
+
year?: number;
|
|
186
|
+
}
|
|
187
|
+
interface CandidateMultiRingChartPerformanceByMunicipalityProps extends BaseComponentProps {
|
|
188
|
+
/** Ano da eleição consultada. */
|
|
189
|
+
year?: number;
|
|
190
|
+
}
|
|
191
|
+
interface ResultsByOfficeProps extends BaseComponentProps {
|
|
192
|
+
/** Ano da eleição consultada. */
|
|
193
|
+
year?: number;
|
|
194
|
+
/** Cargo selecionado ao abrir. O usuário pode trocar no filtro. */
|
|
195
|
+
defaultOffice?: 'senator' | 'federal_deputy' | 'state_deputy';
|
|
196
|
+
/** Linhas por página na tabela. */
|
|
197
|
+
itemsPerPage?: number;
|
|
198
|
+
}
|
|
199
|
+
interface VotingMapProps extends BaseComponentProps {
|
|
200
|
+
/** Exibe o espaço publicitário do componente. */
|
|
201
|
+
showAd?: boolean;
|
|
202
|
+
/** Ano da eleição consultada. */
|
|
203
|
+
year?: number;
|
|
204
|
+
/** Turno da eleição. */
|
|
205
|
+
round?: number;
|
|
206
|
+
}
|
|
207
|
+
interface CandidateCountingProgressProps extends BaseComponentProps {
|
|
208
|
+
/** Ano da eleição consultada. */
|
|
209
|
+
year?: number;
|
|
210
|
+
}
|
|
211
|
+
interface PartyPerformanceProps extends BaseComponentProps {
|
|
212
|
+
/** Ano da eleição consultada. */
|
|
213
|
+
year?: number;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** Cores customizáveis pelo consumidor. Viram custom properties `--sevn-color-*`. */
|
|
217
|
+
interface SevnTheme {
|
|
218
|
+
primary?: string;
|
|
219
|
+
secondary?: string;
|
|
220
|
+
tertiary?: string;
|
|
221
|
+
neutral?: string;
|
|
222
|
+
red?: string;
|
|
223
|
+
green?: string;
|
|
224
|
+
blue?: string;
|
|
225
|
+
yellow?: string;
|
|
226
|
+
textSecondary?: string;
|
|
227
|
+
}
|
|
228
|
+
interface SevnConfig {
|
|
229
|
+
/** Chave do cliente. É o subdomínio da API dele. */
|
|
230
|
+
key: string | null;
|
|
231
|
+
/** Hosts na ordem de tentativa. Derivado da key, ou definido à mão. */
|
|
232
|
+
apiHosts: string[];
|
|
233
|
+
/** Base da CDN de arquivos estáticos compartilhados (mapas, índice de cidades). */
|
|
234
|
+
assetsBase: string;
|
|
235
|
+
/** Versão do layout de arquivos na CDN estática. */
|
|
236
|
+
assetsVersion: string;
|
|
237
|
+
cache: {
|
|
238
|
+
storageKey: string;
|
|
239
|
+
maxEntries: number;
|
|
240
|
+
};
|
|
241
|
+
request: {
|
|
242
|
+
/** Timeout de cada tentativa individual. */
|
|
243
|
+
timeoutMs: number;
|
|
244
|
+
/** Tentativas por host antes de passar para o próximo. */
|
|
245
|
+
retriesPerHost: number;
|
|
246
|
+
/** Espera entre tentativas no mesmo host. */
|
|
247
|
+
retryDelayMs: number;
|
|
248
|
+
/** Por quanto tempo fica fixado num host secundário antes de retentar o primário. */
|
|
249
|
+
stickyWindowMs: number;
|
|
250
|
+
};
|
|
251
|
+
theme: SevnTheme | null;
|
|
252
|
+
}
|
|
253
|
+
interface ConfigureOptions extends Partial<Omit<SevnConfig, 'cache' | 'request'>> {
|
|
254
|
+
cache?: Partial<SevnConfig['cache']>;
|
|
255
|
+
request?: Partial<SevnConfig['request']>;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Aplica a chave do cliente. É o único passo obrigatório de configuração —
|
|
259
|
+
* a partir dela saem os hosts da API daquele cliente.
|
|
260
|
+
*/
|
|
261
|
+
declare function applyKey(key: string): void;
|
|
262
|
+
/**
|
|
263
|
+
* Sobrescreve configuração. Existe para o showcase, staging e testes apontarem
|
|
264
|
+
* para outra API sem precisar inventar um subdomínio de cliente.
|
|
265
|
+
*/
|
|
266
|
+
declare function configure(options: ConfigureOptions): void;
|
|
267
|
+
declare function getConfig(): Readonly<SevnConfig>;
|
|
268
|
+
/** True quando há hosts resolvidos — via key ou via `configure({ apiHosts })`. */
|
|
269
|
+
declare function isReady(): boolean;
|
|
270
|
+
/** URL de um arquivo na CDN estática compartilhada. */
|
|
271
|
+
declare function assetUrl(path: string): string;
|
|
272
|
+
|
|
273
|
+
/** Host que respondeu por último. Útil para diagnóstico. */
|
|
274
|
+
declare function activeHost(): string | null;
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Erro de integração: o consumidor não chamou `Core.applyKey()` antes de montar
|
|
278
|
+
* um componente. A mensagem é exibida direto na UI (cada componente já embrulha
|
|
279
|
+
* a chamada de API num `.catch`), então precisa ser legível por humanos.
|
|
280
|
+
*/
|
|
281
|
+
declare class SevnKeyMissingError extends Error {
|
|
282
|
+
constructor();
|
|
283
|
+
}
|
|
284
|
+
/** Erro de rede após esgotar todos os hosts (primário, secundário e failover). */
|
|
285
|
+
declare class SevnNetworkError extends Error {
|
|
286
|
+
constructor(url: string, cause?: unknown);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Configuração global do pacote. O único passo obrigatório é `applyKey`.
|
|
291
|
+
*
|
|
292
|
+
* ```js
|
|
293
|
+
* import { Core } from '@sevn/elections-components';
|
|
294
|
+
* Core.applyKey('minha-chave');
|
|
295
|
+
* ```
|
|
296
|
+
*
|
|
297
|
+
* No UMD a chave é lida automaticamente do `?cid=` da própria tag `<script>`.
|
|
298
|
+
*/
|
|
299
|
+
declare const Core: {
|
|
300
|
+
applyKey: typeof applyKey;
|
|
301
|
+
configure(options: Parameters<typeof configure>[0]): void;
|
|
302
|
+
getConfig: typeof getConfig;
|
|
303
|
+
isReady: typeof isReady;
|
|
304
|
+
assetUrl: typeof assetUrl;
|
|
305
|
+
/** Cor(es) a sobrescrever, sem mexer no resto da configuração. */
|
|
306
|
+
setTheme(theme: SevnTheme): void;
|
|
307
|
+
/** Host que respondeu por último. Diagnóstico. */
|
|
308
|
+
activeHost: typeof activeHost;
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
/** Onde montar: um elemento, ou um seletor CSS resolvido no momento da criação. */
|
|
312
|
+
type SevnTarget = Element | string;
|
|
313
|
+
type SevnOptions<P> = P & {
|
|
314
|
+
target: SevnTarget;
|
|
315
|
+
};
|
|
316
|
+
interface SevnInstance {
|
|
317
|
+
/** Desmonta e remove o componente do DOM. */
|
|
318
|
+
destroy(): Promise<void>;
|
|
319
|
+
}
|
|
320
|
+
interface SevnComponent<P> {
|
|
321
|
+
new (options: SevnOptions<P>): SevnInstance;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
declare const FinalResults: SevnComponent<FinalResultsProps>;
|
|
325
|
+
declare const StateWinners: SevnComponent<StateWinnersProps>;
|
|
326
|
+
declare const VoteCountingProgress: SevnComponent<VoteCountingProgressProps>;
|
|
327
|
+
declare const VoteComparisonByRound: SevnComponent<VoteComparisonByRoundProps>;
|
|
328
|
+
declare const CountingProgress: SevnComponent<CountingProgressProps>;
|
|
329
|
+
declare const StateLeaders: SevnComponent<StateLeadersProps>;
|
|
330
|
+
declare const CurrentLeader: SevnComponent<CurrentLeaderProps>;
|
|
331
|
+
declare const TopDispute: SevnComponent<TopDisputeProps>;
|
|
332
|
+
declare const CandidateRanking: SevnComponent<CandidateRankingProps>;
|
|
333
|
+
declare const LiveSummary: SevnComponent<LiveSummaryProps>;
|
|
334
|
+
declare const CandidatePerformanceByMunicipality: SevnComponent<CandidatePerformanceByMunicipalityProps>;
|
|
335
|
+
declare const RoundResultsAnalysis: SevnComponent<RoundResultsAnalysisProps>;
|
|
336
|
+
declare const ElectionStatus: SevnComponent<ElectionStatusProps>;
|
|
337
|
+
declare const CandidateResultsByMunicipality: SevnComponent<CandidateResultsByMunicipalityProps>;
|
|
338
|
+
declare const MunicipalityPerfomanceMap: SevnComponent<MunicipalityPerfomanceMapProps>;
|
|
339
|
+
declare const CandidateByState: SevnComponent<CandidateByStateProps>;
|
|
340
|
+
declare const CandidateCarrouselStateResultsViewer: SevnComponent<CandidateCarrouselStateResultsViewerProps>;
|
|
341
|
+
declare const CandidateDuelStateResultViewer: SevnComponent<CandidateDuelStateResultViewerProps>;
|
|
342
|
+
declare const CandidateMapByState: SevnComponent<CandidateMapByStateProps>;
|
|
343
|
+
declare const ElectionRoundAnalysis: SevnComponent<ElectionRoundAnalysisProps>;
|
|
344
|
+
declare const CandidateMultiRingChartPerformanceByMunicipality: SevnComponent<CandidateMultiRingChartPerformanceByMunicipalityProps>;
|
|
345
|
+
declare const ResultsByOffice: SevnComponent<ResultsByOfficeProps>;
|
|
346
|
+
declare const VotingMap: SevnComponent<VotingMapProps>;
|
|
347
|
+
declare const CandidateCountingProgress: SevnComponent<CandidateCountingProgressProps>;
|
|
348
|
+
declare const PartyPerformance: SevnComponent<PartyPerformanceProps>;
|
|
349
|
+
|
|
350
|
+
export { CandidateByState, CandidateCarrouselStateResultsViewer, CandidateCountingProgress, CandidateDuelStateResultViewer, CandidateMapByState, CandidateMultiRingChartPerformanceByMunicipality, CandidatePerformanceByMunicipality, CandidateRanking, CandidateResultsByMunicipality, Core, CountingProgress, CurrentLeader, ElectionRoundAnalysis, ElectionStatus, FinalResults, LiveSummary, MunicipalityPerfomanceMap, PartyPerformance, ResultsByOffice, RoundResultsAnalysis, SevnKeyMissingError, SevnNetworkError, StateLeaders, StateWinners, TopDispute, VoteComparisonByRound, VoteCountingProgress, VotingMap };
|
|
351
|
+
export type { BaseComponentProps, CandidateByStateProps, CandidateCarrouselStateResultsViewerProps, CandidateCountingProgressProps, CandidateDuelStateResultViewerProps, CandidateMapByStateProps, CandidateMultiRingChartPerformanceByMunicipalityProps, CandidatePerformanceByMunicipalityProps, CandidateRankingProps, CandidateResultsByMunicipalityProps, ConfigureOptions, CountingProgressProps, CurrentLeaderProps, ElectionRoundAnalysisProps, ElectionStatusProps, FinalResultsProps, HeaderProps, LiveSummaryProps, MunicipalityPerfomanceMapProps, PartyPerformanceProps, ResultsByOfficeProps, RoundResultsAnalysisProps, SevnComponent, SevnConfig, SevnInstance, SevnOptions, SevnTarget, SevnTheme, StateLeadersProps, StateWinnersProps, TopDisputeProps, VoteComparisonByRoundProps, VoteCountingProgressProps, VotingMapProps };
|