aboutsummaryrefslogtreecommitdiff
path: root/venv/lib/python3.8/site-packages/dash/dash_table/DataTable.py
blob: 2c07912ae3f62b983d6fffb9366d2437d24ab078 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
# AUTO GENERATED FILE - DO NOT EDIT

import typing  # noqa: F401
from typing_extensions import TypedDict, NotRequired, Literal  # noqa: F401
from dash.development.base_component import Component, _explicitize_args

ComponentType = typing.Union[
    str,
    int,
    float,
    Component,
    None,
    typing.Sequence[typing.Union[str, int, float, Component, None]],
]

NumberType = typing.Union[
    typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex
]


class DataTable(Component):
    """A DataTable component.
    Dash DataTable is an interactive table component designed for
    viewing, editing, and exploring large datasets.
    DataTable is rendered with standard, semantic HTML <table/> markup,
    which makes it accessible, responsive, and easy to style. This
    component was written from scratch in React.js specifically for the
    Dash community. Its API was designed to be ergonomic and its behavior
    is completely customizable through its properties.

    Keyword arguments:

    - data (list of dicts with strings as keys and values of type string | number | boolean; optional):
        The contents of the table. The keys of each item in data should
        match the column IDs. Each item can also have an 'id' key, whose
        value is its row ID. If there is a column with ID='id' this will
        display the row ID, otherwise it is just used to reference the row
        for selections, filtering, etc. Example: [      {'column-1': 4.5,
        'column-2': 'montreal', 'column-3': 'canada'},      {'column-1':
        8, 'column-2': 'boston', 'column-3': 'america'} ].

    - columns (list of dicts; optional):
        Columns describes various aspects about each individual column.
        `name` and `id` are the only required parameters.

        `columns` is a list of dicts with keys:

        - id (string; required):
            The `id` of the column. The column `id` is used to match cells
            in data with particular columns. The `id` is not visible in
            the table.

        - name (string | list of strings; required):
            The `name` of the column, as it appears in the column header.
            If `name` is a list of strings, then the columns will render
            with multiple headers rows.

        - type (a value equal to: 'any', 'numeric', 'text', 'datetime'; optional):
            The data-type provides support for per column typing and
            allows for data validation and coercion. 'numeric': represents
            both floats and ints. 'text': represents a string. 'datetime':
            a string representing a date or date-time, in the form:
            'YYYY-MM-DD HH:MM:SS.ssssss' or some truncation thereof. Years
            must   have 4 digits, unless you use `validation.allow_YY:
            True`. Also   accepts 'T' or 't' between date and time, and
            allows timezone info   at the end. To convert these strings to
            Python `datetime` objects,   use `dateutil.parser.isoparse`.
            In R use `parse_iso_8601` from the   `parsedate` library.
            WARNING: these parsers do not work with 2-digit years, if you
            use   `validation.allow_YY: True` and do not coerce to 4-digit
            years.   And parsers that do work with 2-digit years may make
            a different   guess about the century than we make on the
            front end. 'any': represents any type of data. Defaults to
            'any' if undefined.

        - presentation (a value equal to: 'input', 'dropdown', 'markdown'; optional):
            The `presentation` to use to display data. Markdown can be
            used on columns with type 'text'.  See 'dropdown' for more
            info. Defaults to 'input' for ['datetime', 'numeric', 'text',
            'any'].

        - selectable (a value equal to: 'first', 'last' | boolean | list of booleans; optional):
            If True, the user can select the column by clicking on the
            checkbox or radio button in the column. If there are multiple
            header rows, True will display the input on each row. If
            `last`, the input will only appear on the last header row. If
            `first` it will only appear on the first header row. These are
            respectively shortcut equivalents to `[False, ..., False,
            True]` and `[True, False, ..., False]`. If there are merged,
            multi-header columns then you can choose which column header
            row to display the input in by supplying an array of booleans.
            For example, `[True, False]` will display the `selectable`
            input on the first row, but now on the second row. If the
            `selectable` input appears on a merged columns, then clicking
            on that input will select *all* of the merged columns
            associated with it. The table-level prop `column_selectable`
            is used to determine the type of column selection to use.

        - clearable (a value equal to: 'first', 'last' | boolean | list of booleans; optional):
            If True, the user can clear the column by clicking on the
            `clear` action button on the column. If there are multiple
            header rows, True will display the action button on each row.
            If `last`, the `clear` action button will only appear on the
            last header row. If `first` it will only appear on the first
            header row. These are respectively shortcut equivalents to
            `[False, ..., False, True]` and `[True, False, ..., False]`.
            If there are merged, multi-header columns then you can choose
            which column header row to display the `clear` action button
            in by supplying an array of booleans. For example, `[True,
            False]` will display the `clear` action button on the first
            row, but not the second row. If the `clear` action button
            appears on a merged column, then clicking on that button will
            clear *all* of the merged columns associated with it. Unlike
            `column.deletable`, this action does not remove the column(s)
            from the table. It only removed the associated entries from
            `data`.

        - deletable (a value equal to: 'first', 'last' | boolean | list of booleans; optional):
            If True, the user can remove the column by clicking on the
            `delete` action button on the column. If there are multiple
            header rows, True will display the action button on each row.
            If `last`, the `delete` action button will only appear on the
            last header row. If `first` it will only appear on the first
            header row. These are respectively shortcut equivalents to
            `[False, ..., False, True]` and `[True, False, ..., False]`.
            If there are merged, multi-header columns then you can choose
            which column header row to display the `delete` action button
            in by supplying an array of booleans. For example, `[True,
            False]` will display the `delete` action button on the first
            row, but not the second row. If the `delete` action button
            appears on a merged column, then clicking on that button will
            remove *all* of the merged columns associated with it.

        - editable (boolean; optional):
            There are two `editable` flags in the table. This is the
            column-level editable flag and there is also the table-level
            `editable` flag. These flags determine whether the contents of
            the table are editable or not. If the column-level `editable`
            flag is set it overrides the table-level `editable` flag for
            that column.

        - hideable (a value equal to: 'first', 'last' | boolean | list of booleans; optional):
            If True, the user can hide the column by clicking on the
            `hide` action button on the column. If there are multiple
            header rows, True will display the action button on each row.
            If `last`, the `hide` action button will only appear on the
            last header row. If `first` it will only appear on the first
            header row. These are respectively shortcut equivalents to
            `[False, ..., False, True]` and `[True, False, ..., False]`.
            If there are merged, multi-header columns then you can choose
            which column header row to display the `hide` action button in
            by supplying an array of booleans. For example, `[True,
            False]` will display the `hide` action button on the first
            row, but not the second row. If the `hide` action button
            appears on a merged column, then clicking on that button will
            hide *all* of the merged columns associated with it.

        - renamable (a value equal to: 'first', 'last' | boolean | list of booleans; optional):
            If True, the user can rename the column by clicking on the
            `rename` action button on the column. If there are multiple
            header rows, True will display the action button on each row.
            If `last`, the `rename` action button will only appear on the
            last header row. If `first` it will only appear on the first
            header row. These are respectively shortcut equivalents to
            `[False, ..., False, True]` and `[True, False, ..., False]`.
            If there are merged, multi-header columns then you can choose
            which column header row to display the `rename` action button
            in by supplying an array of booleans. For example, `[True,
            False]` will display the `rename` action button on the first
            row, but not the second row. If the `rename` action button
            appears on a merged column, then clicking on that button will
            rename *all* of the merged columns associated with it.

        - filter_options (dict; optional):
            There are two `filter_options` props in the table. This is the
            column-level filter_options prop and there is also the
            table-level `filter_options` prop. If the column-level
            `filter_options` prop is set it overrides the table-level
            `filter_options` prop for that column.

            `filter_options` is a dict with keys:

            - case (a value equal to: 'sensitive', 'insensitive'; optional):
                (default: 'sensitive') Determine whether the applicable
                filter relational operators will default to `sensitive` or
                `insensitive` comparison.

            - placeholder_text (string; optional):
                (default: 'filter data...') The filter cell placeholder
                text.

        - format (dict; optional):
            The formatting applied to the column's data. This prop is
            derived from the [d3-format](https://github.com/d3/d3-format)
            library specification. Apart from being structured slightly
            differently (under a single prop), the usage is the same. See
            also dash_table.FormatTemplate.  It contains helper functions
            for typical number formats.

            `format` is a dict with keys:

            - locale (dict; optional):
                Represents localization specific formatting information.
                When left unspecified, will use the default value provided
                by d3-format.

                `locale` is a dict with keys:

                - symbol (list of strings; optional):
                    (default: ['$', '']).  A list of two strings
                    representing the  prefix and suffix symbols. Typically
                    used for currency, and implemented using d3's
                    currency format, but you can use this for other
                    symbols such as measurement units.

                - decimal (string; optional):
                    (default: '.').  The string used for the decimal
                    separator.

                - group (string; optional):
                    (default: ',').  The string used for the groups
                    separator.

                - grouping (list of numbers; optional):
                    (default: [3]).  A list of integers representing the
                    grouping pattern. The default is 3 for thousands.

                - numerals (list of strings; optional):
                    A list of ten strings used as replacements for numbers
                    0-9.

                - percent (string; optional):
                    (default: '%').  The string used for the percentage
                    symbol.

                - separate_4digits (boolean; optional):
                    (default: True). Separates integers with 4-digits or
                    less.

            - nully (boolean | number | string | dict | list; optional):
                A value that will be used in place of the Noney value
                during formatting.   If the value type matches the column
                type, it will be formatted normally.

            - prefix (number; optional):
                A number representing the SI unit to use during
                formatting.   See `dash_table.Format.Prefix` enumeration
                for the list of valid values.

            - specifier (string; optional):
                (default: '').  Represents the d3 rules to apply when
                formatting the number.

        - on_change (dict; optional):
            The `on_change` behavior of the column for user-initiated
            modifications.

            `on_change` is a dict with keys:

            - action (a value equal to: 'coerce', 'none', 'validate'; optional):
                (default 'coerce'):  'none': do not validate data;
                'coerce': check if the data corresponds to the destination
                type and  attempts to coerce it into the destination type
                if not;  'validate': check if the data corresponds to the
                destination type (no coercion).

            - failure (a value equal to: 'accept', 'default', 'reject'; optional):
                (default 'reject'):  What to do with the value if the
                action fails.  'accept': use the invalid value;
                'default': replace the provided value with
                `validation.default`;  'reject': do not modify the
                existing value.

        - sort_as_null (list of string | number | booleans; optional):
            An array of string, number and boolean values that are treated
            as `None` (i.e. ignored and always displayed last) when
            sorting. This value overrides the table-level `sort_as_None`.

        - validation (dict; optional):
            The `validation` options for user input processing that can
            accept, reject or apply a default value.

            `validation` is a dict with keys:

            - allow_null (boolean; optional):
                Allow the use of Noney values. (undefined, None, NaN)
                (default: False).

            - default (boolean | number | string | dict | list; optional):
                The default value to apply with on_change.failure =
                'default'. (default: None).

            - allow_YY (boolean; optional):
                This is for `datetime` columns only.  Allow 2-digit years
                (default: False).   If True, we interpret years as ranging
                from now-70 to now+29 - in 2019   this is 1949 to 2048 but
                in 2020 it will be different. If used with   `action:
                'coerce'`, will convert user input to a 4-digit year.

    - editable (boolean; default False):
        If True, then the data in all of the cells is editable. When
        `editable` is True, particular columns can be made uneditable by
        setting `editable` to `False` inside the `columns` property. If
        False, then the data in all of the cells is uneditable. When
        `editable` is False, particular columns can be made editable by
        setting `editable` to `True` inside the `columns` property.

    - fixed_columns (dict; default {    headers: False,    data: 0}):
        `fixed_columns` will \"fix\" the set of columns so that they
        remain visible when scrolling horizontally across the unfixed
        columns. `fixed_columns` fixes columns from left-to-right. If
        `headers` is False, no columns are fixed. If `headers` is True,
        all operation columns (see `row_deletable` and `row_selectable`)
        are fixed. Additional data columns can be fixed by assigning a
        number to `data`.  Note that fixing columns introduces some
        changes to the underlying markup of the table and may impact the
        way that your columns are rendered or sized. View the
        documentation examples to learn more.

        `fixed_columns` is a dict with keys:

        - data (number; optional):
            Example `{'headers':False, 'data':0}` No columns are fixed
            (the default).

        - headers (boolean; optional)

    - fixed_rows (dict; default {    headers: False,    data: 0}):
        `fixed_rows` will \"fix\" the set of rows so that they remain
        visible when scrolling vertically down the table. `fixed_rows`
        fixes rows from top-to-bottom, starting from the headers. If
        `headers` is False, no rows are fixed. If `headers` is True, all
        header and filter rows (see `filter_action`) are fixed. Additional
        data rows can be fixed by assigning a number to `data`.  Note that
        fixing rows introduces some changes to the underlying markup of
        the table and may impact the way that your columns are rendered or
        sized. View the documentation examples to learn more.

        `fixed_rows` is a dict with keys:

        - data (number; optional):
            Example `{'headers':False, 'data':0}` No rows are fixed (the
            default).

        - headers (boolean; optional)

    - column_selectable (a value equal to: 'single', 'multi', false; default False):
        If `single`, then the user can select a single column or group of
        merged columns via the radio button that will appear in the header
        rows. If `multi`, then the user can select multiple columns or
        groups of merged columns via the checkbox that will appear in the
        header rows. If False, then the user will not be able to select
        columns and no input will appear in the header rows. When a column
        is selected, its id will be contained in `selected_columns` and
        `derived_viewport_selected_columns`.

    - cell_selectable (boolean; default True):
        If True (default), then it is possible to click and navigate table
        cells.

    - row_selectable (a value equal to: 'single', 'multi', false; default False):
        If `single`, then the user can select a single row via a radio
        button that will appear next to each row. If `multi`, then the
        user can select multiple rows via a checkbox that will appear next
        to each row. If False, then the user will not be able to select
        rows and no additional UI elements will appear. When a row is
        selected, its index will be contained in `selected_rows`.

    - row_deletable (boolean; optional):
        If True, then a `x` will appear next to each `row` and the user
        can delete the row.

    - active_cell (dict; optional):
        The row and column indices and IDs of the currently active cell.
        `row_id` is only returned if the data rows have an `id` key.

        `active_cell` is a dict with keys:

        - row (number; optional)

        - column (number; optional)

        - row_id (string | number; optional)

        - column_id (string; optional)

    - selected_cells (list of dicts; optional):
        `selected_cells` represents the set of cells that are selected, as
        an array of objects, each item similar to `active_cell`. Multiple
        cells can be selected by holding down shift and clicking on a
        different cell or holding down shift and navigating with the arrow
        keys.

        `selected_cells` is a list of dicts with keys:

        - row (number; optional)

        - column (number; optional)

        - row_id (string | number; optional)

        - column_id (string; optional)

    - selected_rows (list of numbers; optional):
        `selected_rows` contains the indices of rows that are selected via
        the UI elements that appear when `row_selectable` is `'single'` or
        `'multi'`.

    - selected_columns (list of strings; optional):
        `selected_columns` contains the ids of columns that are selected
        via the UI elements that appear when `column_selectable` is
        `'single' or 'multi'`.

    - selected_row_ids (list of string | numbers; optional):
        `selected_row_ids` contains the ids of rows that are selected via
        the UI elements that appear when `row_selectable` is `'single'` or
        `'multi'`.

    - start_cell (dict; optional):
        When selecting multiple cells (via clicking on a cell and then
        shift-clicking on another cell), `start_cell` represents the [row,
        column] coordinates of the cell in one of the corners of the
        region. `end_cell` represents the coordinates of the other corner.

        `start_cell` is a dict with keys:

        - row (number; optional)

        - column (number; optional)

        - row_id (string | number; optional)

        - column_id (string; optional)

    - end_cell (dict; optional):
        When selecting multiple cells (via clicking on a cell and then
        shift-clicking on another cell), `end_cell` represents the row /
        column coordinates and IDs of the cell in one of the corners of
        the region. `start_cell` represents the coordinates of the other
        corner.

        `end_cell` is a dict with keys:

        - row (number; optional)

        - column (number; optional)

        - row_id (string | number; optional)

        - column_id (string; optional)

    - data_previous (list of dicts; optional):
        The previous state of `data`. `data_previous` has the same
        structure as `data` and it will be updated whenever `data`
        changes, either through a callback or by editing the table. This
        is a read-only property: setting this property will not have any
        impact on the table.

    - hidden_columns (list of strings; optional):
        List of columns ids of the columns that are currently hidden. See
        the associated nested prop `columns.hideable`.

    - is_focused (boolean; optional):
        If True, then the `active_cell` is in a focused state.

    - merge_duplicate_headers (boolean; optional):
        If True, then column headers that have neighbors with duplicate
        names will be merged into a single cell. This will be applied for
        single column headers and multi-column headers.

    - data_timestamp (number; optional):
        The unix timestamp when the data was last edited. Use this
        property with other timestamp properties (such as
        `n_clicks_timestamp` in `dash_html_components`) to determine which
        property has changed within a callback.

    - include_headers_on_copy_paste (boolean; default False):
        If True, headers are included when copying from the table to
        different tabs and elsewhere. Note that headers are ignored when
        copying from the table onto itself and between two tables within
        the same tab.

    - export_columns (a value equal to: 'all', 'visible'; default 'visible'):
        Denotes the columns that will be used in the export data file. If
        `all`, all columns will be used (visible + hidden). If `visible`,
        only the visible columns will be used. Defaults to `visible`.

    - export_format (a value equal to: 'csv', 'xlsx', 'none'; default 'none'):
        Denotes the type of the export data file, Defaults to `'none'`.

    - export_headers (a value equal to: 'none', 'ids', 'names', 'display'; optional):
        Denotes the format of the headers in the export data file. If
        `'none'`, there will be no header. If `'display'`, then the header
        of the data file will be how it is currently displayed. Note that
        `'display'` is only supported for `'xlsx'` export_format and will
        behave like `'names'` for `'csv'` export format. If `'ids'` or
        `'names'`, then the headers of data file will be the column id or
        the column names, respectively.

    - page_action (a value equal to: 'custom', 'native', 'none'; default 'native'):
        `page_action` refers to a mode of the table where not all of the
        rows are displayed at once: only a subset are displayed (a
        \"page\") and the next subset of rows can viewed by clicking
        \"Next\" or \"Previous\" buttons at the bottom of the page.
        Pagination is used to improve performance: instead of rendering
        all of the rows at once (which can be expensive), we only display
        a subset of them. With pagination, we can either page through data
        that exists in the table (e.g. page through `10,000` rows in
        `data` `100` rows at a time) or we can update the data on-the-fly
        with callbacks when the user clicks on the \"Previous\" or
        \"Next\" buttons. These modes can be toggled with this
        `page_action` parameter: `'native'`: all data is passed to the
        table up-front, paging logic is handled by the table; `'custom'`:
        data is passed to the table one page at a time, paging logic is
        handled via callbacks; `'none'`: disables paging, render all of
        the data at once.

    - page_current (number; default 0):
        `page_current` represents which page the user is on. Use this
        property to index through data in your callbacks with backend
        paging.

    - page_count (number; optional):
        `page_count` represents the number of the pages in the paginated
        table. This is really only useful when performing backend
        pagination, since the front end is able to use the full size of
        the table to calculate the number of pages.

    - page_size (number; default 250):
        `page_size` represents the number of rows that will be displayed
        on a particular page when `page_action` is `'custom'` or
        `'native'`.

    - filter_query (string; default ''):
        If `filter_action` is enabled, then the current filtering string
        is represented in this `filter_query` property.

    - filter_action (dict; default 'none'):
        The `filter_action` property controls the behavior of the
        `filtering` UI. If `'none'`, then the filtering UI is not
        displayed. If `'native'`, then the filtering UI is displayed and
        the filtering logic is handled by the table. That is, it is
        performed on the data that exists in the `data` property. If
        `'custom'`, then the filtering UI is displayed but it is the
        responsibility of the developer to program the filtering through a
        callback (where `filter_query` or `derived_filter_query_structure`
        would be the input and `data` would be the output).

        `filter_action` is a a value equal to: 'custom', 'native', 'none'
        | dict with keys:

        - type (a value equal to: 'custom', 'native'; required)

        - operator (a value equal to: 'and', 'or'; optional)

    - filter_options (dict; optional):
        There are two `filter_options` props in the table. This is the
        table-level filter_options prop and there is also the column-level
        `filter_options` prop. If the column-level `filter_options` prop
        is set it overrides the table-level `filter_options` prop for that
        column.

        `filter_options` is a dict with keys:

        - case (a value equal to: 'sensitive', 'insensitive'; optional):
            (default: 'sensitive') Determine whether the applicable filter
            relational operators will default to `sensitive` or
            `insensitive` comparison.

        - placeholder_text (string; optional):
            (default: 'filter data...') The filter cell placeholder text.

    - sort_action (a value equal to: 'custom', 'native', 'none'; default 'none'):
        The `sort_action` property enables data to be sorted on a
        per-column basis. If `'none'`, then the sorting UI is not
        displayed. If `'native'`, then the sorting UI is displayed and the
        sorting logic is handled by the table. That is, it is performed on
        the data that exists in the `data` property. If `'custom'`, the
        sorting UI is displayed but it is the responsibility of the
        developer to program the sorting through a callback (where
        `sort_by` would be the input and `data` would be the output).
        Clicking on the sort arrows will update the `sort_by` property.

    - sort_mode (a value equal to: 'single', 'multi'; default 'single'):
        Sorting can be performed across multiple columns (e.g. sort by
        country, sort within each country,  sort by year) or by a single
        column. NOTE - With multi-column sort, it's currently not possible
        to determine the order in which the columns were sorted through
        the UI. See
        [https://github.com/plotly/dash-table/issues/170](https://github.com/plotly/dash-table/issues/170).

    - sort_by (list of dicts; optional):
        `sort_by` describes the current state of the sorting UI. That is,
        if the user clicked on the sort arrow of a column, then this
        property will be updated with the column ID and the direction
        (`asc` or `desc`) of the sort. For multi-column sorting, this will
        be a list of sorting parameters, in the order in which they were
        clicked.

        `sort_by` is a list of dicts with keys:

        - column_id (string; required)

        - direction (a value equal to: 'asc', 'desc'; required)

    - sort_as_null (list of string | number | booleans; optional):
        An array of string, number and boolean values that are treated as
        `None` (i.e. ignored and always displayed last) when sorting. This
        value will be used by columns without `sort_as_None`. Defaults to
        `[]`.

    - dropdown (dict; optional):
        `dropdown` specifies dropdown options for different columns. Each
        entry refers to the column ID. The `clearable` property defines
        whether the value can be deleted. The `options` property refers to
        the `options` of the dropdown.

        `dropdown` is a dict with strings as keys and values of type dict
        with keys:

        - clearable (boolean; optional)

        - options (list of dicts; required)

            `options` is a list of dicts with keys:

            - label (string; required)

            - value (number | string | boolean; required)

    - dropdown_conditional (list of dicts; optional):
        `dropdown_conditional` specifies dropdown options in various
        columns and cells. This property allows you to specify different
        dropdowns depending on certain conditions. For example, you may
        render different \"city\" dropdowns in a row depending on the
        current value in the \"state\" column.

        `dropdown_conditional` is a list of dicts with keys:

        - clearable (boolean; optional)

        - if (dict; optional)

            `if` is a dict with keys:

            - column_id (string; optional)

            - filter_query (string; optional)

        - options (list of dicts; required)

            `options` is a list of dicts with keys:

            - label (string; required)

            - value (number | string | boolean; required)

    - dropdown_data (list of dicts; optional):
        `dropdown_data` specifies dropdown options on a row-by-row,
        column-by-column basis. Each item in the array corresponds to the
        corresponding dropdowns for the `data` item at the same index.
        Each entry in the item refers to the Column ID.

        `dropdown_data` is a list of dicts with strings as keys and values
        of type dict with keys:

        - clearable (boolean; optional)

        - options (list of dicts; required)

            `options` is a list of dicts with keys:

            - label (string; required)

            - value (number | string | boolean; required)

    - tooltip (dict; optional):
        `tooltip` is the column based tooltip configuration applied to all
        rows. The key is the column  id and the value is a tooltip
        configuration. Example: {i: {'value': i, 'use_with: 'both'} for i
        in df.columns}.

        `tooltip` is a dict with strings as keys and values of type string
        | dict with keys:

        - delay (number; optional):
            Represents the delay in milliseconds before the tooltip is
            shown when hovering a cell. This overrides the table's
            `tooltip_delay` property. If set to `None`, the tooltip will
            be shown immediately.

        - duration (number; optional):
            represents the duration in milliseconds during which the
            tooltip is shown when hovering a cell. This overrides the
            table's `tooltip_duration` property. If set to `None`, the
            tooltip will not disappear.

        - type (a value equal to: 'text', 'markdown'; optional):
            refers to the type of tooltip syntax used for the tooltip
            generation. Can either be `markdown` or `text`. Defaults to
            `text`.

        - use_with (a value equal to: 'both', 'data', 'header'; optional):
            Refers to whether the tooltip will be shown only on data or
            headers. Can be `both`, `data`, `header`. Defaults to `both`.

        - value (string; required):
            refers to the syntax-based content of the tooltip. This value
            is required. Alternatively, the value of the property can also
            be  a plain string. The `text` syntax will be used in that
            case.

    - tooltip_conditional (list of dicts; optional):
        `tooltip_conditional` represents the tooltip shown for different
        columns and cells. This property allows you to specify different
        tooltips depending on certain conditions. For example, you may
        have different tooltips in the same column based on the value of a
        certain data property. Priority is from first to last defined
        conditional tooltip in the list. Higher priority (more specific)
        conditional tooltips should be put at the beginning of the list.

        `tooltip_conditional` is a list of dicts with keys:

        - delay (number; optional):
            The `delay` represents the delay in milliseconds before the
            tooltip is shown when hovering a cell. This overrides the
            table's `tooltip_delay` property. If set to `None`, the
            tooltip will be shown immediately.

        - duration (number; optional):
            The `duration` represents the duration in milliseconds during
            which the tooltip is shown when hovering a cell. This
            overrides the table's `tooltip_duration` property. If set to
            `None`, the tooltip will not disappear.

        - if (dict; required):
            The `if` refers to the condition that needs to be fulfilled in
            order for the associated tooltip configuration to be used. If
            multiple conditions are defined, all conditions must be met
            for the tooltip to be used by a cell.

            `if` is a dict with keys:

            - column_id (string; optional):
                `column_id` refers to the column ID that must be matched.

            - filter_query (string; optional):
                `filter_query` refers to the query that must evaluate to
                True.

            - row_index (number | a value equal to: 'odd', 'even'; optional):
                `row_index` refers to the index of the row in the source
                `data`.

        - type (a value equal to: 'text', 'markdown'; optional):
            The `type` refers to the type of tooltip syntax used for the
            tooltip generation. Can either be `markdown` or `text`.
            Defaults to `text`.

        - value (string; required):
            The `value` refers to the syntax-based content of the tooltip.
            This value is required.

    - tooltip_data (list of dicts; optional):
        `tooltip_data` represents the tooltip shown for different columns
        and cells. A list of dicts for which each key is a column id and
        the value is a tooltip configuration.

        `tooltip_data` is a list of dicts with strings as keys and values
        of type string | dict with keys:

        - delay (number; optional):
            The `delay` represents the delay in milliseconds before the
            tooltip is shown when hovering a cell. This overrides the
            table's `tooltip_delay` property. If set to `None`, the
            tooltip will be shown immediately.

        - duration (number; optional):
            The `duration` represents the duration in milliseconds during
            which the tooltip is shown when hovering a cell. This
            overrides the table's `tooltip_duration` property. If set to
            `None`, the tooltip will not disappear. Alternatively, the
            value of the property can also be a plain string. The `text`
            syntax will be used in that case.

        - type (a value equal to: 'text', 'markdown'; optional):
            For each tooltip configuration, The `type` refers to the type
            of tooltip syntax used for the tooltip generation. Can either
            be `markdown` or `text`. Defaults to `text`.

        - value (string; required):
            The `value` refers to the syntax-based content of the tooltip.
            This value is required.

    - tooltip_header (dict; optional):
        `tooltip_header` represents the tooltip shown for each header
        column and optionally each header row. Example to show long column
        names in a tooltip: {i: i for i in df.columns}. Example to show
        different column names in a tooltip: {'Rep': 'Republican', 'Dem':
        'Democrat'}. If the table has multiple rows of headers, then use a
        list as the value of the `tooltip_header` items.

        `tooltip_header` is a dict with strings as keys and values of type
        string | dict with keys:

        - delay (number; optional):
            The `delay` represents the delay in milliseconds before the
            tooltip is shown when hovering a cell. This overrides the
            table's `tooltip_delay` property. If set to `None`, the
            tooltip will be shown immediately.

        - duration (number; optional):
            The `duration` represents the duration in milliseconds during
            which the tooltip is shown when hovering a cell. This
            overrides the table's `tooltip_duration` property. If set to
            `None`, the tooltip will not disappear. Alternatively, the
            value of the property can also be a plain string. The `text`
            syntax will be used in that case.

        - type (a value equal to: 'text', 'markdown'; optional):
            For each tooltip configuration, The `type` refers to the type
            of tooltip syntax used for the tooltip generation. Can either
            be `markdown` or `text`. Defaults to `text`.

        - value (string; required):
            The `value` refers to the syntax-based content of the tooltip.
            This value is required.

          Or list of a value equal to: null | string | dict with keys:

        - delay (number; optional)

        - duration (number; optional)

        - type (a value equal to: 'text', 'markdown'; optional)

        - value (string; required)s

    - tooltip_delay (number; default 350):
        `tooltip_delay` represents the table-wide delay in milliseconds
        before the tooltip is shown when hovering a cell. If set to
        `None`, the tooltip will be shown immediately. Defaults to 350.

    - tooltip_duration (number; default 2000):
        `tooltip_duration` represents the table-wide duration in
        milliseconds during which the tooltip will be displayed when
        hovering a cell. If set to `None`, the tooltip will not disappear.
        Defaults to 2000.

    - locale_format (dict; optional):
        The localization specific formatting information applied to all
        columns in the table. This prop is derived from the
        [d3.formatLocale](https://github.com/d3/d3-format#formatLocale)
        data structure specification. When left unspecified, each
        individual nested prop will default to a pre-determined value.

        `locale_format` is a dict with keys:

        - symbol (list of strings; optional):
            (default: ['$', '']). A  list of two strings representing the
            prefix and suffix symbols. Typically used for currency, and
            implemented using d3's   currency format, but you can use this
            for other symbols such as measurement units.

        - decimal (string; optional):
            (default: '.'). The string used for the decimal separator.

        - group (string; optional):
            (default: ','). The string used for the groups separator.

        - grouping (list of numbers; optional):
            (default: [3]). A  list of integers representing the grouping
            pattern.

        - numerals (list of strings; optional):
            A list of ten strings used as replacements for numbers 0-9.

        - percent (string; optional):
            (default: '%'). The string used for the percentage symbol.

        - separate_4digits (boolean; optional):
            (default: True). Separate integers with 4-digits or less.

    - style_as_list_view (boolean; default False):
        If True, then the table will be styled like a list view and not
        have borders between the columns.

    - fill_width (boolean; default True):
        `fill_width` toggles between a set of CSS for two common
        behaviors: True: The table container's width will grow to fill the
        available space; False: The table container's width will equal the
        width of its content.

    - markdown_options (dict; default {    link_target: '_blank',    html: False}):
        The `markdown_options` property allows customization of the
        markdown cells behavior.

        `markdown_options` is a dict with keys:

        - link_target (string | a value equal to: '_blank', '_parent', '_self', '_top'; optional):
            (default: '_blank').  The link's behavior (_blank opens the
            link in a new tab, _parent opens the link in the parent frame,
            _self opens the link in the current tab, and _top opens the
            link in the top frame) or a string.

        - html (boolean; optional):
            (default: False)  If True, html may be used in markdown cells
            Be careful enabling html if the content being rendered can
            come from an untrusted user, as this may create an XSS
            vulnerability.

    - css (list of dicts; optional):
        The `css` property is a way to embed CSS selectors and rules onto
        the page. We recommend starting with the `style_*` properties
        before using this `css` property. Example: [     {\"selector\":
        \".dash-spreadsheet\", \"rule\": 'font-family: \"monospace\"'} ].

        `css` is a list of dicts with keys:

        - selector (string; required)

        - rule (string; required)

    - style_table (dict; optional):
        CSS styles to be applied to the outer `table` container. This is
        commonly used for setting properties like the width or the height
        of the table.

    - style_cell (dict; optional):
        CSS styles to be applied to each individual cell of the table.
        This includes the header cells, the `data` cells, and the filter
        cells.

    - style_data (dict; optional):
        CSS styles to be applied to each individual data cell. That is,
        unlike `style_cell`, it excludes the header and filter cells.

    - style_filter (dict; optional):
        CSS styles to be applied to the filter cells. Note that this may
        change in the future as we build out a more complex filtering UI.

    - style_header (dict; optional):
        CSS styles to be applied to each individual header cell. That is,
        unlike `style_cell`, it excludes the `data` and filter cells.

    - style_cell_conditional (list of dicts; optional):
        Conditional CSS styles for the cells. This can be used to apply
        styles to cells on a per-column basis.

        `style_cell_conditional` is a list of dicts with keys:

        - if (dict; optional)

            `if` is a dict with keys:

            - column_id (string | list of strings; optional)

            - column_type (a value equal to: 'any', 'numeric', 'text', 'datetime'; optional)

    - style_data_conditional (list of dicts; optional):
        Conditional CSS styles for the data cells. This can be used to
        apply styles to data cells on a per-column basis.

        `style_data_conditional` is a list of dicts with keys:

        - if (dict; optional)

            `if` is a dict with keys:

            - column_id (string | list of strings; optional)

            - column_type (a value equal to: 'any', 'numeric', 'text', 'datetime'; optional)

            - filter_query (string; optional)

            - state (a value equal to: 'active', 'selected'; optional)

            - row_index (number | a value equal to: 'odd', 'even' | list of numbers; optional)

            - column_editable (boolean; optional)

    - style_filter_conditional (list of dicts; optional):
        Conditional CSS styles for the filter cells. This can be used to
        apply styles to filter cells on a per-column basis.

        `style_filter_conditional` is a list of dicts with keys:

        - if (dict; optional)

            `if` is a dict with keys:

            - column_id (string | list of strings; optional)

            - column_type (a value equal to: 'any', 'numeric', 'text', 'datetime'; optional)

            - column_editable (boolean; optional)

    - style_header_conditional (list of dicts; optional):
        Conditional CSS styles for the header cells. This can be used to
        apply styles to header cells on a per-column basis.

        `style_header_conditional` is a list of dicts with keys:

        - if (dict; optional)

            `if` is a dict with keys:

            - column_id (string | list of strings; optional)

            - column_type (a value equal to: 'any', 'numeric', 'text', 'datetime'; optional)

            - header_index (number | list of numbers | a value equal to: 'odd', 'even'; optional)

            - column_editable (boolean; optional)

    - virtualization (boolean; default False):
        This property tells the table to use virtualization when
        rendering. Assumptions are that: the width of the columns is
        fixed; the height of the rows is always the same; and runtime
        styling changes will not affect width and height vs. first
        rendering.

    - derived_filter_query_structure (dict; optional):
        This property represents the current structure of `filter_query`
        as a tree structure. Each node of the query structure has: type
        (string; required):   'open-block',   'logical-operator',
        'relational-operator',   'unary-operator', or   'expression';
        subType (string; optional):   'open-block': '()',
        'logical-operator': '&&', '||',   'relational-operator': '=',
        '>=', '>', '<=', '<', '!=', 'contains',   'unary-operator': '!',
        'is bool', 'is even', 'is nil', 'is num', 'is object', 'is odd',
        'is prime', 'is str',   'expression': 'value', 'field'; value
        (any):   'expression, value': passed value,   'expression, field':
        the field/prop name. block (nested query structure; optional).
        left (nested query structure; optional). right (nested query
        structure; optional). If the query is invalid or empty, the
        `derived_filter_query_structure` will be `None`.

    - derived_viewport_data (list of dicts; optional):
        This property represents the current state of `data` on the
        current page. This property will be updated on paging, sorting,
        and filtering.

    - derived_viewport_indices (list of numbers; optional):
        `derived_viewport_indices` indicates the order in which the
        original rows appear after being filtered, sorted, and/or paged.
        `derived_viewport_indices` contains indices for the current page,
        while `derived_virtual_indices` contains indices across all pages.

    - derived_viewport_row_ids (list of string | numbers; optional):
        `derived_viewport_row_ids` lists row IDs in the order they appear
        after being filtered, sorted, and/or paged.
        `derived_viewport_row_ids` contains IDs for the current page,
        while `derived_virtual_row_ids` contains IDs across all pages.

    - derived_viewport_selected_columns (list of strings; optional):
        `derived_viewport_selected_columns` contains the ids of the
        `selected_columns` that are not currently hidden.

    - derived_viewport_selected_rows (list of numbers; optional):
        `derived_viewport_selected_rows` represents the indices of the
        `selected_rows` from the perspective of the
        `derived_viewport_indices`.

    - derived_viewport_selected_row_ids (list of string | numbers; optional):
        `derived_viewport_selected_row_ids` represents the IDs of the
        `selected_rows` on the currently visible page.

    - derived_virtual_data (list of dicts; optional):
        This property represents the visible state of `data` across all
        pages after the front-end sorting and filtering as been applied.

    - derived_virtual_indices (list of numbers; optional):
        `derived_virtual_indices` indicates the order in which the
        original rows appear after being filtered and sorted.
        `derived_viewport_indices` contains indices for the current page,
        while `derived_virtual_indices` contains indices across all pages.

    - derived_virtual_row_ids (list of string | numbers; optional):
        `derived_virtual_row_ids` indicates the row IDs in the order in
        which they appear after being filtered and sorted.
        `derived_viewport_row_ids` contains IDs for the current page,
        while `derived_virtual_row_ids` contains IDs across all pages.

    - derived_virtual_selected_rows (list of numbers; optional):
        `derived_virtual_selected_rows` represents the indices of the
        `selected_rows` from the perspective of the
        `derived_virtual_indices`.

    - derived_virtual_selected_row_ids (list of string | numbers; optional):
        `derived_virtual_selected_row_ids` represents the IDs of the
        `selected_rows` as they appear after filtering and sorting, across
        all pages.

    - id (string; optional):
        The ID of the table.

    - loading_state (dict; optional):
        Object that holds the loading state object coming from
        dash-renderer.

        `loading_state` is a dict with keys:

        - is_loading (boolean; optional):
            Determines if the component is loading or not.

        - prop_name (string; optional):
            Holds which property is loading.

        - component_name (string; optional):
            Holds the name of the component that is loading.

    - persistence (boolean | string | number; optional):
        Used to allow user interactions in this component to be persisted
        when the component - or the page - is refreshed. If `persisted` is
        truthy and hasn't changed from its previous value, any
        `persisted_props` that the user has changed while using the app
        will keep those changes, as long as the new prop value also
        matches what was given originally. Used in conjunction with
        `persistence_type` and `persisted_props`.

    - persisted_props (list of a value equal to: 'columns.name', 'data', 'filter_query', 'hidden_columns', 'page_current', 'selected_columns', 'selected_rows', 'sort_by's; default [    'columns.name',    'filter_query',    'hidden_columns',    'page_current',    'selected_columns',    'selected_rows',    'sort_by']):
        Properties whose user interactions will persist after refreshing
        the component or the page.

    - persistence_type (a value equal to: 'local', 'session', 'memory'; default 'local'):
        Where persisted user changes will be stored: memory: only kept in
        memory, reset on page refresh. local: window.localStorage, data is
        kept after the browser quit. session: window.sessionStorage, data
        is cleared once the browser quit."""

    _children_props = []
    _base_nodes = ["children"]
    _namespace = "dash_table"
    _type = "DataTable"
    ColumnsFilterOptions = TypedDict(
        "ColumnsFilterOptions",
        {
            "case": NotRequired[Literal["sensitive", "insensitive"]],
            "placeholder_text": NotRequired[str],
        },
    )

    ColumnsFormatLocale = TypedDict(
        "ColumnsFormatLocale",
        {
            "symbol": NotRequired[typing.Sequence[str]],
            "decimal": NotRequired[str],
            "group": NotRequired[str],
            "grouping": NotRequired[typing.Sequence[NumberType]],
            "numerals": NotRequired[typing.Sequence[str]],
            "percent": NotRequired[str],
            "separate_4digits": NotRequired[bool],
        },
    )

    ColumnsFormat = TypedDict(
        "ColumnsFormat",
        {
            "locale": NotRequired["ColumnsFormatLocale"],
            "nully": NotRequired[typing.Any],
            "prefix": NotRequired[NumberType],
            "specifier": NotRequired[str],
        },
    )

    ColumnsOnChange = TypedDict(
        "ColumnsOnChange",
        {
            "action": NotRequired[Literal["coerce", "none", "validate"]],
            "failure": NotRequired[Literal["accept", "default", "reject"]],
        },
    )

    ColumnsValidation = TypedDict(
        "ColumnsValidation",
        {
            "allow_null": NotRequired[bool],
            "default": NotRequired[typing.Any],
            "allow_YY": NotRequired[bool],
        },
    )

    Columns = TypedDict(
        "Columns",
        {
            "id": str,
            "name": typing.Union[str, typing.Sequence[str]],
            "type": NotRequired[Literal["any", "numeric", "text", "datetime"]],
            "presentation": NotRequired[Literal["input", "dropdown", "markdown"]],
            "selectable": NotRequired[
                typing.Union[Literal["first", "last"], bool, typing.Sequence[bool]]
            ],
            "clearable": NotRequired[
                typing.Union[Literal["first", "last"], bool, typing.Sequence[bool]]
            ],
            "deletable": NotRequired[
                typing.Union[Literal["first", "last"], bool, typing.Sequence[bool]]
            ],
            "editable": NotRequired[bool],
            "hideable": NotRequired[
                typing.Union[Literal["first", "last"], bool, typing.Sequence[bool]]
            ],
            "renamable": NotRequired[
                typing.Union[Literal["first", "last"], bool, typing.Sequence[bool]]
            ],
            "filter_options": NotRequired["ColumnsFilterOptions"],
            "format": NotRequired["ColumnsFormat"],
            "on_change": NotRequired["ColumnsOnChange"],
            "sort_as_null": NotRequired[
                typing.Sequence[typing.Union[str, NumberType, bool]]
            ],
            "validation": NotRequired["ColumnsValidation"],
        },
    )

    FixedColumns = TypedDict(
        "FixedColumns", {"data": NotRequired[NumberType], "headers": NotRequired[bool]}
    )

    FixedRows = TypedDict(
        "FixedRows", {"data": NotRequired[NumberType], "headers": NotRequired[bool]}
    )

    ActiveCell = TypedDict(
        "ActiveCell",
        {
            "row": NotRequired[NumberType],
            "column": NotRequired[NumberType],
            "row_id": NotRequired[typing.Union[str, NumberType]],
            "column_id": NotRequired[str],
        },
    )

    SelectedCells = TypedDict(
        "SelectedCells",
        {
            "row": NotRequired[NumberType],
            "column": NotRequired[NumberType],
            "row_id": NotRequired[typing.Union[str, NumberType]],
            "column_id": NotRequired[str],
        },
    )

    StartCell = TypedDict(
        "StartCell",
        {
            "row": NotRequired[NumberType],
            "column": NotRequired[NumberType],
            "row_id": NotRequired[typing.Union[str, NumberType]],
            "column_id": NotRequired[str],
        },
    )

    EndCell = TypedDict(
        "EndCell",
        {
            "row": NotRequired[NumberType],
            "column": NotRequired[NumberType],
            "row_id": NotRequired[typing.Union[str, NumberType]],
            "column_id": NotRequired[str],
        },
    )

    FilterAction = TypedDict(
        "FilterAction",
        {
            "type": Literal["custom", "native"],
            "operator": NotRequired[Literal["and", "or"]],
        },
    )

    FilterOptions = TypedDict(
        "FilterOptions",
        {
            "case": NotRequired[Literal["sensitive", "insensitive"]],
            "placeholder_text": NotRequired[str],
        },
    )

    SortBy = TypedDict(
        "SortBy", {"column_id": str, "direction": Literal["asc", "desc"]}
    )

    DropdownOptions = TypedDict(
        "DropdownOptions", {"label": str, "value": typing.Union[NumberType, str, bool]}
    )

    Dropdown = TypedDict(
        "Dropdown",
        {"clearable": NotRequired[bool], "options": typing.Sequence["DropdownOptions"]},
    )

    DropdownConditionalIf = TypedDict(
        "DropdownConditionalIf",
        {"column_id": NotRequired[str], "filter_query": NotRequired[str]},
    )

    DropdownConditionalOptions = TypedDict(
        "DropdownConditionalOptions",
        {"label": str, "value": typing.Union[NumberType, str, bool]},
    )

    DropdownConditional = TypedDict(
        "DropdownConditional",
        {
            "clearable": NotRequired[bool],
            "if": NotRequired["DropdownConditionalIf"],
            "options": typing.Sequence["DropdownConditionalOptions"],
        },
    )

    DropdownDataOptions = TypedDict(
        "DropdownDataOptions",
        {"label": str, "value": typing.Union[NumberType, str, bool]},
    )

    DropdownData = TypedDict(
        "DropdownData",
        {
            "clearable": NotRequired[bool],
            "options": typing.Sequence["DropdownDataOptions"],
        },
    )

    Tooltip = TypedDict(
        "Tooltip",
        {
            "delay": NotRequired[NumberType],
            "duration": NotRequired[NumberType],
            "type": NotRequired[Literal["text", "markdown"]],
            "use_with": NotRequired[Literal["both", "data", "header"]],
            "value": str,
        },
    )

    TooltipConditionalIf = TypedDict(
        "TooltipConditionalIf",
        {
            "column_id": NotRequired[str],
            "filter_query": NotRequired[str],
            "row_index": NotRequired[typing.Union[NumberType, Literal["odd", "even"]]],
        },
    )

    TooltipConditional = TypedDict(
        "TooltipConditional",
        {
            "delay": NotRequired[NumberType],
            "duration": NotRequired[NumberType],
            "if": "TooltipConditionalIf",
            "type": NotRequired[Literal["text", "markdown"]],
            "value": str,
        },
    )

    TooltipData = TypedDict(
        "TooltipData",
        {
            "delay": NotRequired[NumberType],
            "duration": NotRequired[NumberType],
            "type": NotRequired[Literal["text", "markdown"]],
            "value": str,
        },
    )

    TooltipHeader = TypedDict(
        "TooltipHeader",
        {
            "delay": NotRequired[NumberType],
            "duration": NotRequired[NumberType],
            "type": NotRequired[Literal["text", "markdown"]],
            "value": str,
        },
    )

    LocaleFormat = TypedDict(
        "LocaleFormat",
        {
            "symbol": NotRequired[typing.Sequence[str]],
            "decimal": NotRequired[str],
            "group": NotRequired[str],
            "grouping": NotRequired[typing.Sequence[NumberType]],
            "numerals": NotRequired[typing.Sequence[str]],
            "percent": NotRequired[str],
            "separate_4digits": NotRequired[bool],
        },
    )

    MarkdownOptions = TypedDict(
        "MarkdownOptions",
        {
            "link_target": NotRequired[
                typing.Union[str, Literal["_blank", "_parent", "_self", "_top"]]
            ],
            "html": NotRequired[bool],
        },
    )

    Css = TypedDict("Css", {"selector": str, "rule": str})

    StyleCellConditionalIf = TypedDict(
        "StyleCellConditionalIf",
        {
            "column_id": NotRequired[typing.Union[str, typing.Sequence[str]]],
            "column_type": NotRequired[Literal["any", "numeric", "text", "datetime"]],
        },
    )

    StyleCellConditional = TypedDict(
        "StyleCellConditional", {"if": NotRequired["StyleCellConditionalIf"]}
    )

    StyleDataConditionalIf = TypedDict(
        "StyleDataConditionalIf",
        {
            "column_id": NotRequired[typing.Union[str, typing.Sequence[str]]],
            "column_type": NotRequired[Literal["any", "numeric", "text", "datetime"]],
            "filter_query": NotRequired[str],
            "state": NotRequired[Literal["active", "selected"]],
            "row_index": NotRequired[
                typing.Union[
                    NumberType, Literal["odd", "even"], typing.Sequence[NumberType]
                ]
            ],
            "column_editable": NotRequired[bool],
        },
    )

    StyleDataConditional = TypedDict(
        "StyleDataConditional", {"if": NotRequired["StyleDataConditionalIf"]}
    )

    StyleFilterConditionalIf = TypedDict(
        "StyleFilterConditionalIf",
        {
            "column_id": NotRequired[typing.Union[str, typing.Sequence[str]]],
            "column_type": NotRequired[Literal["any", "numeric", "text", "datetime"]],
            "column_editable": NotRequired[bool],
        },
    )

    StyleFilterConditional = TypedDict(
        "StyleFilterConditional", {"if": NotRequired["StyleFilterConditionalIf"]}
    )

    StyleHeaderConditionalIf = TypedDict(
        "StyleHeaderConditionalIf",
        {
            "column_id": NotRequired[typing.Union[str, typing.Sequence[str]]],
            "column_type": NotRequired[Literal["any", "numeric", "text", "datetime"]],
            "header_index": NotRequired[
                typing.Union[
                    NumberType, typing.Sequence[NumberType], Literal["odd", "even"]
                ]
            ],
            "column_editable": NotRequired[bool],
        },
    )

    StyleHeaderConditional = TypedDict(
        "StyleHeaderConditional", {"if": NotRequired["StyleHeaderConditionalIf"]}
    )

    LoadingState = TypedDict(
        "LoadingState",
        {
            "is_loading": NotRequired[bool],
            "prop_name": NotRequired[str],
            "component_name": NotRequired[str],
        },
    )

    def __init__(
        self,
        data: typing.Optional[
            typing.Sequence[
                typing.Dict[
                    typing.Union[str, float, int], typing.Union[str, NumberType, bool]
                ]
            ]
        ] = None,
        columns: typing.Optional[typing.Sequence["Columns"]] = None,
        editable: typing.Optional[bool] = None,
        fixed_columns: typing.Optional["FixedColumns"] = None,
        fixed_rows: typing.Optional["FixedRows"] = None,
        column_selectable: typing.Optional[Literal["single", "multi", False]] = None,
        cell_selectable: typing.Optional[bool] = None,
        row_selectable: typing.Optional[Literal["single", "multi", False]] = None,
        row_deletable: typing.Optional[bool] = None,
        active_cell: typing.Optional["ActiveCell"] = None,
        selected_cells: typing.Optional[typing.Sequence["SelectedCells"]] = None,
        selected_rows: typing.Optional[typing.Sequence[NumberType]] = None,
        selected_columns: typing.Optional[typing.Sequence[str]] = None,
        selected_row_ids: typing.Optional[
            typing.Sequence[typing.Union[str, NumberType]]
        ] = None,
        start_cell: typing.Optional["StartCell"] = None,
        end_cell: typing.Optional["EndCell"] = None,
        data_previous: typing.Optional[typing.Sequence[dict]] = None,
        hidden_columns: typing.Optional[typing.Sequence[str]] = None,
        is_focused: typing.Optional[bool] = None,
        merge_duplicate_headers: typing.Optional[bool] = None,
        data_timestamp: typing.Optional[NumberType] = None,
        include_headers_on_copy_paste: typing.Optional[bool] = None,
        export_columns: typing.Optional[Literal["all", "visible"]] = None,
        export_format: typing.Optional[Literal["csv", "xlsx", "none"]] = None,
        export_headers: typing.Optional[
            Literal["none", "ids", "names", "display"]
        ] = None,
        page_action: typing.Optional[Literal["custom", "native", "none"]] = None,
        page_current: typing.Optional[NumberType] = None,
        page_count: typing.Optional[NumberType] = None,
        page_size: typing.Optional[NumberType] = None,
        filter_query: typing.Optional[str] = None,
        filter_action: typing.Optional[
            typing.Union[Literal["custom", "native", "none"], "FilterAction"]
        ] = None,
        filter_options: typing.Optional["FilterOptions"] = None,
        sort_action: typing.Optional[Literal["custom", "native", "none"]] = None,
        sort_mode: typing.Optional[Literal["single", "multi"]] = None,
        sort_by: typing.Optional[typing.Sequence["SortBy"]] = None,
        sort_as_null: typing.Optional[
            typing.Sequence[typing.Union[str, NumberType, bool]]
        ] = None,
        dropdown: typing.Optional[
            typing.Dict[typing.Union[str, float, int], "Dropdown"]
        ] = None,
        dropdown_conditional: typing.Optional[
            typing.Sequence["DropdownConditional"]
        ] = None,
        dropdown_data: typing.Optional[
            typing.Sequence[typing.Dict[typing.Union[str, float, int], "DropdownData"]]
        ] = None,
        tooltip: typing.Optional[
            typing.Dict[typing.Union[str, float, int], typing.Union[str, "Tooltip"]]
        ] = None,
        tooltip_conditional: typing.Optional[
            typing.Sequence["TooltipConditional"]
        ] = None,
        tooltip_data: typing.Optional[
            typing.Sequence[
                typing.Dict[
                    typing.Union[str, float, int], typing.Union[str, "TooltipData"]
                ]
            ]
        ] = None,
        tooltip_header: typing.Optional[
            typing.Dict[
                typing.Union[str, float, int],
                typing.Union[
                    str,
                    "TooltipHeader",
                    typing.Sequence[typing.Union[Literal[None], str, "TooltipHeader"]],
                ],
            ]
        ] = None,
        tooltip_delay: typing.Optional[NumberType] = None,
        tooltip_duration: typing.Optional[NumberType] = None,
        locale_format: typing.Optional["LocaleFormat"] = None,
        style_as_list_view: typing.Optional[bool] = None,
        fill_width: typing.Optional[bool] = None,
        markdown_options: typing.Optional["MarkdownOptions"] = None,
        css: typing.Optional[typing.Sequence["Css"]] = None,
        style_table: typing.Optional[dict] = None,
        style_cell: typing.Optional[dict] = None,
        style_data: typing.Optional[dict] = None,
        style_filter: typing.Optional[dict] = None,
        style_header: typing.Optional[dict] = None,
        style_cell_conditional: typing.Optional[
            typing.Sequence["StyleCellConditional"]
        ] = None,
        style_data_conditional: typing.Optional[
            typing.Sequence["StyleDataConditional"]
        ] = None,
        style_filter_conditional: typing.Optional[
            typing.Sequence["StyleFilterConditional"]
        ] = None,
        style_header_conditional: typing.Optional[
            typing.Sequence["StyleHeaderConditional"]
        ] = None,
        virtualization: typing.Optional[bool] = None,
        derived_filter_query_structure: typing.Optional[dict] = None,
        derived_viewport_data: typing.Optional[typing.Sequence[dict]] = None,
        derived_viewport_indices: typing.Optional[typing.Sequence[NumberType]] = None,
        derived_viewport_row_ids: typing.Optional[
            typing.Sequence[typing.Union[str, NumberType]]
        ] = None,
        derived_viewport_selected_columns: typing.Optional[typing.Sequence[str]] = None,
        derived_viewport_selected_rows: typing.Optional[
            typing.Sequence[NumberType]
        ] = None,
        derived_viewport_selected_row_ids: typing.Optional[
            typing.Sequence[typing.Union[str, NumberType]]
        ] = None,
        derived_virtual_data: typing.Optional[typing.Sequence[dict]] = None,
        derived_virtual_indices: typing.Optional[typing.Sequence[NumberType]] = None,
        derived_virtual_row_ids: typing.Optional[
            typing.Sequence[typing.Union[str, NumberType]]
        ] = None,
        derived_virtual_selected_rows: typing.Optional[
            typing.Sequence[NumberType]
        ] = None,
        derived_virtual_selected_row_ids: typing.Optional[
            typing.Sequence[typing.Union[str, NumberType]]
        ] = None,
        id: typing.Optional[typing.Union[str, dict]] = None,
        loading_state: typing.Optional["LoadingState"] = None,
        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,
        persisted_props: typing.Optional[
            typing.Sequence[
                Literal[
                    "columns.name",
                    "data",
                    "filter_query",
                    "hidden_columns",
                    "page_current",
                    "selected_columns",
                    "selected_rows",
                    "sort_by",
                ]
            ]
        ] = None,
        persistence_type: typing.Optional[Literal["local", "session", "memory"]] = None,
        **kwargs
    ):
        self._prop_names = [
            "data",
            "columns",
            "editable",
            "fixed_columns",
            "fixed_rows",
            "column_selectable",
            "cell_selectable",
            "row_selectable",
            "row_deletable",
            "active_cell",
            "selected_cells",
            "selected_rows",
            "selected_columns",
            "selected_row_ids",
            "start_cell",
            "end_cell",
            "data_previous",
            "hidden_columns",
            "is_focused",
            "merge_duplicate_headers",
            "data_timestamp",
            "include_headers_on_copy_paste",
            "export_columns",
            "export_format",
            "export_headers",
            "page_action",
            "page_current",
            "page_count",
            "page_size",
            "filter_query",
            "filter_action",
            "filter_options",
            "sort_action",
            "sort_mode",
            "sort_by",
            "sort_as_null",
            "dropdown",
            "dropdown_conditional",
            "dropdown_data",
            "tooltip",
            "tooltip_conditional",
            "tooltip_data",
            "tooltip_header",
            "tooltip_delay",
            "tooltip_duration",
            "locale_format",
            "style_as_list_view",
            "fill_width",
            "markdown_options",
            "css",
            "style_table",
            "style_cell",
            "style_data",
            "style_filter",
            "style_header",
            "style_cell_conditional",
            "style_data_conditional",
            "style_filter_conditional",
            "style_header_conditional",
            "virtualization",
            "derived_filter_query_structure",
            "derived_viewport_data",
            "derived_viewport_indices",
            "derived_viewport_row_ids",
            "derived_viewport_selected_columns",
            "derived_viewport_selected_rows",
            "derived_viewport_selected_row_ids",
            "derived_virtual_data",
            "derived_virtual_indices",
            "derived_virtual_row_ids",
            "derived_virtual_selected_rows",
            "derived_virtual_selected_row_ids",
            "id",
            "loading_state",
            "persistence",
            "persisted_props",
            "persistence_type",
        ]
        self._valid_wildcard_attributes = []
        self.available_properties = [
            "data",
            "columns",
            "editable",
            "fixed_columns",
            "fixed_rows",
            "column_selectable",
            "cell_selectable",
            "row_selectable",
            "row_deletable",
            "active_cell",
            "selected_cells",
            "selected_rows",
            "selected_columns",
            "selected_row_ids",
            "start_cell",
            "end_cell",
            "data_previous",
            "hidden_columns",
            "is_focused",
            "merge_duplicate_headers",
            "data_timestamp",
            "include_headers_on_copy_paste",
            "export_columns",
            "export_format",
            "export_headers",
            "page_action",
            "page_current",
            "page_count",
            "page_size",
            "filter_query",
            "filter_action",
            "filter_options",
            "sort_action",
            "sort_mode",
            "sort_by",
            "sort_as_null",
            "dropdown",
            "dropdown_conditional",
            "dropdown_data",
            "tooltip",
            "tooltip_conditional",
            "tooltip_data",
            "tooltip_header",
            "tooltip_delay",
            "tooltip_duration",
            "locale_format",
            "style_as_list_view",
            "fill_width",
            "markdown_options",
            "css",
            "style_table",
            "style_cell",
            "style_data",
            "style_filter",
            "style_header",
            "style_cell_conditional",
            "style_data_conditional",
            "style_filter_conditional",
            "style_header_conditional",
            "virtualization",
            "derived_filter_query_structure",
            "derived_viewport_data",
            "derived_viewport_indices",
            "derived_viewport_row_ids",
            "derived_viewport_selected_columns",
            "derived_viewport_selected_rows",
            "derived_viewport_selected_row_ids",
            "derived_virtual_data",
            "derived_virtual_indices",
            "derived_virtual_row_ids",
            "derived_virtual_selected_rows",
            "derived_virtual_selected_row_ids",
            "id",
            "loading_state",
            "persistence",
            "persisted_props",
            "persistence_type",
        ]
        self.available_wildcard_properties = []
        _explicit_args = kwargs.pop("_explicit_args")
        _locals = locals()
        _locals.update(kwargs)  # For wildcard attrs and excess named props
        args = {k: _locals[k] for k in _explicit_args}

        super(DataTable, self).__init__(**args)


setattr(DataTable, "__init__", _explicitize_args(DataTable.__init__))