@aquera/nile-elements 1.5.1 → 1.5.2

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 (97) hide show
  1. package/README.md +3 -0
  2. package/dist/index.cjs.js +1 -1
  3. package/dist/index.esm.js +1 -1
  4. package/dist/index.js +19 -7
  5. package/dist/nile-grid/index.cjs.js +1 -1
  6. package/dist/nile-grid/index.esm.js +1 -1
  7. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.cjs.js +1 -1
  8. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.cjs.js.map +1 -1
  9. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.cjs.js +1 -1
  10. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.cjs.js.map +1 -1
  11. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.esm.js +2 -0
  12. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.esm.js +1 -1
  13. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.utils.cjs.js +1 -1
  14. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.utils.cjs.js.map +1 -1
  15. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.utils.esm.js +1 -1
  16. package/dist/nile-grid/nile-grid-head/nile-grid-head.css.cjs.js +1 -1
  17. package/dist/nile-grid/nile-grid-head/nile-grid-head.css.cjs.js.map +1 -1
  18. package/dist/nile-grid/nile-grid-head/nile-grid-head.css.esm.js +8 -2
  19. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.cjs.js +1 -1
  20. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.cjs.js.map +1 -1
  21. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.css.cjs.js +1 -1
  22. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.css.cjs.js.map +1 -1
  23. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.css.esm.js +2 -1
  24. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.esm.js +1 -1
  25. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.cjs.js +1 -1
  26. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.cjs.js.map +1 -1
  27. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.esm.js +1 -1
  28. package/dist/nile-grid/nile-grid.cjs.js +1 -1
  29. package/dist/nile-grid/nile-grid.cjs.js.map +1 -1
  30. package/dist/nile-grid/nile-grid.css.cjs.js +1 -1
  31. package/dist/nile-grid/nile-grid.css.cjs.js.map +1 -1
  32. package/dist/nile-grid/nile-grid.css.esm.js +1 -0
  33. package/dist/nile-grid/nile-grid.esm.js +5 -3
  34. package/dist/nile-grid/nile-grid.layout.cjs.js +1 -1
  35. package/dist/nile-grid/nile-grid.layout.esm.js +1 -1
  36. package/dist/nile-grid/nile-grid.resize.cjs.js +1 -1
  37. package/dist/nile-grid/nile-grid.resize.esm.js +1 -1
  38. package/dist/nile-grid/nile-grid.utils.cjs.js +1 -1
  39. package/dist/nile-grid/nile-grid.utils.cjs.js.map +1 -1
  40. package/dist/nile-grid/nile-grid.utils.esm.js +1 -1
  41. package/dist/nile-grid/nile-grid.width.cjs.js +1 -1
  42. package/dist/nile-grid/nile-grid.width.cjs.js.map +1 -1
  43. package/dist/nile-grid/nile-grid.width.esm.js +1 -1
  44. package/dist/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.js +2 -0
  45. package/dist/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.js.map +1 -1
  46. package/dist/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.js +1 -1
  47. package/dist/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.js.map +1 -1
  48. package/dist/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.utils.d.ts +1 -1
  49. package/dist/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.utils.js +2 -2
  50. package/dist/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.utils.js.map +1 -1
  51. package/dist/src/nile-grid/nile-grid-head/nile-grid-head.css.js +6 -0
  52. package/dist/src/nile-grid/nile-grid-head/nile-grid-head.css.js.map +1 -1
  53. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.css.js +2 -1
  54. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.css.js.map +1 -1
  55. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.js +1 -1
  56. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.js.map +1 -1
  57. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.d.ts +1 -1
  58. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.js +2 -2
  59. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.js.map +1 -1
  60. package/dist/src/nile-grid/nile-grid.css.js +1 -0
  61. package/dist/src/nile-grid/nile-grid.css.js.map +1 -1
  62. package/dist/src/nile-grid/nile-grid.d.ts +30 -3
  63. package/dist/src/nile-grid/nile-grid.js +102 -29
  64. package/dist/src/nile-grid/nile-grid.js.map +1 -1
  65. package/dist/src/nile-grid/nile-grid.layout.d.ts +2 -9
  66. package/dist/src/nile-grid/nile-grid.layout.js +120 -106
  67. package/dist/src/nile-grid/nile-grid.layout.js.map +1 -1
  68. package/dist/src/nile-grid/nile-grid.resize.d.ts +1 -0
  69. package/dist/src/nile-grid/nile-grid.resize.js +7 -3
  70. package/dist/src/nile-grid/nile-grid.resize.js.map +1 -1
  71. package/dist/src/nile-grid/nile-grid.utils.d.ts +1 -0
  72. package/dist/src/nile-grid/nile-grid.utils.js +24 -2
  73. package/dist/src/nile-grid/nile-grid.utils.js.map +1 -1
  74. package/dist/src/nile-grid/nile-grid.width.d.ts +2 -1
  75. package/dist/src/nile-grid/nile-grid.width.js +38 -8
  76. package/dist/src/nile-grid/nile-grid.width.js.map +1 -1
  77. package/dist/src/nile-grid/types/nile-grid.types.d.ts +5 -0
  78. package/dist/src/nile-grid/types/nile-grid.types.js.map +1 -1
  79. package/dist/src/version.js +1 -1
  80. package/dist/src/version.js.map +1 -1
  81. package/dist/tsconfig.tsbuildinfo +1 -1
  82. package/package.json +1 -1
  83. package/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.ts +2 -0
  84. package/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.ts +1 -1
  85. package/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.utils.ts +2 -1
  86. package/src/nile-grid/nile-grid-head/nile-grid-head.css.ts +6 -0
  87. package/src/nile-grid/nile-grid-head-item/nile-grid-head-item.css.ts +2 -1
  88. package/src/nile-grid/nile-grid-head-item/nile-grid-head-item.ts +1 -1
  89. package/src/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.ts +2 -1
  90. package/src/nile-grid/nile-grid.css.ts +1 -0
  91. package/src/nile-grid/nile-grid.layout.ts +122 -133
  92. package/src/nile-grid/nile-grid.resize.ts +15 -9
  93. package/src/nile-grid/nile-grid.ts +96 -27
  94. package/src/nile-grid/nile-grid.utils.ts +27 -2
  95. package/src/nile-grid/nile-grid.width.ts +45 -14
  96. package/src/nile-grid/types/nile-grid.types.ts +7 -1
  97. package/vscode-html-custom-data.json +3 -3
@@ -9,9 +9,10 @@ import { html, CSSResultArray, TemplateResult } from 'lit';
9
9
  import { customElement, property, query, state } from 'lit/decorators.js';
10
10
  import { styles } from './nile-grid.css';
11
11
  import NileElement from '../internal/nile-element';
12
- import { rebuildTemplate, syncStickyShadows, layout } from './nile-grid.layout';
12
+ import { syncStickyShadows, layout } from './nile-grid.layout';
13
13
  import { listenToEventListeners, removeEventListeners, getHead, getBody } from './nile-grid.utils';
14
- import { computeNewWidth, resizeWithScroll, applyAfterResize, resizeNoScroll } from './nile-grid.resize';
14
+ import { computeNewWidth, resizeWithScroll, resizeNoScroll, updateResizeGuides } from './nile-grid.resize';
15
+ import { PrefixColumn } from './types/nile-grid.types';
15
16
 
16
17
  /**
17
18
  * Nile grid component.
@@ -29,9 +30,6 @@ export class NileGrid extends NileElement {
29
30
  return [styles];
30
31
  }
31
32
 
32
- /** To set the grid template columns in rebuildTemplate method */
33
- @state() public colTemplate = '';
34
-
35
33
  /** To store the column widths in the beginning and after resizing */
36
34
  @state() public columnWidths: number[] = [];
37
35
 
@@ -44,8 +42,14 @@ export class NileGrid extends NileElement {
44
42
  /** To get the last resize line to show the resize handle */
45
43
  @query('.nile-resize-end') resizeEnd: HTMLElement;
46
44
 
45
+ /** To get the last resize line to show the resize handle */
46
+ @query('.shadow-left') shadowLeft: HTMLElement;
47
+
48
+ /** To get the last resize line to show the resize handle */
49
+ @query('.shadow-right') shadowRight: HTMLElement;
50
+
47
51
  /** To enable horizontal scrolling when user is resizing */
48
- @property({ type: Boolean, attribute: true, reflect: true }) enableResizeScroll: boolean = false;
52
+ @property({ type: Boolean, attribute: true, reflect: true }) enableScroll: boolean = false;
49
53
 
50
54
  /** To enable hoverable rows */
51
55
  @property({ type: Boolean, attribute: true, reflect: true }) hoverable: boolean = false;
@@ -81,6 +85,61 @@ export class NileGrid extends NileElement {
81
85
  /** To check if the widths are initialized */
82
86
  @state() public lockedWidthColumns: boolean[] = [];
83
87
 
88
+ /** prefix columns width */
89
+ @state() public prefixSumColumnsWidth: PrefixColumn[] = [];
90
+
91
+ /** prefix columns width */
92
+ @state() public stickyColumns: number[] = [];
93
+
94
+ /** body rows */
95
+ @state() public bodyRows: HTMLElement[] = [];
96
+
97
+ /** head rows */
98
+ @state() public headRows: HTMLElement[] = [];
99
+
100
+ @state() public needsStructureLayout = false;
101
+
102
+ @state() public needsWidthLayout = false;
103
+
104
+ @state() public needsSpanLayout = false;
105
+
106
+ @state() public colCount = 0;
107
+
108
+ public shadowLeftVisibleSticky?: boolean;
109
+
110
+ public shadowRightVisibleSticky?: boolean;
111
+
112
+ public stickyLeftHeadEls: HTMLElement[] = [];
113
+
114
+ public stickyRightHeadEls: HTMLElement[] = [];
115
+
116
+ public stickyLeftBodyEls: HTMLElement[] = [];
117
+
118
+ public stickyRightBodyEls: HTMLElement[] = [];
119
+
120
+ private resizeTimer: any = 0;
121
+
122
+ /** To throttle sticky shadow updates */
123
+ private shadowRaf = 0;
124
+
125
+ constructor() {
126
+ super();
127
+ }
128
+
129
+ connectedCallback(): void {
130
+ super.connectedCallback();
131
+ this.emit('nile-init');
132
+ }
133
+
134
+ private syncStickyShadowsRaf = () => {
135
+ if (this.shadowRaf) return;
136
+ this.shadowRaf = requestAnimationFrame(() => {
137
+ this.shadowRaf = 0;
138
+ syncStickyShadows(this);
139
+ });
140
+ };
141
+
142
+
84
143
  private scheduleLayout() {
85
144
  if (this.raf) cancelAnimationFrame(this.raf);
86
145
  this.raf = requestAnimationFrame(() => {
@@ -89,7 +148,6 @@ export class NileGrid extends NileElement {
89
148
  this,
90
149
  this.slotEl,
91
150
  this.ensureWidths.bind(this),
92
- rebuildTemplate,
93
151
  this.stickyLeftIndexes,
94
152
  this.stickyRightIndexes
95
153
  );
@@ -99,8 +157,8 @@ export class NileGrid extends NileElement {
99
157
 
100
158
  private ensureWidths(colCount: number) {
101
159
  if (this.columnWidths.length !== colCount) {
102
- this.columnWidths = Array(colCount).fill('');
103
- this.lockedWidthColumns = Array(colCount).fill(false);
160
+ this.columnWidths = Array(colCount).fill(0);
161
+ this.lockedWidthColumns = Array(colCount).fill(false);
104
162
  }
105
163
  }
106
164
 
@@ -123,16 +181,16 @@ export class NileGrid extends NileElement {
123
181
  });
124
182
 
125
183
  if (delta0 === 0) {
126
- applyAfterResize(this, col);
184
+ updateResizeGuides(this, col);
127
185
  return;
128
186
  }
129
187
 
130
- if (!this.enableResizeScroll) {
188
+ if (!this.enableScroll) {
131
189
  resizeNoScroll({ grid: this, col, prevW, newW, floor: this.minColumnWidth });
132
190
  } else {
133
191
  resizeWithScroll({ grid: this, col, newW });
134
192
  }
135
- applyAfterResize(this, col);
193
+ updateResizeGuides(this, col);
136
194
  };
137
195
 
138
196
  protected firstUpdated() {
@@ -143,47 +201,57 @@ export class NileGrid extends NileElement {
143
201
  this.slotEl,
144
202
  this._attachObserverAndLayout.bind(this)
145
203
  );
146
- this.addEventListener('scroll', () => syncStickyShadows(this));
204
+ this.addEventListener('scroll', this.syncStickyShadowsRaf);
147
205
  this.resizeObserverStickyShadows = new ResizeObserver(() => syncStickyShadows(this));
148
206
  this.resizeObserverStickyShadows.observe(this);
149
- syncStickyShadows(this);
207
+ this.syncStickyShadowsRaf();
150
208
  }
151
209
 
152
210
  private _attachObserverAndLayout() {
153
211
  this.mo?.disconnect();
154
212
  this.mo = new MutationObserver(() => {
213
+ this.needsStructureLayout = true;
214
+ this.needsWidthLayout = true;
215
+ this.needsSpanLayout = true;
155
216
  this.scheduleLayout();
156
217
  });
157
218
  this.resizeObserver?.disconnect();
158
219
  this.resizeObserver = new ResizeObserver(() => {
159
- layout(
160
- this,
161
- this.slotEl,
162
- this.ensureWidths.bind(this),
163
- rebuildTemplate,
164
- this.stickyLeftIndexes,
165
- this.stickyRightIndexes
166
- );
220
+ if (this.resizeTimer) clearTimeout(this.resizeTimer);
221
+ this.resizeTimer = setTimeout(() => {
222
+ this.resizeTimer = 0;
223
+ this.needsWidthLayout = true;
224
+ this.scheduleLayout();
225
+ }, 16);
167
226
  });
168
227
 
169
228
  const head = getHead(this.slotEl);
170
229
  const body = getBody(this.slotEl);
230
+
171
231
  if (!head && !body) return;
172
-
173
- const target = body ?? this;
232
+ const target = head ?? this;
174
233
  this.mo.observe(target, {
175
- subtree: true,
176
234
  childList: true,
235
+ subtree: true,
177
236
  attributes: true,
178
- attributeFilter: ['colspan', 'rowspan'],
237
+ attributeFilter: ['colspan', 'rowspan', 'width', 'lockwidth', 'sticky']
179
238
  });
180
239
  this.resizeObserver?.observe(this);
240
+
241
+ if (!this.colCount || !this.columnWidths?.length) {
242
+ this.needsStructureLayout = true;
243
+ this.needsSpanLayout = true;
244
+ this.needsWidthLayout = true;
245
+ this.scheduleLayout();
246
+ }
181
247
  }
182
248
 
183
249
  public render(): TemplateResult {
184
250
  return html`
185
251
  <div part="grid-base" class="nile-grid-base">
186
- <slot part="grid-slot"></slot>
252
+ <div part="grid-slot-wrapper">
253
+ <slot part="grid-slot"></slot>
254
+ </div>
187
255
  <div part="resize-start" class="nile-resize-start"></div>
188
256
  <div part="resize-end" class="nile-resize-end"></div>
189
257
  </div>
@@ -191,6 +259,7 @@ export class NileGrid extends NileElement {
191
259
  }
192
260
 
193
261
  disconnectedCallback(): void {
262
+ this.emit('nile-destroy');
194
263
  super.disconnectedCallback?.();
195
264
  this.mo?.disconnect();
196
265
  this.resizeObserver?.disconnect();
@@ -1,4 +1,5 @@
1
1
  import { NileGrid } from './nile-grid';
2
+ import { applyAfterResize } from './nile-grid.resize'
2
3
 
3
4
  /** listenToEventListeners
4
5
  * @param nileGrid Grid element to attach listeners on
@@ -14,14 +15,18 @@ export const listenToEventListeners = (
14
15
  _attachObserverAndLayout: any
15
16
  ) => {
16
17
  nileGrid.addEventListener('nile-column-resize', onResize);
17
- nileGrid.addEventListener('nile-resize-start', () => {
18
+ nileGrid.addEventListener('nile-resize-start', (e) => {
19
+ e.stopPropagation();
18
20
  nileGrid.resizeStart.style.display = 'block';
19
21
  });
20
- nileGrid.addEventListener('nile-resize-end', () => {
22
+ nileGrid.addEventListener('nile-resize-end', (e: CustomEvent) => {
23
+ e.stopPropagation();
24
+ applyAfterResize(nileGrid, (e as CustomEvent).detail!.col);
21
25
  nileGrid.resizeStart.style.display = 'none';
22
26
  nileGrid.resizeEnd.style.display = 'none';
23
27
  });
24
28
  slotEl.addEventListener('slotchange', () => _attachObserverAndLayout());
29
+ nileGrid.addEventListener('scroll', () => scrollEventHandler(nileGrid));
25
30
  };
26
31
 
27
32
  /** removeEventListeners
@@ -46,6 +51,7 @@ export const removeEventListeners = (
46
51
  nileGrid.resizeEnd.style.display = 'none';
47
52
  });
48
53
  slotEl.removeEventListener('slotchange', () => _attachObserverAndLayout());
54
+ nileGrid.removeEventListener('scroll', () => scrollEventHandler(nileGrid));
49
55
  };
50
56
 
51
57
  /** getHead
@@ -72,4 +78,23 @@ export const getBody = (slotEl: any) => {
72
78
  (n: any) => n.tagName.toLowerCase() === 'nile-grid-body'
73
79
  ) as HTMLElement) || null
74
80
  );
81
+ };
82
+
83
+ export const scrollEventHandler = (el: NileGrid) => {
84
+ const maxY = Math.max(1, el.scrollHeight - el.clientHeight);
85
+ const maxX = Math.max(1, el.scrollWidth - el.clientWidth);
86
+
87
+ const percentageY = Math.round((el.scrollTop / maxY) * 100);
88
+ const percentageX = Math.round((el.scrollLeft / maxX) * 100);
89
+
90
+ el.emit('nile-scroll', {
91
+ bubbles: true,
92
+ composed: true,
93
+ detail: {
94
+ horizontalScroll: percentageX,
95
+ verticalScroll: percentageY,
96
+ left: el.scrollLeft,
97
+ top: el.scrollTop
98
+ }
99
+ });
75
100
  };
@@ -1,6 +1,7 @@
1
1
  import { NileGrid } from './nile-grid';
2
2
  import { applyColumnsTemplate } from './nile-grid.layout';
3
3
  import { getHead } from './nile-grid.utils';
4
+ import { PrefixColumn } from './types/nile-grid.types';
4
5
 
5
6
  /** computeColumnWidths
6
7
  * @param nileGrid Grid instance (reads minColumnWidth, columnWidths)
@@ -14,22 +15,18 @@ export function computeColumnWidths(
14
15
  colCount: number,
15
16
  columnWidths: number[],
16
17
  slotEl: any,
17
- lockedWidthColumns: boolean[]
18
+ lockedWidthColumns: boolean[],
19
+ headerChanged: boolean
18
20
  ): void {
19
21
  const minCol = nileGrid.minColumnWidth;
20
22
  const containerWidth = getContainerWidth(nileGrid);
21
- const desired = readDesiredFromHead(
22
- slotEl,
23
- colCount,
24
- containerWidth,
25
- nileGrid,
26
- lockedWidthColumns,
27
- columnWidths
28
- );
23
+ const desired = readDesiredFromHead(slotEl, colCount, containerWidth, nileGrid, lockedWidthColumns, headerChanged, columnWidths);
29
24
  const isSeeded = seedWidthsFromDesired(desired, columnWidths, minCol);
30
25
 
31
26
  distributeFlex(columnWidths, isSeeded, containerWidth, minCol);
32
- normalizeToContainer(columnWidths, containerWidth, minCol);
27
+ if(!nileGrid.enableScroll) {
28
+ normalizeToContainer(columnWidths, containerWidth, minCol);
29
+ }
33
30
  clampAndRound(columnWidths, minCol);
34
31
  applyColumnsTemplate(nileGrid, columnWidths);
35
32
  }
@@ -55,12 +52,18 @@ function readDesiredFromHead(
55
52
  containerWidth: number,
56
53
  nileGrid: NileGrid,
57
54
  lockedWidthColumns: boolean[],
55
+ headerChanged: boolean,
58
56
  prevWidths?: number[]
59
57
  ): (number | null)[] {
60
58
  const desired = Array(colCount).fill(null);
61
- const head = getHead(slotEl) as HTMLElement | null;
62
- if (head) fillDesiredFromHeadRows(head, desired, colCount, containerWidth, lockedWidthColumns);
63
- if (prevWidths?.length === colCount) fillFromPrevWidths(desired, prevWidths, nileGrid);
59
+ if (headerChanged) {
60
+ const head = getHead(slotEl) as HTMLElement | null;
61
+ if (head) fillDesiredFromHeadRows(head, desired, colCount, containerWidth, lockedWidthColumns);
62
+ }
63
+ const hasPrevWidths = !!prevWidths?.length && prevWidths.some(w => w > 0);
64
+ if (hasPrevWidths && prevWidths?.length === colCount) {
65
+ fillFromPrevWidths(desired, prevWidths, nileGrid);
66
+ }
64
67
  return desired;
65
68
  }
66
69
 
@@ -408,4 +411,32 @@ export function giveToRight(widths: number[], start: number, giveInit: number) {
408
411
  give = 0;
409
412
  }
410
413
  return give;
411
- }
414
+ }
415
+
416
+
417
+ export function addVariablesValue(nileGrid: NileGrid) {
418
+ const columnWidths = nileGrid.columnWidths;
419
+ const leftStickyColumns = nileGrid.stickyLeftIndexes;
420
+ const rightStickyColumns = nileGrid.stickyRightIndexes;
421
+ const prefixColumns: PrefixColumn[] = [];
422
+ const root = nileGrid as HTMLElement;
423
+
424
+ // --- LEFT STICKY ---
425
+ let totalLeft = 0;
426
+ for (let i = 0; i < leftStickyColumns.length; i++) {
427
+ const colIndex = leftStickyColumns[i];
428
+ prefixColumns.push({ colNumber: colIndex, left: totalLeft, right: 0 });
429
+ root.style.setProperty(`--sticky-left-${colIndex}`, `${totalLeft}px`);
430
+ totalLeft += columnWidths[colIndex];
431
+ }
432
+
433
+ // --- RIGHT STICKY ---
434
+ let totalRight = 0;
435
+ for (let i = rightStickyColumns.length - 1; i >= 0; i--) {
436
+ const colIndex = rightStickyColumns[i];
437
+ prefixColumns.push({ colNumber: colIndex, left: 0, right: totalRight });
438
+ root.style.setProperty(`--sticky-right-${colIndex}`, `${totalRight}px`);
439
+ totalRight += columnWidths[colIndex];
440
+ }
441
+ nileGrid.prefixSumColumnsWidth = prefixColumns;
442
+ }
@@ -1 +1,7 @@
1
- export type HeadItemEl = HTMLElement & { width?: number | null };
1
+ export type HeadItemEl = HTMLElement & { width?: number | null };
2
+
3
+ export type PrefixColumn = {
4
+ colNumber: number;
5
+ left: number;
6
+ right: number;
7
+ };
@@ -2197,11 +2197,11 @@
2197
2197
  },
2198
2198
  {
2199
2199
  "name": "nile-grid",
2200
- "description": "Nile grid component.\n\nAttributes:\n\n * `enableResizeScroll` {`boolean`} - To enable horizontal scrolling when user is resizing\n\n * `hoverable` {`boolean`} - To enable hoverable rows\n\n * `minColumnWidth` {`number`} - Minimum column width\n\nProperties:\n\n * `colTemplate` {`string`} - To set the grid template columns in rebuildTemplate method\n\n * `columnWidths` {`number[]`} - To store the column widths in the beginning and after resizing\n\n * `slotEl` {`HTMLSlotElement`} - To get the slot element\n\n * `resizeStart` {`HTMLElement`} - To get the first resize line to show the resize handle\n\n * `resizeEnd` {`HTMLElement`} - To get the last resize line to show the resize handle\n\n * `enableResizeScroll` {`boolean`} - To enable horizontal scrolling when user is resizing\n\n * `hoverable` {`boolean`} - To enable hoverable rows\n\n * `mo` {`MutationObserver | undefined`} - To store the mutation observer\n\n * `resizeObserver` - To store the resize observer\n\n * `resizeObserverStickyShadows` - \n\n * `raf` {`number`} - To store the request animation frame\n\n * `minColumnWidth` {`number`} - Minimum column width\n\n * `stickyLeftIndexes` {`number[]`} - To store the sticky index's\n\n * `stickyRightIndexes` {`number[]`} - To store the sticky index's\n\n * `cellHeight` {`number | null`} - To calculate the rowspan height\n\n * `headHeight` {`number | null`} - \n\n * `widthsInitialized` {`boolean`} - To check if the widths are initialized\n\n * `lockedWidthColumns` {`boolean[]`} - To check if the widths are initialized\n\n * `onResize` - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
2200
+ "description": "Nile grid component.\n\nAttributes:\n\n * `enableScroll` {`boolean`} - To enable horizontal scrolling when user is resizing\n\n * `hoverable` {`boolean`} - To enable hoverable rows\n\n * `minColumnWidth` {`number`} - Minimum column width\n\nProperties:\n\n * `columnWidths` {`number[]`} - To store the column widths in the beginning and after resizing\n\n * `slotEl` {`HTMLSlotElement`} - To get the slot element\n\n * `resizeStart` {`HTMLElement`} - To get the first resize line to show the resize handle\n\n * `resizeEnd` {`HTMLElement`} - To get the last resize line to show the resize handle\n\n * `shadowLeft` {`HTMLElement`} - To get the last resize line to show the resize handle\n\n * `shadowRight` {`HTMLElement`} - To get the last resize line to show the resize handle\n\n * `enableScroll` {`boolean`} - To enable horizontal scrolling when user is resizing\n\n * `hoverable` {`boolean`} - To enable hoverable rows\n\n * `mo` {`MutationObserver | undefined`} - To store the mutation observer\n\n * `resizeObserver` - To store the resize observer\n\n * `resizeObserverStickyShadows` - \n\n * `raf` {`number`} - To store the request animation frame\n\n * `minColumnWidth` {`number`} - Minimum column width\n\n * `stickyLeftIndexes` {`number[]`} - To store the sticky index's\n\n * `stickyRightIndexes` {`number[]`} - To store the sticky index's\n\n * `cellHeight` {`number | null`} - To calculate the rowspan height\n\n * `headHeight` {`number | null`} - \n\n * `widthsInitialized` {`boolean`} - To check if the widths are initialized\n\n * `lockedWidthColumns` {`boolean[]`} - To check if the widths are initialized\n\n * `prefixSumColumnsWidth` {`PrefixColumn[]`} - prefix columns width\n\n * `stickyColumns` {`number[]`} - prefix columns width\n\n * `bodyRows` {`HTMLElement[]`} - body rows\n\n * `headRows` {`HTMLElement[]`} - head rows\n\n * `needsStructureLayout` {`boolean`} - \n\n * `needsWidthLayout` {`boolean`} - \n\n * `needsSpanLayout` {`boolean`} - \n\n * `colCount` {`number`} - \n\n * `shadowLeftVisibleSticky` {`boolean | undefined`} - \n\n * `shadowRightVisibleSticky` {`boolean | undefined`} - \n\n * `stickyLeftHeadEls` {`HTMLElement[]`} - \n\n * `stickyRightHeadEls` {`HTMLElement[]`} - \n\n * `stickyLeftBodyEls` {`HTMLElement[]`} - \n\n * `stickyRightBodyEls` {`HTMLElement[]`} - \n\n * `resizeTimer` - \n\n * `shadowRaf` {`number`} - To throttle sticky shadow updates\n\n * `syncStickyShadowsRaf` - \n\n * `onResize` - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
2201
2201
  "attributes": [
2202
2202
  {
2203
- "name": "enableResizeScroll",
2204
- "description": "`enableResizeScroll` {`boolean`} - To enable horizontal scrolling when user is resizing\n\nProperty: enableResizeScroll\n\nDefault: false",
2203
+ "name": "enableScroll",
2204
+ "description": "`enableScroll` {`boolean`} - To enable horizontal scrolling when user is resizing\n\nProperty: enableScroll\n\nDefault: false",
2205
2205
  "valueSet": "v"
2206
2206
  },
2207
2207
  {