@guiexpert/table 1.1.97 → 1.1.99
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 +12 -0
- package/css/main.css +381 -27
- package/css/table-classes.css +33 -9
- package/css/table-clipboard.css +41 -0
- package/css/table-color-vars.css +56 -0
- package/css/table-fill-batch.css +9 -2
- package/css/table-master-detail.css +20 -0
- package/css/table-sheet-editing.css +149 -0
- package/css/table-spreadsheet.css +50 -0
- package/css/table-tree.css +23 -16
- package/index.cjs +54 -67
- package/index.d.ts +52 -0
- package/index.js +18968 -11475
- package/lib/table/action/action-id.type.d.ts +1 -1
- package/lib/table/action/shortcut.service.d.ts +9 -0
- package/lib/table/aria/aria-texts.d.ts +26 -0
- package/lib/table/aria/aria-texts.if.d.ts +196 -0
- package/lib/table/batch-edit/batch-edit-service.d.ts +22 -0
- package/lib/table/batch-edit/cell-change.if.d.ts +6 -2
- package/lib/table/batch-edit/pending-cell-changes.d.ts +7 -0
- package/lib/table/batch-edit/write-row-value.d.ts +14 -0
- package/lib/table/calc/column-values.d.ts +2 -0
- package/lib/table/clipboard/clipboard-html.d.ts +41 -0
- package/lib/table/clipboard/clipboard-keymap.d.ts +18 -0
- package/lib/table/clipboard/clipboard-options.d.ts +30 -0
- package/lib/table/clipboard/clipboard-options.if.d.ts +67 -0
- package/lib/table/clipboard/clipboard-service.d.ts +122 -0
- package/lib/table/clipboard/input-pipes.d.ts +59 -0
- package/lib/table/clipboard/paste-plan.d.ts +96 -0
- package/lib/table/clipboard/tsv.d.ts +31 -0
- package/lib/table/crud/crud-object-edit.d.ts +2 -0
- package/lib/table/crud/crud-object-view.d.ts +2 -0
- package/lib/table/crud/crud-table-model-factory.d.ts +2 -0
- package/lib/table/data/common/event/ge-edit-event.d.ts +46 -0
- package/lib/table/data/common/event/ge-row-drag-event.d.ts +2 -2
- package/lib/table/data/common/event/ge-undo-event.d.ts +29 -0
- package/lib/table/data/options/table-options.d.ts +34 -0
- package/lib/table/data/options/table-options.if.d.ts +116 -1
- package/lib/table/data/tablemodel/areamodel/abstract-area-model.d.ts +11 -2
- package/lib/table/data/tablemodel/areamodel/area-model-array-of-arrays.d.ts +14 -0
- package/lib/table/data/tablemodel/areamodel/area-model-object-array.d.ts +14 -0
- package/lib/table/data/tablemodel/areamodel/area-model.if.d.ts +11 -0
- package/lib/table/data/tablemodel/column/column-def.d.ts +13 -0
- package/lib/table/data/tablemodel/column/column-def.if.d.ts +36 -1
- package/lib/table/data/tablemodel/column/default-editable.d.ts +18 -0
- package/lib/table/ele-scope.d.ts +37 -0
- package/lib/table/event-adapter.d.ts +6 -0
- package/lib/table/event-listener-hub.d.ts +10 -0
- package/lib/table/event-listener.if.d.ts +16 -0
- package/lib/table/factory/pivot-factory.d.ts +1 -1
- package/lib/table/factory/row-group-factory.d.ts +1 -1
- package/lib/table/factory/table-factory.d.ts +14 -0
- package/lib/table/formula/formula-ast.if.d.ts +32 -2
- package/lib/table/formula/formula-error.d.ts +4 -2
- package/lib/table/formula/parser.d.ts +5 -2
- package/lib/table/formula/tokenizer.d.ts +5 -2
- package/lib/table/input-handler.d.ts +8 -0
- package/lib/table/master-detail/master-detail-service.d.ts +9 -0
- package/lib/table/render-scope.d.ts +40 -0
- package/lib/table/row-drag/row-drag-service.d.ts +3 -2
- package/lib/table/rtl/rtl-util.d.ts +126 -0
- package/lib/table/rtl/table-direction.type.d.ts +23 -0
- package/lib/table/selection/selection-service.d.ts +48 -0
- package/lib/table/service/convenience-dom.service.d.ts +49 -1
- package/lib/table/service/excel-export-options.if.d.ts +23 -0
- package/lib/table/service/excel-service.d.ts +12 -2
- package/lib/table/service/excel-service.if.d.ts +38 -1
- package/lib/table/sheet/cell-address.d.ts +100 -0
- package/lib/table/sheet/cell-formula-options.d.ts +27 -0
- package/lib/table/sheet/cell-formula-options.if.d.ts +27 -0
- package/lib/table/sheet/excel-formula.d.ts +20 -0
- package/lib/table/sheet/format-formula.d.ts +19 -0
- package/lib/table/sheet/sheet-cells.if.d.ts +17 -0
- package/lib/table/sheet/sheet-compiler.d.ts +47 -0
- package/lib/table/sheet/sheet-engine.d.ts +207 -0
- package/lib/table/sheet/sheet-function-info.d.ts +25 -0
- package/lib/table/sheet/sheet-functions.d.ts +27 -0
- package/lib/table/sheet/sheet-values.d.ts +154 -0
- package/lib/table/sheet/shift-formula.d.ts +71 -0
- package/lib/table/sheet/table-sheet.d.ts +214 -0
- package/lib/table/sheet-editing/cell-editor-service.d.ts +105 -0
- package/lib/table/sheet-editing/cell-editor.if.d.ts +110 -0
- package/lib/table/sheet-editing/editing-keymap.d.ts +17 -0
- package/lib/table/sheet-editing/editing-options.d.ts +34 -0
- package/lib/table/sheet-editing/editing-options.if.d.ts +49 -0
- package/lib/table/sheet-editing/editors/date-cell-editor.d.ts +23 -0
- package/lib/table/sheet-editing/editors/number-cell-editor.d.ts +18 -0
- package/lib/table/sheet-editing/editors/select-cell-editor.d.ts +36 -0
- package/lib/table/sheet-editing/editors/text-cell-editor.d.ts +35 -0
- package/lib/table/sheet-editing/formula-assist.d.ts +103 -0
- package/lib/table/sheet-editing/formula-text.d.ts +61 -0
- package/lib/table/sheet-editing/sheet-navigation.d.ts +26 -0
- package/lib/table/spreadsheet/area-model-sheet.d.ts +170 -0
- package/lib/table/spreadsheet/formula-bar.d.ts +53 -0
- package/lib/table/spreadsheet/spreadsheet-factory.d.ts +111 -0
- package/lib/table/spreadsheet/spreadsheet-options.if.d.ts +28 -0
- package/lib/table/spreadsheet/spreadsheet-preset.d.ts +37 -0
- package/lib/table/spreadsheet/structure-edit.d.ts +35 -0
- package/lib/table/table-api.d.ts +533 -4
- package/lib/table/table-scope.d.ts +299 -1
- package/lib/table/undo/cell-changes-undoable.d.ts +34 -0
- package/lib/table/undo/model-rows.d.ts +17 -0
- package/lib/table/undo/pending-changes-undoable.d.ts +35 -0
- package/lib/table/undo/undo-keymap.d.ts +17 -0
- package/lib/table/undo/undo-options.d.ts +26 -0
- package/lib/table/undo/undo-options.if.d.ts +30 -0
- package/lib/table/undo/undo-service.d.ts +103 -0
- package/lib/table/undo/undo-stack.d.ts +62 -0
- package/lib/table/undo/undoable.if.d.ts +36 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -58,6 +58,18 @@ This is the UI-agnostic table component for your next web app. 😊
|
|
|
58
58
|
created lazily and kept while scrolling, fixed or measured height, keyboard (Enter, Tab) and screen readers
|
|
59
59
|
(`aria-expanded`), `tableApi.setDetailExpanded()` / `expandAllDetails()`, stored with the table state
|
|
60
60
|
(`tableOptions.masterDetail`) – since 1.1.97. Variable row heights use prefix sums (O(log n) per scroll frame)
|
|
61
|
+
- Right-to-left (Arabic, Hebrew, Persian, Urdu): `tableOptions.direction: "rtl"` (or `"auto"` from the page) mirrors
|
|
62
|
+
the whole table – first column on the right, horizontal scrolling, fixed columns, tree indent, resize handles, fill
|
|
63
|
+
handle, row drag, master/detail, arrow keys; right-to-left Excel sheet – since 1.1.98
|
|
64
|
+
- Excel-style editing (`tableOptions.editing`): type to overwrite, F2, Enter/Tab, Delete, Ctrl+Enter, Ctrl+arrow to
|
|
65
|
+
the data edge, IME; copy, cut and paste with Excel and Google Sheets (`clipboard`); undo and redo of every change
|
|
66
|
+
(`undo`, `tableApi.undo()`) – since 1.1.99
|
|
67
|
+
- Spreadsheet cell formulas (`tableOptions.cellFormulas`): `=B2*C2`, `$A$1`, ranges, 70 Excel functions, a dependency
|
|
68
|
+
graph that recalculates only dependent cells, colored references and pointing while typing, Excel export with real
|
|
69
|
+
formulas – own parser, no `eval`. `SheetEngine` works without a table – since 1.1.99
|
|
70
|
+
- Spreadsheet mode: `SpreadsheetFactory.create({ data })` builds column letters, row numbers, a sparse body (a million
|
|
71
|
+
empty rows cost nothing) and all of the above; `FormulaBar`, insert/delete rows and columns with adjusted references;
|
|
72
|
+
`spreadsheet: true` for an existing table – since 1.1.99
|
|
61
73
|
- Custom Filtering
|
|
62
74
|
- In-place Cell Editing
|
|
63
75
|
- Userdefined Key and Mouse Events
|
package/css/main.css
CHANGED
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
.ge-table-label-div .ge-table-label {
|
|
52
|
-
padding-
|
|
53
|
-
padding-
|
|
52
|
+
padding-inline-start: 10px;
|
|
53
|
+
padding-inline-end: 10px;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
/* Total rows of AreaModelAggregateFooter (1.1.94) – before the align classes, so a column's footer class wins */
|
|
@@ -74,21 +74,45 @@
|
|
|
74
74
|
overflow: visible;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
/* "left" and "right" describe the left-to-right layout: start and end of the row – mirrored in right-to-left
|
|
78
|
+
(direction: "rtl", since 1.1.98). A column that must stay physically right needs its own class. */
|
|
77
79
|
.ge-table-text-align-left {
|
|
78
|
-
text-align:
|
|
80
|
+
text-align: start;
|
|
79
81
|
}
|
|
80
82
|
|
|
81
83
|
.ge-table-text-align-right {
|
|
84
|
+
text-align: end;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.ge-table-text-align-start {
|
|
88
|
+
text-align: start;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.ge-table-text-align-end {
|
|
92
|
+
text-align: end;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Latin text with punctuation in a right-to-left table ("Rossi S.p.A." would show as ".Rossi S.p.A"): every label gets
|
|
96
|
+
the direction of its own text (unicode-bidi: plaintext) and stays aligned to the start of the table (since 1.1.98). */
|
|
97
|
+
.ge-table-text-plaintext {
|
|
98
|
+
text-align: left;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.ge-table[dir="rtl"] .ge-table-text-plaintext:not(.ge-table[dir="rtl"] .ge-table[dir="ltr"] .ge-table-text-plaintext) {
|
|
82
102
|
text-align: right;
|
|
83
103
|
}
|
|
84
104
|
|
|
105
|
+
.ge-table-text-plaintext .ge-table-label {
|
|
106
|
+
unicode-bidi: plaintext;
|
|
107
|
+
}
|
|
108
|
+
|
|
85
109
|
.ge-table-text-align-center {
|
|
86
110
|
text-align: center;
|
|
87
111
|
}
|
|
88
112
|
|
|
89
113
|
/* Row checkbox */
|
|
90
114
|
.ge-table-row-checkbox-div {
|
|
91
|
-
padding-
|
|
115
|
+
padding-inline-start: 14px;
|
|
92
116
|
}
|
|
93
117
|
.ge-table-body-east {
|
|
94
118
|
z-index: 999;
|
|
@@ -112,10 +136,10 @@
|
|
|
112
136
|
overflow-y: auto;
|
|
113
137
|
table th,
|
|
114
138
|
table td {
|
|
115
|
-
text-align:
|
|
139
|
+
text-align: start;
|
|
116
140
|
|
|
117
141
|
&:nth-child(2) {
|
|
118
|
-
padding-
|
|
142
|
+
padding-inline-start: 12px;
|
|
119
143
|
}
|
|
120
144
|
&.ge-table-crud-object-view-object-child {
|
|
121
145
|
font-weight: bold;
|
|
@@ -152,7 +176,7 @@
|
|
|
152
176
|
justify-items: stretch;
|
|
153
177
|
label {
|
|
154
178
|
align-self: end;
|
|
155
|
-
text-align:
|
|
179
|
+
text-align: end;
|
|
156
180
|
line-height: 2;
|
|
157
181
|
}
|
|
158
182
|
}
|
|
@@ -176,9 +200,9 @@
|
|
|
176
200
|
}
|
|
177
201
|
|
|
178
202
|
|
|
179
|
-
/* room for the sort icon (20px, absolute,
|
|
203
|
+
/* room for the sort icon (20px, absolute, at the end) – otherwise it covers end-aligned header labels */
|
|
180
204
|
.ge-table-col-div:has(> .ge-table-sorted-icon-div) .ge-table-label {
|
|
181
|
-
padding-
|
|
205
|
+
padding-inline-end: 22px;
|
|
182
206
|
}
|
|
183
207
|
|
|
184
208
|
|
|
@@ -256,6 +280,47 @@
|
|
|
256
280
|
animation: none; /* a still ring segment and the text */
|
|
257
281
|
}
|
|
258
282
|
}
|
|
283
|
+
/* Copy, cut and paste (since 1.1.99, tableOptions.clipboard) */
|
|
284
|
+
|
|
285
|
+
/* the hidden text field that gets the focus for the moment of Ctrl/⌘+C, X, V (the browser fires its clipboard event there) */
|
|
286
|
+
.ge-table-clipboard-proxy {
|
|
287
|
+
position: absolute;
|
|
288
|
+
top: 0;
|
|
289
|
+
left: 0;
|
|
290
|
+
width: 1px;
|
|
291
|
+
height: 1px;
|
|
292
|
+
margin: 0;
|
|
293
|
+
padding: 0;
|
|
294
|
+
border: 0;
|
|
295
|
+
opacity: 0;
|
|
296
|
+
overflow: hidden;
|
|
297
|
+
resize: none;
|
|
298
|
+
pointer-events: none;
|
|
299
|
+
font-size: 16px; /* iOS zooms into a focused field with a smaller font */
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/* cut cells: a dashed frame ("marching ants") until they are pasted, Escape or another change */
|
|
303
|
+
.ge-table-cut-range {
|
|
304
|
+
position: absolute;
|
|
305
|
+
display: none;
|
|
306
|
+
z-index: 8998; /* below the fill preview (8999) and the editor (9500) */
|
|
307
|
+
box-sizing: border-box;
|
|
308
|
+
pointer-events: none;
|
|
309
|
+
border: 2px dashed var(--ge-table-cut-range-border);
|
|
310
|
+
animation: ge-table-cut-range-ants 0.8s linear infinite;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
@keyframes ge-table-cut-range-ants {
|
|
314
|
+
50% {
|
|
315
|
+
border-color: var(--ge-table-cut-range-border-alt);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
@media (prefers-reduced-motion: reduce) {
|
|
320
|
+
.ge-table-cut-range {
|
|
321
|
+
animation: none; /* the dashed frame alone */
|
|
322
|
+
}
|
|
323
|
+
}
|
|
259
324
|
|
|
260
325
|
|
|
261
326
|
.ge-table { background-color: var(--ge-table-bg); }
|
|
@@ -493,6 +558,34 @@
|
|
|
493
558
|
--ge-table-detail-border: #c9d1db;
|
|
494
559
|
--ge-table-detail-toggle-color: #5f6368;
|
|
495
560
|
--ge-table-detail-toggle-hover-bg: rgba(128, 128, 128, 0.15);
|
|
561
|
+
|
|
562
|
+
/* Excel-style editing (since 1.1.99): the editor above the cell */
|
|
563
|
+
--ge-table-cell-editor-bg: #fff;
|
|
564
|
+
--ge-table-cell-editor-text: #111;
|
|
565
|
+
--ge-table-cell-editor-border: #0a6ebd;
|
|
566
|
+
--ge-table-cell-editor-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
|
|
567
|
+
--ge-table-cell-editor-invalid-border: #d93025;
|
|
568
|
+
--ge-table-cut-range-border: #0a6ebd;
|
|
569
|
+
--ge-table-cut-range-border-alt: #9ec9ec;
|
|
570
|
+
/* formula input (since 1.1.99): colors of the references 0–7, function list and hint */
|
|
571
|
+
--ge-table-formula-ref-0: #1a73e8;
|
|
572
|
+
--ge-table-formula-ref-1: #d93025;
|
|
573
|
+
--ge-table-formula-ref-2: #7b1fa2;
|
|
574
|
+
--ge-table-formula-ref-3: #188038;
|
|
575
|
+
--ge-table-formula-ref-4: #c26401;
|
|
576
|
+
--ge-table-formula-ref-5: #00838f;
|
|
577
|
+
--ge-table-formula-ref-6: #c2185b;
|
|
578
|
+
--ge-table-formula-ref-7: #5d4037;
|
|
579
|
+
--ge-table-formula-popup-bg: #fff;
|
|
580
|
+
--ge-table-formula-popup-text: #111;
|
|
581
|
+
--ge-table-formula-popup-muted: #5f6368;
|
|
582
|
+
--ge-table-formula-popup-border: #c4c7c5;
|
|
583
|
+
--ge-table-formula-popup-active-bg: #e8f0fe;
|
|
584
|
+
/* formula bar (since 1.1.99) */
|
|
585
|
+
--ge-table-formula-bar-bg: #fff;
|
|
586
|
+
--ge-table-formula-bar-text: #111;
|
|
587
|
+
--ge-table-formula-bar-muted: #5f6368;
|
|
588
|
+
--ge-table-formula-bar-border: #c4c7c5;
|
|
496
589
|
}
|
|
497
590
|
|
|
498
591
|
|
|
@@ -620,16 +713,46 @@ html[data-theme="dark"] {
|
|
|
620
713
|
--ge-table-detail-border: #3c434d;
|
|
621
714
|
--ge-table-detail-toggle-color: #bdc1c6;
|
|
622
715
|
--ge-table-detail-toggle-hover-bg: rgba(255, 255, 255, 0.12);
|
|
716
|
+
|
|
717
|
+
/* Excel-style editing (since 1.1.99) */
|
|
718
|
+
--ge-table-cell-editor-bg: #1f2937;
|
|
719
|
+
--ge-table-cell-editor-text: #f3f4f6;
|
|
720
|
+
--ge-table-cell-editor-border: #8ab4f8;
|
|
721
|
+
--ge-table-cell-editor-shadow: 0 2px 6px rgba(0, 0, 0, 0.6);
|
|
722
|
+
--ge-table-cell-editor-invalid-border: #f28b82;
|
|
723
|
+
--ge-table-cut-range-border: #8ab4f8;
|
|
724
|
+
--ge-table-cut-range-border-alt: #3c5a85;
|
|
725
|
+
/* formula input (since 1.1.99) */
|
|
726
|
+
--ge-table-formula-ref-0: #8ab4f8;
|
|
727
|
+
--ge-table-formula-ref-1: #f28b82;
|
|
728
|
+
--ge-table-formula-ref-2: #d7aefb;
|
|
729
|
+
--ge-table-formula-ref-3: #81c995;
|
|
730
|
+
--ge-table-formula-ref-4: #fcad70;
|
|
731
|
+
--ge-table-formula-ref-5: #78d9ec;
|
|
732
|
+
--ge-table-formula-ref-6: #ff8bcb;
|
|
733
|
+
--ge-table-formula-ref-7: #d7ccc8;
|
|
734
|
+
--ge-table-formula-popup-bg: #1f2937;
|
|
735
|
+
--ge-table-formula-popup-text: #f3f4f6;
|
|
736
|
+
--ge-table-formula-popup-muted: #9aa0a6;
|
|
737
|
+
--ge-table-formula-popup-border: #4b5563;
|
|
738
|
+
--ge-table-formula-popup-active-bg: #374151;
|
|
739
|
+
/* formula bar (since 1.1.99) */
|
|
740
|
+
--ge-table-formula-bar-bg: #1f2937;
|
|
741
|
+
--ge-table-formula-bar-text: #f3f4f6;
|
|
742
|
+
--ge-table-formula-bar-muted: #9aa0a6;
|
|
743
|
+
--ge-table-formula-bar-border: #4b5563;
|
|
623
744
|
}
|
|
624
745
|
/* Fill handle and batch edit (since 1.1.96) – colors in table-color-vars.css (--ge-table-fill-*, --ge-table-cell-*) */
|
|
625
746
|
|
|
626
|
-
/* the square at the bottom
|
|
747
|
+
/* the square at the bottom end corner of the selected range (right-to-left: bottom left); its center sits on it */
|
|
627
748
|
.ge-table-fill-handle {
|
|
628
749
|
position: absolute;
|
|
629
750
|
z-index: 9000; /* above the cells, below the overlay (10000) */
|
|
630
751
|
width: 7px;
|
|
631
752
|
height: 7px;
|
|
632
|
-
margin:
|
|
753
|
+
margin: 0;
|
|
754
|
+
margin-block-start: -4px;
|
|
755
|
+
margin-inline-start: -4px;
|
|
633
756
|
box-sizing: border-box;
|
|
634
757
|
background: var(--ge-table-fill-handle-color);
|
|
635
758
|
border: 1px solid var(--ge-table-fill-handle-border);
|
|
@@ -664,6 +787,11 @@ html[data-theme="dark"] {
|
|
|
664
787
|
background-image: linear-gradient(225deg, var(--ge-table-cell-pending-marker) 6px, transparent 6px);
|
|
665
788
|
}
|
|
666
789
|
|
|
790
|
+
/* right-to-left: the corner mark at the top end (left) */
|
|
791
|
+
.ge-table[dir="rtl"] .ge-table-col-div.ge-table-cell-pending:not(.ge-table[dir="rtl"] .ge-table[dir="ltr"] .ge-table-col-div.ge-table-cell-pending) {
|
|
792
|
+
background-image: linear-gradient(135deg, var(--ge-table-cell-pending-marker) 6px, transparent 6px);
|
|
793
|
+
}
|
|
794
|
+
|
|
667
795
|
/* the color only while the cell is not selected – a selected cell keeps the selection color (and the corner mark) */
|
|
668
796
|
.ge-table-col-div.ge-table-cell-pending:not([class*="-selected-range"]) {
|
|
669
797
|
background-color: var(--ge-table-cell-pending-bg);
|
|
@@ -774,6 +902,26 @@ html[data-theme="dark"] {
|
|
|
774
902
|
.ge-table-detail-toggle.ge-table-detail-toggle-expanded::before {
|
|
775
903
|
transform: rotate(90deg);
|
|
776
904
|
}
|
|
905
|
+
|
|
906
|
+
/* right-to-left (since 1.1.98): the triangle points to the left, expanded down */
|
|
907
|
+
.ge-table[dir="rtl"] .ge-table-detail-toggle:not(.ge-table[dir="rtl"] .ge-table[dir="ltr"] .ge-table-detail-toggle)::before {
|
|
908
|
+
border-width: 4px 6px 4px 0;
|
|
909
|
+
border-color: transparent var(--ge-table-detail-toggle-color) transparent transparent;
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
.ge-table[dir="rtl"] .ge-table-detail-toggle.ge-table-detail-toggle-expanded:not(.ge-table[dir="rtl"] .ge-table[dir="ltr"] .ge-table-detail-toggle.ge-table-detail-toggle-expanded)::before {
|
|
913
|
+
transform: rotate(-90deg);
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
/* right-to-left (since 1.1.98): the triangle points to the left, expanded down */
|
|
917
|
+
.ge-table[dir="rtl"] .ge-table-detail-toggle:not(.ge-table[dir="rtl"] .ge-table[dir="ltr"] .ge-table-detail-toggle)::before {
|
|
918
|
+
border-width: 4px 6px 4px 0;
|
|
919
|
+
border-color: transparent var(--ge-table-detail-toggle-color) transparent transparent;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
.ge-table[dir="rtl"] .ge-table-detail-toggle.ge-table-detail-toggle-expanded:not(.ge-table[dir="rtl"] .ge-table[dir="ltr"] .ge-table-detail-toggle.ge-table-detail-toggle-expanded)::before {
|
|
923
|
+
transform: rotate(-90deg);
|
|
924
|
+
}
|
|
777
925
|
/* Pivot tables (PivotFactory / AreaModelPivot, since 1.1.94) */
|
|
778
926
|
|
|
779
927
|
/* every value cell: numbers on the end side, same digit widths */
|
|
@@ -922,26 +1070,225 @@ html[data-theme="dark"] {
|
|
|
922
1070
|
font-variant-numeric: tabular-nums;
|
|
923
1071
|
font-weight: var(--ge-table-row-group-label-font-weight);
|
|
924
1072
|
}
|
|
1073
|
+
/* Excel-style editing (since 1.1.99): one editor element above the edited cell (tableOptions.editing) */
|
|
1074
|
+
.ge-table-cell-editor {
|
|
1075
|
+
position: absolute;
|
|
1076
|
+
display: none;
|
|
1077
|
+
box-sizing: border-box;
|
|
1078
|
+
z-index: 9500; /* above the cells, the detail layer (1000) and the fill preview (8999), below the focus frame (9999) and overlay (10000) */
|
|
1079
|
+
background: var(--ge-table-cell-editor-bg);
|
|
1080
|
+
box-shadow: var(--ge-table-cell-editor-shadow);
|
|
1081
|
+
}
|
|
1082
|
+
.ge-table-cell-editor.ge-table-cell-editor-clipped {
|
|
1083
|
+
pointer-events: none; /* scrolled out of view: invisible, but still focused */
|
|
1084
|
+
box-shadow: none;
|
|
1085
|
+
}
|
|
1086
|
+
.ge-table-cell-editor-field {
|
|
1087
|
+
box-sizing: border-box;
|
|
1088
|
+
width: 100%;
|
|
1089
|
+
height: 100%;
|
|
1090
|
+
margin: 0;
|
|
1091
|
+
padding: 0 6px;
|
|
1092
|
+
border: 2px solid var(--ge-table-cell-editor-border);
|
|
1093
|
+
border-radius: 0;
|
|
1094
|
+
outline: none;
|
|
1095
|
+
font: inherit;
|
|
1096
|
+
color: var(--ge-table-cell-editor-text);
|
|
1097
|
+
background: var(--ge-table-cell-editor-bg);
|
|
1098
|
+
}
|
|
1099
|
+
.ge-table-cell-editor-field[aria-invalid="true"] {
|
|
1100
|
+
border-color: var(--ge-table-cell-editor-invalid-border);
|
|
1101
|
+
}
|
|
1102
|
+
.ge-table-cell-editor-number {
|
|
1103
|
+
text-align: end;
|
|
1104
|
+
font-variant-numeric: tabular-nums;
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
/* The editors inside the cell (InputCellRenderer, SelectCellRenderer) – before 1.1.99 these were inline styles,
|
|
1108
|
+
which a strict Content-Security-Policy (style-src without 'unsafe-inline') blocks */
|
|
1109
|
+
input.ge-table-cell-editor-input {
|
|
1110
|
+
width: calc(100% - 8px);
|
|
1111
|
+
height: 100%;
|
|
1112
|
+
border: 0;
|
|
1113
|
+
padding: 0;
|
|
1114
|
+
padding-inline-start: 8px;
|
|
1115
|
+
}
|
|
1116
|
+
select.ge-table-cell-editor-select {
|
|
1117
|
+
width: 100%;
|
|
1118
|
+
height: 100%;
|
|
1119
|
+
border: 0;
|
|
1120
|
+
padding: 0;
|
|
1121
|
+
padding-inline-start: 8px;
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
/* Formula input (since 1.1.99, tableOptions.cellFormulas): colored references in the editor (a mirror behind the
|
|
1125
|
+
transparent text of the input), frames around the referenced cells, function suggestions and the argument hint */
|
|
1126
|
+
.ge-table-formula-mirror {
|
|
1127
|
+
position: absolute;
|
|
1128
|
+
inset: 0;
|
|
1129
|
+
box-sizing: border-box;
|
|
1130
|
+
display: flex;
|
|
1131
|
+
align-items: center;
|
|
1132
|
+
padding: 0 6px;
|
|
1133
|
+
border: 2px solid transparent;
|
|
1134
|
+
overflow: hidden;
|
|
1135
|
+
white-space: pre;
|
|
1136
|
+
pointer-events: none;
|
|
1137
|
+
font: inherit;
|
|
1138
|
+
color: var(--ge-table-cell-editor-text);
|
|
1139
|
+
direction: ltr;
|
|
1140
|
+
text-align: left;
|
|
1141
|
+
}
|
|
1142
|
+
.ge-table-cell-editor-field.ge-table-formula-input {
|
|
1143
|
+
position: relative;
|
|
1144
|
+
color: transparent;
|
|
1145
|
+
caret-color: var(--ge-table-cell-editor-text);
|
|
1146
|
+
background: transparent;
|
|
1147
|
+
text-align: left; /* formulas read left to right (Excel), also in number columns and right-to-left tables */
|
|
1148
|
+
direction: ltr;
|
|
1149
|
+
}
|
|
1150
|
+
.ge-table-cell-editor-field.ge-table-formula-input::selection {
|
|
1151
|
+
color: transparent;
|
|
1152
|
+
background: rgba(10, 110, 189, 0.3); /* the mirror's text stays readable under the selection */
|
|
1153
|
+
}
|
|
1154
|
+
.ge-table-formula-ref {
|
|
1155
|
+
position: absolute;
|
|
1156
|
+
box-sizing: border-box;
|
|
1157
|
+
border: 2px solid var(--ge-table-formula-ref-0);
|
|
1158
|
+
pointer-events: none;
|
|
1159
|
+
z-index: 9400; /* above the cells, below the editor (9500) */
|
|
1160
|
+
}
|
|
1161
|
+
.ge-table-formula-ref-text-0 { color: var(--ge-table-formula-ref-0); }
|
|
1162
|
+
.ge-table-formula-ref-text-1 { color: var(--ge-table-formula-ref-1); }
|
|
1163
|
+
.ge-table-formula-ref-text-2 { color: var(--ge-table-formula-ref-2); }
|
|
1164
|
+
.ge-table-formula-ref-text-3 { color: var(--ge-table-formula-ref-3); }
|
|
1165
|
+
.ge-table-formula-ref-text-4 { color: var(--ge-table-formula-ref-4); }
|
|
1166
|
+
.ge-table-formula-ref-text-5 { color: var(--ge-table-formula-ref-5); }
|
|
1167
|
+
.ge-table-formula-ref-text-6 { color: var(--ge-table-formula-ref-6); }
|
|
1168
|
+
.ge-table-formula-ref-text-7 { color: var(--ge-table-formula-ref-7); }
|
|
1169
|
+
.ge-table-formula-ref.ge-table-formula-ref-1 { border-color: var(--ge-table-formula-ref-1); }
|
|
1170
|
+
.ge-table-formula-ref.ge-table-formula-ref-2 { border-color: var(--ge-table-formula-ref-2); }
|
|
1171
|
+
.ge-table-formula-ref.ge-table-formula-ref-3 { border-color: var(--ge-table-formula-ref-3); }
|
|
1172
|
+
.ge-table-formula-ref.ge-table-formula-ref-4 { border-color: var(--ge-table-formula-ref-4); }
|
|
1173
|
+
.ge-table-formula-ref.ge-table-formula-ref-5 { border-color: var(--ge-table-formula-ref-5); }
|
|
1174
|
+
.ge-table-formula-ref.ge-table-formula-ref-6 { border-color: var(--ge-table-formula-ref-6); }
|
|
1175
|
+
.ge-table-formula-ref.ge-table-formula-ref-7 { border-color: var(--ge-table-formula-ref-7); }
|
|
1176
|
+
.ge-table-formula-list,
|
|
1177
|
+
.ge-table-formula-hint {
|
|
1178
|
+
position: absolute;
|
|
1179
|
+
top: 100%;
|
|
1180
|
+
inset-inline-start: 0;
|
|
1181
|
+
margin-top: 2px;
|
|
1182
|
+
box-sizing: border-box;
|
|
1183
|
+
background: var(--ge-table-formula-popup-bg);
|
|
1184
|
+
color: var(--ge-table-formula-popup-text);
|
|
1185
|
+
border: 1px solid var(--ge-table-formula-popup-border);
|
|
1186
|
+
box-shadow: var(--ge-table-cell-editor-shadow);
|
|
1187
|
+
font-size: 13px;
|
|
1188
|
+
line-height: 1.5;
|
|
1189
|
+
}
|
|
1190
|
+
.ge-table-formula-list {
|
|
1191
|
+
min-width: 260px;
|
|
1192
|
+
max-width: 420px;
|
|
1193
|
+
max-height: 216px;
|
|
1194
|
+
overflow-y: auto;
|
|
1195
|
+
padding: 2px 0;
|
|
1196
|
+
}
|
|
1197
|
+
.ge-table-formula-option {
|
|
1198
|
+
display: flex;
|
|
1199
|
+
gap: 8px;
|
|
1200
|
+
padding: 1px 8px;
|
|
1201
|
+
white-space: nowrap;
|
|
1202
|
+
cursor: pointer;
|
|
1203
|
+
}
|
|
1204
|
+
.ge-table-formula-option[aria-selected="true"] {
|
|
1205
|
+
background: var(--ge-table-formula-popup-active-bg);
|
|
1206
|
+
}
|
|
1207
|
+
.ge-table-formula-option-name {
|
|
1208
|
+
font-weight: 600;
|
|
1209
|
+
}
|
|
1210
|
+
.ge-table-formula-option-description {
|
|
1211
|
+
overflow: hidden;
|
|
1212
|
+
text-overflow: ellipsis;
|
|
1213
|
+
color: var(--ge-table-formula-popup-muted);
|
|
1214
|
+
}
|
|
1215
|
+
.ge-table-formula-hint {
|
|
1216
|
+
padding: 2px 8px;
|
|
1217
|
+
white-space: nowrap;
|
|
1218
|
+
}
|
|
1219
|
+
.ge-table-formula-hint b {
|
|
1220
|
+
font-weight: 700;
|
|
1221
|
+
}
|
|
1222
|
+
/* Spreadsheet mode (since 1.1.99): the formula bar (FormulaBar) */
|
|
1223
|
+
.ge-table-formula-bar {
|
|
1224
|
+
display: flex;
|
|
1225
|
+
align-items: stretch;
|
|
1226
|
+
gap: 0;
|
|
1227
|
+
box-sizing: border-box;
|
|
1228
|
+
height: 30px;
|
|
1229
|
+
border: 1px solid var(--ge-table-formula-bar-border);
|
|
1230
|
+
background: var(--ge-table-formula-bar-bg);
|
|
1231
|
+
color: var(--ge-table-formula-bar-text);
|
|
1232
|
+
font: inherit;
|
|
1233
|
+
}
|
|
1234
|
+
.ge-table-formula-bar-address,
|
|
1235
|
+
.ge-table-formula-bar-input {
|
|
1236
|
+
box-sizing: border-box;
|
|
1237
|
+
margin: 0;
|
|
1238
|
+
padding: 0 8px;
|
|
1239
|
+
border: 0;
|
|
1240
|
+
outline: none;
|
|
1241
|
+
font: inherit;
|
|
1242
|
+
color: inherit;
|
|
1243
|
+
background: transparent;
|
|
1244
|
+
}
|
|
1245
|
+
.ge-table-formula-bar-address {
|
|
1246
|
+
flex: 0 0 96px;
|
|
1247
|
+
width: 96px;
|
|
1248
|
+
border-inline-end: 1px solid var(--ge-table-formula-bar-border);
|
|
1249
|
+
font-variant-numeric: tabular-nums;
|
|
1250
|
+
}
|
|
1251
|
+
.ge-table-formula-bar-address[aria-invalid="true"] {
|
|
1252
|
+
box-shadow: inset 0 0 0 2px var(--ge-table-cell-editor-invalid-border);
|
|
1253
|
+
}
|
|
1254
|
+
.ge-table-formula-bar-fx {
|
|
1255
|
+
display: flex;
|
|
1256
|
+
align-items: center;
|
|
1257
|
+
padding: 0 8px;
|
|
1258
|
+
font-style: italic;
|
|
1259
|
+
color: var(--ge-table-formula-bar-muted);
|
|
1260
|
+
border-inline-end: 1px solid var(--ge-table-formula-bar-border);
|
|
1261
|
+
}
|
|
1262
|
+
.ge-table-formula-bar-input {
|
|
1263
|
+
flex: 1 1 auto;
|
|
1264
|
+
min-width: 0;
|
|
1265
|
+
direction: ltr; /* formulas read left to right */
|
|
1266
|
+
text-align: left;
|
|
1267
|
+
}
|
|
1268
|
+
.ge-table-formula-bar-address:focus-visible,
|
|
1269
|
+
.ge-table-formula-bar-input:focus-visible {
|
|
1270
|
+
box-shadow: inset 0 0 0 2px var(--ge-table-cell-editor-border);
|
|
1271
|
+
}
|
|
925
1272
|
/* Tree table */
|
|
926
1273
|
|
|
927
1274
|
.ge-table-col-div.ge-table-col-div-0.ge-table-tree-cell {
|
|
928
|
-
text-align:
|
|
1275
|
+
text-align: start;
|
|
929
1276
|
}
|
|
930
1277
|
|
|
931
1278
|
.ge-table-tree-cell .ge-table-label-div {
|
|
932
|
-
padding-
|
|
933
|
-
padding-
|
|
1279
|
+
padding-inline-start: 0;
|
|
1280
|
+
padding-inline-end: 10px;
|
|
934
1281
|
display: inline;
|
|
935
1282
|
}
|
|
936
1283
|
|
|
937
1284
|
|
|
938
1285
|
.ge-table-col-tree {
|
|
939
|
-
text-align:
|
|
1286
|
+
text-align: start;
|
|
940
1287
|
}
|
|
941
1288
|
|
|
942
1289
|
/* Row numbers (RowNumberColumnDef) in a tree: no tree look – right aligned like in a flat table (since 1.1.93) */
|
|
943
1290
|
.ge-table-col-div.ge-table-row-number.ge-table-tree-cell {
|
|
944
|
-
text-align:
|
|
1291
|
+
text-align: end;
|
|
945
1292
|
}
|
|
946
1293
|
.ge-table-row-number.ge-table-tree-cell .ge-table-label-div {
|
|
947
1294
|
display: block;
|
|
@@ -949,47 +1296,47 @@ html[data-theme="dark"] {
|
|
|
949
1296
|
}
|
|
950
1297
|
|
|
951
1298
|
.ge-padding-property-checkbox {
|
|
952
|
-
padding-
|
|
1299
|
+
padding-inline-start: 0;
|
|
953
1300
|
}
|
|
954
1301
|
|
|
955
1302
|
.ge-table-col-tree.ge-table-tree-deep-0 {
|
|
956
|
-
padding-
|
|
1303
|
+
padding-inline-start: 16px;
|
|
957
1304
|
}
|
|
958
1305
|
|
|
959
1306
|
.ge-table-col-tree.ge-table-tree-deep-1 {
|
|
960
|
-
padding-
|
|
1307
|
+
padding-inline-start: 36px;
|
|
961
1308
|
}
|
|
962
1309
|
|
|
963
1310
|
.ge-table-col-tree.ge-table-tree-deep-2 {
|
|
964
|
-
padding-
|
|
1311
|
+
padding-inline-start: 56px;
|
|
965
1312
|
}
|
|
966
1313
|
|
|
967
1314
|
.ge-table-col-tree.ge-table-tree-deep-3 {
|
|
968
|
-
padding-
|
|
1315
|
+
padding-inline-start: 76px;
|
|
969
1316
|
}
|
|
970
1317
|
|
|
971
1318
|
.ge-table-col-tree.ge-table-tree-deep-4 {
|
|
972
|
-
padding-
|
|
1319
|
+
padding-inline-start: 96px;
|
|
973
1320
|
}
|
|
974
1321
|
|
|
975
1322
|
.ge-table-col-tree.ge-table-tree-deep-5 {
|
|
976
|
-
padding-
|
|
1323
|
+
padding-inline-start: 116px;
|
|
977
1324
|
}
|
|
978
1325
|
|
|
979
1326
|
.ge-table-col-tree.ge-table-tree-deep-6 {
|
|
980
|
-
padding-
|
|
1327
|
+
padding-inline-start: 136px;
|
|
981
1328
|
}
|
|
982
1329
|
|
|
983
1330
|
.ge-table-col-tree.ge-table-tree-deep-7 {
|
|
984
|
-
padding-
|
|
1331
|
+
padding-inline-start: 156px;
|
|
985
1332
|
}
|
|
986
1333
|
|
|
987
1334
|
.ge-table-col-tree.ge-table-tree-deep-8 {
|
|
988
|
-
padding-
|
|
1335
|
+
padding-inline-start: 176px;
|
|
989
1336
|
}
|
|
990
1337
|
|
|
991
1338
|
.ge-table-col-tree.ge-table-tree-deep-9 {
|
|
992
|
-
padding-
|
|
1339
|
+
padding-inline-start: 196px;
|
|
993
1340
|
}
|
|
994
1341
|
|
|
995
1342
|
.ge-table-col-div.ge-table-col-tree.ge-table-tree-cell {
|
|
@@ -1000,3 +1347,10 @@ html[data-theme="dark"] {
|
|
|
1000
1347
|
display: grid;
|
|
1001
1348
|
grid-template-columns: 16px 20px 1fr;
|
|
1002
1349
|
}
|
|
1350
|
+
|
|
1351
|
+
/* Right-to-left (direction: "rtl", since 1.1.98): the arrow ">" is mirrored by the browser ("<"), so the expanded
|
|
1352
|
+
arrow of the default icon turns the other way (its transform is an inline style: !important). */
|
|
1353
|
+
.ge-table[dir="rtl"] .gt-table-tree-arrow-expanded:not(.ge-table[dir="rtl"] .ge-table[dir="ltr"] .gt-table-tree-arrow-expanded) {
|
|
1354
|
+
transform: rotate(-90deg) translate(-66%, -66%) !important;
|
|
1355
|
+
transform-origin: 100% 0 !important;
|
|
1356
|
+
}
|
package/css/table-classes.css
CHANGED
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
.ge-table-label-div .ge-table-label {
|
|
45
|
-
padding-
|
|
46
|
-
padding-
|
|
45
|
+
padding-inline-start: 10px;
|
|
46
|
+
padding-inline-end: 10px;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/* Total rows of AreaModelAggregateFooter (1.1.94) – before the align classes, so a column's footer class wins */
|
|
@@ -67,21 +67,45 @@
|
|
|
67
67
|
overflow: visible;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
/* "left" and "right" describe the left-to-right layout: start and end of the row – mirrored in right-to-left
|
|
71
|
+
(direction: "rtl", since 1.1.98). A column that must stay physically right needs its own class. */
|
|
70
72
|
.ge-table-text-align-left {
|
|
71
|
-
text-align:
|
|
73
|
+
text-align: start;
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
.ge-table-text-align-right {
|
|
77
|
+
text-align: end;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.ge-table-text-align-start {
|
|
81
|
+
text-align: start;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.ge-table-text-align-end {
|
|
85
|
+
text-align: end;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* Latin text with punctuation in a right-to-left table ("Rossi S.p.A." would show as ".Rossi S.p.A"): every label gets
|
|
89
|
+
the direction of its own text (unicode-bidi: plaintext) and stays aligned to the start of the table (since 1.1.98). */
|
|
90
|
+
.ge-table-text-plaintext {
|
|
91
|
+
text-align: left;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.ge-table[dir="rtl"] .ge-table-text-plaintext:not(.ge-table[dir="rtl"] .ge-table[dir="ltr"] .ge-table-text-plaintext) {
|
|
75
95
|
text-align: right;
|
|
76
96
|
}
|
|
77
97
|
|
|
98
|
+
.ge-table-text-plaintext .ge-table-label {
|
|
99
|
+
unicode-bidi: plaintext;
|
|
100
|
+
}
|
|
101
|
+
|
|
78
102
|
.ge-table-text-align-center {
|
|
79
103
|
text-align: center;
|
|
80
104
|
}
|
|
81
105
|
|
|
82
106
|
/* Row checkbox */
|
|
83
107
|
.ge-table-row-checkbox-div {
|
|
84
|
-
padding-
|
|
108
|
+
padding-inline-start: 14px;
|
|
85
109
|
}
|
|
86
110
|
.ge-table-body-east {
|
|
87
111
|
z-index: 999;
|
|
@@ -105,10 +129,10 @@
|
|
|
105
129
|
overflow-y: auto;
|
|
106
130
|
table th,
|
|
107
131
|
table td {
|
|
108
|
-
text-align:
|
|
132
|
+
text-align: start;
|
|
109
133
|
|
|
110
134
|
&:nth-child(2) {
|
|
111
|
-
padding-
|
|
135
|
+
padding-inline-start: 12px;
|
|
112
136
|
}
|
|
113
137
|
&.ge-table-crud-object-view-object-child {
|
|
114
138
|
font-weight: bold;
|
|
@@ -145,7 +169,7 @@
|
|
|
145
169
|
justify-items: stretch;
|
|
146
170
|
label {
|
|
147
171
|
align-self: end;
|
|
148
|
-
text-align:
|
|
172
|
+
text-align: end;
|
|
149
173
|
line-height: 2;
|
|
150
174
|
}
|
|
151
175
|
}
|
|
@@ -169,9 +193,9 @@
|
|
|
169
193
|
}
|
|
170
194
|
|
|
171
195
|
|
|
172
|
-
/* room for the sort icon (20px, absolute,
|
|
196
|
+
/* room for the sort icon (20px, absolute, at the end) – otherwise it covers end-aligned header labels */
|
|
173
197
|
.ge-table-col-div:has(> .ge-table-sorted-icon-div) .ge-table-label {
|
|
174
|
-
padding-
|
|
198
|
+
padding-inline-end: 22px;
|
|
175
199
|
}
|
|
176
200
|
|
|
177
201
|
|