@mendylanda/ui 0.2.0 → 0.3.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/class-names.js +1 -1
- package/dist/styles.css +166 -0
- package/dist/styles.tailwind3.css +166 -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 +95 -0
- package/dist/table/table-feedback.d.ts +7 -0
- package/dist/table/table-feedback.js +11 -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 +110 -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);
|
|
@@ -229,6 +268,9 @@
|
|
|
229
268
|
.mui-1f061e70178e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
230
269
|
max-height: var(--radix-dropdown-menu-content-available-height);
|
|
231
270
|
}
|
|
271
|
+
.mui-b057efba3283:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
272
|
+
max-height: calc(var(--spacing) * 96);
|
|
273
|
+
}
|
|
232
274
|
.mui-80baa5d03af7:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
233
275
|
max-height: calc(var(--filter-menu-height) - 2px);
|
|
234
276
|
}
|
|
@@ -256,9 +298,18 @@
|
|
|
256
298
|
.mui-d48fe95d4da8:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
257
299
|
width: var(--cell-size);
|
|
258
300
|
}
|
|
301
|
+
.mui-d4ea834145ae:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
302
|
+
width: calc(var(--spacing) * 2);
|
|
303
|
+
}
|
|
259
304
|
.mui-8867d85ed290:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
260
305
|
width: calc(var(--spacing) * 8);
|
|
261
306
|
}
|
|
307
|
+
.mui-4ac4ec8dfbce:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
308
|
+
width: calc(var(--spacing) * 40);
|
|
309
|
+
}
|
|
310
|
+
.mui-72b37c1a040d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
311
|
+
width: calc(var(--spacing) * 64);
|
|
312
|
+
}
|
|
262
313
|
.mui-37535002f0f7:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
263
314
|
width: calc(var(--spacing) * 72);
|
|
264
315
|
}
|
|
@@ -295,6 +346,9 @@
|
|
|
295
346
|
.mui-e9ab1547c94d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
296
347
|
min-width: 8rem;
|
|
297
348
|
}
|
|
349
|
+
.mui-2bf6510f1330:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
350
|
+
min-width: 100%;
|
|
351
|
+
}
|
|
298
352
|
.mui-7bd5bab6d7f4:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
299
353
|
flex: 1;
|
|
300
354
|
}
|
|
@@ -323,9 +377,15 @@
|
|
|
323
377
|
.mui-7b3cd77eb999:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
324
378
|
animation: var(--animate-pulse);
|
|
325
379
|
}
|
|
380
|
+
.mui-2194d094b585:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
381
|
+
cursor: col-resize;
|
|
382
|
+
}
|
|
326
383
|
.mui-d343f41ba73e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
327
384
|
cursor: default;
|
|
328
385
|
}
|
|
386
|
+
.mui-739a9a000791:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
387
|
+
touch-action: none;
|
|
388
|
+
}
|
|
329
389
|
.mui-acd532d8913e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
330
390
|
resize: both;
|
|
331
391
|
}
|
|
@@ -359,6 +419,9 @@
|
|
|
359
419
|
.mui-a503dd374cca:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
360
420
|
justify-content: center;
|
|
361
421
|
}
|
|
422
|
+
.mui-307644c34db6:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
423
|
+
justify-content: flex-end;
|
|
424
|
+
}
|
|
362
425
|
.mui-c62ec162662e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
363
426
|
justify-content: flex-start;
|
|
364
427
|
}
|
|
@@ -391,11 +454,21 @@
|
|
|
391
454
|
margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--mendy-tw-space-y-reverse)));
|
|
392
455
|
}
|
|
393
456
|
}
|
|
457
|
+
.mui-b8ceaab118a4:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
458
|
+
:where(& > :not(:last-child)) {
|
|
459
|
+
--mendy-tw-space-y-reverse: 0;
|
|
460
|
+
margin-block-start: calc(calc(var(--spacing) * 3) * var(--mendy-tw-space-y-reverse));
|
|
461
|
+
margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--mendy-tw-space-y-reverse)));
|
|
462
|
+
}
|
|
463
|
+
}
|
|
394
464
|
.mui-5a3a4ee420c2:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
395
465
|
overflow: hidden;
|
|
396
466
|
text-overflow: ellipsis;
|
|
397
467
|
white-space: nowrap;
|
|
398
468
|
}
|
|
469
|
+
.mui-1a26a0d28420:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
470
|
+
overflow: auto;
|
|
471
|
+
}
|
|
399
472
|
.mui-d5111d0e9f48:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
400
473
|
overflow: hidden;
|
|
401
474
|
}
|
|
@@ -411,6 +484,9 @@
|
|
|
411
484
|
.mui-998780cdef87:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
412
485
|
overscroll-behavior: contain;
|
|
413
486
|
}
|
|
487
|
+
.mui-01024deec75e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
488
|
+
border-radius: 0.25rem;
|
|
489
|
+
}
|
|
414
490
|
.mui-b005d61d0953:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
415
491
|
border-radius: calc(infinity * 1px);
|
|
416
492
|
}
|
|
@@ -493,6 +569,12 @@
|
|
|
493
569
|
.mui-965cf6587342:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
494
570
|
background-color: var(--destructive, #dc2626);
|
|
495
571
|
}
|
|
572
|
+
.mui-047624ec0c39:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
573
|
+
background-color: var(--color-green-100);
|
|
574
|
+
}
|
|
575
|
+
.mui-87ecb59f2d2d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
576
|
+
background-color: var(--muted, #f5f5f5);
|
|
577
|
+
}
|
|
496
578
|
.mui-810ae775809b:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
497
579
|
background-color: var(--muted-foreground, #737373);
|
|
498
580
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -523,9 +605,18 @@
|
|
|
523
605
|
.mui-094f5333853b:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
524
606
|
padding: calc(var(--spacing) * 3);
|
|
525
607
|
}
|
|
608
|
+
.mui-c432836760e3:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
609
|
+
padding: calc(var(--spacing) * 6);
|
|
610
|
+
}
|
|
611
|
+
.mui-c7902d77ad80:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
612
|
+
padding: calc(var(--spacing) * 8);
|
|
613
|
+
}
|
|
526
614
|
.mui-56b8f5e0fb12:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
527
615
|
padding-inline: var(--cell-size);
|
|
528
616
|
}
|
|
617
|
+
.mui-16e909e6f01d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
618
|
+
padding-inline: calc(var(--spacing) * 0);
|
|
619
|
+
}
|
|
529
620
|
.mui-1da2e8f173c5:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
530
621
|
padding-inline: calc(var(--spacing) * 1.5);
|
|
531
622
|
}
|
|
@@ -580,6 +671,9 @@
|
|
|
580
671
|
.mui-05ab12448317:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
581
672
|
text-align: center;
|
|
582
673
|
}
|
|
674
|
+
.mui-10558dbb3a24:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
675
|
+
text-align: end;
|
|
676
|
+
}
|
|
583
677
|
.mui-e9347b78185f:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
584
678
|
text-align: start;
|
|
585
679
|
}
|
|
@@ -756,6 +850,13 @@
|
|
|
756
850
|
.mui-14bd99410890:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
757
851
|
unicode-bidi: isolate;
|
|
758
852
|
}
|
|
853
|
+
.mui-97b1c00ff005:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
854
|
+
&:is(:where(.mui-ad936fcbed63):hover *) {
|
|
855
|
+
@media (hover: hover) {
|
|
856
|
+
background-color: var(--accent, #f5f5f5);
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
}
|
|
759
860
|
.mui-9af9a4182597:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
760
861
|
&:is(:where(.mui-ad936fcbed63)[data-disabled="true"] *) {
|
|
761
862
|
pointer-events: none;
|
|
@@ -792,6 +893,11 @@
|
|
|
792
893
|
--mendy-tw-ring-color: var(--ring, #737373);
|
|
793
894
|
}
|
|
794
895
|
}
|
|
896
|
+
.mui-e6020023567a:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
897
|
+
&:is(:where(.mui-ad936fcbed63)[data-highlighted="true"] *) {
|
|
898
|
+
background-color: var(--accent, #f5f5f5);
|
|
899
|
+
}
|
|
900
|
+
}
|
|
795
901
|
.mui-f0ee83167878:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
796
902
|
&:is(:where(.mui-2ffc1d06387e):disabled ~ *) {
|
|
797
903
|
cursor: not-allowed;
|
|
@@ -836,6 +942,12 @@
|
|
|
836
942
|
border-inline-start-width: 0px;
|
|
837
943
|
}
|
|
838
944
|
}
|
|
945
|
+
.mui-beeef6663906:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
946
|
+
&:last-child {
|
|
947
|
+
border-inline-end-style: var(--mendy-tw-border-style);
|
|
948
|
+
border-inline-end-width: 0px;
|
|
949
|
+
}
|
|
950
|
+
}
|
|
839
951
|
.mui-37ad15a95595:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
840
952
|
&:hover {
|
|
841
953
|
@media (hover: hover) {
|
|
@@ -843,6 +955,16 @@
|
|
|
843
955
|
}
|
|
844
956
|
}
|
|
845
957
|
}
|
|
958
|
+
.mui-63b29dace366:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
959
|
+
&:hover {
|
|
960
|
+
@media (hover: hover) {
|
|
961
|
+
background-color: var(--accent, #f5f5f5);
|
|
962
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
963
|
+
background-color: color-mix(in oklab, var(--accent, #f5f5f5) 50%, transparent);
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
}
|
|
846
968
|
.mui-bb6a4b3e902d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
847
969
|
&:hover {
|
|
848
970
|
@media (hover: hover) {
|
|
@@ -853,6 +975,16 @@
|
|
|
853
975
|
}
|
|
854
976
|
}
|
|
855
977
|
}
|
|
978
|
+
.mui-4273133a876a:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
979
|
+
&:hover {
|
|
980
|
+
@media (hover: hover) {
|
|
981
|
+
background-color: var(--primary, #171717);
|
|
982
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
983
|
+
background-color: color-mix(in oklab, var(--primary, #171717) 20%, transparent);
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
}
|
|
856
988
|
.mui-af9ea085901b:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
857
989
|
&:hover {
|
|
858
990
|
@media (hover: hover) {
|
|
@@ -923,6 +1055,14 @@
|
|
|
923
1055
|
border-color: var(--ring, #737373);
|
|
924
1056
|
}
|
|
925
1057
|
}
|
|
1058
|
+
.mui-2f669cfad5aa:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1059
|
+
&:focus-visible {
|
|
1060
|
+
background-color: var(--primary, #171717);
|
|
1061
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1062
|
+
background-color: color-mix(in oklab, var(--primary, #171717) 20%, transparent);
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
}
|
|
926
1066
|
.mui-39be5a15b766:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
927
1067
|
&:focus-visible {
|
|
928
1068
|
--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 +1094,28 @@
|
|
|
954
1094
|
}
|
|
955
1095
|
}
|
|
956
1096
|
}
|
|
1097
|
+
.mui-a47d391255f3:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1098
|
+
&:focus-visible {
|
|
1099
|
+
outline-style: var(--mendy-tw-outline-style);
|
|
1100
|
+
outline-width: 1px;
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
957
1103
|
.mui-1df9125eebaf:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
958
1104
|
&:focus-visible {
|
|
959
1105
|
outline-style: var(--mendy-tw-outline-style);
|
|
960
1106
|
outline-width: 1px;
|
|
961
1107
|
}
|
|
962
1108
|
}
|
|
1109
|
+
.mui-a8719ed8b095:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1110
|
+
&:focus-visible {
|
|
1111
|
+
outline-offset: calc(2px * -1);
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
.mui-2b1c7d88acff:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1115
|
+
&:focus-visible {
|
|
1116
|
+
outline-color: var(--primary, #171717);
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
963
1119
|
.mui-223daa83ed2d:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
964
1120
|
&:focus-visible {
|
|
965
1121
|
outline-color: var(--ring, #737373);
|
|
@@ -1073,6 +1229,11 @@
|
|
|
1073
1229
|
opacity: 50%;
|
|
1074
1230
|
}
|
|
1075
1231
|
}
|
|
1232
|
+
.mui-9d7d1760cd8e:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1233
|
+
&[data-highlighted="true"] {
|
|
1234
|
+
background-color: var(--accent, #f5f5f5);
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1076
1237
|
.mui-6fa6a8ade7c4:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1077
1238
|
&[data-inset] {
|
|
1078
1239
|
padding-left: calc(var(--spacing) * 8);
|
|
@@ -1305,6 +1466,11 @@
|
|
|
1305
1466
|
rotate: 180deg;
|
|
1306
1467
|
}
|
|
1307
1468
|
}
|
|
1469
|
+
.mui-d254c96aea74:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1470
|
+
&:is(.dark *) {
|
|
1471
|
+
background-color: var(--color-green-950);
|
|
1472
|
+
}
|
|
1473
|
+
}
|
|
1308
1474
|
.mui-9daa2369a41b:where([data-mendy-ui], [data-mendy-ui] *) {
|
|
1309
1475
|
&:is(.dark *) {
|
|
1310
1476
|
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";
|