@mendylanda/ui 0.2.0 → 0.3.0-alpha.1
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/README.md +22 -0
- package/dist/class-names.js +1 -1
- package/dist/styles.css +162 -0
- package/dist/styles.tailwind3.css +162 -0
- package/dist/table/clipboard.d.ts +6 -0
- package/dist/table/clipboard.js +51 -0
- package/dist/table/columns.d.ts +60 -0
- package/dist/table/columns.js +72 -0
- package/dist/table/data-table.d.ts +14 -0
- package/dist/table/data-table.js +15 -0
- package/dist/table/features.d.ts +34 -0
- package/dist/table/features.js +35 -0
- package/dist/table/index.d.ts +9 -0
- package/dist/table/index.js +9 -0
- package/dist/table/state.d.ts +31 -0
- package/dist/table/state.js +48 -0
- package/dist/table/table-controls.d.ts +23 -0
- package/dist/table/table-controls.js +99 -0
- package/dist/table/table-feedback.d.ts +7 -0
- package/dist/table/table-feedback.js +11 -0
- package/dist/table/table-layout.d.ts +43 -0
- package/dist/table/table-layout.js +51 -0
- package/dist/table/table-loading.d.ts +11 -0
- package/dist/table/table-loading.js +5 -0
- package/dist/table/table-parts.d.ts +24 -0
- package/dist/table/table-parts.js +67 -0
- package/dist/table/table-view.d.ts +35 -0
- package/dist/table/table-view.js +78 -0
- package/dist/table/use-data-table.d.ts +24 -0
- package/dist/table/use-data-table.js +100 -0
- package/dist/table/use-result-selection.d.ts +17 -0
- package/dist/table/use-result-selection.js +53 -0
- package/dist/table/use-table-interaction.d.ts +15 -0
- package/dist/table/use-table-interaction.js +125 -0
- package/dist/table/use-viewport-width.d.ts +3 -0
- package/dist/table/use-viewport-width.js +17 -0
- package/package.json +14 -7
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
@layer properties;
|
|
3
3
|
@layer theme {
|
|
4
4
|
:where([data-mendy-ui]),:where([data-mendy-ui]) {
|
|
5
|
+
--color-green-100: oklch(96.2% 0.044 156.743);
|
|
6
|
+
--color-green-950: oklch(26.6% 0.065 152.934);
|
|
5
7
|
--spacing: 0.25rem;
|
|
6
8
|
--text-xs: 0.75rem;
|
|
7
9
|
--text-xs--line-height: calc(1 / 0.75);
|
|
@@ -48,12 +50,18 @@
|
|
|
48
50
|
.mui-d2d9e1f13413:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
49
51
|
position: relative;
|
|
50
52
|
}
|
|
53
|
+
.mui-964a9431ff49:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
54
|
+
position: sticky;
|
|
55
|
+
}
|
|
51
56
|
.mui-ce13093ad8c9:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
52
57
|
inset: calc(var(--spacing) * 0);
|
|
53
58
|
}
|
|
54
59
|
.mui-3ba24c062d55:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
55
60
|
inset-inline: calc(var(--spacing) * 0);
|
|
56
61
|
}
|
|
62
|
+
.mui-eb9e48c5dda9:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
63
|
+
inset-block: calc(var(--spacing) * 0);
|
|
64
|
+
}
|
|
57
65
|
.mui-cced28c6dc3f:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
58
66
|
inset-inline-start: var(--spacing);
|
|
59
67
|
}
|
|
@@ -78,6 +86,30 @@
|
|
|
78
86
|
.mui-4e45f4841abb:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
79
87
|
top: calc(1 / 2 * 100%);
|
|
80
88
|
}
|
|
89
|
+
.mui-a74c4477017c:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
90
|
+
right: calc(var(--spacing) * 0);
|
|
91
|
+
}
|
|
92
|
+
.mui-30150dd033ab:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
93
|
+
bottom: calc(var(--spacing) * 0);
|
|
94
|
+
}
|
|
95
|
+
.mui-a5c36273c0f0:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
96
|
+
bottom: calc(var(--spacing) * 2);
|
|
97
|
+
}
|
|
98
|
+
.mui-635702706586:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
99
|
+
left: calc(var(--spacing) * 0);
|
|
100
|
+
}
|
|
101
|
+
.mui-014aadadffad:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
102
|
+
isolation: isolate;
|
|
103
|
+
}
|
|
104
|
+
.mui-418e44ad4f9e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
105
|
+
z-index: 10;
|
|
106
|
+
}
|
|
107
|
+
.mui-4e8f0a87a0dc:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
108
|
+
z-index: 20;
|
|
109
|
+
}
|
|
110
|
+
.mui-fbb62f5cb6fe:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
111
|
+
z-index: 30;
|
|
112
|
+
}
|
|
81
113
|
.mui-3eef1ce97dba:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
82
114
|
z-index: 50;
|
|
83
115
|
}
|
|
@@ -147,6 +179,9 @@
|
|
|
147
179
|
.mui-123306850fe1:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
148
180
|
display: inline-flex;
|
|
149
181
|
}
|
|
182
|
+
.mui-0d4fc4a78d37:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
183
|
+
display: table;
|
|
184
|
+
}
|
|
150
185
|
.mui-3da89b3ed14b:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
151
186
|
field-sizing: content;
|
|
152
187
|
}
|
|
@@ -161,6 +196,10 @@
|
|
|
161
196
|
width: calc(var(--spacing) * 1.5);
|
|
162
197
|
height: calc(var(--spacing) * 1.5);
|
|
163
198
|
}
|
|
199
|
+
.mui-5e34f5313859:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
200
|
+
width: calc(var(--spacing) * 3);
|
|
201
|
+
height: calc(var(--spacing) * 3);
|
|
202
|
+
}
|
|
164
203
|
.mui-61c000c8a98a:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
165
204
|
width: calc(var(--spacing) * 3.5);
|
|
166
205
|
height: calc(var(--spacing) * 3.5);
|
|
@@ -199,6 +238,9 @@
|
|
|
199
238
|
.mui-c7d5500b77ab:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
200
239
|
height: calc(var(--spacing) * 0);
|
|
201
240
|
}
|
|
241
|
+
.mui-2edce89ef182:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
242
|
+
height: calc(var(--spacing) * 3);
|
|
243
|
+
}
|
|
202
244
|
.mui-099be97e1fa4:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
203
245
|
height: calc(var(--spacing) * 4);
|
|
204
246
|
}
|
|
@@ -229,6 +271,9 @@
|
|
|
229
271
|
.mui-1f061e70178e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
230
272
|
max-height: var(--radix-dropdown-menu-content-available-height);
|
|
231
273
|
}
|
|
274
|
+
.mui-b057efba3283:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
275
|
+
max-height: calc(var(--spacing) * 96);
|
|
276
|
+
}
|
|
232
277
|
.mui-80baa5d03af7:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
233
278
|
max-height: calc(var(--filter-menu-height) - 2px);
|
|
234
279
|
}
|
|
@@ -256,9 +301,21 @@
|
|
|
256
301
|
.mui-d48fe95d4da8:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
257
302
|
width: var(--cell-size);
|
|
258
303
|
}
|
|
304
|
+
.mui-d4ea834145ae:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
305
|
+
width: calc(var(--spacing) * 2);
|
|
306
|
+
}
|
|
307
|
+
.mui-56bb14cbd1fe:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
308
|
+
width: calc(2 / 3 * 100%);
|
|
309
|
+
}
|
|
259
310
|
.mui-8867d85ed290:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
260
311
|
width: calc(var(--spacing) * 8);
|
|
261
312
|
}
|
|
313
|
+
.mui-4ac4ec8dfbce:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
314
|
+
width: calc(var(--spacing) * 40);
|
|
315
|
+
}
|
|
316
|
+
.mui-72b37c1a040d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
317
|
+
width: calc(var(--spacing) * 64);
|
|
318
|
+
}
|
|
262
319
|
.mui-37535002f0f7:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
263
320
|
width: calc(var(--spacing) * 72);
|
|
264
321
|
}
|
|
@@ -295,6 +352,9 @@
|
|
|
295
352
|
.mui-e9ab1547c94d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
296
353
|
min-width: 8rem;
|
|
297
354
|
}
|
|
355
|
+
.mui-2bf6510f1330:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
356
|
+
min-width: 100%;
|
|
357
|
+
}
|
|
298
358
|
.mui-7bd5bab6d7f4:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
299
359
|
flex: 1;
|
|
300
360
|
}
|
|
@@ -323,9 +383,15 @@
|
|
|
323
383
|
.mui-7b3cd77eb999:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
324
384
|
animation: var(--animate-pulse);
|
|
325
385
|
}
|
|
386
|
+
.mui-2194d094b585:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
387
|
+
cursor: col-resize;
|
|
388
|
+
}
|
|
326
389
|
.mui-d343f41ba73e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
327
390
|
cursor: default;
|
|
328
391
|
}
|
|
392
|
+
.mui-739a9a000791:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
393
|
+
touch-action: none;
|
|
394
|
+
}
|
|
329
395
|
.mui-acd532d8913e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
330
396
|
resize: both;
|
|
331
397
|
}
|
|
@@ -359,6 +425,9 @@
|
|
|
359
425
|
.mui-a503dd374cca:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
360
426
|
justify-content: center;
|
|
361
427
|
}
|
|
428
|
+
.mui-307644c34db6:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
429
|
+
justify-content: flex-end;
|
|
430
|
+
}
|
|
362
431
|
.mui-c62ec162662e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
363
432
|
justify-content: flex-start;
|
|
364
433
|
}
|
|
@@ -396,6 +465,9 @@
|
|
|
396
465
|
text-overflow: ellipsis;
|
|
397
466
|
white-space: nowrap;
|
|
398
467
|
}
|
|
468
|
+
.mui-1a26a0d28420:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
469
|
+
overflow: auto;
|
|
470
|
+
}
|
|
399
471
|
.mui-d5111d0e9f48:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
400
472
|
overflow: hidden;
|
|
401
473
|
}
|
|
@@ -493,6 +565,12 @@
|
|
|
493
565
|
.mui-965cf6587342:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
494
566
|
background-color: var(--destructive, #dc2626);
|
|
495
567
|
}
|
|
568
|
+
.mui-047624ec0c39:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
569
|
+
background-color: var(--color-green-100);
|
|
570
|
+
}
|
|
571
|
+
.mui-87ecb59f2d2d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
572
|
+
background-color: var(--muted, #f5f5f5);
|
|
573
|
+
}
|
|
496
574
|
.mui-810ae775809b:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
497
575
|
background-color: var(--muted-foreground, #737373);
|
|
498
576
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -523,9 +601,18 @@
|
|
|
523
601
|
.mui-094f5333853b:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
524
602
|
padding: calc(var(--spacing) * 3);
|
|
525
603
|
}
|
|
604
|
+
.mui-c432836760e3:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
605
|
+
padding: calc(var(--spacing) * 6);
|
|
606
|
+
}
|
|
607
|
+
.mui-c7902d77ad80:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
608
|
+
padding: calc(var(--spacing) * 8);
|
|
609
|
+
}
|
|
526
610
|
.mui-56b8f5e0fb12:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
527
611
|
padding-inline: var(--cell-size);
|
|
528
612
|
}
|
|
613
|
+
.mui-16e909e6f01d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
614
|
+
padding-inline: calc(var(--spacing) * 0);
|
|
615
|
+
}
|
|
529
616
|
.mui-1da2e8f173c5:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
530
617
|
padding-inline: calc(var(--spacing) * 1.5);
|
|
531
618
|
}
|
|
@@ -580,6 +667,9 @@
|
|
|
580
667
|
.mui-05ab12448317:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
581
668
|
text-align: center;
|
|
582
669
|
}
|
|
670
|
+
.mui-10558dbb3a24:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
671
|
+
text-align: end;
|
|
672
|
+
}
|
|
583
673
|
.mui-e9347b78185f:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
584
674
|
text-align: start;
|
|
585
675
|
}
|
|
@@ -756,6 +846,13 @@
|
|
|
756
846
|
.mui-14bd99410890:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
757
847
|
unicode-bidi: isolate;
|
|
758
848
|
}
|
|
849
|
+
.mui-97b1c00ff005:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
850
|
+
&:is(:where(.mui-ad936fcbed63):hover *) {
|
|
851
|
+
@media (hover: hover) {
|
|
852
|
+
background-color: var(--accent, #f5f5f5);
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
}
|
|
759
856
|
.mui-9af9a4182597:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
760
857
|
&:is(:where(.mui-ad936fcbed63)[data-disabled="true"] *) {
|
|
761
858
|
pointer-events: none;
|
|
@@ -792,6 +889,11 @@
|
|
|
792
889
|
--mendy-tw-ring-color: var(--ring, #737373);
|
|
793
890
|
}
|
|
794
891
|
}
|
|
892
|
+
.mui-e6020023567a:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
893
|
+
&:is(:where(.mui-ad936fcbed63)[data-highlighted="true"] *) {
|
|
894
|
+
background-color: var(--accent, #f5f5f5);
|
|
895
|
+
}
|
|
896
|
+
}
|
|
795
897
|
.mui-f0ee83167878:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
796
898
|
&:is(:where(.mui-2ffc1d06387e):disabled ~ *) {
|
|
797
899
|
cursor: not-allowed;
|
|
@@ -836,6 +938,12 @@
|
|
|
836
938
|
border-inline-start-width: 0px;
|
|
837
939
|
}
|
|
838
940
|
}
|
|
941
|
+
.mui-beeef6663906:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
942
|
+
&:last-child {
|
|
943
|
+
border-inline-end-style: var(--mendy-tw-border-style);
|
|
944
|
+
border-inline-end-width: 0px;
|
|
945
|
+
}
|
|
946
|
+
}
|
|
839
947
|
.mui-37ad15a95595:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
840
948
|
&:hover {
|
|
841
949
|
@media (hover: hover) {
|
|
@@ -843,6 +951,16 @@
|
|
|
843
951
|
}
|
|
844
952
|
}
|
|
845
953
|
}
|
|
954
|
+
.mui-63b29dace366:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
955
|
+
&:hover {
|
|
956
|
+
@media (hover: hover) {
|
|
957
|
+
background-color: var(--accent, #f5f5f5);
|
|
958
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
959
|
+
background-color: color-mix(in oklab, var(--accent, #f5f5f5) 50%, transparent);
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
}
|
|
846
964
|
.mui-bb6a4b3e902d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
847
965
|
&:hover {
|
|
848
966
|
@media (hover: hover) {
|
|
@@ -853,6 +971,16 @@
|
|
|
853
971
|
}
|
|
854
972
|
}
|
|
855
973
|
}
|
|
974
|
+
.mui-4273133a876a:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
975
|
+
&:hover {
|
|
976
|
+
@media (hover: hover) {
|
|
977
|
+
background-color: var(--primary, #171717);
|
|
978
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
979
|
+
background-color: color-mix(in oklab, var(--primary, #171717) 20%, transparent);
|
|
980
|
+
}
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
}
|
|
856
984
|
.mui-af9ea085901b:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
857
985
|
&:hover {
|
|
858
986
|
@media (hover: hover) {
|
|
@@ -923,6 +1051,14 @@
|
|
|
923
1051
|
border-color: var(--ring, #737373);
|
|
924
1052
|
}
|
|
925
1053
|
}
|
|
1054
|
+
.mui-2f669cfad5aa:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1055
|
+
&:focus-visible {
|
|
1056
|
+
background-color: var(--primary, #171717);
|
|
1057
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1058
|
+
background-color: color-mix(in oklab, var(--primary, #171717) 20%, transparent);
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
926
1062
|
.mui-39be5a15b766:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
927
1063
|
&:focus-visible {
|
|
928
1064
|
--mendy-tw-ring-shadow: var(--mendy-tw-ring-inset,) 0 0 0 calc(1px + var(--mendy-tw-ring-offset-width)) var(--mendy-tw-ring-color, currentcolor);
|
|
@@ -954,12 +1090,28 @@
|
|
|
954
1090
|
}
|
|
955
1091
|
}
|
|
956
1092
|
}
|
|
1093
|
+
.mui-a47d391255f3:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1094
|
+
&:focus-visible {
|
|
1095
|
+
outline-style: var(--mendy-tw-outline-style);
|
|
1096
|
+
outline-width: 1px;
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
957
1099
|
.mui-1df9125eebaf:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
958
1100
|
&:focus-visible {
|
|
959
1101
|
outline-style: var(--mendy-tw-outline-style);
|
|
960
1102
|
outline-width: 1px;
|
|
961
1103
|
}
|
|
962
1104
|
}
|
|
1105
|
+
.mui-a8719ed8b095:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1106
|
+
&:focus-visible {
|
|
1107
|
+
outline-offset: calc(2px * -1);
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1110
|
+
.mui-2b1c7d88acff:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1111
|
+
&:focus-visible {
|
|
1112
|
+
outline-color: var(--primary, #171717);
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
963
1115
|
.mui-223daa83ed2d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
964
1116
|
&:focus-visible {
|
|
965
1117
|
outline-color: var(--ring, #737373);
|
|
@@ -1073,6 +1225,11 @@
|
|
|
1073
1225
|
opacity: 50%;
|
|
1074
1226
|
}
|
|
1075
1227
|
}
|
|
1228
|
+
.mui-9d7d1760cd8e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1229
|
+
&[data-highlighted="true"] {
|
|
1230
|
+
background-color: var(--accent, #f5f5f5);
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1076
1233
|
.mui-6fa6a8ade7c4:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1077
1234
|
&[data-inset] {
|
|
1078
1235
|
padding-left: calc(var(--spacing) * 8);
|
|
@@ -1305,6 +1462,11 @@
|
|
|
1305
1462
|
rotate: 180deg;
|
|
1306
1463
|
}
|
|
1307
1464
|
}
|
|
1465
|
+
.mui-d254c96aea74:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1466
|
+
&:is(.dark *) {
|
|
1467
|
+
background-color: var(--color-green-950);
|
|
1468
|
+
}
|
|
1469
|
+
}
|
|
1308
1470
|
.mui-9daa2369a41b:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1309
1471
|
&:is(.dark *) {
|
|
1310
1472
|
background-color: var(--input, #e5e5e5);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DataTableInstance } from "./use-data-table.js";
|
|
2
|
+
export declare const interactiveSelector = "button, a, input, textarea, select, [contenteditable]:not([contenteditable=\"false\"]), [role=\"checkbox\"], [role=\"button\"], [role=\"textbox\"]";
|
|
3
|
+
export declare function selectedCellsText<T extends object>(table: DataTableInstance<T>): string;
|
|
4
|
+
export declare function tableCsv<T extends object>(table: DataTableInstance<T>, options?: {
|
|
5
|
+
selectedOnly?: boolean;
|
|
6
|
+
}): string;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { csvValue, tsvValue } from "./state.js";
|
|
2
|
+
export const interactiveSelector = 'button, a, input, textarea, select, [contenteditable]:not([contenteditable="false"]), [role="checkbox"], [role="button"], [role="textbox"]';
|
|
3
|
+
export function selectedCellsText(table) {
|
|
4
|
+
const selected = new Set(table.getSelectedCellIds());
|
|
5
|
+
const rows = table
|
|
6
|
+
.getRowsInDisplayOrder()
|
|
7
|
+
.filter((row) => row.getVisibleCells().some((cell) => selected.has(cell.id)));
|
|
8
|
+
const columns = new Set(rows.flatMap((row) => row
|
|
9
|
+
.getVisibleCells()
|
|
10
|
+
.filter((cell) => selected.has(cell.id))
|
|
11
|
+
.map((cell) => cell.column.id)));
|
|
12
|
+
return rows
|
|
13
|
+
.map((row) => row
|
|
14
|
+
.getVisibleCells()
|
|
15
|
+
.filter((cell) => columns.has(cell.column.id))
|
|
16
|
+
.map((cell) => {
|
|
17
|
+
if (!selected.has(cell.id))
|
|
18
|
+
return "";
|
|
19
|
+
const definition = cell.column.columnDef;
|
|
20
|
+
return tsvValue(definition.copyValue?.(row.original) ??
|
|
21
|
+
definition.getCellValue?.(row.original) ??
|
|
22
|
+
String(cell.getValue() ?? ""));
|
|
23
|
+
})
|
|
24
|
+
.join("\t"))
|
|
25
|
+
.join("\n");
|
|
26
|
+
}
|
|
27
|
+
export function tableCsv(table, options = {}) {
|
|
28
|
+
const columns = table.getVisibleLeafColumns().flatMap((column) => {
|
|
29
|
+
const definition = column.columnDef;
|
|
30
|
+
if (definition.exportOptions === false)
|
|
31
|
+
return [];
|
|
32
|
+
if (definition.exportOptions)
|
|
33
|
+
return Array.isArray(definition.exportOptions)
|
|
34
|
+
? definition.exportOptions
|
|
35
|
+
: [definition.exportOptions];
|
|
36
|
+
return [
|
|
37
|
+
{
|
|
38
|
+
header: definition.label ??
|
|
39
|
+
(typeof definition.header === "string" ? definition.header : column.id),
|
|
40
|
+
value: (row) => definition.copyValue?.(row) ?? String(column.accessorFn?.(row, 0) ?? ""),
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
});
|
|
44
|
+
const rows = table
|
|
45
|
+
.getRowsInDisplayOrder()
|
|
46
|
+
.filter((row) => !options.selectedOnly || row.getIsSelected());
|
|
47
|
+
return [
|
|
48
|
+
columns.map((column) => csvValue(column.header)).join(","),
|
|
49
|
+
...rows.map((row) => columns.map((column) => csvValue(column.value(row.original))).join(",")),
|
|
50
|
+
].join("\r\n");
|
|
51
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { ColumnDef } from "@tanstack/react-table";
|
|
3
|
+
import type { DataTableFeatures } from "./features.js";
|
|
4
|
+
export type TableColumn<T extends object> = ColumnDef<DataTableFeatures, T> & {
|
|
5
|
+
label?: string;
|
|
6
|
+
align?: "start" | "center" | "end";
|
|
7
|
+
defaultHidden?: boolean;
|
|
8
|
+
pin?: "start" | "end";
|
|
9
|
+
copyValue?: (row: T) => string;
|
|
10
|
+
getCellValue?: (row: T) => string | null;
|
|
11
|
+
exportOptions?: {
|
|
12
|
+
header: string;
|
|
13
|
+
value: (row: T) => string;
|
|
14
|
+
} | {
|
|
15
|
+
header: string;
|
|
16
|
+
value: (row: T) => string;
|
|
17
|
+
}[] | false;
|
|
18
|
+
};
|
|
19
|
+
type Paths<T extends object, D extends unknown[] = []> = D["length"] extends 5 ? never : {
|
|
20
|
+
[K in keyof T & string]: NonNullable<T[K]> extends Date | readonly unknown[] ? K : NonNullable<T[K]> extends object ? K | `${K}.${Paths<NonNullable<T[K]>, [...D, 0]>}` : K;
|
|
21
|
+
}[keyof T & string];
|
|
22
|
+
type At<T extends object, P extends string> = P extends `${infer K}.${infer R}` ? K extends keyof T ? At<NonNullable<T[K]>, R> | Extract<T[K], null | undefined> : never : P extends keyof T ? T[P] : never;
|
|
23
|
+
export interface ValueFormat<V> {
|
|
24
|
+
display: (value: V) => ReactNode;
|
|
25
|
+
text: (value: V) => string;
|
|
26
|
+
align?: "start" | "center" | "end";
|
|
27
|
+
}
|
|
28
|
+
interface ValueOptions<T extends object, V> {
|
|
29
|
+
label: string;
|
|
30
|
+
size?: number;
|
|
31
|
+
minSize?: number;
|
|
32
|
+
maxSize?: number;
|
|
33
|
+
hidden?: boolean;
|
|
34
|
+
pin?: "start" | "end";
|
|
35
|
+
sortable?: boolean;
|
|
36
|
+
format?: ValueFormat<NonNullable<V>>;
|
|
37
|
+
render?: (context: {
|
|
38
|
+
row: T;
|
|
39
|
+
value: V;
|
|
40
|
+
}) => ReactNode;
|
|
41
|
+
copy?: (value: V, row: T) => string;
|
|
42
|
+
export?: false | ((value: V, row: T) => string);
|
|
43
|
+
}
|
|
44
|
+
interface ColumnBuilder<T extends object> {
|
|
45
|
+
accessor<P extends Paths<T>>(path: P, options: ValueOptions<T, At<T, P>>): TableColumn<T>;
|
|
46
|
+
computed<V>(id: string, value: (row: T) => V, options: ValueOptions<T, V>): TableColumn<T>;
|
|
47
|
+
display(id: string, options: {
|
|
48
|
+
label: string;
|
|
49
|
+
render: (row: T) => ReactNode;
|
|
50
|
+
size?: number;
|
|
51
|
+
pin?: "start" | "end";
|
|
52
|
+
}): TableColumn<T>;
|
|
53
|
+
}
|
|
54
|
+
export declare function defineColumns<T extends object>(define: (column: ColumnBuilder<T>) => TableColumn<T>[]): TableColumn<T>[];
|
|
55
|
+
export declare const format: {
|
|
56
|
+
currency(currency: string, locale?: string): ValueFormat<number>;
|
|
57
|
+
number(options?: Intl.NumberFormatOptions, locale?: string): ValueFormat<number>;
|
|
58
|
+
date(options?: Intl.DateTimeFormatOptions, locale?: string): ValueFormat<Date>;
|
|
59
|
+
};
|
|
60
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
function valueColumn(id, value, options) {
|
|
2
|
+
const text = (row) => {
|
|
3
|
+
const v = value(row);
|
|
4
|
+
return v == null ? "" : (options.format?.text(v) ?? String(v));
|
|
5
|
+
};
|
|
6
|
+
return {
|
|
7
|
+
id,
|
|
8
|
+
accessorFn: value,
|
|
9
|
+
header: options.label,
|
|
10
|
+
label: options.label,
|
|
11
|
+
size: options.size,
|
|
12
|
+
minSize: options.minSize,
|
|
13
|
+
maxSize: options.maxSize,
|
|
14
|
+
defaultHidden: options.hidden,
|
|
15
|
+
pin: options.pin,
|
|
16
|
+
align: options.format?.align,
|
|
17
|
+
enableSorting: options.sortable ?? true,
|
|
18
|
+
cell: ({ row }) => {
|
|
19
|
+
const v = value(row.original);
|
|
20
|
+
return options.render
|
|
21
|
+
? options.render({ row: row.original, value: v })
|
|
22
|
+
: v == null
|
|
23
|
+
? "—"
|
|
24
|
+
: (options.format?.display(v) ?? String(v));
|
|
25
|
+
},
|
|
26
|
+
copyValue: options.copy ? (row) => options.copy(value(row), row) : text,
|
|
27
|
+
exportOptions: options.export === false
|
|
28
|
+
? false
|
|
29
|
+
: {
|
|
30
|
+
header: options.label,
|
|
31
|
+
value: typeof options.export === "function"
|
|
32
|
+
? (row) => options.export(value(row), row)
|
|
33
|
+
: text,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function defineColumns(define) {
|
|
38
|
+
return define({
|
|
39
|
+
accessor: (path, options) => valueColumn(path, (row) => path
|
|
40
|
+
.split(".")
|
|
41
|
+
.reduce((v, key) => (v == null ? undefined : v[key]), row), options),
|
|
42
|
+
computed: valueColumn,
|
|
43
|
+
display: (id, options) => ({
|
|
44
|
+
id,
|
|
45
|
+
label: options.label,
|
|
46
|
+
header: options.label,
|
|
47
|
+
size: options.size,
|
|
48
|
+
pin: options.pin,
|
|
49
|
+
enableSorting: false,
|
|
50
|
+
enableCellSelection: false,
|
|
51
|
+
cell: ({ row }) => options.render(row.original),
|
|
52
|
+
exportOptions: false,
|
|
53
|
+
}),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
export const format = {
|
|
57
|
+
currency(currency, locale) {
|
|
58
|
+
// react-doctor-disable-next-line react-doctor/js-hoist-intl -- Formatter factories run when defining columns; their closures reuse this instance for every cell.
|
|
59
|
+
const formatter = new Intl.NumberFormat(locale, { style: "currency", currency });
|
|
60
|
+
return { display: formatter.format, text: formatter.format, align: "end" };
|
|
61
|
+
},
|
|
62
|
+
number(options, locale) {
|
|
63
|
+
// react-doctor-disable-next-line react-doctor/js-hoist-intl -- Formatter factories run when defining columns; their closures reuse this instance for every cell.
|
|
64
|
+
const formatter = new Intl.NumberFormat(locale, options);
|
|
65
|
+
return { display: formatter.format, text: formatter.format, align: "end" };
|
|
66
|
+
},
|
|
67
|
+
date(options, locale) {
|
|
68
|
+
// react-doctor-disable-next-line react-doctor/js-hoist-intl -- Formatter factories run when defining columns; their closures reuse this instance for every cell.
|
|
69
|
+
const formatter = new Intl.DateTimeFormat(locale, options);
|
|
70
|
+
return { display: formatter.format, text: formatter.format };
|
|
71
|
+
},
|
|
72
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { UseDataTableOptions, DataTableInstance } from "./use-data-table.js";
|
|
3
|
+
import type { TableViewProps } from "./table-view.js";
|
|
4
|
+
type Appearance<T extends object> = Omit<TableViewProps<T>, "table"> & {
|
|
5
|
+
toolbar?: ReactNode;
|
|
6
|
+
footer?: ReactNode;
|
|
7
|
+
showColumnSettings?: boolean;
|
|
8
|
+
showPagination?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type DataTableProps<T extends object> = Appearance<T> & (UseDataTableOptions<T> | {
|
|
11
|
+
table: DataTableInstance<T>;
|
|
12
|
+
});
|
|
13
|
+
export declare function DataTable<T extends object>(props: DataTableProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useDataTable } from "./use-data-table.js";
|
|
4
|
+
import { TableView } from "./table-view.js";
|
|
5
|
+
import { TableColumnSettings, TablePagination } from "./table-controls.js";
|
|
6
|
+
function ControlledTable({ table, toolbar, footer, showColumnSettings = true, showPagination = false, ...view }) {
|
|
7
|
+
return (_jsxs("div", { "data-mendy-ui": "", className: "mui-184ddc11e5f9 mui-267171770524", children: [(toolbar || showColumnSettings) && (_jsxs("div", { className: "mui-222f930b8752 mui-faa8a23c68f6 mui-b9677bd1cb66 mui-32c92bb1fde4 mui-074569488cca", children: [_jsx("div", { className: "mui-184ddc11e5f9 mui-7bd5bab6d7f4", children: toolbar }), showColumnSettings && _jsx(TableColumnSettings, { table: table })] })), _jsx(TableView, { table: table, ...view }), showPagination && (_jsx(TablePagination, { table: table, loading: view.status === "loading" || view.refreshing })), footer] }));
|
|
8
|
+
}
|
|
9
|
+
function ConfiguredTable(props) {
|
|
10
|
+
const table = useDataTable(props);
|
|
11
|
+
return (_jsx(ControlledTable, { ...props, table: table, showPagination: props.showPagination ?? props.processing?.pagination === "client" }));
|
|
12
|
+
}
|
|
13
|
+
export function DataTable(props) {
|
|
14
|
+
return "table" in props ? _jsx(ControlledTable, { ...props }) : _jsx(ConfiguredTable, { ...props });
|
|
15
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export declare const tableFeaturesDefault: {
|
|
2
|
+
cellSelectionFeature: import("@tanstack/react-table").TableFeature;
|
|
3
|
+
columnResizingFeature: import("@tanstack/react-table").TableFeature;
|
|
4
|
+
columnOrderingFeature: import("@tanstack/react-table").TableFeature;
|
|
5
|
+
columnPinningFeature: import("@tanstack/react-table").TableFeature;
|
|
6
|
+
columnSizingFeature: import("@tanstack/react-table").TableFeature;
|
|
7
|
+
columnVisibilityFeature: import("@tanstack/react-table").TableFeature;
|
|
8
|
+
columnFilteringFeature: import("@tanstack/react-table").TableFeature;
|
|
9
|
+
columnFacetingFeature: import("@tanstack/react-table").TableFeature;
|
|
10
|
+
globalFilteringFeature: import("@tanstack/react-table").TableFeature;
|
|
11
|
+
rowPaginationFeature: import("@tanstack/react-table").TableFeature;
|
|
12
|
+
rowSelectionFeature: import("@tanstack/react-table").TableFeature;
|
|
13
|
+
rowSortingFeature: import("@tanstack/react-table").TableFeature;
|
|
14
|
+
filteredRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
|
|
15
|
+
sortedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
|
|
16
|
+
paginatedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
|
|
17
|
+
facetedRowModel: (table: import("@tanstack/react-table").Table<any, any>, columnId: string) => () => import("@tanstack/react-table").RowModel<any, any>;
|
|
18
|
+
facetedUniqueValues: (table: import("@tanstack/react-table").Table<import("@tanstack/react-table").TableFeatures, any>, columnId: string) => () => Map<any, number>;
|
|
19
|
+
filterFns: {
|
|
20
|
+
includesString: import("@tanstack/react-table").CreatedFilterFn<any, any>;
|
|
21
|
+
inNumberRange: import("@tanstack/react-table").CreatedFilterFn<any, any>;
|
|
22
|
+
inDateRange: import("@tanstack/react-table").CreatedFilterFn<any, any>;
|
|
23
|
+
equals: import("@tanstack/react-table").CreatedFilterFn<any, any>;
|
|
24
|
+
arrIncludes: import("@tanstack/react-table").CreatedFilterFn<any, any>;
|
|
25
|
+
weakEquals: import("@tanstack/react-table").CreatedFilterFn<any, any>;
|
|
26
|
+
};
|
|
27
|
+
sortFns: {
|
|
28
|
+
alphanumeric: import("@tanstack/react-table").CreatedSortFn<any, any>;
|
|
29
|
+
basic: import("@tanstack/react-table").CreatedSortFn<any, any>;
|
|
30
|
+
datetime: import("@tanstack/react-table").CreatedSortFn<any, any>;
|
|
31
|
+
text: import("@tanstack/react-table").CreatedSortFn<any, any>;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export type DataTableFeatures = typeof tableFeaturesDefault;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { columnFacetingFeature, columnFilteringFeature, cellSelectionFeature, columnResizingFeature, columnOrderingFeature, columnPinningFeature, columnSizingFeature, columnVisibilityFeature, createFacetedRowModel, createFacetedUniqueValues, createFilteredRowModel, createPaginatedRowModel, createSortedRowModel, filterFn_arrIncludes, filterFn_equals, filterFn_inDateRange, filterFn_inNumberRange, filterFn_includesString, filterFn_weakEquals, globalFilteringFeature, rowPaginationFeature, rowSelectionFeature, rowSortingFeature, sortFn_alphanumeric, sortFn_basic, sortFn_datetime, sortFn_text, tableFeatures, } from "@tanstack/react-table";
|
|
2
|
+
export const tableFeaturesDefault = tableFeatures({
|
|
3
|
+
cellSelectionFeature,
|
|
4
|
+
columnResizingFeature,
|
|
5
|
+
columnOrderingFeature,
|
|
6
|
+
columnPinningFeature,
|
|
7
|
+
columnSizingFeature,
|
|
8
|
+
columnVisibilityFeature,
|
|
9
|
+
columnFilteringFeature,
|
|
10
|
+
columnFacetingFeature,
|
|
11
|
+
globalFilteringFeature,
|
|
12
|
+
rowPaginationFeature,
|
|
13
|
+
rowSelectionFeature,
|
|
14
|
+
rowSortingFeature,
|
|
15
|
+
filteredRowModel: createFilteredRowModel(),
|
|
16
|
+
sortedRowModel: createSortedRowModel(),
|
|
17
|
+
paginatedRowModel: createPaginatedRowModel(),
|
|
18
|
+
facetedRowModel: createFacetedRowModel(),
|
|
19
|
+
facetedUniqueValues: createFacetedUniqueValues(),
|
|
20
|
+
// Register the functions used by automatic filter and sort inference.
|
|
21
|
+
filterFns: {
|
|
22
|
+
includesString: filterFn_includesString,
|
|
23
|
+
inNumberRange: filterFn_inNumberRange,
|
|
24
|
+
inDateRange: filterFn_inDateRange,
|
|
25
|
+
equals: filterFn_equals,
|
|
26
|
+
arrIncludes: filterFn_arrIncludes,
|
|
27
|
+
weakEquals: filterFn_weakEquals,
|
|
28
|
+
},
|
|
29
|
+
sortFns: {
|
|
30
|
+
alphanumeric: sortFn_alphanumeric,
|
|
31
|
+
basic: sortFn_basic,
|
|
32
|
+
datetime: sortFn_datetime,
|
|
33
|
+
text: sortFn_text,
|
|
34
|
+
},
|
|
35
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./columns.js";
|
|
2
|
+
export * from "./features.js";
|
|
3
|
+
export * from "./state.js";
|
|
4
|
+
export * from "./use-data-table.js";
|
|
5
|
+
export * from "./use-result-selection.js";
|
|
6
|
+
export * from "./table-view.js";
|
|
7
|
+
export * from "./table-controls.js";
|
|
8
|
+
export * from "./data-table.js";
|
|
9
|
+
export * from "./clipboard.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./columns.js";
|
|
2
|
+
export * from "./features.js";
|
|
3
|
+
export * from "./state.js";
|
|
4
|
+
export * from "./use-data-table.js";
|
|
5
|
+
export * from "./use-result-selection.js";
|
|
6
|
+
export * from "./table-view.js";
|
|
7
|
+
export * from "./table-controls.js";
|
|
8
|
+
export * from "./data-table.js";
|
|
9
|
+
export * from "./clipboard.js";
|