@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.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/index-41582c2a.js +16 -12
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/nano-components.cjs.js +1 -1
- package/dist/cjs/nano-demo.cjs.entry.js +291 -0
- package/dist/cjs/nano-demo.cjs.entry.js.map +1 -0
- package/dist/cjs/{nano-table-b9cdafab.js → nano-table-83e46f68.js} +486 -202
- package/dist/cjs/nano-table-83e46f68.js.map +1 -0
- package/dist/cjs/nano-table.cjs.entry.js +1 -1
- package/dist/cjs/{table.worker-291904c9.js → table.worker-525ec230.js} +3 -3
- package/dist/cjs/table.worker-525ec230.js.map +1 -0
- package/dist/cjs/table.worker-e9fb087e.js +4 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/alert/alert.helpers.js.map +1 -1
- package/dist/collection/components/demo/demo.js +284 -0
- package/dist/collection/components/demo/demo.js.map +1 -0
- package/dist/collection/components/dialog/dialog.helpers.js.map +1 -1
- package/dist/collection/components/table/table-interface.js.map +1 -1
- package/dist/collection/components/table/table.cell.js +65 -0
- package/dist/collection/components/table/table.cell.js.map +1 -0
- package/dist/collection/components/table/table.css +98 -20
- package/dist/collection/components/table/table.header.js +156 -0
- package/dist/collection/components/table/table.header.js.map +1 -0
- package/dist/collection/components/table/table.js +170 -18
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/collection/components/table/table.row.js +113 -0
- package/dist/collection/components/table/table.row.js.map +1 -0
- package/dist/collection/components/table/table.store.js +46 -9
- package/dist/collection/components/table/table.store.js.map +1 -1
- package/dist/collection/components/table/table.utils.js +230 -0
- package/dist/collection/components/table/table.utils.js.map +1 -1
- package/dist/collection/components/table/table.worker.js +1 -0
- package/dist/collection/components/table/table.worker.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/nano-demo.d.ts +11 -0
- package/dist/components/nano-demo.js +341 -0
- package/dist/components/nano-demo.js.map +1 -0
- package/dist/components/nano-table.js +2 -1247
- package/dist/components/nano-table.js.map +1 -1
- package/dist/components/table.js +1539 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/table.worker.js +2 -2
- package/dist/custom-elements/index.d.ts +6 -0
- package/dist/custom-elements/index.js +772 -204
- package/dist/custom-elements/index.js.map +1 -1
- package/dist/esm/index-3c280603.js +16 -12
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/nano-components.js +1 -1
- package/dist/esm/nano-demo.entry.js +287 -0
- package/dist/esm/nano-demo.entry.js.map +1 -0
- package/dist/esm/{nano-table-c8ef2276.js → nano-table-e2405350.js} +487 -203
- package/dist/esm/nano-table-e2405350.js.map +1 -0
- package/dist/esm/nano-table.entry.js +1 -1
- package/dist/esm/{table.worker-65438fa0.js → table.worker-739c193f.js} +3 -3
- package/dist/esm/table.worker-739c193f.js.map +1 -0
- package/dist/esm/table.worker-e9fb087e.js +4 -0
- package/dist/nano-components/index.esm.js.map +1 -1
- package/dist/nano-components/nano-components.esm.js +1 -1
- package/dist/nano-components/nano-components.esm.js.map +1 -1
- package/dist/nano-components/p-28fdfa6b.js +5 -0
- package/dist/nano-components/p-28fdfa6b.js.map +1 -0
- package/dist/nano-components/p-85cfb0af.entry.js +5 -0
- package/dist/nano-components/p-85cfb0af.entry.js.map +1 -0
- package/dist/nano-components/p-a71989f3.js +5 -0
- package/dist/nano-components/{p-14218d23.entry.js.map → p-a71989f3.js.map} +0 -0
- package/dist/nano-components/{p-14218d23.entry.js → p-e4a28360.entry.js} +2 -2
- package/dist/nano-components/{p-fe1f8360.js.map → p-e4a28360.entry.js.map} +0 -0
- package/dist/nano-components/p-e9fb087e.js +4 -0
- package/dist/types/components/alert/alert.helpers.d.ts +1 -1
- package/dist/types/components/demo/demo.d.ts +6 -0
- package/dist/types/components/dialog/dialog.helpers.d.ts +1 -1
- package/dist/types/components/table/table-interface.d.ts +38 -23
- package/dist/types/components/table/table.cell.d.ts +18 -0
- package/dist/types/components/table/table.d.ts +36 -1
- package/dist/types/components/table/table.header.d.ts +16 -0
- package/dist/types/components/table/table.row.d.ts +15 -0
- package/dist/types/components/table/table.utils.d.ts +99 -0
- package/dist/types/components.d.ts +50 -0
- package/docs-json.json +124 -3
- package/docs-vscode.json +17 -1
- package/package.json +2 -2
- package/dist/cjs/nano-table-b9cdafab.js.map +0 -1
- package/dist/cjs/table.worker-1fd13775.js +0 -4
- package/dist/cjs/table.worker-291904c9.js.map +0 -1
- package/dist/collection/components/table/table.children.js +0 -224
- package/dist/collection/components/table/table.children.js.map +0 -1
- package/dist/collection/components/table/table.service.js +0 -121
- package/dist/collection/components/table/table.service.js.map +0 -1
- package/dist/esm/nano-table-c8ef2276.js.map +0 -1
- package/dist/esm/table.worker-1fd13775.js +0 -4
- package/dist/esm/table.worker-65438fa0.js.map +0 -1
- package/dist/nano-components/p-1fd13775.js +0 -4
- package/dist/nano-components/p-f9349146.js +0 -5
- package/dist/nano-components/p-f9349146.js.map +0 -1
- package/dist/nano-components/p-fe1f8360.js +0 -5
- package/dist/types/components/table/table.children.d.ts +0 -30
- 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(--
|
86
|
-
--foot-th-padding-h: var(--
|
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-
|
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
|
-
|
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"]}
|