@nanoporetech-digital/components 3.4.0 → 3.5.0

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 (101) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/index-41582c2a.js +16 -12
  3. package/dist/cjs/index.cjs.js.map +1 -1
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/nano-components.cjs.js +1 -1
  6. package/dist/cjs/nano-demo.cjs.entry.js +291 -0
  7. package/dist/cjs/nano-demo.cjs.entry.js.map +1 -0
  8. package/dist/cjs/{nano-table-b9cdafab.js → nano-table-83e46f68.js} +486 -202
  9. package/dist/cjs/nano-table-83e46f68.js.map +1 -0
  10. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  11. package/dist/cjs/{table.worker-291904c9.js → table.worker-525ec230.js} +3 -3
  12. package/dist/cjs/table.worker-525ec230.js.map +1 -0
  13. package/dist/cjs/table.worker-e9fb087e.js +4 -0
  14. package/dist/collection/collection-manifest.json +1 -0
  15. package/dist/collection/components/alert/alert.helpers.js.map +1 -1
  16. package/dist/collection/components/demo/demo.js +284 -0
  17. package/dist/collection/components/demo/demo.js.map +1 -0
  18. package/dist/collection/components/dialog/dialog.helpers.js.map +1 -1
  19. package/dist/collection/components/table/table-interface.js.map +1 -1
  20. package/dist/collection/components/table/table.cell.js +65 -0
  21. package/dist/collection/components/table/table.cell.js.map +1 -0
  22. package/dist/collection/components/table/table.css +98 -20
  23. package/dist/collection/components/table/table.header.js +156 -0
  24. package/dist/collection/components/table/table.header.js.map +1 -0
  25. package/dist/collection/components/table/table.js +170 -18
  26. package/dist/collection/components/table/table.js.map +1 -1
  27. package/dist/collection/components/table/table.row.js +113 -0
  28. package/dist/collection/components/table/table.row.js.map +1 -0
  29. package/dist/collection/components/table/table.store.js +46 -9
  30. package/dist/collection/components/table/table.store.js.map +1 -1
  31. package/dist/collection/components/table/table.utils.js +230 -0
  32. package/dist/collection/components/table/table.utils.js.map +1 -1
  33. package/dist/collection/components/table/table.worker.js +1 -0
  34. package/dist/collection/components/table/table.worker.js.map +1 -1
  35. package/dist/components/index.d.ts +1 -0
  36. package/dist/components/index.js +1 -0
  37. package/dist/components/index.js.map +1 -1
  38. package/dist/components/nano-demo.d.ts +11 -0
  39. package/dist/components/nano-demo.js +341 -0
  40. package/dist/components/nano-demo.js.map +1 -0
  41. package/dist/components/nano-table.js +2 -1247
  42. package/dist/components/nano-table.js.map +1 -1
  43. package/dist/components/table.js +1539 -0
  44. package/dist/components/table.js.map +1 -0
  45. package/dist/components/table.worker.js +2 -2
  46. package/dist/custom-elements/index.d.ts +6 -0
  47. package/dist/custom-elements/index.js +772 -204
  48. package/dist/custom-elements/index.js.map +1 -1
  49. package/dist/esm/index-3c280603.js +16 -12
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/loader.js +1 -1
  52. package/dist/esm/nano-components.js +1 -1
  53. package/dist/esm/nano-demo.entry.js +287 -0
  54. package/dist/esm/nano-demo.entry.js.map +1 -0
  55. package/dist/esm/{nano-table-c8ef2276.js → nano-table-e2405350.js} +487 -203
  56. package/dist/esm/nano-table-e2405350.js.map +1 -0
  57. package/dist/esm/nano-table.entry.js +1 -1
  58. package/dist/esm/{table.worker-65438fa0.js → table.worker-739c193f.js} +3 -3
  59. package/dist/esm/table.worker-739c193f.js.map +1 -0
  60. package/dist/esm/table.worker-e9fb087e.js +4 -0
  61. package/dist/nano-components/index.esm.js.map +1 -1
  62. package/dist/nano-components/nano-components.esm.js +1 -1
  63. package/dist/nano-components/nano-components.esm.js.map +1 -1
  64. package/dist/nano-components/p-28fdfa6b.js +5 -0
  65. package/dist/nano-components/p-28fdfa6b.js.map +1 -0
  66. package/dist/nano-components/p-85cfb0af.entry.js +5 -0
  67. package/dist/nano-components/p-85cfb0af.entry.js.map +1 -0
  68. package/dist/nano-components/p-a71989f3.js +5 -0
  69. package/dist/nano-components/{p-14218d23.entry.js.map → p-a71989f3.js.map} +0 -0
  70. package/dist/nano-components/{p-14218d23.entry.js → p-e4a28360.entry.js} +2 -2
  71. package/dist/nano-components/{p-fe1f8360.js.map → p-e4a28360.entry.js.map} +0 -0
  72. package/dist/nano-components/p-e9fb087e.js +4 -0
  73. package/dist/types/components/alert/alert.helpers.d.ts +1 -1
  74. package/dist/types/components/demo/demo.d.ts +6 -0
  75. package/dist/types/components/dialog/dialog.helpers.d.ts +1 -1
  76. package/dist/types/components/table/table-interface.d.ts +38 -23
  77. package/dist/types/components/table/table.cell.d.ts +18 -0
  78. package/dist/types/components/table/table.d.ts +36 -1
  79. package/dist/types/components/table/table.header.d.ts +16 -0
  80. package/dist/types/components/table/table.row.d.ts +15 -0
  81. package/dist/types/components/table/table.utils.d.ts +99 -0
  82. package/dist/types/components.d.ts +50 -0
  83. package/docs-json.json +124 -3
  84. package/docs-vscode.json +17 -1
  85. package/package.json +2 -2
  86. package/dist/cjs/nano-table-b9cdafab.js.map +0 -1
  87. package/dist/cjs/table.worker-1fd13775.js +0 -4
  88. package/dist/cjs/table.worker-291904c9.js.map +0 -1
  89. package/dist/collection/components/table/table.children.js +0 -224
  90. package/dist/collection/components/table/table.children.js.map +0 -1
  91. package/dist/collection/components/table/table.service.js +0 -121
  92. package/dist/collection/components/table/table.service.js.map +0 -1
  93. package/dist/esm/nano-table-c8ef2276.js.map +0 -1
  94. package/dist/esm/table.worker-1fd13775.js +0 -4
  95. package/dist/esm/table.worker-65438fa0.js.map +0 -1
  96. package/dist/nano-components/p-1fd13775.js +0 -4
  97. package/dist/nano-components/p-f9349146.js +0 -5
  98. package/dist/nano-components/p-f9349146.js.map +0 -1
  99. package/dist/nano-components/p-fe1f8360.js +0 -5
  100. package/dist/types/components/table/table.children.d.ts +0 -30
  101. package/dist/types/components/table/table.service.d.ts +0 -42
@@ -10,7 +10,6 @@
10
10
  [hidden] {
11
11
  display: none !important;
12
12
  }
13
- @charset "UTF-8";
14
13
  nano-table {
15
14
  /**
16
15
  * @prop --max-col-width: Default 200px;
@@ -56,11 +55,13 @@ nano-table {
56
55
  */
57
56
  display: block;
58
57
  width: 100%;
59
- --max-col-width: 200px;
58
+ --max-col-width: clamp(200px, 30%, 20vw);
60
59
  --color: var(--nano-color-mediumgrey, #68767e);
61
60
  --font-size: 0.87rem;
62
61
  --cell-line-height: 1.5;
63
62
  --thead-font-size: 0.95rem;
63
+ --thead-color: #455560;
64
+ --tfoot-color: #455560;
64
65
  --border-color: #dddbda;
65
66
  --border-style: thin solid var(--border-color);
66
67
  --border-tint-color: #0084a9;
@@ -82,8 +83,8 @@ nano-table {
82
83
  --td-padding-h: var(--td-padding-start) var(--td-padding-end);
83
84
  --th-padding-v: var(--th-padding-top) var(--th-padding-bottom);
84
85
  --th-padding-h: var(--th-padding-start) var(--th-padding-end);
85
- --foot-th-padding-v: var(--th-padding-top) var(--th-padding-bottom);
86
- --foot-th-padding-h: var(--th-padding-start) var(--th-padding-end);
86
+ --foot-th-padding-v: var(--td-padding-top) var(--td-padding-bottom);
87
+ --foot-th-padding-h: var(--td-padding-start) var(--td-padding-end);
87
88
  --head-th-padding-v: var(--th-padding-top) var(--th-padding-bottom);
88
89
  --head-th-padding-h: var(--th-padding-start) var(--th-padding-end);
89
90
  --bookend-col-padding: 2rem;
@@ -123,6 +124,41 @@ nano-table {
123
124
  border-inline-start: var(--border-style);
124
125
  border-inline-end: var(--border-style);
125
126
  }
127
+ .nano-tbl__drag-mask {
128
+ display: none;
129
+ position: absolute;
130
+ inset-block: -2px -2px;
131
+ z-index: 10;
132
+ opacity: 0;
133
+ transition: 0.2s ease opacity;
134
+ }
135
+ .nano-tbl__drag-mask--start {
136
+ width: calc(50% + 2px);
137
+ inset-inline-start: -2px;
138
+ border-inline-start: 2px dashed var(--border-tint-color);
139
+ }
140
+ .nano-tbl__drag-mask--end {
141
+ width: 50%;
142
+ inset-inline-end: 0;
143
+ border-inline-end: 2px dashed var(--border-tint-color);
144
+ }
145
+ .nano-tbl__drag-mask--active {
146
+ opacity: 1;
147
+ }
148
+ .nano-tbl__dragging .nano-tbl__drag-mask {
149
+ display: block;
150
+ }
151
+ .nano-tbl__drag--start {
152
+ opacity: 0.4;
153
+ }
154
+ .nano-tbl__dragging .nano-tbl__td,
155
+ .nano-tbl__dragging .nano-tbl__th {
156
+ cursor: no-drop;
157
+ }
158
+ .nano-tbl__dragging .nano-tbl__td .nano-tbl__cell-content,
159
+ .nano-tbl__dragging .nano-tbl__th .nano-tbl__cell-content {
160
+ pointer-events: none;
161
+ }
126
162
  .nano-tbl__order-btn {
127
163
  padding: 0;
128
164
  border: none;
@@ -196,18 +232,21 @@ tbody:last-of-type tr:last-child .nano-tbl__td, tbody:last-of-type tr:last-child
196
232
  }
197
233
  }
198
234
  thead .nano-tbl__td, thead .nano-tbl__th {
235
+ color: var(--thead-color);
199
236
  font-weight: 800;
200
237
  background: rgba(var(--head-bg-rgb), 90%);
201
238
  font-size: var(--thead-font-size);
202
- border-block-start: none;
239
+ border-block-start: none !important;
240
+ transition: all 0.2s ease;
203
241
  }
204
242
  thead .nano-tbl__td .nano-tbl__cell-content, thead .nano-tbl__th .nano-tbl__cell-content {
205
243
  padding-block: var(--head-th-padding-v);
206
244
  padding-inline: var(--head-th-padding-h);
207
245
  }
208
246
  tfoot .nano-tbl__td, tfoot .nano-tbl__th {
247
+ color: var(--tfoot-color);
209
248
  font-weight: 800;
210
- border-block-end: none;
249
+ border-block-start: none;
211
250
  background: rgba(var(--foot-bg-rgb), 90%);
212
251
  font-size: var(--thead-font-size);
213
252
  }
@@ -225,6 +264,9 @@ tfoot .nano-tbl__td .nano-tbl__cell-content, tfoot .nano-tbl__th .nano-tbl__cell
225
264
  padding-block: var(--td-padding-v);
226
265
  padding-inline: var(--td-padding-h);
227
266
  }
267
+ .nano-tbl__cell-content--no-result {
268
+ padding-block: 2rem;
269
+ }
228
270
  .nano-tbl tbody {
229
271
  will-change: scroll-position;
230
272
  visibility: visible;
@@ -236,16 +278,14 @@ tfoot .nano-tbl__td .nano-tbl__cell-content, tfoot .nano-tbl__th .nano-tbl__cell
236
278
  font-weight: 800;
237
279
  margin: 0;
238
280
  }
239
- .sm .nano-tbl th[scope=row] {
240
- max-width: 65vw !important;
241
- }
242
281
  .nano-tbl__pin {
243
282
  position: sticky;
244
283
  z-index: 1;
245
284
  }
246
285
  .nano-tbl__pin--start {
247
286
  inset-inline: -1px auto;
248
- transition: max-width 0.25s;
287
+ transition: max-width 0.25s ease;
288
+ z-index: 2;
249
289
  }
250
290
  .nano-tbl__pin--start::after {
251
291
  content: "";
@@ -257,19 +297,20 @@ tfoot .nano-tbl__td .nano-tbl__cell-content, tfoot .nano-tbl__th .nano-tbl__cell
257
297
  }
258
298
  .nano-tbl__pinned--start .nano-tbl__pin--start {
259
299
  z-index: 2;
260
- max-width: 125px;
300
+ max-width: 125px !important;
261
301
  }
262
302
  .sm .nano-tbl__pinned--start .nano-tbl__pin--start {
263
- max-width: var(--max-col-width);
303
+ max-width: var(--max-col-width) !important;
264
304
  }
265
305
  .nano-tbl__pinned--start .nano-tbl__pin--start::after {
266
306
  opacity: 1;
267
307
  }
268
308
  .nano-tbl__pin--end {
309
+ z-index: 2;
269
310
  /*
270
311
  I cannot think of a nice way to make stuck-end columns play nice on small screens :(
271
312
  Changing the width when stuck (as we do for stuck-start columns) causes the whole positioning to change.
272
- This fires the IO, thus un-sticks the column, thus causes the IO to fire which sticks the column
313
+ This fires the IO, thus un-sticks the column, thus causes the IO to fire which sticks the column ad-infinitum
273
314
  */
274
315
  }
275
316
  .nano-tbl__pin--start + .nano-tbl__pin--end {
@@ -299,28 +340,53 @@ tfoot .nano-tbl__td .nano-tbl__cell-content, tfoot .nano-tbl__th .nano-tbl__cell
299
340
  }
300
341
  .nano-tbl__pin--top {
301
342
  inset-block: -1px auto;
343
+ z-index: 3;
302
344
  }
303
345
  .nano-tbl__pinned--top .nano-tbl__pin--top {
304
- z-index: 4;
346
+ z-index: 4 !important;
305
347
  }
306
348
  .nano-tbl__pin--bottom {
307
349
  inset-block: auto -1px;
350
+ z-index: 3;
308
351
  }
309
352
  .nano-tbl__pinned--bottom .nano-tbl__pin--bottom {
310
- z-index: 5;
311
- border-block-start: var(--border-tint-style) !important;
353
+ z-index: 5 !important;
354
+ }
355
+ .nano-tbl__pin--top.nano-tbl__pin--start {
356
+ z-index: 4;
357
+ }
358
+ .nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start {
359
+ z-index: 5 !important;
312
360
  }
313
361
  .nano-tbl__pinned--top.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start {
314
- z-index: 6;
362
+ z-index: 6 !important;
363
+ }
364
+ .nano-tbl__pin--top.nano-tbl__pin--end {
365
+ z-index: 4;
366
+ }
367
+ .nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end {
368
+ z-index: 5 !important;
315
369
  }
316
370
  .nano-tbl__pinned--top.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end {
317
- z-index: 6;
371
+ z-index: 6 !important;
372
+ }
373
+ .nano-tbl__pin--bottom.nano-tbl__pin--start {
374
+ z-index: 4;
375
+ }
376
+ .nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start {
377
+ z-index: 5 !important;
318
378
  }
319
379
  .nano-tbl__pinned--bottom.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start {
320
- z-index: 6;
380
+ z-index: 6 !important;
381
+ }
382
+ .nano-tbl__pin--bottom.nano-tbl__pin--end {
383
+ z-index: 4;
384
+ }
385
+ .nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end {
386
+ z-index: 5 !important;
321
387
  }
322
388
  .nano-tbl__pinned--bottom.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end {
323
- z-index: 6;
389
+ z-index: 6 !important;
324
390
  }
325
391
  .nano-tbl thead tr:last-of-type td,
326
392
  .nano-tbl thead tr:last-of-type th {
@@ -330,6 +396,18 @@ tfoot .nano-tbl__td .nano-tbl__cell-content, tfoot .nano-tbl__th .nano-tbl__cell
330
396
  .nano-tbl tfoot tr:first-of-type th {
331
397
  border-block-start: none;
332
398
  }
399
+ .nano-tbl tfoot tr:last-of-type td,
400
+ .nano-tbl tfoot tr:last-of-type th {
401
+ border-block-end: var(--border-tint-style);
402
+ }
403
+ .nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type td,
404
+ .nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type th {
405
+ border-block-start: var(--border-tint-style) !important;
406
+ }
407
+ .nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type td,
408
+ .nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type th {
409
+ border-block-end: none !important;
410
+ }
333
411
  .nano-tbl .unlimited-width {
334
412
  max-width: none;
335
413
  }
@@ -0,0 +1,156 @@
1
+ /*!
2
+ * Web Components for Nanopore digital Web Apps
3
+ */
4
+ import { Fragment, h } from '@stencil/core';
5
+ import { CSSNAMESPACE } from './table.constants';
6
+ import { addHObserver, addVObserver, colheadFootRender, fetchStores, headerPinClasses, mergeProperties, } from './table.utils';
7
+ // TABLE HEADERS
8
+ // (thead > tr > th, tfoot > tr > th)
9
+ let draggingCol;
10
+ let draggingColEle;
11
+ let dragEnterEle;
12
+ let draggingParent;
13
+ export const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned, onColumnDrag, onColumnDrop, defaults, }) => {
14
+ const store = fetchStores();
15
+ // Drag to re-order columns handling
16
+ function handleDragStart(e, column) {
17
+ draggingCol = column;
18
+ draggingColEle = dragEnterEle = e.target;
19
+ draggingParent = draggingColEle.closest('.' + `${CSSNAMESPACE}__tr`);
20
+ draggingParent.classList.add(`${CSSNAMESPACE}__dragging`);
21
+ draggingColEle.classList.add(`${CSSNAMESPACE}__drag--start`);
22
+ e.dataTransfer.effectAllowed = 'move';
23
+ e.dataTransfer.setData('text/html', draggingColEle.innerHTML);
24
+ onColumnDrag(column.prop, draggingColEle);
25
+ }
26
+ function handleDragEnd() {
27
+ draggingParent.classList.remove(`${CSSNAMESPACE}__dragging`);
28
+ draggingColEle.classList.remove(`${CSSNAMESPACE}__drag--start`);
29
+ draggingParent
30
+ .querySelectorAll(`.${CSSNAMESPACE}__drag-mask--active`)
31
+ .forEach((el) => {
32
+ el.classList.remove(`${CSSNAMESPACE}__drag-mask--active`);
33
+ });
34
+ draggingColEle = null;
35
+ draggingCol = null;
36
+ draggingParent = null;
37
+ dragEnterEle = null;
38
+ }
39
+ function handleDragEnter(e) {
40
+ if (dragEnterEle === e.target)
41
+ return;
42
+ e.preventDefault();
43
+ e.stopImmediatePropagation();
44
+ e.dataTransfer.dropEffect = 'move';
45
+ draggingParent
46
+ .querySelectorAll(`.${CSSNAMESPACE}__drag-mask--active`)
47
+ .forEach((el) => {
48
+ el.classList.remove(`${CSSNAMESPACE}__drag-mask--active`);
49
+ });
50
+ dragEnterEle = e.target;
51
+ if (!dragEnterEle.classList.contains(`${CSSNAMESPACE}__drag-mask`)) {
52
+ e.dataTransfer.dropEffect = 'none';
53
+ return;
54
+ }
55
+ dragEnterEle.classList.add(`${CSSNAMESPACE}__drag-mask--active`);
56
+ }
57
+ function handleDrop(e) {
58
+ e.stopPropagation();
59
+ const { colName } = this.dataset;
60
+ if (colName === draggingCol.prop)
61
+ return;
62
+ const cols = store.config.state.columns;
63
+ let toIndex = cols.findIndex((col) => col.prop === colName);
64
+ const fromIndex = cols.findIndex((col) => col === draggingCol);
65
+ if (toIndex < fromIndex &&
66
+ this.classList.contains(`${CSSNAMESPACE}__drag-mask--end`))
67
+ toIndex++;
68
+ if (toIndex > fromIndex &&
69
+ this.classList.contains(`${CSSNAMESPACE}__drag-mask--start`))
70
+ toIndex--;
71
+ if (toIndex === fromIndex)
72
+ return;
73
+ onColumnDrop(draggingCol.prop, store.config.state.columns[toIndex].prop, draggingColEle);
74
+ }
75
+ // Sort handling
76
+ function handleColumnSortClick(e) {
77
+ let order;
78
+ switch (column.order) {
79
+ case 'asc':
80
+ order = 'desc';
81
+ break;
82
+ case 'desc':
83
+ order = null;
84
+ break;
85
+ default:
86
+ order = 'asc';
87
+ }
88
+ onColumnSortClick(order, column.prop, e.target.closest('th'));
89
+ }
90
+ function isSortable() {
91
+ return ((!!defaults.sortable && column.sortable !== false) ||
92
+ (!defaults.sortable && column.sortable === true));
93
+ }
94
+ function isDraggable() {
95
+ return ((!!defaults.draggable && column.draggable !== false) ||
96
+ (!defaults.draggable && column.draggable === true));
97
+ }
98
+ let extraProps = {};
99
+ if (column.columnProperties) {
100
+ extraProps = column.columnProperties(column) || extraProps;
101
+ }
102
+ const baseProps = {
103
+ class: {
104
+ ...headerPinClasses('th', headRenderer?.pinned),
105
+ [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',
106
+ [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',
107
+ [`${CSSNAMESPACE}__ordered`]: !!column.order,
108
+ [`${CSSNAMESPACE}__filtered`]: !!column.filter,
109
+ },
110
+ };
111
+ let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
112
+ const content = colheadFootRender(column);
113
+ if (!content)
114
+ return h(Fragment, null);
115
+ props =
116
+ Number(props.colSpan) > 1
117
+ ? { ...props, scope: 'colgroup' }
118
+ : { ...props, scope: 'col' };
119
+ if (isSortable()) {
120
+ const sort = column.order
121
+ ? column.order === 'asc'
122
+ ? 'ascending'
123
+ : 'descending'
124
+ : 'none';
125
+ props = { ...props, 'aria-sort': sort };
126
+ }
127
+ if (isDraggable()) {
128
+ props = {
129
+ ...props,
130
+ draggable: true,
131
+ onDragStart: (e) => handleDragStart(e, column),
132
+ onDragOver: (e) => e.preventDefault(),
133
+ onDragEnd: () => handleDragEnd(),
134
+ };
135
+ }
136
+ return (h("th", { ...props, ref: (th) => {
137
+ if (['end', 'start'].includes(column.pinned))
138
+ addHObserver(th, column.pinned, onColumnPinned);
139
+ if (['top', 'bottom'].includes(headRenderer.pinned))
140
+ addVObserver(th, headRenderer.pinned, onColumnPinned);
141
+ }, key: column.prop }, isDraggable() && [
142
+ h("div", { class: {
143
+ [`${CSSNAMESPACE}__drag-mask`]: true,
144
+ [`${CSSNAMESPACE}__drag-mask--start`]: true,
145
+ }, "data-col-name": column.prop, onDragEnter: handleDragEnter, onDrop: handleDrop, onDragOver: (e) => e.preventDefault() }),
146
+ h("div", { class: {
147
+ [`${CSSNAMESPACE}__drag-mask`]: true,
148
+ [`${CSSNAMESPACE}__drag-mask--end`]: true,
149
+ }, "data-col-name": column.prop, onDragEnter: handleDragEnter, onDrop: handleDrop, onDragOver: (e) => e.preventDefault() }),
150
+ ], isSortable() ? (h("button", { class: {
151
+ [`${CSSNAMESPACE}__order-btn`]: true,
152
+ [`${CSSNAMESPACE}__cell-content`]: true,
153
+ }, onClick: handleColumnSortClick }, colheadFootRender(column), !!column.filter && h("nano-icon", { name: "light/filter" }), !!column.order &&
154
+ (column.order === 'desc' ? (h("nano-icon", { name: "solid/long-arrow-down" })) : (h("nano-icon", { name: "solid/long-arrow-up" }))), h("div", { class: `${CSSNAMESPACE}__status-icons` }, h("nano-icon", { name: "light/chevron-down" })))) : (h("div", { class: `${CSSNAMESPACE}__cell-content` }, colheadFootRender(column), !!column.filter && h("nano-icon", { name: "light/bars-filter" })))));
155
+ };
156
+ //# sourceMappingURL=table.header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.header.js","sourceRoot":"","sources":["../../../src/components/table/table.header.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n addHObserver,\n addVObserver,\n colheadFootRender,\n fetchStores,\n headerPinClasses,\n mergeProperties,\n} from './table.utils';\nimport type { TableTypes } from '../../interface';\n\n// TABLE HEADERS\n// (thead > tr > th, tfoot > tr > th)\n\nlet draggingCol: TableTypes.ColumnConfig;\nlet draggingColEle: HTMLTableCellElement;\nlet dragEnterEle: HTMLElement;\nlet draggingParent: HTMLTableRowElement;\n\ntype TableColHeadProps = {\n column: TableTypes.ColumnConfig;\n headRenderer: TableTypes.HeadFootRenderer;\n onColumnSortClick?: (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n el: HTMLTableCellElement\n ) => void;\n onColumnPinned?: TableTypes.PinnedCb;\n onColumnDrag?: (column: TableTypes.Prop, el: HTMLTableCellElement) => void;\n onColumnDrop?: (\n fromColumn: TableTypes.Prop,\n toColumn: TableTypes.Prop,\n el: HTMLTableCellElement\n ) => void;\n defaults: { draggable?: boolean; sortable?: boolean };\n};\n\nexport const TableColHead: FunctionalComponent<TableColHeadProps> = ({\n column,\n headRenderer,\n onColumnSortClick,\n onColumnPinned,\n onColumnDrag,\n onColumnDrop,\n defaults,\n}) => {\n const store = fetchStores();\n\n // Drag to re-order columns handling\n\n function handleDragStart(e: DragEvent, column: TableTypes.ColumnConfig) {\n draggingCol = column;\n draggingColEle = dragEnterEle = e.target as HTMLTableCellElement;\n draggingParent = draggingColEle.closest('.' + `${CSSNAMESPACE}__tr`);\n\n draggingParent.classList.add(`${CSSNAMESPACE}__dragging`);\n draggingColEle.classList.add(`${CSSNAMESPACE}__drag--start`);\n\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/html', draggingColEle.innerHTML);\n\n onColumnDrag(column.prop, draggingColEle);\n }\n\n function handleDragEnd() {\n draggingParent.classList.remove(`${CSSNAMESPACE}__dragging`);\n draggingColEle.classList.remove(`${CSSNAMESPACE}__drag--start`);\n\n draggingParent\n .querySelectorAll(`.${CSSNAMESPACE}__drag-mask--active`)\n .forEach((el) => {\n el.classList.remove(`${CSSNAMESPACE}__drag-mask--active`);\n });\n\n draggingColEle = null;\n draggingCol = null;\n draggingParent = null;\n dragEnterEle = null;\n }\n\n function handleDragEnter(e: DragEvent) {\n if (dragEnterEle === e.target) return;\n\n e.preventDefault();\n e.stopImmediatePropagation();\n e.dataTransfer.dropEffect = 'move';\n\n draggingParent\n .querySelectorAll(`.${CSSNAMESPACE}__drag-mask--active`)\n .forEach((el) => {\n el.classList.remove(`${CSSNAMESPACE}__drag-mask--active`);\n });\n dragEnterEle = e.target as HTMLElement;\n\n if (!dragEnterEle.classList.contains(`${CSSNAMESPACE}__drag-mask`)) {\n e.dataTransfer.dropEffect = 'none';\n return;\n }\n dragEnterEle.classList.add(`${CSSNAMESPACE}__drag-mask--active`);\n }\n\n function handleDrop(this: HTMLElement, e: DragEvent) {\n e.stopPropagation();\n\n const { colName } = this.dataset as { colName: keyof TableTypes.RowData };\n if (colName === draggingCol.prop) return;\n\n const cols = store.config.state.columns;\n let toIndex = cols.findIndex((col) => col.prop === colName);\n const fromIndex = cols.findIndex((col) => col === draggingCol);\n\n if (\n toIndex < fromIndex &&\n this.classList.contains(`${CSSNAMESPACE}__drag-mask--end`)\n )\n toIndex++;\n if (\n toIndex > fromIndex &&\n this.classList.contains(`${CSSNAMESPACE}__drag-mask--start`)\n )\n toIndex--;\n if (toIndex === fromIndex) return;\n\n onColumnDrop(\n draggingCol.prop,\n store.config.state.columns[toIndex].prop,\n draggingColEle\n );\n }\n\n // Sort handling\n\n function handleColumnSortClick(e: MouseEvent & { target: HTMLElement }) {\n let order;\n switch (column.order) {\n case 'asc':\n order = 'desc';\n break;\n case 'desc':\n order = null;\n break;\n default:\n order = 'asc';\n }\n onColumnSortClick(order, column.prop, e.target.closest('th'));\n }\n\n function isSortable() {\n return (\n (!!defaults.sortable && column.sortable !== false) ||\n (!defaults.sortable && column.sortable === true)\n );\n }\n\n function isDraggable() {\n return (\n (!!defaults.draggable && column.draggable !== false) ||\n (!defaults.draggable && column.draggable === true)\n );\n }\n\n let extraProps = {};\n if (column.columnProperties) {\n extraProps = column.columnProperties(column) || extraProps;\n }\n\n const baseProps = {\n class: {\n ...headerPinClasses('th', headRenderer?.pinned),\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__filtered`]: !!column.filter,\n },\n };\n let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const content = colheadFootRender(column);\n\n if (!content) return <Fragment></Fragment>;\n\n props =\n Number((props as TableTypes.CellProps).colSpan) > 1\n ? { ...props, scope: 'colgroup' }\n : { ...props, scope: 'col' };\n\n if (isSortable()) {\n const sort = column.order\n ? column.order === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n\n props = { ...props, 'aria-sort': sort };\n }\n\n if (isDraggable()) {\n props = {\n ...props,\n draggable: true,\n onDragStart: (e) => handleDragStart(e, column),\n onDragOver: (e) => e.preventDefault(),\n onDragEnd: () => handleDragEnd(),\n };\n }\n\n return (\n <th\n {...props}\n ref={(th) => {\n if (['end', 'start'].includes(column.pinned))\n addHObserver(th, column.pinned, onColumnPinned);\n if (['top', 'bottom'].includes(headRenderer.pinned))\n addVObserver(th, headRenderer.pinned, onColumnPinned);\n }}\n key={column.prop}\n >\n {isDraggable() && [\n <div\n class={{\n [`${CSSNAMESPACE}__drag-mask`]: true,\n [`${CSSNAMESPACE}__drag-mask--start`]: true,\n }}\n data-col-name={column.prop}\n onDragEnter={handleDragEnter}\n onDrop={handleDrop}\n onDragOver={(e) => e.preventDefault()}\n ></div>,\n <div\n class={{\n [`${CSSNAMESPACE}__drag-mask`]: true,\n [`${CSSNAMESPACE}__drag-mask--end`]: true,\n }}\n data-col-name={column.prop}\n onDragEnter={handleDragEnter}\n onDrop={handleDrop}\n onDragOver={(e) => e.preventDefault()}\n ></div>,\n ]}\n {isSortable() ? (\n <button\n class={{\n [`${CSSNAMESPACE}__order-btn`]: true,\n [`${CSSNAMESPACE}__cell-content`]: true,\n }}\n onClick={handleColumnSortClick}\n >\n {colheadFootRender(column)}\n {!!column.filter && <nano-icon name=\"light/filter\" />}\n {!!column.order &&\n (column.order === 'desc' ? (\n <nano-icon name=\"solid/long-arrow-down\" />\n ) : (\n <nano-icon name=\"solid/long-arrow-up\" />\n ))}\n <div class={`${CSSNAMESPACE}__status-icons`}>\n <nano-icon name=\"light/chevron-down\" />\n </div>\n </button>\n ) : (\n <div class={`${CSSNAMESPACE}__cell-content`}>\n {colheadFootRender(column)}\n {!!column.filter && <nano-icon name=\"light/bars-filter\" />}\n </div>\n )}\n </th>\n );\n};\n"]}