@guiexpert/table 1.1.96 → 1.1.97
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 +4 -0
- package/css/main.css +107 -0
- package/css/table-color-vars.css +12 -0
- package/css/table-master-detail.css +95 -0
- package/index.cjs +39 -39
- package/index.d.ts +6 -0
- package/index.js +3579 -2397
- package/lib/table/aria/aria-ids.d.ts +7 -0
- package/lib/table/aria/aria-texts.d.ts +2 -0
- package/lib/table/aria/aria-texts.if.d.ts +14 -0
- package/lib/table/data/common/event/ge-detail-event.d.ts +40 -0
- package/lib/table/data/options/auto-restore-options.d.ts +2 -0
- package/lib/table/data/options/auto-restore-options.if.d.ts +6 -0
- package/lib/table/data/options/table-options.d.ts +2 -0
- package/lib/table/data/options/table-options.if.d.ts +18 -0
- package/lib/table/ele-scope.d.ts +14 -0
- package/lib/table/event-adapter.d.ts +3 -0
- package/lib/table/event-listener.if.d.ts +7 -0
- package/lib/table/master-detail/detail-renderer.if.d.ts +99 -0
- package/lib/table/master-detail/master-detail-options.d.ts +30 -0
- package/lib/table/master-detail/master-detail-options.if.d.ts +60 -0
- package/lib/table/master-detail/master-detail-service.d.ts +223 -0
- package/lib/table/render-scope.d.ts +73 -0
- package/lib/table/row-layout/row-layout.d.ts +120 -0
- package/lib/table/state/table-state.if.d.ts +4 -1
- package/lib/table/state/table-state.service.d.ts +4 -0
- package/lib/table/table-api.d.ts +101 -0
- package/lib/table/table-scope.d.ts +64 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -54,6 +54,10 @@ This is the UI-agnostic table component for your next web app. 😊
|
|
|
54
54
|
dates, `Item 1` → `Item 2`; ⌥/Alt switches, Ctrl/⌘+D, Ctrl/⌘+R), batch edit collects changes (`ge-table-cell-pending`)
|
|
55
55
|
until `tableApi.commitBatchEdit()` / `cancelBatchEdit()`, `ColumnDef.validate`, one `onModelChanged` per change with
|
|
56
56
|
old and new values (`tableOptions.fillHandle`, `tableOptions.batchEdit`) – since 1.1.96
|
|
57
|
+
- Master/detail: expandable rows with a detail row over the full width (nested table, form, framework component),
|
|
58
|
+
created lazily and kept while scrolling, fixed or measured height, keyboard (Enter, Tab) and screen readers
|
|
59
|
+
(`aria-expanded`), `tableApi.setDetailExpanded()` / `expandAllDetails()`, stored with the table state
|
|
60
|
+
(`tableOptions.masterDetail`) – since 1.1.97. Variable row heights use prefix sums (O(log n) per scroll frame)
|
|
57
61
|
- Custom Filtering
|
|
58
62
|
- In-place Cell Editing
|
|
59
63
|
- Userdefined Key and Mouse Events
|
package/css/main.css
CHANGED
|
@@ -487,6 +487,12 @@
|
|
|
487
487
|
--ge-table-cell-invalid-bg: #fde2e1;
|
|
488
488
|
--ge-table-cell-invalid-text: #8a1c14;
|
|
489
489
|
--ge-table-cell-invalid-border: #d93025;
|
|
490
|
+
|
|
491
|
+
/* Master/detail (since 1.1.97): the detail row below an expanded master row */
|
|
492
|
+
--ge-table-detail-bg: #f4f6f9;
|
|
493
|
+
--ge-table-detail-border: #c9d1db;
|
|
494
|
+
--ge-table-detail-toggle-color: #5f6368;
|
|
495
|
+
--ge-table-detail-toggle-hover-bg: rgba(128, 128, 128, 0.15);
|
|
490
496
|
}
|
|
491
497
|
|
|
492
498
|
|
|
@@ -608,6 +614,12 @@ html[data-theme="dark"] {
|
|
|
608
614
|
--ge-table-cell-invalid-bg: #5c1d1a;
|
|
609
615
|
--ge-table-cell-invalid-text: #fecaca;
|
|
610
616
|
--ge-table-cell-invalid-border: #f28b82;
|
|
617
|
+
|
|
618
|
+
/* Master/detail (since 1.1.97) */
|
|
619
|
+
--ge-table-detail-bg: #1b1f24;
|
|
620
|
+
--ge-table-detail-border: #3c434d;
|
|
621
|
+
--ge-table-detail-toggle-color: #bdc1c6;
|
|
622
|
+
--ge-table-detail-toggle-hover-bg: rgba(255, 255, 255, 0.12);
|
|
611
623
|
}
|
|
612
624
|
/* Fill handle and batch edit (since 1.1.96) – colors in table-color-vars.css (--ge-table-fill-*, --ge-table-cell-*) */
|
|
613
625
|
|
|
@@ -667,6 +679,101 @@ html[data-theme="dark"] {
|
|
|
667
679
|
.ge-table-col-div.ge-table-cell-invalid {
|
|
668
680
|
box-shadow: inset 0 0 0 2px var(--ge-table-cell-invalid-border);
|
|
669
681
|
}
|
|
682
|
+
/* Master/detail (since 1.1.97) – colors in table-color-vars.css (--ge-table-detail-*) */
|
|
683
|
+
|
|
684
|
+
/* the layer over the visible body (full width, fixed columns included, without the scroll bars); positioned by the
|
|
685
|
+
table. Only the detail rows take pointer events – the body cells between them stay clickable. */
|
|
686
|
+
.ge-table-detail-layer {
|
|
687
|
+
position: absolute;
|
|
688
|
+
z-index: 1000; /* above .ge-table-body-east (999), below the fill preview (8999), focus frame (9999), overlay (10000) */
|
|
689
|
+
overflow: hidden;
|
|
690
|
+
pointer-events: none;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.ge-table-detail-row {
|
|
694
|
+
position: absolute;
|
|
695
|
+
inset-inline: 0;
|
|
696
|
+
box-sizing: border-box;
|
|
697
|
+
pointer-events: auto;
|
|
698
|
+
background: var(--ge-table-detail-bg);
|
|
699
|
+
border-top: 1px solid var(--ge-table-detail-border);
|
|
700
|
+
border-bottom: 1px solid var(--ge-table-detail-border);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/* scrolled out of view: hidden, not destroyed – the content keeps its state (inputs, scroll positions) */
|
|
704
|
+
.ge-table-detail-row.ge-table-detail-row-parked {
|
|
705
|
+
visibility: hidden;
|
|
706
|
+
content-visibility: hidden;
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
.ge-table-detail-cell {
|
|
710
|
+
box-sizing: border-box;
|
|
711
|
+
width: 100%;
|
|
712
|
+
height: 100%;
|
|
713
|
+
padding-block: 8px;
|
|
714
|
+
padding-inline: 32px 12px;
|
|
715
|
+
overflow: auto;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
/* detailHeight "auto": the row is as high as its content (measured) */
|
|
719
|
+
.ge-table-detail-row-auto .ge-table-detail-cell {
|
|
720
|
+
height: auto;
|
|
721
|
+
overflow: visible;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
/* a nested table (context.createTable) */
|
|
725
|
+
.ge-table-detail-table {
|
|
726
|
+
width: 100%;
|
|
727
|
+
position: relative;
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
/* the cell with the expand icon: room for the icon at the start */
|
|
731
|
+
.ge-table-detail-toggle-cell {
|
|
732
|
+
box-sizing: border-box;
|
|
733
|
+
padding-inline-start: 22px;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
/* behind a row drag handle */
|
|
737
|
+
.ge-table-row-drag-cell.ge-table-detail-toggle-cell {
|
|
738
|
+
padding-inline-start: 36px;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
.ge-table-detail-toggle {
|
|
742
|
+
position: absolute;
|
|
743
|
+
inset-inline-start: 3px;
|
|
744
|
+
top: 50%;
|
|
745
|
+
width: 16px;
|
|
746
|
+
height: 16px;
|
|
747
|
+
margin-top: -8px;
|
|
748
|
+
border-radius: 3px;
|
|
749
|
+
cursor: pointer;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
.ge-table-row-drag-cell .ge-table-detail-toggle {
|
|
753
|
+
inset-inline-start: 17px;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
.ge-table-detail-toggle:hover {
|
|
757
|
+
background-color: var(--ge-table-detail-toggle-hover-bg);
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
/* a chevron drawn with CSS: ▸ collapsed, ▾ expanded */
|
|
761
|
+
.ge-table-detail-toggle::before {
|
|
762
|
+
content: "";
|
|
763
|
+
position: absolute;
|
|
764
|
+
inset-inline-start: 5px;
|
|
765
|
+
top: 4px;
|
|
766
|
+
width: 0;
|
|
767
|
+
height: 0;
|
|
768
|
+
border-style: solid;
|
|
769
|
+
border-width: 4px 0 4px 6px;
|
|
770
|
+
border-color: transparent transparent transparent var(--ge-table-detail-toggle-color);
|
|
771
|
+
transition: transform 0.12s ease-out;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.ge-table-detail-toggle.ge-table-detail-toggle-expanded::before {
|
|
775
|
+
transform: rotate(90deg);
|
|
776
|
+
}
|
|
670
777
|
/* Pivot tables (PivotFactory / AreaModelPivot, since 1.1.94) */
|
|
671
778
|
|
|
672
779
|
/* every value cell: numbers on the end side, same digit widths */
|
package/css/table-color-vars.css
CHANGED
|
@@ -130,6 +130,12 @@ html, html[data-theme="light"] {
|
|
|
130
130
|
--ge-table-cell-invalid-bg: #fde2e1;
|
|
131
131
|
--ge-table-cell-invalid-text: #8a1c14;
|
|
132
132
|
--ge-table-cell-invalid-border: #d93025;
|
|
133
|
+
|
|
134
|
+
/* Master/detail (since 1.1.97): the detail row below an expanded master row */
|
|
135
|
+
--ge-table-detail-bg: #f4f6f9;
|
|
136
|
+
--ge-table-detail-border: #c9d1db;
|
|
137
|
+
--ge-table-detail-toggle-color: #5f6368;
|
|
138
|
+
--ge-table-detail-toggle-hover-bg: rgba(128, 128, 128, 0.15);
|
|
133
139
|
}
|
|
134
140
|
|
|
135
141
|
|
|
@@ -251,4 +257,10 @@ html[data-theme="dark"] {
|
|
|
251
257
|
--ge-table-cell-invalid-bg: #5c1d1a;
|
|
252
258
|
--ge-table-cell-invalid-text: #fecaca;
|
|
253
259
|
--ge-table-cell-invalid-border: #f28b82;
|
|
260
|
+
|
|
261
|
+
/* Master/detail (since 1.1.97) */
|
|
262
|
+
--ge-table-detail-bg: #1b1f24;
|
|
263
|
+
--ge-table-detail-border: #3c434d;
|
|
264
|
+
--ge-table-detail-toggle-color: #bdc1c6;
|
|
265
|
+
--ge-table-detail-toggle-hover-bg: rgba(255, 255, 255, 0.12);
|
|
254
266
|
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/* Master/detail (since 1.1.97) – colors in table-color-vars.css (--ge-table-detail-*) */
|
|
2
|
+
|
|
3
|
+
/* the layer over the visible body (full width, fixed columns included, without the scroll bars); positioned by the
|
|
4
|
+
table. Only the detail rows take pointer events – the body cells between them stay clickable. */
|
|
5
|
+
.ge-table-detail-layer {
|
|
6
|
+
position: absolute;
|
|
7
|
+
z-index: 1000; /* above .ge-table-body-east (999), below the fill preview (8999), focus frame (9999), overlay (10000) */
|
|
8
|
+
overflow: hidden;
|
|
9
|
+
pointer-events: none;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.ge-table-detail-row {
|
|
13
|
+
position: absolute;
|
|
14
|
+
inset-inline: 0;
|
|
15
|
+
box-sizing: border-box;
|
|
16
|
+
pointer-events: auto;
|
|
17
|
+
background: var(--ge-table-detail-bg);
|
|
18
|
+
border-top: 1px solid var(--ge-table-detail-border);
|
|
19
|
+
border-bottom: 1px solid var(--ge-table-detail-border);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* scrolled out of view: hidden, not destroyed – the content keeps its state (inputs, scroll positions) */
|
|
23
|
+
.ge-table-detail-row.ge-table-detail-row-parked {
|
|
24
|
+
visibility: hidden;
|
|
25
|
+
content-visibility: hidden;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.ge-table-detail-cell {
|
|
29
|
+
box-sizing: border-box;
|
|
30
|
+
width: 100%;
|
|
31
|
+
height: 100%;
|
|
32
|
+
padding-block: 8px;
|
|
33
|
+
padding-inline: 32px 12px;
|
|
34
|
+
overflow: auto;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* detailHeight "auto": the row is as high as its content (measured) */
|
|
38
|
+
.ge-table-detail-row-auto .ge-table-detail-cell {
|
|
39
|
+
height: auto;
|
|
40
|
+
overflow: visible;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* a nested table (context.createTable) */
|
|
44
|
+
.ge-table-detail-table {
|
|
45
|
+
width: 100%;
|
|
46
|
+
position: relative;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* the cell with the expand icon: room for the icon at the start */
|
|
50
|
+
.ge-table-detail-toggle-cell {
|
|
51
|
+
box-sizing: border-box;
|
|
52
|
+
padding-inline-start: 22px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* behind a row drag handle */
|
|
56
|
+
.ge-table-row-drag-cell.ge-table-detail-toggle-cell {
|
|
57
|
+
padding-inline-start: 36px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.ge-table-detail-toggle {
|
|
61
|
+
position: absolute;
|
|
62
|
+
inset-inline-start: 3px;
|
|
63
|
+
top: 50%;
|
|
64
|
+
width: 16px;
|
|
65
|
+
height: 16px;
|
|
66
|
+
margin-top: -8px;
|
|
67
|
+
border-radius: 3px;
|
|
68
|
+
cursor: pointer;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.ge-table-row-drag-cell .ge-table-detail-toggle {
|
|
72
|
+
inset-inline-start: 17px;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.ge-table-detail-toggle:hover {
|
|
76
|
+
background-color: var(--ge-table-detail-toggle-hover-bg);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* a chevron drawn with CSS: ▸ collapsed, ▾ expanded */
|
|
80
|
+
.ge-table-detail-toggle::before {
|
|
81
|
+
content: "";
|
|
82
|
+
position: absolute;
|
|
83
|
+
inset-inline-start: 5px;
|
|
84
|
+
top: 4px;
|
|
85
|
+
width: 0;
|
|
86
|
+
height: 0;
|
|
87
|
+
border-style: solid;
|
|
88
|
+
border-width: 4px 0 4px 6px;
|
|
89
|
+
border-color: transparent transparent transparent var(--ge-table-detail-toggle-color);
|
|
90
|
+
transition: transform 0.12s ease-out;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.ge-table-detail-toggle.ge-table-detail-toggle-expanded::before {
|
|
94
|
+
transform: rotate(90deg);
|
|
95
|
+
}
|