@cdc/waffle-chart 1.0.2 → 9.22.9
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 +201 -0
- package/dist/cdcwafflechart.js +2 -2
- package/examples/gallery/avg-to-max.json +3162 -0
- package/examples/gallery/count.json +3162 -0
- package/package.json +3 -3
- package/src/CdcWaffleChart.tsx +64 -45
- package/src/components/EditorPanel.js +290 -97
- package/src/data/initial-state.js +1 -1
- package/src/index.html +21 -0
- package/src/scss/waffle-chart.scss +36 -25
|
@@ -198,203 +198,388 @@ const EditorPanel = memo((props) => {
|
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
const editorContent = (
|
|
201
|
-
|
|
202
201
|
<Accordion>
|
|
203
202
|
<Accordion.Section title="General">
|
|
204
|
-
<InputText
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
203
|
+
<InputText
|
|
204
|
+
value={config.title}
|
|
205
|
+
fieldName="title"
|
|
206
|
+
label="Title"
|
|
207
|
+
placeholder="Waffle Chart Title"
|
|
208
|
+
updateField={updateField}
|
|
209
|
+
/>
|
|
210
|
+
|
|
211
|
+
<InputText
|
|
212
|
+
type="textarea"
|
|
213
|
+
value={config.content}
|
|
214
|
+
fieldName="content"
|
|
215
|
+
label="Message"
|
|
216
|
+
updateField={updateField}
|
|
217
|
+
tooltip={
|
|
218
|
+
<Tooltip style={{ textTransform: "none" }}>
|
|
219
|
+
<Tooltip.Target>
|
|
220
|
+
<Icon display="question" style={{ marginLeft: "0.5rem" }} />
|
|
221
|
+
</Tooltip.Target>
|
|
222
|
+
<Tooltip.Content>
|
|
223
|
+
<p>
|
|
224
|
+
Enter the message text for the visualization. The following
|
|
225
|
+
HTML tags are supported: strong, em, sup, and sub.
|
|
226
|
+
</p>
|
|
227
|
+
</Tooltip.Content>
|
|
228
|
+
</Tooltip>
|
|
229
|
+
}
|
|
230
|
+
/>
|
|
231
|
+
|
|
232
|
+
<InputText
|
|
233
|
+
value={config.subtext}
|
|
234
|
+
fieldName="subtext"
|
|
235
|
+
label="Subtext/Citation"
|
|
236
|
+
placeholder="Waffle Chart Subtext or Citation"
|
|
237
|
+
updateField={updateField}
|
|
238
|
+
tooltip={
|
|
239
|
+
<Tooltip style={{ textTransform: "none" }}>
|
|
240
|
+
<Tooltip.Target>
|
|
241
|
+
<Icon display="question" style={{ marginLeft: "0.5rem" }} />
|
|
242
|
+
</Tooltip.Target>
|
|
243
|
+
<Tooltip.Content>
|
|
244
|
+
<p>
|
|
245
|
+
Enter supporting text to display below the data visualization,
|
|
246
|
+
if applicable. The following HTML tags are supported: strong,
|
|
247
|
+
em, sup, and sub.
|
|
248
|
+
</p>
|
|
249
|
+
</Tooltip.Content>
|
|
250
|
+
</Tooltip>
|
|
251
|
+
}
|
|
252
|
+
/>
|
|
223
253
|
</Accordion.Section>
|
|
224
254
|
<Accordion.Section title="Data">
|
|
225
|
-
<h4 style={{ fontWeight:
|
|
255
|
+
<h4 style={{ fontWeight: "600" }}>Numerator</h4>
|
|
226
256
|
<div className="cove-accordion__panel-section">
|
|
227
257
|
<div className="cove-input-group">
|
|
228
|
-
<InputSelect
|
|
229
|
-
|
|
258
|
+
<InputSelect
|
|
259
|
+
value={config.dataColumn || ""}
|
|
260
|
+
fieldName="dataColumn"
|
|
261
|
+
label="Data Column"
|
|
262
|
+
updateField={updateField}
|
|
263
|
+
initial="Select"
|
|
264
|
+
options={getColumns()}
|
|
265
|
+
className="cove-input"
|
|
266
|
+
/>
|
|
230
267
|
</div>
|
|
231
268
|
|
|
232
269
|
<div className="cove-input-group">
|
|
233
|
-
<InputSelect
|
|
234
|
-
|
|
270
|
+
<InputSelect
|
|
271
|
+
value={config.dataFunction || ""}
|
|
272
|
+
fieldName="dataFunction"
|
|
273
|
+
label="Data Function"
|
|
274
|
+
updateField={updateField}
|
|
275
|
+
initial="Select"
|
|
276
|
+
options={DATA_FUNCTIONS}
|
|
277
|
+
className="cove-input"
|
|
278
|
+
/>
|
|
235
279
|
</div>
|
|
236
280
|
|
|
237
281
|
<div className="cove-input-group">
|
|
238
|
-
<label
|
|
282
|
+
<label>
|
|
283
|
+
<span className="edit-label cove-input__label">Data Conditional</span>
|
|
284
|
+
</label>
|
|
239
285
|
<div className="cove-accordion__panel-row cove-accordion__small-inputs">
|
|
240
286
|
<div className="cove-accordion__panel-col">
|
|
241
|
-
<InputSelect
|
|
242
|
-
|
|
287
|
+
<InputSelect
|
|
288
|
+
value={config.dataConditionalColumn || ""}
|
|
289
|
+
fieldName="dataConditionalColumn"
|
|
290
|
+
updateField={updateField}
|
|
291
|
+
initial="Select"
|
|
292
|
+
options={getColumns()}
|
|
293
|
+
className="cove-input"
|
|
294
|
+
/>
|
|
243
295
|
</div>
|
|
244
296
|
<div className="cove-accordion__panel-col">
|
|
245
|
-
<InputSelect
|
|
246
|
-
|
|
297
|
+
<InputSelect
|
|
298
|
+
value={config.dataConditionalOperator || ""}
|
|
299
|
+
fieldName="dataConditionalOperator"
|
|
300
|
+
updateField={updateField}
|
|
301
|
+
initial="Select"
|
|
302
|
+
options={DATA_OPERATORS}
|
|
303
|
+
className="cove-input"
|
|
304
|
+
/>
|
|
247
305
|
</div>
|
|
248
306
|
<div className="cove-accordion__panel-col">
|
|
249
|
-
<InputText
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
307
|
+
<InputText
|
|
308
|
+
value={config.dataConditionalComparate}
|
|
309
|
+
fieldName={"dataConditionalComparate"}
|
|
310
|
+
updateField={updateField}
|
|
311
|
+
className={
|
|
312
|
+
config.invalidComparate ? "cove-accordion__input-error" : ""
|
|
313
|
+
}
|
|
314
|
+
style={{ minHeight: "2rem" }}
|
|
253
315
|
/>
|
|
254
316
|
</div>
|
|
255
317
|
</div>
|
|
256
318
|
</div>
|
|
257
319
|
|
|
258
|
-
{config.invalidComparate &&
|
|
320
|
+
{config.invalidComparate && (
|
|
259
321
|
<div className="cove-accordion__panel-error">
|
|
260
322
|
Non-numerical comparate values can only be used with = or ≠.
|
|
261
323
|
</div>
|
|
262
|
-
}
|
|
324
|
+
)}
|
|
263
325
|
</div>
|
|
264
326
|
<div className="cove-accordion__panel-row align-center">
|
|
265
327
|
<div className="cove-accordion__panel-col">
|
|
266
|
-
<h4 style={{ fontWeight:
|
|
328
|
+
<h4 style={{ fontWeight: "600" }}>Denominator</h4>
|
|
267
329
|
</div>
|
|
268
330
|
<div className="cove-accordion__panel-col">
|
|
269
|
-
<div style={{display:
|
|
270
|
-
<label className="cove-accordion__panel-label--inline">
|
|
271
|
-
|
|
331
|
+
<div style={{ display: "flex", justifyContent: "flex-end" }}>
|
|
332
|
+
<label className="cove-accordion__panel-label--inline">
|
|
333
|
+
Select from data
|
|
334
|
+
</label>
|
|
335
|
+
<InputCheckbox
|
|
336
|
+
size="small"
|
|
337
|
+
value={config.customDenom}
|
|
338
|
+
fieldName="customDenom"
|
|
339
|
+
updateField={updateField}
|
|
340
|
+
/>
|
|
272
341
|
</div>
|
|
273
342
|
</div>
|
|
274
343
|
</div>
|
|
275
344
|
<div className="cove-accordion__panel-section">
|
|
276
|
-
{!config.customDenom &&
|
|
345
|
+
{!config.customDenom && (
|
|
277
346
|
<div className="cove-accordion__panel-row align-center">
|
|
278
347
|
<div className="cove-accordion__panel-col">
|
|
279
|
-
<InputText
|
|
348
|
+
<InputText
|
|
349
|
+
value={config.dataDenom}
|
|
350
|
+
fieldName="dataDenom"
|
|
351
|
+
updateField={updateField}
|
|
352
|
+
/>
|
|
280
353
|
</div>
|
|
281
|
-
<div
|
|
282
|
-
|
|
354
|
+
<div
|
|
355
|
+
className="cove-accordion__panel-col"
|
|
356
|
+
style={{ display: "flex", alignItems: "center" }}
|
|
357
|
+
>
|
|
358
|
+
<label className="cove-accordion__panel-label--muted">
|
|
359
|
+
default (100)
|
|
360
|
+
</label>
|
|
283
361
|
</div>
|
|
284
362
|
</div>
|
|
285
|
-
}
|
|
286
|
-
{config.customDenom &&
|
|
363
|
+
)}
|
|
364
|
+
{config.customDenom && (
|
|
287
365
|
<>
|
|
288
|
-
<InputSelect
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
366
|
+
<InputSelect
|
|
367
|
+
value={config.dataDenomColumn || ""}
|
|
368
|
+
fieldName="dataDenomColumn"
|
|
369
|
+
label="Data Column"
|
|
370
|
+
updateField={updateField}
|
|
371
|
+
initial="Select"
|
|
372
|
+
options={getColumns()}
|
|
373
|
+
/>
|
|
374
|
+
<InputSelect
|
|
375
|
+
value={config.dataDenomFunction || ""}
|
|
376
|
+
fieldName="dataDenomFunction"
|
|
377
|
+
label="Data Function"
|
|
378
|
+
updateField={updateField}
|
|
379
|
+
initial="Select"
|
|
380
|
+
options={DATA_FUNCTIONS}
|
|
381
|
+
/>
|
|
292
382
|
</>
|
|
293
|
-
}
|
|
383
|
+
)}
|
|
294
384
|
</div>
|
|
295
385
|
<ul className="column-edit">
|
|
296
386
|
<li className="three-col">
|
|
297
|
-
<div style={{marginRight:
|
|
298
|
-
<InputText
|
|
387
|
+
<div style={{ marginRight: "1rem" }}>
|
|
388
|
+
<InputText
|
|
389
|
+
value={config.prefix}
|
|
390
|
+
fieldName="prefix"
|
|
391
|
+
label="Prefix"
|
|
392
|
+
updateField={updateField}
|
|
393
|
+
/>
|
|
299
394
|
</div>
|
|
300
|
-
<div style={{marginRight:
|
|
301
|
-
<InputText
|
|
395
|
+
<div style={{ marginRight: "1rem" }}>
|
|
396
|
+
<InputText
|
|
397
|
+
value={config.suffix}
|
|
398
|
+
fieldName="suffix"
|
|
399
|
+
label="Suffix"
|
|
400
|
+
updateField={updateField}
|
|
401
|
+
/>
|
|
302
402
|
</div>
|
|
303
403
|
<div>
|
|
304
|
-
<InputText
|
|
404
|
+
<InputText
|
|
405
|
+
type="number"
|
|
406
|
+
value={config.roundToPlace}
|
|
407
|
+
fieldName="roundToPlace"
|
|
408
|
+
label="Round"
|
|
409
|
+
updateField={updateField}
|
|
410
|
+
/>
|
|
305
411
|
</div>
|
|
306
412
|
</li>
|
|
307
413
|
</ul>
|
|
308
414
|
|
|
309
415
|
<hr className="cove-accordion__divider" />
|
|
310
416
|
|
|
311
|
-
<label style={{marginBottom:
|
|
417
|
+
<label style={{ marginBottom: "1rem" }}>
|
|
312
418
|
<span className="edit-label">Data Point Filters</span>
|
|
313
|
-
<Tooltip style={{ textTransform:
|
|
314
|
-
<Tooltip.Target
|
|
419
|
+
<Tooltip style={{ textTransform: "none" }}>
|
|
420
|
+
<Tooltip.Target>
|
|
421
|
+
<Icon display="question" style={{ marginLeft: "0.5rem" }} />
|
|
422
|
+
</Tooltip.Target>
|
|
315
423
|
<Tooltip.Content>
|
|
316
|
-
<p>
|
|
317
|
-
|
|
424
|
+
<p>
|
|
425
|
+
To refine the highlighted data point, specify one or more
|
|
426
|
+
filters (e.g., "Male" and "Female" for a column called "Sex").
|
|
427
|
+
</p>
|
|
318
428
|
</Tooltip.Content>
|
|
319
429
|
</Tooltip>
|
|
320
430
|
</label>
|
|
321
|
-
{config.filters &&
|
|
322
|
-
<ul
|
|
431
|
+
{config.filters && (
|
|
432
|
+
<ul
|
|
433
|
+
className="filters-list"
|
|
434
|
+
style={{ paddingLeft: 0, marginBottom: "1rem" }}
|
|
435
|
+
>
|
|
323
436
|
{config.filters.map((filter, index) => (
|
|
324
437
|
<fieldset className="edit-block" key={index}>
|
|
325
|
-
<button
|
|
326
|
-
|
|
327
|
-
|
|
438
|
+
<button
|
|
439
|
+
type="button"
|
|
440
|
+
className="remove-column"
|
|
441
|
+
onClick={() => {
|
|
442
|
+
removeFilter(index);
|
|
443
|
+
}}
|
|
444
|
+
>
|
|
445
|
+
Remove
|
|
328
446
|
</button>
|
|
329
447
|
<label>
|
|
330
448
|
<span className="edit-label column-heading">Column</span>
|
|
331
|
-
<select
|
|
332
|
-
|
|
333
|
-
|
|
449
|
+
<select
|
|
450
|
+
value={filter.columnName}
|
|
451
|
+
onChange={(e) => {
|
|
452
|
+
updateFilterProp("columnName", index, e.target.value);
|
|
453
|
+
}}
|
|
454
|
+
>
|
|
334
455
|
<option value="">- Select Option -</option>
|
|
335
456
|
{getColumns().map((dataKey, index) => (
|
|
336
|
-
<option value={dataKey} key={index}>
|
|
457
|
+
<option value={dataKey} key={index}>
|
|
458
|
+
{dataKey}
|
|
459
|
+
</option>
|
|
337
460
|
))}
|
|
338
461
|
</select>
|
|
339
462
|
</label>
|
|
340
463
|
<label>
|
|
341
|
-
<span className="edit-label column-heading">
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
464
|
+
<span className="edit-label column-heading">
|
|
465
|
+
Column Value
|
|
466
|
+
</span>
|
|
467
|
+
<select
|
|
468
|
+
value={filter.columnValue}
|
|
469
|
+
onChange={(e) => {
|
|
470
|
+
updateFilterProp("columnValue", index, e.target.value);
|
|
471
|
+
}}
|
|
472
|
+
>
|
|
345
473
|
<option value="">- Select Option -</option>
|
|
346
474
|
{getFilterColumnValues(index).map((dataKey, index) => (
|
|
347
|
-
<option value={dataKey} key={index}>
|
|
475
|
+
<option value={dataKey} key={index}>
|
|
476
|
+
{dataKey}
|
|
477
|
+
</option>
|
|
348
478
|
))}
|
|
349
479
|
</select>
|
|
350
480
|
</label>
|
|
351
481
|
</fieldset>
|
|
352
482
|
))}
|
|
353
483
|
</ul>
|
|
354
|
-
}
|
|
355
|
-
<Button onClick={addNewFilter} fluid>
|
|
484
|
+
)}
|
|
485
|
+
<Button onClick={addNewFilter} fluid>
|
|
486
|
+
Add Filter
|
|
487
|
+
</Button>
|
|
356
488
|
</Accordion.Section>
|
|
357
489
|
<Accordion.Section title="Visual">
|
|
358
|
-
<InputSelect
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
490
|
+
<InputSelect
|
|
491
|
+
value={config.shape}
|
|
492
|
+
fieldName="shape"
|
|
493
|
+
label="Shape"
|
|
494
|
+
updateField={updateField}
|
|
495
|
+
options={["circle", "square", "person"]}
|
|
496
|
+
className="cove-input"
|
|
497
|
+
/>
|
|
498
|
+
|
|
499
|
+
<div
|
|
500
|
+
className="cove-accordion__panel-row cove-accordion__small-inputs"
|
|
501
|
+
style={{ marginTop: "1rem", marginBottom: "1rem" }}
|
|
502
|
+
>
|
|
362
503
|
<div className="cove-accordion__panel-col">
|
|
363
|
-
<InputText
|
|
504
|
+
<InputText
|
|
505
|
+
type="number"
|
|
506
|
+
value={config.nodeWidth}
|
|
507
|
+
fieldName="nodeWidth"
|
|
508
|
+
label="Width"
|
|
509
|
+
updateField={updateField}
|
|
510
|
+
/>
|
|
364
511
|
</div>
|
|
365
512
|
<div className="cove-accordion__panel-col">
|
|
366
|
-
<InputText
|
|
513
|
+
<InputText
|
|
514
|
+
type="number"
|
|
515
|
+
value={config.nodeSpacer}
|
|
516
|
+
fieldName="nodeSpacer"
|
|
517
|
+
label="Spacer"
|
|
518
|
+
updateField={updateField}
|
|
519
|
+
/>
|
|
367
520
|
</div>
|
|
368
521
|
</div>
|
|
369
522
|
|
|
370
523
|
<div className="cove-input-group">
|
|
371
|
-
<InputSelect
|
|
372
|
-
|
|
524
|
+
<InputSelect
|
|
525
|
+
value={config.orientation}
|
|
526
|
+
fieldName="orientation"
|
|
527
|
+
label="Layout"
|
|
528
|
+
updateField={updateField}
|
|
529
|
+
className="cove-input"
|
|
530
|
+
options={["horizontal", "vertical"]}
|
|
531
|
+
/>
|
|
373
532
|
</div>
|
|
374
533
|
|
|
375
534
|
<div className="cove-input-group">
|
|
376
|
-
<label
|
|
535
|
+
<label>
|
|
536
|
+
<span className="edit-label column-heading cove-input__label">
|
|
537
|
+
Data Point Font Size
|
|
538
|
+
</span>
|
|
539
|
+
</label>
|
|
377
540
|
<div className="cove-accordion__panel-row cove-accordion__small-inputs align-center">
|
|
378
541
|
<div className="cove-accordion__panel-col">
|
|
379
|
-
<InputText
|
|
542
|
+
<InputText
|
|
543
|
+
type="number"
|
|
544
|
+
value={config.fontSize}
|
|
545
|
+
fieldName="fontSize"
|
|
546
|
+
updateField={updateField}
|
|
547
|
+
/>
|
|
380
548
|
</div>
|
|
381
|
-
<div
|
|
382
|
-
|
|
549
|
+
<div
|
|
550
|
+
className="cove-accordion__panel-col"
|
|
551
|
+
style={{ display: "flex", alignItems: "center" }}
|
|
552
|
+
>
|
|
553
|
+
<label className="accordion__panel-label--muted">
|
|
554
|
+
default (50px)
|
|
555
|
+
</label>
|
|
383
556
|
</div>
|
|
384
557
|
</div>
|
|
385
558
|
</div>
|
|
386
559
|
|
|
387
|
-
<InputSelect
|
|
388
|
-
|
|
560
|
+
<InputSelect
|
|
561
|
+
value={config.overallFontSize}
|
|
562
|
+
fieldName="overallFontSize"
|
|
563
|
+
label="Overall Font Size"
|
|
564
|
+
updateField={updateField}
|
|
565
|
+
options={["small", "medium", "large"]}
|
|
566
|
+
className="cove-input"
|
|
567
|
+
/>
|
|
389
568
|
|
|
390
569
|
<label>
|
|
391
|
-
<span className="edit-label">Theme</span>
|
|
570
|
+
<span className="edit-label cove-input__label">Theme</span>
|
|
392
571
|
<ul className="color-palette">
|
|
393
572
|
{headerColors.map((palette) => (
|
|
394
|
-
<li
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
573
|
+
<li
|
|
574
|
+
title={palette}
|
|
575
|
+
key={palette}
|
|
576
|
+
onClick={() => {
|
|
577
|
+
updateConfig({ ...config, theme: palette });
|
|
578
|
+
}}
|
|
579
|
+
className={
|
|
580
|
+
config.theme === palette ? "selected " + palette : palette
|
|
581
|
+
}
|
|
582
|
+
></li>
|
|
398
583
|
))}
|
|
399
584
|
</ul>
|
|
400
585
|
|
|
@@ -407,9 +592,17 @@ const EditorPanel = memo((props) => {
|
|
|
407
592
|
</div> */}
|
|
408
593
|
|
|
409
594
|
</label>
|
|
595
|
+
|
|
596
|
+
<div className="cove-accordion__panel-section reverse-labels">
|
|
597
|
+
<InputCheckbox inline size='small' value={config.visual.border} section="visual" fieldName="border" label="Display Border" updateField={updateField} />
|
|
598
|
+
<InputCheckbox inline size='small' value={config.visual.borderColorTheme} section="visual" fieldName="borderColorTheme" label="Use theme border color" updateField={updateField} />
|
|
599
|
+
<InputCheckbox size='small' value={config.visual.accent} section="visual" fieldName="accent" label="Use Accent Style" updateField={updateField} />
|
|
600
|
+
<InputCheckbox size='small' value={config.visual.background} section="visual" fieldName="background" label="Use Theme Background Color" updateField={updateField} />
|
|
601
|
+
<InputCheckbox size='small' value={config.visual.hideBackgroundColor} section="visual" fieldName="hideBackgroundColor" label="Hide Background Color" updateField={updateField} />
|
|
602
|
+
</div>
|
|
410
603
|
</Accordion.Section>
|
|
411
604
|
</Accordion>
|
|
412
|
-
)
|
|
605
|
+
);
|
|
413
606
|
|
|
414
607
|
if (loading) return null
|
|
415
608
|
|
package/src/index.html
CHANGED
|
@@ -3,9 +3,30 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8"/>
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
|
|
6
|
+
<style>
|
|
7
|
+
body {
|
|
8
|
+
/* max-width: 1000px; */
|
|
9
|
+
margin: 0 auto !important;
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.react-container+.react-container {
|
|
16
|
+
margin-top: 3rem;
|
|
17
|
+
}
|
|
18
|
+
</style>
|
|
6
19
|
</head>
|
|
7
20
|
<body>
|
|
21
|
+
|
|
22
|
+
<!-- Original -->
|
|
8
23
|
<div class="react-container" data-config="/examples/example-config.json"></div>
|
|
24
|
+
|
|
25
|
+
<!-- DATA PRESENTATION GALLERY: https://www.cdc.gov/wcms/4.0/cdc-wp/data-presentation/waffle-chart.html#examples -->
|
|
26
|
+
<!-- <div class="react-container" data-config="/examples/gallery/avg-to-max.json"></div> -->
|
|
27
|
+
<!-- <div class="react-container" data-config="/examples/gallery/count.json"></div> -->
|
|
28
|
+
|
|
29
|
+
|
|
9
30
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
10
31
|
</body>
|
|
11
32
|
</html>
|
|
@@ -19,6 +19,11 @@
|
|
|
19
19
|
//}
|
|
20
20
|
|
|
21
21
|
.cove {
|
|
22
|
+
|
|
23
|
+
&-editor__panel {
|
|
24
|
+
ul.color-palette { margin: 0; }
|
|
25
|
+
}
|
|
26
|
+
|
|
22
27
|
.cove-waffle-chart {
|
|
23
28
|
display: flex;
|
|
24
29
|
flex-wrap: wrap;
|
|
@@ -32,14 +37,8 @@
|
|
|
32
37
|
.cove-waffle-chart__chart {
|
|
33
38
|
padding-right: 0;
|
|
34
39
|
}
|
|
35
|
-
|
|
36
|
-
.cove-waffle-chart__data {
|
|
37
|
-
text-align: center;
|
|
38
|
-
// display: flex;
|
|
39
|
-
// flex-wrap: wrap;
|
|
40
|
-
// align-content: space-between;
|
|
41
|
-
}
|
|
42
40
|
}
|
|
41
|
+
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
.cove-waffle-chart__chart {
|
|
@@ -56,31 +55,16 @@
|
|
|
56
55
|
|
|
57
56
|
.cove-waffle-chart__subtext {
|
|
58
57
|
font-style: italic;
|
|
59
|
-
font-weight: bold;
|
|
60
58
|
font-size: 0.75em;
|
|
61
|
-
padding: 0 1em 1em;
|
|
62
59
|
}
|
|
63
60
|
|
|
64
61
|
.cove-waffle-chart__data {
|
|
62
|
+
display: flex;
|
|
63
|
+
flex-wrap: wrap;
|
|
64
|
+
align-content: space-between;
|
|
65
65
|
|
|
66
66
|
font-size: 14px;
|
|
67
67
|
|
|
68
|
-
@at-root {
|
|
69
|
-
.cove-waffle-chart.font-small #{&} {
|
|
70
|
-
.cove-waffle-chart__data--primary { font-size: 35px; }
|
|
71
|
-
.cove-waffle-chart__data--text { font-size: 14px; }
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.cove-waffle-chart.font-medium #{&} {
|
|
75
|
-
.cove-waffle-chart__data--primary { font-size: 50px; }
|
|
76
|
-
.cove-waffle-chart__data--text { font-size: 18px; }
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.cove-waffle-chart.font-large #{&} {
|
|
80
|
-
.cove-waffle-chart__data--primary { font-size: 80px; }
|
|
81
|
-
.cove-waffle-chart__data--text { font-size: 20px; }
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
68
|
|
|
85
69
|
.cove-waffle-chart__data--primary {
|
|
86
70
|
font-size: 70px;
|
|
@@ -90,6 +74,7 @@
|
|
|
90
74
|
|
|
91
75
|
.cove-waffle-chart__data--text {
|
|
92
76
|
line-height: 1.25em;
|
|
77
|
+
width: 100%;
|
|
93
78
|
}
|
|
94
79
|
}
|
|
95
80
|
|
|
@@ -97,4 +82,30 @@
|
|
|
97
82
|
transition: all 300ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
98
83
|
}
|
|
99
84
|
|
|
85
|
+
.reverse-labels div {
|
|
86
|
+
float: left;
|
|
87
|
+
margin-right: 5px;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.reverse-labels {
|
|
91
|
+
overflow: auto;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@at-root {
|
|
97
|
+
.cove-waffle-chart.font-small #{&} {
|
|
98
|
+
.cove-waffle-chart__data--primary { font-size: 35px; }
|
|
99
|
+
.cove-waffle-chart__data--text { font-size: 14px; }
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.cove-waffle-chart.font-medium #{&} {
|
|
103
|
+
.cove-waffle-chart__data--primary { font-size: 50px; }
|
|
104
|
+
.cove-waffle-chart__data--text { font-size: 18px; }
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.cove-waffle-chart.font-large #{&} {
|
|
108
|
+
.cove-waffle-chart__data--primary { font-size: 80px; }
|
|
109
|
+
.cove-waffle-chart__data--text { font-size: 20px; }
|
|
110
|
+
}
|
|
100
111
|
}
|