@guiexpert/table 1.1.91 → 1.1.92

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.
Files changed (43) hide show
  1. package/README.md +5 -1
  2. package/css/main.css +79 -0
  3. package/css/table-classes.css +63 -0
  4. package/css/table-color-vars.css +16 -0
  5. package/index.cjs +58 -34
  6. package/index.d.ts +11 -0
  7. package/index.js +2425 -1243
  8. package/lib/table/aria/live-announcer.d.ts +9 -0
  9. package/lib/table/crud/crud-table-model-factory.d.ts +8 -0
  10. package/lib/table/data/common/event/ge-state-change-event.d.ts +30 -0
  11. package/lib/table/data/options/auto-restore-options.d.ts +14 -2
  12. package/lib/table/data/options/auto-restore-options.if.d.ts +94 -52
  13. package/lib/table/data/options/default-row-id.d.ts +4 -0
  14. package/lib/table/data/options/overlay-options.d.ts +30 -0
  15. package/lib/table/data/options/overlay-options.if.d.ts +79 -0
  16. package/lib/table/data/options/table-options.d.ts +3 -0
  17. package/lib/table/data/options/table-options.if.d.ts +35 -0
  18. package/lib/table/data/tablemodel/areamodel/area-model-array-of-arrays.d.ts +7 -0
  19. package/lib/table/data/tablemodel/areamodel/area-model-cell-groups.d.ts +31 -0
  20. package/lib/table/data/tablemodel/areamodel/area-model-object-array.d.ts +13 -0
  21. package/lib/table/data/tablemodel/areamodel/area-model-tree.d.ts +9 -0
  22. package/lib/table/data/tablemodel/areamodel/area-model.if.d.ts +19 -0
  23. package/lib/table/data/tablemodel/areamodel/cover-grid-body-model.d.ts +7 -0
  24. package/lib/table/data/tablemodel/cellgroup/cell-group.d.ts +2 -0
  25. package/lib/table/data/tablemodel/cellgroup/cell-group.if.d.ts +6 -0
  26. package/lib/table/data/tablemodel/column/column-visibility.d.ts +5 -0
  27. package/lib/table/ele-scope.d.ts +17 -0
  28. package/lib/table/event-adapter.d.ts +3 -0
  29. package/lib/table/event-listener.if.d.ts +8 -0
  30. package/lib/table/mouse-handler.d.ts +2 -0
  31. package/lib/table/overlay/calc-overlay-kind.d.ts +31 -0
  32. package/lib/table/overlay/ge-overlay-kind.type.d.ts +17 -0
  33. package/lib/table/overlay/table-overlay.d.ts +108 -0
  34. package/lib/table/render-scope.d.ts +26 -2
  35. package/lib/table/service/convenience-dom.service.d.ts +1 -1
  36. package/lib/table/state/state-storage.if.d.ts +39 -0
  37. package/lib/table/state/table-state-migration.d.ts +36 -0
  38. package/lib/table/state/table-state-part.d.ts +13 -0
  39. package/lib/table/state/table-state.if.d.ts +181 -0
  40. package/lib/table/state/table-state.service.d.ts +158 -0
  41. package/lib/table/table-api.d.ts +154 -0
  42. package/lib/table/table-scope.d.ts +78 -31
  43. package/package.json +1 -1
package/README.md CHANGED
@@ -27,13 +27,17 @@ This is the UI-agnostic table component for your next web app. 😊
27
27
  - Tree table (Hierarchical View)
28
28
  - Accessibility: screen readers (WAI-ARIA grid/treegrid, row/column counts with virtual scrolling, announcements of
29
29
  sorting, filter and copy) and full keyboard navigation (arrows, Home/End, Page Up/Down, header focus, Enter) – since 1.1.91
30
+ - Overlays "Loading…" (CSS spinner, `tableApi.showLoadingOverlay()`, `loading` prop in the wrappers) and
31
+ "No rows to show" / "No matching rows" (automatic) – plain HTML/CSS, since 1.1.92
30
32
  - Custom Filtering
31
33
  - In-place Cell Editing
32
34
  - Userdefined Key and Mouse Events
33
35
  - Customizable Look & Feel (via CSS variables)
34
36
  - Row sorting
35
37
  - Column Reordering (Drag and Drop)
36
- - State Persistence (Row Sorting, Column Order, Selection)
38
+ - State persistence: column layout (width, order, visibility), sorting, scroll position, tree, checked and selected
39
+ rows, header groups – in `localStorage` (`autoRestoreOptions`) or on your server (`tableApi.getState()` /
40
+ `applyState()`, `initialState`, `onStateChanged`); stored by property and row id, never by index – since 1.1.92
37
41
  - Customizable Cell Contents via Renderer for Header, Body and Footer
38
42
  - Full control over the HTML structure and style
39
43
 
package/css/main.css CHANGED
@@ -154,6 +154,69 @@
154
154
  }
155
155
 
156
156
 
157
+ /* Overlays over the body: "Loading…" with a CSS spinner, "No rows to show", "No matching rows" (since 1.1.92).
158
+ Position and size are set inline by the table (the visible body), display is switched inline (none / flex). */
159
+ .ge-table-overlay {
160
+ z-index: 10000; /* above .ge-table-body-east (999) and the focus frame (9999) */
161
+ box-sizing: border-box;
162
+ overflow: hidden;
163
+ align-items: center;
164
+ justify-content: center;
165
+ pointer-events: none; /* "no rows" never blocks */
166
+ color: var(--ge-table-overlay-color);
167
+ }
168
+ .ge-table-overlay-loading {
169
+ background-color: var(--ge-table-overlay-bg);
170
+ }
171
+ .ge-table-overlay-blocking {
172
+ pointer-events: auto; /* catches clicks, hover and the context menu while loading */
173
+ cursor: progress;
174
+ }
175
+ .ge-table-overlay-content {
176
+ display: flex;
177
+ flex-direction: column;
178
+ align-items: center;
179
+ gap: 10px;
180
+ max-width: 100%;
181
+ padding-inline: 16px;
182
+ box-sizing: border-box;
183
+ text-align: center;
184
+ }
185
+ .ge-table-overlay-loading .ge-table-overlay-content {
186
+ /* a small card: the text stays readable over the rows of a refresh */
187
+ padding: 12px 20px;
188
+ border-radius: 8px;
189
+ background-color: var(--ge-table-overlay-content-bg);
190
+ box-shadow: 0 1px 6px rgba(0, 0, 0, 0.18);
191
+ }
192
+ .ge-table-overlay-text {
193
+ color: var(--ge-table-overlay-color);
194
+ font-size: 14px;
195
+ line-height: 1.4;
196
+ overflow-wrap: anywhere;
197
+ }
198
+ .ge-table-spinner {
199
+ flex: none;
200
+ box-sizing: border-box;
201
+ width: var(--ge-table-spinner-size);
202
+ height: var(--ge-table-spinner-size);
203
+ border: 3px solid var(--ge-table-spinner-track-color);
204
+ border-top-color: var(--ge-table-spinner-color);
205
+ border-radius: 50%;
206
+ animation: ge-table-spin 0.8s linear infinite;
207
+ }
208
+ @keyframes ge-table-spin {
209
+ to {
210
+ transform: rotate(360deg);
211
+ }
212
+ }
213
+ @media (prefers-reduced-motion: reduce) {
214
+ .ge-table-spinner {
215
+ animation: none; /* a still ring segment and the text */
216
+ }
217
+ }
218
+
219
+
157
220
  .ge-table { background-color: var(--ge-table-bg); }
158
221
 
159
222
  .ge-table-header-west { background-color: var(--ge-table-header-west-bg); }
@@ -336,6 +399,14 @@
336
399
  before 1.1.91: #fcb515 (1.8 : 1) and #36BB6C (2.5 : 1) */
337
400
  --ge-table-color-star-rating: #a86f00;
338
401
  --ge-table-color-progress-bar: #1e874b;
402
+
403
+ /* Overlays "Loading…" / "No rows" (since 1.1.92) */
404
+ --ge-table-overlay-bg: rgba(255, 255, 255, 0.7);
405
+ --ge-table-overlay-content-bg: #fff;
406
+ --ge-table-overlay-color: #333;
407
+ --ge-table-spinner-color: #1a73e8;
408
+ --ge-table-spinner-track-color: rgba(0, 0, 0, 0.12);
409
+ --ge-table-spinner-size: 28px;
339
410
  }
340
411
 
341
412
 
@@ -410,6 +481,14 @@ html[data-theme="dark"] {
410
481
 
411
482
  --ge-table-color-star-rating: #fcb515;
412
483
  --ge-table-color-progress-bar: #36BB6C;
484
+
485
+ /* Overlays "Loading…" / "No rows" (since 1.1.92) */
486
+ --ge-table-overlay-bg: rgba(17, 24, 39, 0.7); /* --ge-table-bg of the dark theme */
487
+ --ge-table-overlay-content-bg: #1f2937;
488
+ --ge-table-overlay-color: #ddd;
489
+ --ge-table-spinner-color: #8ab4f8;
490
+ --ge-table-spinner-track-color: rgba(255, 255, 255, 0.18);
491
+ --ge-table-spinner-size: 28px;
413
492
  }
414
493
  /* Tree table */
415
494
 
@@ -152,3 +152,66 @@
152
152
  .ge-table-col-div:has(> .ge-table-sorted-icon-div) .ge-table-label {
153
153
  padding-right: 22px;
154
154
  }
155
+
156
+
157
+ /* Overlays over the body: "Loading…" with a CSS spinner, "No rows to show", "No matching rows" (since 1.1.92).
158
+ Position and size are set inline by the table (the visible body), display is switched inline (none / flex). */
159
+ .ge-table-overlay {
160
+ z-index: 10000; /* above .ge-table-body-east (999) and the focus frame (9999) */
161
+ box-sizing: border-box;
162
+ overflow: hidden;
163
+ align-items: center;
164
+ justify-content: center;
165
+ pointer-events: none; /* "no rows" never blocks */
166
+ color: var(--ge-table-overlay-color);
167
+ }
168
+ .ge-table-overlay-loading {
169
+ background-color: var(--ge-table-overlay-bg);
170
+ }
171
+ .ge-table-overlay-blocking {
172
+ pointer-events: auto; /* catches clicks, hover and the context menu while loading */
173
+ cursor: progress;
174
+ }
175
+ .ge-table-overlay-content {
176
+ display: flex;
177
+ flex-direction: column;
178
+ align-items: center;
179
+ gap: 10px;
180
+ max-width: 100%;
181
+ padding-inline: 16px;
182
+ box-sizing: border-box;
183
+ text-align: center;
184
+ }
185
+ .ge-table-overlay-loading .ge-table-overlay-content {
186
+ /* a small card: the text stays readable over the rows of a refresh */
187
+ padding: 12px 20px;
188
+ border-radius: 8px;
189
+ background-color: var(--ge-table-overlay-content-bg);
190
+ box-shadow: 0 1px 6px rgba(0, 0, 0, 0.18);
191
+ }
192
+ .ge-table-overlay-text {
193
+ color: var(--ge-table-overlay-color);
194
+ font-size: 14px;
195
+ line-height: 1.4;
196
+ overflow-wrap: anywhere;
197
+ }
198
+ .ge-table-spinner {
199
+ flex: none;
200
+ box-sizing: border-box;
201
+ width: var(--ge-table-spinner-size);
202
+ height: var(--ge-table-spinner-size);
203
+ border: 3px solid var(--ge-table-spinner-track-color);
204
+ border-top-color: var(--ge-table-spinner-color);
205
+ border-radius: 50%;
206
+ animation: ge-table-spin 0.8s linear infinite;
207
+ }
208
+ @keyframes ge-table-spin {
209
+ to {
210
+ transform: rotate(360deg);
211
+ }
212
+ }
213
+ @media (prefers-reduced-motion: reduce) {
214
+ .ge-table-spinner {
215
+ animation: none; /* a still ring segment and the text */
216
+ }
217
+ }
@@ -83,6 +83,14 @@ html, html[data-theme="light"] {
83
83
  before 1.1.91: #fcb515 (1.8 : 1) and #36BB6C (2.5 : 1) */
84
84
  --ge-table-color-star-rating: #a86f00;
85
85
  --ge-table-color-progress-bar: #1e874b;
86
+
87
+ /* Overlays "Loading…" / "No rows" (since 1.1.92) */
88
+ --ge-table-overlay-bg: rgba(255, 255, 255, 0.7);
89
+ --ge-table-overlay-content-bg: #fff;
90
+ --ge-table-overlay-color: #333;
91
+ --ge-table-spinner-color: #1a73e8;
92
+ --ge-table-spinner-track-color: rgba(0, 0, 0, 0.12);
93
+ --ge-table-spinner-size: 28px;
86
94
  }
87
95
 
88
96
 
@@ -157,4 +165,12 @@ html[data-theme="dark"] {
157
165
 
158
166
  --ge-table-color-star-rating: #fcb515;
159
167
  --ge-table-color-progress-bar: #36BB6C;
168
+
169
+ /* Overlays "Loading…" / "No rows" (since 1.1.92) */
170
+ --ge-table-overlay-bg: rgba(17, 24, 39, 0.7); /* --ge-table-bg of the dark theme */
171
+ --ge-table-overlay-content-bg: #1f2937;
172
+ --ge-table-overlay-color: #ddd;
173
+ --ge-table-spinner-color: #8ab4f8;
174
+ --ge-table-spinner-track-color: rgba(255, 255, 255, 0.18);
175
+ --ge-table-spinner-size: 28px;
160
176
  }