lynote-ui 0.0.9 → 0.0.10

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/dist/style.css CHANGED
@@ -5,6 +5,11 @@
5
5
  --tw-translate-x: 0;
6
6
  --tw-translate-y: 0;
7
7
  --tw-translate-z: 0;
8
+ --tw-rotate-x: initial;
9
+ --tw-rotate-y: initial;
10
+ --tw-rotate-z: initial;
11
+ --tw-skew-x: initial;
12
+ --tw-skew-y: initial;
8
13
  --tw-space-y-reverse: 0;
9
14
  --tw-space-x-reverse: 0;
10
15
  --tw-border-style: solid;
@@ -569,6 +574,10 @@
569
574
  left: 50%;
570
575
  }
571
576
 
577
+ .left-2\.5 {
578
+ left: calc(var(--spacing) * 2.5);
579
+ }
580
+
572
581
  .isolate {
573
582
  isolation: isolate;
574
583
  }
@@ -743,10 +752,22 @@
743
752
  margin-top: auto;
744
753
  }
745
754
 
755
+ .mr-5 {
756
+ margin-right: calc(var(--spacing) * 5);
757
+ }
758
+
759
+ .-mb-1 {
760
+ margin-bottom: calc(var(--spacing) * -1);
761
+ }
762
+
746
763
  .-mb-4 {
747
764
  margin-bottom: calc(var(--spacing) * -4);
748
765
  }
749
766
 
767
+ .mb-1 {
768
+ margin-bottom: calc(var(--spacing) * 1);
769
+ }
770
+
750
771
  .mb-1\.5 {
751
772
  margin-bottom: calc(var(--spacing) * 1.5);
752
773
  }
@@ -937,6 +958,11 @@
937
958
  height: calc(var(--spacing) * 16);
938
959
  }
939
960
 
961
+ .size-\[1em\] {
962
+ width: 1em;
963
+ height: 1em;
964
+ }
965
+
940
966
  .size-auto {
941
967
  width: auto;
942
968
  height: auto;
@@ -1063,6 +1089,12 @@
1063
1089
  height: calc(100% - 1px);
1064
1090
  }
1065
1091
 
1092
+ .h-\[stretch\] {
1093
+ height: -webkit-fill-available;
1094
+ height: -moz-available;
1095
+ height: stretch;
1096
+ }
1097
+
1066
1098
  .h-auto {
1067
1099
  height: auto;
1068
1100
  }
@@ -1191,10 +1223,6 @@
1191
1223
  width: calc(var(--spacing) * 5);
1192
1224
  }
1193
1225
 
1194
- .w-8 {
1195
- width: calc(var(--spacing) * 8);
1196
- }
1197
-
1198
1226
  .w-9 {
1199
1227
  width: calc(var(--spacing) * 9);
1200
1228
  }
@@ -1419,6 +1447,10 @@
1419
1447
  min-width: calc(var(--spacing) * 16);
1420
1448
  }
1421
1449
 
1450
+ .min-w-20 {
1451
+ min-width: calc(var(--spacing) * 20);
1452
+ }
1453
+
1422
1454
  .min-w-32 {
1423
1455
  min-width: calc(var(--spacing) * 32);
1424
1456
  }
@@ -1427,6 +1459,10 @@
1427
1459
  min-width: calc(var(--spacing) * 36);
1428
1460
  }
1429
1461
 
1462
+ .min-w-56 {
1463
+ min-width: calc(var(--spacing) * 56);
1464
+ }
1465
+
1430
1466
  .min-w-60 {
1431
1467
  min-width: calc(var(--spacing) * 60);
1432
1468
  }
@@ -1443,6 +1479,10 @@
1443
1479
  min-width: calc(var(--anchor-width) + calc(var(--spacing) * 7));
1444
1480
  }
1445
1481
 
1482
+ .min-w-max {
1483
+ min-width: max-content;
1484
+ }
1485
+
1446
1486
  .flex-1 {
1447
1487
  flex: 1;
1448
1488
  }
@@ -1513,6 +1553,10 @@
1513
1553
  rotate: -12deg;
1514
1554
  }
1515
1555
 
1556
+ .rotate-0 {
1557
+ rotate: 0deg;
1558
+ }
1559
+
1516
1560
  .rotate-45 {
1517
1561
  rotate: 45deg;
1518
1562
  }
@@ -1521,6 +1565,10 @@
1521
1565
  rotate: 90deg;
1522
1566
  }
1523
1567
 
1568
+ .transform {
1569
+ transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, );
1570
+ }
1571
+
1524
1572
  .animate-caret-blink {
1525
1573
  animation: 1.25s ease-out infinite caret-blink;
1526
1574
  }
@@ -1537,10 +1585,18 @@
1537
1585
  animation: var(--animate-spin);
1538
1586
  }
1539
1587
 
1588
+ .cursor-col-resize {
1589
+ cursor: col-resize;
1590
+ }
1591
+
1540
1592
  .cursor-default {
1541
1593
  cursor: default;
1542
1594
  }
1543
1595
 
1596
+ .cursor-grab {
1597
+ cursor: grab;
1598
+ }
1599
+
1544
1600
  .cursor-pointer {
1545
1601
  cursor: pointer;
1546
1602
  }
@@ -2073,6 +2129,16 @@
2073
2129
  }
2074
2130
  }
2075
2131
 
2132
+ .bg-muted\/70 {
2133
+ background-color: var(--muted);
2134
+ }
2135
+
2136
+ @supports (color: color-mix(in lab, red, red)) {
2137
+ .bg-muted\/70 {
2138
+ background-color: color-mix(in oklab, var(--muted) 70%, transparent);
2139
+ }
2140
+ }
2141
+
2076
2142
  .bg-popover {
2077
2143
  background-color: var(--popover);
2078
2144
  }
@@ -2217,6 +2283,10 @@
2217
2283
  padding-block: calc(var(--spacing) * 2.5);
2218
2284
  }
2219
2285
 
2286
+ .py-3 {
2287
+ padding-block: calc(var(--spacing) * 3);
2288
+ }
2289
+
2220
2290
  .py-4 {
2221
2291
  padding-block: calc(var(--spacing) * 4);
2222
2292
  }
@@ -2225,10 +2295,6 @@
2225
2295
  padding-block: calc(var(--spacing) * 6);
2226
2296
  }
2227
2297
 
2228
- .py-10 {
2229
- padding-block: calc(var(--spacing) * 10);
2230
- }
2231
-
2232
2298
  .py-12 {
2233
2299
  padding-block: calc(var(--spacing) * 12);
2234
2300
  }
@@ -2325,6 +2391,10 @@
2325
2391
  padding-left: calc(var(--spacing) * 7);
2326
2392
  }
2327
2393
 
2394
+ .pl-8 {
2395
+ padding-left: calc(var(--spacing) * 8);
2396
+ }
2397
+
2328
2398
  .text-center {
2329
2399
  text-align: center;
2330
2400
  }
@@ -2563,6 +2633,10 @@
2563
2633
  text-transform: capitalize;
2564
2634
  }
2565
2635
 
2636
+ .normal-case {
2637
+ text-transform: none;
2638
+ }
2639
+
2566
2640
  .italic {
2567
2641
  font-style: italic;
2568
2642
  }
@@ -2592,6 +2666,10 @@
2592
2666
  opacity: .5;
2593
2667
  }
2594
2668
 
2669
+ .opacity-80 {
2670
+ opacity: .8;
2671
+ }
2672
+
2595
2673
  .opacity-100 {
2596
2674
  opacity: 1;
2597
2675
  }
@@ -2719,6 +2797,11 @@
2719
2797
  filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );
2720
2798
  }
2721
2799
 
2800
+ .invert {
2801
+ --tw-invert: invert(100%);
2802
+ filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );
2803
+ }
2804
+
2722
2805
  .filter {
2723
2806
  filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );
2724
2807
  }
@@ -3374,11 +3457,21 @@
3374
3457
  inset-inline-start: 50%;
3375
3458
  }
3376
3459
 
3460
+ .after\:top-0:after {
3461
+ content: var(--tw-content);
3462
+ top: calc(var(--spacing) * 0);
3463
+ }
3464
+
3377
3465
  .after\:right-0:after {
3378
3466
  content: var(--tw-content);
3379
3467
  right: calc(var(--spacing) * 0);
3380
3468
  }
3381
3469
 
3470
+ .after\:bottom-0:after {
3471
+ content: var(--tw-content);
3472
+ bottom: calc(var(--spacing) * 0);
3473
+ }
3474
+
3382
3475
  .after\:left-0:after {
3383
3476
  content: var(--tw-content);
3384
3477
  left: calc(var(--spacing) * 0);
@@ -3404,12 +3497,29 @@
3404
3497
  width: 2px;
3405
3498
  }
3406
3499
 
3500
+ .after\:w-\[30px\]:after {
3501
+ content: var(--tw-content);
3502
+ width: 30px;
3503
+ }
3504
+
3407
3505
  .after\:-translate-x-1\/2:after {
3408
3506
  content: var(--tw-content);
3409
3507
  --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
3410
3508
  translate: var(--tw-translate-x) var(--tw-translate-y);
3411
3509
  }
3412
3510
 
3511
+ .after\:-translate-x-full:after {
3512
+ content: var(--tw-content);
3513
+ --tw-translate-x: -100%;
3514
+ translate: var(--tw-translate-x) var(--tw-translate-y);
3515
+ }
3516
+
3517
+ .after\:translate-x-full:after {
3518
+ content: var(--tw-content);
3519
+ --tw-translate-x: 100%;
3520
+ translate: var(--tw-translate-x) var(--tw-translate-y);
3521
+ }
3522
+
3413
3523
  .after\:rounded-full:after {
3414
3524
  content: var(--tw-content);
3415
3525
  border-radius: 3.40282e38px;
@@ -3446,6 +3556,37 @@
3446
3556
  mix-blend-mode: darken;
3447
3557
  }
3448
3558
 
3559
+ .after\:shadow-\[inset_-15px_0_8px_-8px_\#0000000d\]:after {
3560
+ content: var(--tw-content);
3561
+ --tw-shadow: inset -15px 0 8px -8px var(--tw-shadow-color, #0000000d);
3562
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3563
+ }
3564
+
3565
+ .after\:shadow-\[inset_-15px_0_8px_-8px_\#00000000\]:after {
3566
+ content: var(--tw-content);
3567
+ --tw-shadow: inset -15px 0 8px -8px var(--tw-shadow-color, #0000);
3568
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3569
+ }
3570
+
3571
+ .after\:shadow-\[inset_15px_0_8px_-8px_\#0000000d\]:after {
3572
+ content: var(--tw-content);
3573
+ --tw-shadow: inset 15px 0 8px -8px var(--tw-shadow-color, #0000000d);
3574
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3575
+ }
3576
+
3577
+ .after\:shadow-\[inset_15px_0_8px_-8px_\#00000000\]:after {
3578
+ content: var(--tw-content);
3579
+ --tw-shadow: inset 15px 0 8px -8px var(--tw-shadow-color, #0000);
3580
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3581
+ }
3582
+
3583
+ .after\:transition-all:after {
3584
+ content: var(--tw-content);
3585
+ transition-property: all;
3586
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
3587
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
3588
+ }
3589
+
3449
3590
  .after\:transition-opacity:after {
3450
3591
  content: var(--tw-content);
3451
3592
  transition-property: opacity;
@@ -3453,6 +3594,11 @@
3453
3594
  transition-duration: var(--tw-duration, var(--default-transition-duration));
3454
3595
  }
3455
3596
 
3597
+ .after\:content-\[\'\'\]:after {
3598
+ --tw-content: "";
3599
+ content: var(--tw-content);
3600
+ }
3601
+
3456
3602
  .group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible="offcanvas"] *):after {
3457
3603
  content: var(--tw-content);
3458
3604
  left: 100%;
@@ -3559,6 +3705,16 @@
3559
3705
  }
3560
3706
  }
3561
3707
 
3708
+ .hover\:bg-muted\/30:hover {
3709
+ background-color: var(--muted);
3710
+ }
3711
+
3712
+ @supports (color: color-mix(in lab, red, red)) {
3713
+ .hover\:bg-muted\/30:hover {
3714
+ background-color: color-mix(in oklab, var(--muted) 30%, transparent);
3715
+ }
3716
+ }
3717
+
3562
3718
  .hover\:bg-muted\/50:hover {
3563
3719
  background-color: var(--muted);
3564
3720
  }
@@ -3569,6 +3725,16 @@
3569
3725
  }
3570
3726
  }
3571
3727
 
3728
+ .hover\:bg-primary\/40:hover {
3729
+ background-color: var(--primary);
3730
+ }
3731
+
3732
+ @supports (color: color-mix(in lab, red, red)) {
3733
+ .hover\:bg-primary\/40:hover {
3734
+ background-color: color-mix(in oklab, var(--primary) 40%, transparent);
3735
+ }
3736
+ }
3737
+
3572
3738
  .hover\:bg-secondary\/80:hover {
3573
3739
  background-color: var(--secondary);
3574
3740
  }
@@ -3731,6 +3897,11 @@
3731
3897
  outline-color: var(--ring);
3732
3898
  }
3733
3899
 
3900
+ .focus-visible\:outline-none:focus-visible {
3901
+ --tw-outline-style: none;
3902
+ outline-style: none;
3903
+ }
3904
+
3734
3905
  :is(.\*\:focus-visible\:relative > *):focus-visible {
3735
3906
  position: relative;
3736
3907
  }
@@ -3744,6 +3915,10 @@
3744
3915
  border-color: var(--ring);
3745
3916
  }
3746
3917
 
3918
+ .active\:cursor-grabbing:active {
3919
+ cursor: grabbing;
3920
+ }
3921
+
3747
3922
  .active\:bg-sidebar-accent:active {
3748
3923
  background-color: var(--sidebar-accent);
3749
3924
  }
@@ -4454,7 +4629,7 @@
4454
4629
  color: var(--primary-foreground);
4455
4630
  }
4456
4631
 
4457
- .data-\[selected-single\=true\]\:bg-primary[data-selected-single="true"] {
4632
+ .data-\[resizing\=true\]\:bg-primary[data-resizing="true"], .data-\[selected-single\=true\]\:bg-primary[data-selected-single="true"] {
4458
4633
  background-color: var(--primary);
4459
4634
  }
4460
4635
 
@@ -5317,6 +5492,18 @@
5317
5492
  mix-blend-mode: lighten;
5318
5493
  }
5319
5494
 
5495
+ .dark\:after\:shadow-\[inset_-15px_0_8px_-8px_\#ffffff0d\]:is(.dark *):after {
5496
+ content: var(--tw-content);
5497
+ --tw-shadow: inset -15px 0 8px -8px var(--tw-shadow-color, #ffffff0d);
5498
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
5499
+ }
5500
+
5501
+ .dark\:after\:shadow-\[inset_15px_0_8px_-8px_\#ffffff0d\]:is(.dark *):after {
5502
+ content: var(--tw-content);
5503
+ --tw-shadow: inset 15px 0 8px -8px var(--tw-shadow-color, #ffffff0d);
5504
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
5505
+ }
5506
+
5320
5507
  @media (hover: hover) {
5321
5508
  .dark\:hover\:bg-destructive\/30:is(.dark *):hover {
5322
5509
  background-color: var(--destructive);
@@ -5976,6 +6163,11 @@
5976
6163
  height: calc(var(--spacing) * 4);
5977
6164
  }
5978
6165
 
6166
+ .\[\&_td\]\:border-r td, .\[\&_th\]\:border-r th {
6167
+ border-right-style: var(--tw-border-style);
6168
+ border-right-width: 1px;
6169
+ }
6170
+
5979
6171
  .\[\&_tr\]\:border-b tr {
5980
6172
  border-bottom-style: var(--tw-border-style);
5981
6173
  border-bottom-width: 1px;
@@ -5986,6 +6178,11 @@
5986
6178
  border-width: 0;
5987
6179
  }
5988
6180
 
6181
+ .\[\&_tr\>\*\:last-child\]\:border-r-0 tr > :last-child {
6182
+ border-right-style: var(--tw-border-style);
6183
+ border-right-width: 0;
6184
+ }
6185
+
5989
6186
  .\[\&\+\[data-slot\=item-content\]\]\:flex-none + [data-slot="item-content"] {
5990
6187
  flex: none;
5991
6188
  }
@@ -6588,6 +6785,31 @@
6588
6785
  initial-value: 0;
6589
6786
  }
6590
6787
 
6788
+ @property --tw-rotate-x {
6789
+ syntax: "*";
6790
+ inherits: false
6791
+ }
6792
+
6793
+ @property --tw-rotate-y {
6794
+ syntax: "*";
6795
+ inherits: false
6796
+ }
6797
+
6798
+ @property --tw-rotate-z {
6799
+ syntax: "*";
6800
+ inherits: false
6801
+ }
6802
+
6803
+ @property --tw-skew-x {
6804
+ syntax: "*";
6805
+ inherits: false
6806
+ }
6807
+
6808
+ @property --tw-skew-y {
6809
+ syntax: "*";
6810
+ inherits: false
6811
+ }
6812
+
6591
6813
  @property --tw-space-y-reverse {
6592
6814
  syntax: "*";
6593
6815
  inherits: false;
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ declare function Table({ className, ...props }: React.ComponentProps<"table">): import("react/jsx-runtime").JSX.Element;
3
+ declare function TableHeader({ className, ...props }: React.ComponentProps<"thead">): import("react/jsx-runtime").JSX.Element;
4
+ declare function TableBody({ className, ...props }: React.ComponentProps<"tbody">): import("react/jsx-runtime").JSX.Element;
5
+ declare function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">): import("react/jsx-runtime").JSX.Element;
6
+ declare function TableRow({ className, ...props }: React.ComponentProps<"tr">): import("react/jsx-runtime").JSX.Element;
7
+ declare function TableHead({ className, ...props }: React.ComponentProps<"th">): import("react/jsx-runtime").JSX.Element;
8
+ declare function TableCell({ className, ...props }: React.ComponentProps<"td">): import("react/jsx-runtime").JSX.Element;
9
+ declare function TableCaption({ className, ...props }: React.ComponentProps<"caption">): import("react/jsx-runtime").JSX.Element;
10
+ export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, };
@@ -0,0 +1,12 @@
1
+ import { Header } from '@tanstack/react-table';
2
+ import { ScrollShadowState } from '../type';
3
+ type DataTableColumnHeaderProps<TData> = {
4
+ header: Header<TData, unknown>;
5
+ resizable?: boolean;
6
+ scrollShadow: ScrollShadowState;
7
+ };
8
+ /**
9
+ * 表头单元格,封装排序、列宽拖拽、固定列阴影
10
+ */
11
+ export declare function DataTableColumnHeader<TData>({ header, resizable, scrollShadow, }: DataTableColumnHeaderProps<TData>): import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,12 @@
1
+ import { Table as TanstackTable } from '@tanstack/react-table';
2
+ type DataTablePaginationProps<TData> = {
3
+ table: TanstackTable<TData>;
4
+ pageSizeOptions?: number[];
5
+ /** 是否显示已选择行数,默认 true */
6
+ showSelectionCount?: boolean;
7
+ };
8
+ /**
9
+ * 表格分页栏:总行数 / 每页数量 / 页码跳转
10
+ */
11
+ export declare function DataTablePagination<TData>({ table, pageSizeOptions, showSelectionCount, }: DataTablePaginationProps<TData>): import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,23 @@
1
+ import { Table as TanstackTable } from '@tanstack/react-table';
2
+ import { ReactNode } from 'react';
3
+ type DataTableToolbarProps<TData> = {
4
+ table: TanstackTable<TData>;
5
+ /** 绑定搜索输入框的列 id;留空则使用全局过滤 */
6
+ searchColumnId?: string;
7
+ /** 输入框 placeholder */
8
+ searchPlaceholder?: string;
9
+ /** 是否展示视图配置(列显隐),默认 true */
10
+ showViewOptions?: boolean;
11
+ /** 是否启用列拖拽 */
12
+ enableColumnOrdering?: boolean;
13
+ /** 是否启用列固定 */
14
+ enableColumnPinning?: boolean;
15
+ /** 工具栏右侧追加内容 */
16
+ extra?: ReactNode;
17
+ className?: string;
18
+ };
19
+ /**
20
+ * 表格工具栏:搜索 + 视图配置 + 自定义扩展
21
+ */
22
+ export declare function DataTableToolbar<TData>({ table, searchColumnId, searchPlaceholder, showViewOptions, enableColumnOrdering, enableColumnPinning, extra, className, }: DataTableToolbarProps<TData>): import("react/jsx-runtime").JSX.Element;
23
+ export {};
@@ -0,0 +1,18 @@
1
+ import { Table as TanstackTable } from '@tanstack/react-table';
2
+ import { ReactElement } from 'react';
3
+ type DataTableViewOptionsProps<TData> = {
4
+ table: TanstackTable<TData>;
5
+ /** 是否允许列拖拽排序,默认 false */
6
+ enableOrdering?: boolean;
7
+ /** 是否允许列固定操作,默认 false */
8
+ enablePinning?: boolean;
9
+ /** 触发按钮自定义,默认 "视图" */
10
+ trigger?: ReactElement;
11
+ };
12
+ /**
13
+ * 列显隐 / 排序 / 固定 设置面板
14
+ *
15
+ * 通过 DropdownMenu 弹出列表,内置 DnD-Kit 排序与固定按钮
16
+ */
17
+ export declare function DataTableViewOptions<TData>({ table, enableOrdering, enablePinning, trigger, }: DataTableViewOptionsProps<TData>): import("react/jsx-runtime").JSX.Element;
18
+ export {};
@@ -0,0 +1,19 @@
1
+ import { Table as TanstackTable } from '@tanstack/react-table';
2
+ import { ReactNode } from 'react';
3
+ import { DataTableVirtualOptions } from '../type';
4
+ type DataTableVirtualBodyProps<TData> = {
5
+ table: TanstackTable<TData>;
6
+ loading?: boolean;
7
+ empty?: ReactNode;
8
+ options?: DataTableVirtualOptions;
9
+ /** 是否显示纵向边框 */
10
+ bordered?: boolean;
11
+ className?: string;
12
+ };
13
+ /**
14
+ * 行虚拟滚动表格:使用 grid 布局 + `useVirtualizer` 仅渲染可视区域
15
+ *
16
+ * 因表格采用 grid 布局,固定列 / 多级表头暂不支持
17
+ */
18
+ export declare function DataTableVirtualBody<TData>({ table, loading, empty, options, bordered, className, }: DataTableVirtualBodyProps<TData>): import("react/jsx-runtime").JSX.Element;
19
+ export {};
@@ -0,0 +1,15 @@
1
+ import { Table as TanstackTable } from '@tanstack/react-table';
2
+ import { ReactElement, RefAttributes } from 'react';
3
+ import { DataTablePropsType } from '../type';
4
+ /**
5
+ * DataTable 暴露给 ref 的命令式 handle —— 就是底层 TanStack table 实例
6
+ *
7
+ * 通过 `ref` 即可拿到完整的 TanStack `table` API:`setPageIndex`、`getSelectedRowModel`、
8
+ * `resetSorting`、`getState` 等。配合受控状态使用更顺手
9
+ */
10
+ export type DataTableHandle<TData> = TanstackTable<TData>;
11
+ /**
12
+ * forwardRef 包装,泛型用 cast 保留 —— 否则会被 forwardRef 的签名擦除成 unknown
13
+ */
14
+ declare const DataTable: <TData, TValue = unknown>(props: DataTablePropsType<TData, TValue> & RefAttributes<DataTableHandle<TData>>) => ReactElement | null;
15
+ export { DataTable };
@@ -0,0 +1,16 @@
1
+ import { DraggableAttributes, DraggableSyntheticListeners } from '@dnd-kit/core';
2
+ import { ComponentProps, Ref, Context } from 'react';
3
+ /**
4
+ * SortableRow 通过此 context 向其内部 cell 暴露 dnd-kit 的激活器/监听器
5
+ *
6
+ * 用 context 而非 prop 钻透,因为 cell 是用户自定义渲染函数,触不到 SortableRow 的局部变量
7
+ */
8
+ export type RowDragHandleContextValue = {
9
+ attributes: DraggableAttributes;
10
+ listeners: DraggableSyntheticListeners | undefined;
11
+ setActivatorNodeRef: Ref<HTMLElement>;
12
+ isDragging: boolean;
13
+ } | null;
14
+ export declare const RowDragHandleContext: Context<RowDragHandleContextValue>;
15
+ /** 在 cell 内任意位置放此组件即可成为行拖拽手柄 */
16
+ export declare function RowDragHandle({ className, ...props }: Omit<ComponentProps<"button">, "ref" | "onMouseDown" | "onKeyDown" | "onTouchStart">): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,21 @@
1
+ import { Row } from '@tanstack/react-table';
2
+ import { ComponentProps } from 'react';
3
+ type RowExpandTogglePropsType<TData> = Omit<ComponentProps<"button">, "onClick" | "children"> & {
4
+ /** 当前行实例 */
5
+ row: Row<TData>;
6
+ /**
7
+ * 嵌套树场景下,每层缩进的像素数;设为 0 关闭自动缩进
8
+ *
9
+ * 默认 16,即每深一层缩进 16px
10
+ */
11
+ indent?: number;
12
+ /** 当行无可展开子项时是否仍占位渲染(保持对齐),默认 true */
13
+ placeholder?: boolean;
14
+ };
15
+ /**
16
+ * 行展开切换按钮:基于 `row.getToggleExpandedHandler` + `row.depth` 自动缩进
17
+ *
18
+ * 配合 `features.expanding` 与 `tableOptions.getSubRows`(嵌套树),或 `expandedRowRender`(展开面板)使用
19
+ */
20
+ export declare function RowExpandToggle<TData>({ row, indent, placeholder, className, ...props }: RowExpandTogglePropsType<TData>): import("react/jsx-runtime").JSX.Element | null;
21
+ export {};
@@ -0,0 +1,44 @@
1
+ import { TableOptions, Table } from '@tanstack/react-table';
2
+ import { DataTableColumn, DataTableFeatures, DataTableState, DataTableStateHandlers, ScrollShadowState } from '../type';
3
+ type UseDataTableOptions<TData, TValue> = {
4
+ data: TData[];
5
+ columns: DataTableColumn<TData, TValue>[];
6
+ features?: DataTableFeatures;
7
+ state?: DataTableState;
8
+ initialState?: DataTableState;
9
+ onStateChange?: DataTableStateHandlers;
10
+ /**
11
+ * 透传至底层 useReactTable 的额外配置,会与内部配置浅合并
12
+ *
13
+ * 常用于服务端模式:`manualPagination` / `pageCount` / `rowCount` /
14
+ * `manualSorting` / `manualFiltering`,以及 `meta` 等
15
+ */
16
+ tableOptions?: Partial<TableOptions<TData>>;
17
+ };
18
+ /**
19
+ * 构造 TanStack 表格实例,并按需开启各项功能
20
+ */
21
+ export declare function useDataTable<TData, TValue = unknown>({ data, columns, features, state, initialState, onStateChange, tableOptions, }: UseDataTableOptions<TData, TValue>): {
22
+ table: Table<TData>;
23
+ features: {
24
+ sorting: boolean;
25
+ multiSort: boolean;
26
+ filtering: boolean;
27
+ globalFilter: boolean;
28
+ pagination: boolean;
29
+ rowSelection: boolean;
30
+ columnVisibility: boolean;
31
+ columnOrdering: boolean;
32
+ columnPinning: boolean;
33
+ columnResizing: boolean;
34
+ rowDnd: boolean;
35
+ expanding: boolean;
36
+ };
37
+ };
38
+ /**
39
+ * 监听容器横向滚动,返回左右阴影显示状态
40
+ *
41
+ * 用于固定列阴影提示
42
+ */
43
+ export declare function useScrollShadow(wrapperRef: React.RefObject<HTMLElement | null>, containerSelector?: string): ScrollShadowState;
44
+ export {};