@dra2020/dra-types 1.8.142 → 1.8.144

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.
@@ -27,11 +27,15 @@ export declare const ColorByGreatD = 6;
27
27
  export declare let PartisanDistrictStops: number[];
28
28
  export declare let PartisanPrecinctStops: number[];
29
29
  export declare let EthnicFewStops: number[];
30
+ export declare const ColorBrewerSchemeStops: number[];
30
31
  export type PaletteDefaults = {
31
32
  [key: string]: string;
32
33
  };
33
34
  export declare const DefaultPaletteDefaults: PaletteDefaults;
34
35
  export declare function makeStops(stops: number[], colors: string[]): Util.Stop[];
36
+ export declare function partisanStops(stops: number[], palette: PaletteName): Util.Stop[];
37
+ export declare function partisanDistrictStops(stops: number[], palette: PaletteName): Util.Stop[];
38
+ export declare function ethnicStops(stops: number[], palette: PaletteName): Util.Stop[];
35
39
  export declare function ethnicBackgroundColor(index: number, pd: PaletteDefaults): string;
36
40
  export declare function ToAllEthnicColor(agg: PF.PackedFields, dc: PF.DatasetContext, pd: PaletteDefaults): number;
37
41
  export declare function ToPartisanColorStr(agg: PF.PackedFields, dc: PF.DatasetContext, pd: PaletteDefaults): string;
@@ -44,9 +48,7 @@ export declare function AggregatePartisanColorStr(getter: PF.FieldGetter, stops:
44
48
  export declare function ColorFromRGBPcts(pctRed: number, pctGreen: number, pctBlue: number, stops: Util.GradientStops): string;
45
49
  export type ColorUse = 'districts' | 'partisanScale' | 'demographicsScale' | 'demographicsAllGroups' | 'partisanDistrictsScale';
46
50
  export declare const PaletteNames: readonly ["jet_r", "turbo_r", "inferno_r", "viridis_r", "magma_r", "plasma_r", "Greys", "bone_r", "draclassic", "demographicsclassic", "partisanclassic", "allgroupsclassic", "partisandistrictsclassic"];
47
- export type PaletteName = typeof PaletteNames[number];
48
- export declare function colorsFromStops(palette: PaletteName, stops: number[], classicColors: string[]): string[];
49
- export declare function colorsFromStopsPartisan(palette: PaletteName, colorUse: ColorUse, stops: number[]): string[];
51
+ export type PaletteName = string;
50
52
  export declare function allGroups16Colors(palette: PaletteName, colors: string[]): string[];
51
53
  export interface DistrictCache {
52
54
  colorElection?: string;
@@ -90,3 +90,10 @@ export declare function datasetRestrict(ds: Dataset): {
90
90
  export type DatasetIndex = {
91
91
  [id: string]: Dataset;
92
92
  };
93
+ export interface PrimaryKeys {
94
+ CENSUS: string;
95
+ VAP: string;
96
+ ELECTION: string;
97
+ }
98
+ export declare function defaultBuiltinKeys(state: string, datasource: string, planType: string, builtins: Set<string>): PrimaryKeys;
99
+ export declare function usesPrisonerAdjust(state: string, datasource: string, planType: string): boolean;
package/dist/dra-types.js CHANGED
@@ -120,9 +120,12 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
120
120
 
121
121
 
122
122
  Object.defineProperty(exports, "__esModule", ({ value: true }));
123
- exports.BinEthnicAsian = exports.BinEthnicBlack = exports.BinEthnicWhite = exports.BinBlack = exports.BinDeepPink = exports.BinMagenta = exports.BinDarkViolet = exports.BinBlueViolet = exports.BinBlue = exports.BinLightBlue = exports.BinCyan = exports.BinMediumSpringGreen = exports.BinLime = exports.BinChartreuse = exports.BinGreenish = exports.BinYellow = exports.BinGold = exports.BinOrange = exports.BinBrown = exports.BinOrangeRed = exports.BinRed = exports.PaletteNames = exports.DefaultPaletteDefaults = exports.EthnicFewStops = exports.PartisanPrecinctStops = exports.PartisanDistrictStops = exports.ColorByGreatD = exports.ColorByGoodD = exports.ColorByFairD = exports.ColorByEven = exports.ColorByFairR = exports.ColorByGoodR = exports.ColorByGreatR = exports.EthnicTextColor = exports.ColorByBlackAsian = exports.ColorByAsianHispanic = exports.ColorByAsianWhite = exports.ColorByHispanicBlack = exports.ColorByBlackWhite = exports.ColorByHispanicWhite = exports.ColorByMix = exports.ColorByMostlyNative = exports.ColorByMostlyAsian = exports.ColorByMostlyHispanic = exports.ColorByMostlyBlack = exports.ColorByMostlyWhite = exports.ColorBySolidAsian = exports.ColorBySolidHispanic = exports.ColorBySolidBlack = exports.ColorBySolidWhite = void 0;
124
- exports.ColorFlags = exports.MaxFields = exports.FieldCountToColors = exports.BinColorLookup = exports.BinEthnicOther = exports.BinEthnicHispanic = void 0;
123
+ exports.BinEthnicBlack = exports.BinEthnicWhite = exports.BinBlack = exports.BinDeepPink = exports.BinMagenta = exports.BinDarkViolet = exports.BinBlueViolet = exports.BinBlue = exports.BinLightBlue = exports.BinCyan = exports.BinMediumSpringGreen = exports.BinLime = exports.BinChartreuse = exports.BinGreenish = exports.BinYellow = exports.BinGold = exports.BinOrange = exports.BinBrown = exports.BinOrangeRed = exports.BinRed = exports.PaletteNames = exports.DefaultPaletteDefaults = exports.ColorBrewerSchemeStops = exports.EthnicFewStops = exports.PartisanPrecinctStops = exports.PartisanDistrictStops = exports.ColorByGreatD = exports.ColorByGoodD = exports.ColorByFairD = exports.ColorByEven = exports.ColorByFairR = exports.ColorByGoodR = exports.ColorByGreatR = exports.EthnicTextColor = exports.ColorByBlackAsian = exports.ColorByAsianHispanic = exports.ColorByAsianWhite = exports.ColorByHispanicBlack = exports.ColorByBlackWhite = exports.ColorByHispanicWhite = exports.ColorByMix = exports.ColorByMostlyNative = exports.ColorByMostlyAsian = exports.ColorByMostlyHispanic = exports.ColorByMostlyBlack = exports.ColorByMostlyWhite = exports.ColorBySolidAsian = exports.ColorBySolidHispanic = exports.ColorBySolidBlack = exports.ColorBySolidWhite = void 0;
124
+ exports.ColorFlags = exports.MaxFields = exports.FieldCountToColors = exports.BinColorLookup = exports.BinEthnicOther = exports.BinEthnicHispanic = exports.BinEthnicAsian = void 0;
125
125
  exports.makeStops = makeStops;
126
+ exports.partisanStops = partisanStops;
127
+ exports.partisanDistrictStops = partisanDistrictStops;
128
+ exports.ethnicStops = ethnicStops;
126
129
  exports.ethnicBackgroundColor = ethnicBackgroundColor;
127
130
  exports.ToAllEthnicColor = ToAllEthnicColor;
128
131
  exports.ToPartisanColorStr = ToPartisanColorStr;
@@ -133,8 +136,6 @@ exports.AggregateEthnicColor = AggregateEthnicColor;
133
136
  exports.AggregatePartisanColor = AggregatePartisanColor;
134
137
  exports.AggregatePartisanColorStr = AggregatePartisanColorStr;
135
138
  exports.ColorFromRGBPcts = ColorFromRGBPcts;
136
- exports.colorsFromStops = colorsFromStops;
137
- exports.colorsFromStopsPartisan = colorsFromStopsPartisan;
138
139
  exports.allGroups16Colors = allGroups16Colors;
139
140
  exports.ToExtendedColor = ToExtendedColor;
140
141
  exports.computeDistrictColors = computeDistrictColors;
@@ -251,6 +252,9 @@ exports.EthnicFewStops = [
251
252
  0.50, //
252
253
  1.00, //
253
254
  ];
255
+ exports.ColorBrewerSchemeStops = [
256
+ 0.00, 0.125, 0.125, 0.25, 0.25, 0.375, 0.375, 0.50, 0.50, 0.625, 0.625, 0.75, 0.75, 0.875, 0.875, 1.00
257
+ ];
254
258
  exports.DefaultPaletteDefaults = {
255
259
  partisanScale: 'partisanclassic',
256
260
  partisanDistrictsScale: 'partisandistrictsclassic',
@@ -265,18 +269,23 @@ function makeStops(stops, colors) {
265
269
  result.push({ stop: stops[i], color: colors[i] });
266
270
  return result;
267
271
  }
268
- function partisanStops(stops, pd) {
269
- const palette = pd['partisanScale'];
272
+ // *************** Color functions ***********************
273
+ // These 3 functions: partisanStops, partisanDistrictStops, ethnicStops, check for Color Brewer schemes
274
+ function partisanStops(stops, palette) {
275
+ if (baseclient_1.Colors.BigPalettes.indexOf(palette) < 0) // not a big palette
276
+ stops = exports.ColorBrewerSchemeStops;
270
277
  return makeStops(stops, colorsFromStopsPartisan(palette, 'partisanScale', stops));
271
278
  }
272
- function partisanDistrictStops(stops, pd) {
273
- const palette = pd['partisanDistrictsScale'];
279
+ function partisanDistrictStops(stops, palette) {
280
+ if (baseclient_1.Colors.BigPalettes.indexOf(palette) < 0) // not a big palette
281
+ stops = exports.ColorBrewerSchemeStops;
274
282
  return makeStops(stops, colorsFromStopsPartisan(palette, 'partisanDistrictsScale', stops));
275
283
  }
276
- function ethnicStops(stops, pd) {
277
- const palette = pd['demographicsScale'];
284
+ function ethnicStops(stops, palette) {
278
285
  if (palette === 'demographicsclassic')
279
286
  return makeStops(stops, baseclient_1.Colors.EthnicFewClassicColors);
287
+ if (baseclient_1.Colors.BigPalettes.indexOf(palette) < 0) // not a big palette
288
+ stops = exports.ColorBrewerSchemeStops;
280
289
  return makeStops(stops, colorsFromStops(palette, stops, baseclient_1.Colors.EthnicFewClassicColors));
281
290
  }
282
291
  function ethnicBackgroundColor(index, pd) {
@@ -294,10 +303,10 @@ function ToAllEthnicColor(agg, dc, pd) {
294
303
  return AggregateEthnicColor(PF.ToGetter(agg, dc, did), pd, builtin.endsWith('NH'));
295
304
  }
296
305
  function ToPartisanColorStr(agg, dc, pd) {
297
- return ToPartisanColor(agg, dc, partisanStops(exports.PartisanPrecinctStops, pd));
306
+ return ToPartisanColor(agg, dc, partisanStops(exports.PartisanPrecinctStops, pd['partisanScale']));
298
307
  }
299
308
  function ToPartisanDistrictColor(agg, dc, pd) {
300
- return ToPartisanColor(agg, dc, partisanDistrictStops(exports.PartisanDistrictStops, pd));
309
+ return ToPartisanColor(agg, dc, partisanDistrictStops(exports.PartisanDistrictStops, pd['partisanDistrictsScale']));
301
310
  }
302
311
  function ToPartisanColor(agg, dc, stops) {
303
312
  const getter = PF.ToGetter(agg, dc, dc.primeEDS);
@@ -312,7 +321,7 @@ function ToPartisanShiftColor(agg, dc, datasets, pd, isDistrict) {
312
321
  const defaultIsDistrict = isDistrict !== null && isDistrict !== void 0 ? isDistrict : false; // make the optional isDistrict parameter to false by default
313
322
  const rep = 0.5 - (shift / 2);
314
323
  const dem = 0.5 + (shift / 2);
315
- const stops = defaultIsDistrict ? partisanDistrictStops(exports.PartisanDistrictStops, pd) : partisanStops(exports.PartisanPrecinctStops, pd);
324
+ const stops = defaultIsDistrict ? partisanDistrictStops(exports.PartisanDistrictStops, pd['partisanDistrictsScale']) : partisanStops(exports.PartisanPrecinctStops, pd['partisanScale']);
316
325
  const color = ColorFromRGBPcts(rep, 0, dem, stops);
317
326
  // console.log('Shift (r, d, color): (' + rep + ', ' + dem + ', ' + color + ')');
318
327
  return color;
@@ -371,7 +380,7 @@ function ToEthnicColorStr(agg, dc, pd, detail) {
371
380
  if (den == 0)
372
381
  return '#ffffff';
373
382
  const pct = bInvert ? 1 - (num / den) : num / den;
374
- return baseclient_1.Util.execGradient(ethnicStops(exports.EthnicFewStops, pd), pct);
383
+ return baseclient_1.Util.execGradient(ethnicStops(exports.EthnicFewStops, pd['demographicsScale']), pct);
375
384
  }
376
385
  // All Groups Mosaic
377
386
  function AggregateEthnicColor(getter, pd, nhAlone) {
@@ -483,12 +492,17 @@ function ColorFromRGBPcts(pctRed, pctGreen, pctBlue, stops) {
483
492
  pctBlue /= pctTot;
484
493
  return baseclient_1.Util.execGradient(stops, pctBlue);
485
494
  }
486
- // Currently supported palettes
495
+ // Currently supported palettes (not including Color Brewer schemes)
487
496
  exports.PaletteNames = ['jet_r', 'turbo_r', 'inferno_r', 'viridis_r', 'magma_r', 'plasma_r', 'Greys', 'bone_r',
488
497
  'draclassic', 'demographicsclassic', 'partisanclassic', 'allgroupsclassic', 'partisandistrictsclassic'];
489
498
  function colorsFromStops(palette, stops, classicColors) {
490
- // Use classicColors to see where there are duplicate colors
491
499
  const allColors = baseclient_1.Colors.getPalette(palette);
500
+ if (allColors.length < baseclient_1.Colors.MaxColors) {
501
+ if (allColors.length != 8) // Color Brewer Schemes are only 8 colors
502
+ return classicColors; // Safety check; shouldn't happen
503
+ return colorBrewerColors(stops, allColors);
504
+ }
505
+ // Use classicColors to see where there are duplicate colors
492
506
  let colors = [];
493
507
  for (let i = 0; i < stops.length; i++) {
494
508
  const stop = (i + 1 < classicColors.length && classicColors[i] == classicColors[i + 1]) ? (stops[i] + stops[i + 1]) / 2 :
@@ -507,13 +521,26 @@ function colorsFromStopsPartisan(palette, colorUse, stops) {
507
521
  return baseclient_1.Colors.PartisanDistrictClassicColors;
508
522
  // For partisanScale and partisanDistrictsScale; indexes match classic color pattern
509
523
  const allColors = baseclient_1.Colors.getPalette(palette);
510
- if (allColors.length < baseclient_1.Colors.MaxColors)
511
- return baseclient_1.Colors.PartisanPrecinctClassicColors; // Safety check; shouldn't happen
524
+ if (allColors.length < baseclient_1.Colors.MaxColors) {
525
+ if (allColors.length != 8) // Color Brewer Schemes are only 8 colors
526
+ return baseclient_1.Colors.PartisanPrecinctClassicColors; // Safety check; shouldn't happen
527
+ return colorBrewerColors(stops, allColors);
528
+ }
512
529
  let colors = [];
513
530
  const indexes = colorUse === 'partisanScale' ?
514
531
  [15, 27, 37, 47, 57, 67, 82, 92, 102, 112, 122, 134] : [15, 15, 37, 37, 47, 67, 82, 102, 122, 122, 134, 134];
515
- for (let i = 0; i < stops.length; i++) {
532
+ for (let i = 0; i < stops.length; i++)
516
533
  colors.push(allColors[indexes[i]]);
534
+ return colors;
535
+ }
536
+ function colorBrewerColors(stops, allColors) {
537
+ // Do each color twice (expecting 16 stops)
538
+ const colors = [];
539
+ for (let i = 0; i < stops.length; i++) {
540
+ let colorInx = Math.floor(i / 2);
541
+ if (colorInx >= allColors.length)
542
+ colorInx = allColors.length - 1;
543
+ colors.push(allColors[colorInx]);
517
544
  }
518
545
  return colors;
519
546
  }
@@ -1408,6 +1435,8 @@ exports.formColorBy = formColorBy;
1408
1435
  exports.parseColorBy = parseColorBy;
1409
1436
  exports.isColorBy = isColorBy;
1410
1437
  exports.datasetRestrict = datasetRestrict;
1438
+ exports.defaultBuiltinKeys = defaultBuiltinKeys;
1439
+ exports.usesPrisonerAdjust = usesPrisonerAdjust;
1411
1440
  function sortFields(f1, f2) {
1412
1441
  return (f1.order || 0) - (f2.order || 0);
1413
1442
  }
@@ -1433,6 +1462,48 @@ function datasetRestrict(ds) {
1433
1462
  return ds.meta[ds.id].restrict;
1434
1463
  return null;
1435
1464
  }
1465
+ ;
1466
+ function defaultBuiltinKeys(state, datasource, planType, builtins) {
1467
+ function bestOf(a) { return a.find(s => builtins.has(s)); }
1468
+ return (datasource === '2020_VD')
1469
+ ? {
1470
+ CENSUS: bestOf((usesPrisonerAdjust(state, datasource, planType)
1471
+ ? ['D20FA', 'D20F', 'D19F', 'D18F']
1472
+ : ['D20F', 'D19F', 'D18F'])),
1473
+ VAP: bestOf(['D20T', 'D19T', 'D18T']),
1474
+ ELECTION: bestOf(['C16GCO', 'E20GPR', 'E16GPR'])
1475
+ }
1476
+ :
1477
+ {
1478
+ CENSUS: bestOf(['D10F', 'D16F']),
1479
+ VAP: bestOf(['D10T', 'D16T']),
1480
+ ELECTION: bestOf(['C16GCO', 'E20GPR', 'E16GPR', 'E08GPR'])
1481
+ };
1482
+ }
1483
+ // Hard-coded based on both the existence of the dataset and the legal requirements of that particular state
1484
+ // (e.g. NY uses for state house maps but not congressional maps). So that is why we hard-code rather than
1485
+ // derive from dataset metadata.
1486
+ //
1487
+ function usesPrisonerAdjust(state, datasource, planType) {
1488
+ if (datasource !== '2020_VD')
1489
+ return false;
1490
+ switch (state) {
1491
+ case 'CA':
1492
+ case 'DE':
1493
+ case 'MD':
1494
+ case 'NJ':
1495
+ case 'NV':
1496
+ case 'PA':
1497
+ case 'VA':
1498
+ case 'WA':
1499
+ return (planType === 'congress' || planType === 'upper' || planType === 'lower' || planType === 'coi');
1500
+ case 'CO':
1501
+ case 'CT':
1502
+ case 'NY':
1503
+ return (planType === 'upper' || planType === 'lower' || planType === 'coi');
1504
+ }
1505
+ return false;
1506
+ }
1436
1507
 
1437
1508
 
1438
1509
  /***/ }),