@nanoporetech-digital/components 3.0.0 → 3.1.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 +20 -0
- package/dist/cjs/index-41582c2a.js +8 -4
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/nano-checkbox-group.cjs.entry.js +12 -3
- package/dist/cjs/nano-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-components.cjs.js +1 -1
- package/dist/cjs/nano-details.cjs.entry.js +1 -1
- package/dist/cjs/nano-field-validator.cjs.entry.js +2 -0
- package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +2 -2
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav.cjs.entry.js +18 -20
- package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-progress-bar.cjs.entry.js +33 -0
- package/dist/cjs/nano-progress-bar.cjs.entry.js.map +1 -0
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js +2 -2
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-spinner.cjs.entry.js +1 -1
- package/dist/cjs/nano-spinner.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
- package/dist/cjs/{nano-table-8a898621.js → nano-table-7e02106c.js} +146 -58
- package/dist/cjs/nano-table-7e02106c.js.map +1 -0
- package/dist/cjs/nano-table.cjs.entry.js +2 -1
- package/dist/cjs/nano-table.cjs.entry.js.map +1 -1
- package/dist/cjs/{table.worker-b0b0044a.js → table.worker-daf39ca9.js} +3 -2
- package/dist/cjs/table.worker-daf39ca9.js.map +1 -0
- package/dist/cjs/{transitions-d295a09e.js → transitions-5cd8f697.js} +10 -8
- package/dist/cjs/transitions-5cd8f697.js.map +1 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/checkbox/checkbox-group.js +12 -3
- package/dist/collection/components/checkbox/checkbox-group.js.map +1 -1
- package/dist/collection/components/field-validator/field-validator.js +2 -0
- package/dist/collection/components/field-validator/field-validator.js.map +1 -1
- package/dist/collection/components/global-nav/assets/ont-logo.svg +89 -47
- package/dist/collection/components/global-nav/global-nav-interface.js.map +1 -1
- package/dist/collection/components/global-nav/global-nav.js +19 -21
- package/dist/collection/components/global-nav/global-nav.js.map +1 -1
- package/dist/collection/components/global-nav/{global-nav.css → style/global-nav.css} +462 -404
- package/dist/collection/components/nav-item/nav-item.css +4 -6
- package/dist/collection/components/progress-bar/progress-bar.css +84 -0
- package/dist/collection/components/progress-bar/progress-bar.js +106 -0
- package/dist/collection/components/progress-bar/progress-bar.js.map +1 -0
- package/dist/collection/components/skeleton/skeleton.css +8 -5
- package/dist/collection/components/skeleton/skeleton.js +1 -1
- package/dist/collection/components/skeleton/skeleton.js.map +1 -1
- package/dist/collection/components/spinner/spinner.css +5 -9
- package/dist/collection/components/table/table.children.js +43 -17
- package/dist/collection/components/table/table.children.js.map +1 -1
- package/dist/collection/components/table/table.css +97 -27
- package/dist/collection/components/table/table.js +143 -33
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/collection/components/table/table.service.js +1 -10
- package/dist/collection/components/table/table.service.js.map +1 -1
- package/dist/collection/components/table/table.store.js +11 -11
- package/dist/collection/components/table/table.store.js.map +1 -1
- package/dist/collection/utils/transitions.js +9 -7
- package/dist/collection/utils/transitions.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-checkbox-group.js +12 -3
- package/dist/components/nano-checkbox-group.js.map +1 -1
- package/dist/components/nano-field-validator.js +2 -0
- package/dist/components/nano-field-validator.js.map +1 -1
- package/dist/components/nano-global-nav.js +17 -19
- package/dist/components/nano-global-nav.js.map +1 -1
- package/dist/components/nano-progress-bar.d.ts +11 -0
- package/dist/components/nano-progress-bar.js +11 -0
- package/dist/components/nano-progress-bar.js.map +1 -0
- package/dist/components/nano-table.js +167 -58
- package/dist/components/nano-table.js.map +1 -1
- package/dist/components/nav-item.js +1 -1
- package/dist/components/nav-item.js.map +1 -1
- package/dist/components/progress-bar.js +48 -0
- package/dist/components/progress-bar.js.map +1 -0
- package/dist/components/skeleton.js +2 -2
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/spinner.js +1 -1
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/transitions.js +9 -7
- package/dist/components/transitions.js.map +1 -1
- package/dist/custom-elements/index.d.ts +6 -0
- package/dist/custom-elements/index.js +214 -91
- package/dist/custom-elements/index.js.map +1 -1
- package/dist/esm/index-3c280603.js +8 -4
- package/dist/esm/loader.js +1 -1
- package/dist/esm/nano-checkbox-group.entry.js +12 -3
- package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
- package/dist/esm/nano-components.js +1 -1
- package/dist/esm/nano-details.entry.js +1 -1
- package/dist/esm/nano-field-validator.entry.js +2 -0
- package/dist/esm/nano-field-validator.entry.js.map +1 -1
- package/dist/esm/nano-global-nav-user-profile_3.entry.js +2 -2
- package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
- package/dist/esm/nano-global-nav.entry.js +18 -20
- package/dist/esm/nano-global-nav.entry.js.map +1 -1
- package/dist/esm/nano-progress-bar.entry.js +29 -0
- package/dist/esm/nano-progress-bar.entry.js.map +1 -0
- package/dist/esm/nano-resize-observe_2.entry.js +2 -2
- package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
- package/dist/esm/nano-spinner.entry.js +1 -1
- package/dist/esm/nano-spinner.entry.js.map +1 -1
- package/dist/esm/nano-tab-group.entry.js +1 -1
- package/dist/esm/{nano-table-efdf3dba.js → nano-table-930d9245.js} +146 -58
- package/dist/esm/nano-table-930d9245.js.map +1 -0
- package/dist/esm/nano-table.entry.js +2 -1
- package/dist/esm/nano-table.entry.js.map +1 -1
- package/dist/esm/{table.worker-10ba1126.js → table.worker-7666db6d.js} +3 -2
- package/dist/esm/table.worker-7666db6d.js.map +1 -0
- package/dist/esm/{transitions-d75d242e.js → transitions-71cca3ed.js} +10 -8
- package/dist/esm/transitions-71cca3ed.js.map +1 -0
- package/dist/nano-components/assets/ont-logo.svg +89 -47
- 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-167b9165.js +5 -0
- package/dist/nano-components/p-167b9165.js.map +1 -0
- package/dist/nano-components/p-28344d24.entry.js +5 -0
- package/dist/nano-components/p-28344d24.entry.js.map +1 -0
- package/dist/nano-components/p-40b47b05.entry.js +5 -0
- package/dist/nano-components/{p-8a6834ff.entry.js.map → p-40b47b05.entry.js.map} +0 -0
- package/dist/nano-components/p-49458cd9.js +5 -0
- package/dist/nano-components/p-49458cd9.js.map +1 -0
- package/dist/nano-components/p-65f84bbd.entry.js +5 -0
- package/dist/nano-components/p-65f84bbd.entry.js.map +1 -0
- package/dist/nano-components/{p-8ef2363b.entry.js → p-6cd59e58.entry.js} +2 -2
- package/dist/nano-components/{p-8ef2363b.entry.js.map → p-6cd59e58.entry.js.map} +0 -0
- package/dist/nano-components/{p-687350a5.entry.js → p-701e8ebf.entry.js} +2 -2
- package/dist/nano-components/p-701e8ebf.entry.js.map +1 -0
- package/dist/nano-components/p-a2d0d7b9.entry.js.map +1 -1
- package/dist/nano-components/p-b717f6d7.js +5 -0
- package/dist/nano-components/{p-b7b06e04.js.map → p-b717f6d7.js.map} +0 -0
- package/dist/nano-components/p-b7901427.entry.js +5 -0
- package/dist/nano-components/p-b7901427.entry.js.map +1 -0
- package/dist/nano-components/{p-9f8b091a.entry.js → p-b7c3aecb.entry.js} +2 -2
- package/dist/nano-components/{p-9f8b091a.entry.js.map → p-b7c3aecb.entry.js.map} +0 -0
- package/dist/nano-components/p-d8e8d7e3.entry.js +5 -0
- package/dist/nano-components/p-d8e8d7e3.entry.js.map +1 -0
- package/dist/nano-components/p-f95a263c.entry.js +5 -0
- package/dist/nano-components/p-f95a263c.entry.js.map +1 -0
- package/dist/types/components/global-nav/global-nav-interface.d.ts +43 -0
- package/dist/types/components/global-nav/global-nav.d.ts +1 -1
- package/dist/types/components/progress-bar/progress-bar.d.ts +19 -0
- package/dist/types/components/table/table.children.d.ts +2 -1
- package/dist/types/components/table/table.d.ts +25 -7
- package/dist/types/components/table/table.service.d.ts +1 -7
- package/dist/types/components/table/table.store.d.ts +4 -2
- package/dist/types/components.d.ts +60 -5
- package/docs-json.json +273 -49
- package/docs-vscode.json +31 -2
- package/package.json +3 -3
- package/dist/cjs/nano-table-8a898621.js.map +0 -1
- package/dist/cjs/table.worker-b0b0044a.js.map +0 -1
- package/dist/cjs/transitions-d295a09e.js.map +0 -1
- package/dist/esm/nano-table-efdf3dba.js.map +0 -1
- package/dist/esm/table.worker-10ba1126.js.map +0 -1
- package/dist/esm/transitions-d75d242e.js.map +0 -1
- package/dist/nano-components/p-03402e69.entry.js +0 -5
- package/dist/nano-components/p-03402e69.entry.js.map +0 -1
- package/dist/nano-components/p-2382d5e9.entry.js +0 -5
- package/dist/nano-components/p-2382d5e9.entry.js.map +0 -1
- package/dist/nano-components/p-4c6ef60b.js +0 -5
- package/dist/nano-components/p-4c6ef60b.js.map +0 -1
- package/dist/nano-components/p-61bfb8b9.entry.js +0 -5
- package/dist/nano-components/p-61bfb8b9.entry.js.map +0 -1
- package/dist/nano-components/p-687350a5.entry.js.map +0 -1
- package/dist/nano-components/p-82295d91.js +0 -5
- package/dist/nano-components/p-82295d91.js.map +0 -1
- package/dist/nano-components/p-8a6834ff.entry.js +0 -5
- package/dist/nano-components/p-9f2524d4.entry.js +0 -5
- package/dist/nano-components/p-9f2524d4.entry.js.map +0 -1
- package/dist/nano-components/p-b7b06e04.js +0 -5
@@ -270,7 +270,6 @@
|
|
270
270
|
-ms-flex-align: center;
|
271
271
|
align-items: center;
|
272
272
|
cursor: pointer;
|
273
|
-
font-stretch: expanded;
|
274
273
|
}
|
275
274
|
:host(.nano-global-nav-bar) .text {
|
276
275
|
-webkit-box-flex: 1;
|
@@ -288,14 +287,13 @@
|
|
288
287
|
|
289
288
|
:host(.nano-global-nav-bar.has-secondary) button {
|
290
289
|
position: relative;
|
291
|
-
font-stretch: expanded;
|
292
290
|
}
|
293
291
|
:host(.nano-global-nav-bar.has-secondary) button::before {
|
294
292
|
content: "";
|
295
|
-
background: #
|
296
|
-
height:
|
293
|
+
background-color: #0c5a71;
|
294
|
+
height: 9px;
|
297
295
|
inset-inline: 0 5px;
|
298
|
-
inset-block-end: -
|
296
|
+
inset-block-end: -24px;
|
299
297
|
position: absolute;
|
300
298
|
-webkit-transform: translateZ(0) scaleX(0);
|
301
299
|
transform: translateZ(0) scaleX(0);
|
@@ -310,7 +308,7 @@
|
|
310
308
|
transform: translateZ(0) scaleX(1);
|
311
309
|
}
|
312
310
|
:host(.nano-global-nav-bar.has-secondary) .secondary-open button::before {
|
313
|
-
opacity: 0.
|
311
|
+
opacity: 0.7;
|
314
312
|
}
|
315
313
|
:host(.nano-global-nav-bar.has-secondary) .secondary-menu {
|
316
314
|
display: none;
|
@@ -0,0 +1,84 @@
|
|
1
|
+
:host {
|
2
|
+
box-sizing: border-box;
|
3
|
+
}
|
4
|
+
|
5
|
+
*,
|
6
|
+
*::before,
|
7
|
+
*::after {
|
8
|
+
box-sizing: border-box;
|
9
|
+
}
|
10
|
+
[hidden] {
|
11
|
+
display: none !important;
|
12
|
+
}
|
13
|
+
/**
|
14
|
+
* @prop --height: The progress bar's height. Default 1em
|
15
|
+
* @prop --track-color: The track color. Default rgba(var(--nano-track-rgb, 228, 230, 232), 1);
|
16
|
+
* @prop --indicator-color: The indicator color. Default rgba(var(--nano-indicator-rgb, 84, 140, 175), 1);
|
17
|
+
* @prop --label-color: The label color. Default var(--nano-color-white, white);
|
18
|
+
*/
|
19
|
+
:host {
|
20
|
+
--height: 1em;
|
21
|
+
--track-color: rgba(var(--nano-track-rgb, 228, 230, 232), 1);
|
22
|
+
--indicator-color: rgba(var(--nano-indicator-rgb, 84, 140, 175), 1);
|
23
|
+
--label-color: var(--nano-color-white, white);
|
24
|
+
display: block;
|
25
|
+
}
|
26
|
+
|
27
|
+
.progress-bar {
|
28
|
+
position: relative;
|
29
|
+
background-color: var(--track-color);
|
30
|
+
height: var(--height);
|
31
|
+
border-radius: var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));
|
32
|
+
overflow: hidden;
|
33
|
+
}
|
34
|
+
|
35
|
+
.progress-bar__indicator {
|
36
|
+
height: 100%;
|
37
|
+
font-size: 0.75em;
|
38
|
+
background-color: var(--indicator-color);
|
39
|
+
color: var(--label-color);
|
40
|
+
text-align: center;
|
41
|
+
white-space: nowrap;
|
42
|
+
overflow: hidden;
|
43
|
+
-webkit-transition: 0.4s width, 0.4s background-color;
|
44
|
+
transition: 0.4s width, 0.4s background-color;
|
45
|
+
-webkit-transform: translateZ(0);
|
46
|
+
transform: translateZ(0);
|
47
|
+
-webkit-user-select: none;
|
48
|
+
-moz-user-select: none;
|
49
|
+
-ms-user-select: none;
|
50
|
+
user-select: none;
|
51
|
+
-webkit-transform-origin: left;
|
52
|
+
transform-origin: left;
|
53
|
+
}
|
54
|
+
|
55
|
+
.progress-bar--indeterminate .progress-bar__indicator {
|
56
|
+
-webkit-animation: indeterminate 2.5s infinite cubic-bezier(0.37, 0, 0.63, 1);
|
57
|
+
animation: indeterminate 2.5s infinite cubic-bezier(0.37, 0, 0.63, 1);
|
58
|
+
}
|
59
|
+
|
60
|
+
@-webkit-keyframes indeterminate {
|
61
|
+
0% {
|
62
|
+
scale: 1 1;
|
63
|
+
-webkit-transform: translateX(-100%) translateZ(0);
|
64
|
+
transform: translateX(-100%) translateZ(0);
|
65
|
+
}
|
66
|
+
75%, 100% {
|
67
|
+
scale: 1 1;
|
68
|
+
-webkit-transform: translateX(100%) translateZ(0);
|
69
|
+
transform: translateX(100%) translateZ(0);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
@keyframes indeterminate {
|
74
|
+
0% {
|
75
|
+
scale: 1 1;
|
76
|
+
-webkit-transform: translateX(-100%) translateZ(0);
|
77
|
+
transform: translateX(-100%) translateZ(0);
|
78
|
+
}
|
79
|
+
75%, 100% {
|
80
|
+
scale: 1 1;
|
81
|
+
-webkit-transform: translateX(100%) translateZ(0);
|
82
|
+
transform: translateX(100%) translateZ(0);
|
83
|
+
}
|
84
|
+
}
|
@@ -0,0 +1,106 @@
|
|
1
|
+
/*!
|
2
|
+
* Web Components for Nanopore digital Web Apps
|
3
|
+
*/
|
4
|
+
import { h } from '@stencil/core';
|
5
|
+
/**
|
6
|
+
* Used to show the status of an ongoing operation.
|
7
|
+
*
|
8
|
+
* @slot - A label to show inside the indicator.
|
9
|
+
*
|
10
|
+
* @part base - The component's base wrapper.
|
11
|
+
* @part indicator - The progress bar indicator.
|
12
|
+
* @part label - The progress bar label.
|
13
|
+
*/
|
14
|
+
export class ProgressBar {
|
15
|
+
constructor() {
|
16
|
+
this.value = 0;
|
17
|
+
this.indeterminate = false;
|
18
|
+
this.showPercent = false;
|
19
|
+
}
|
20
|
+
render() {
|
21
|
+
return (h("div", { part: "base", class: {
|
22
|
+
'progress-bar': true,
|
23
|
+
'progress-bar--indeterminate': this.indeterminate,
|
24
|
+
}, role: "progressbar", title: this.host.title || undefined, "aria-label": "Progress", "aria-valuemin": "0", "aria-valuemax": "100", "aria-valuenow": this.indeterminate ? null : this.value }, h("div", { part: "indicator", class: "progress-bar__indicator", style: {
|
25
|
+
width: `${this.value}%`,
|
26
|
+
} }, h("span", { part: "label", class: "progress-bar__label" }, h("slot", null, !this.indeterminate && this.showPercent ? `${this.value}%` : '')))));
|
27
|
+
}
|
28
|
+
static get is() { return "nano-progress-bar"; }
|
29
|
+
static get encapsulation() { return "shadow"; }
|
30
|
+
static get originalStyleUrls() {
|
31
|
+
return {
|
32
|
+
"$": ["progress-bar.scss"]
|
33
|
+
};
|
34
|
+
}
|
35
|
+
static get styleUrls() {
|
36
|
+
return {
|
37
|
+
"$": ["progress-bar.css"]
|
38
|
+
};
|
39
|
+
}
|
40
|
+
static get properties() {
|
41
|
+
return {
|
42
|
+
"value": {
|
43
|
+
"type": "number",
|
44
|
+
"mutable": false,
|
45
|
+
"complexType": {
|
46
|
+
"original": "number",
|
47
|
+
"resolved": "number",
|
48
|
+
"references": {}
|
49
|
+
},
|
50
|
+
"required": false,
|
51
|
+
"optional": false,
|
52
|
+
"docs": {
|
53
|
+
"tags": [],
|
54
|
+
"text": "The progress bar's percentage, 0 to 100."
|
55
|
+
},
|
56
|
+
"getter": false,
|
57
|
+
"setter": false,
|
58
|
+
"attribute": "value",
|
59
|
+
"reflect": false,
|
60
|
+
"defaultValue": "0"
|
61
|
+
},
|
62
|
+
"indeterminate": {
|
63
|
+
"type": "boolean",
|
64
|
+
"mutable": false,
|
65
|
+
"complexType": {
|
66
|
+
"original": "boolean",
|
67
|
+
"resolved": "boolean",
|
68
|
+
"references": {}
|
69
|
+
},
|
70
|
+
"required": false,
|
71
|
+
"optional": false,
|
72
|
+
"docs": {
|
73
|
+
"tags": [],
|
74
|
+
"text": "When true, percentage is ignored, the label is hidden, and the progress bar is drawn in an indeterminate state."
|
75
|
+
},
|
76
|
+
"getter": false,
|
77
|
+
"setter": false,
|
78
|
+
"attribute": "indeterminate",
|
79
|
+
"reflect": false,
|
80
|
+
"defaultValue": "false"
|
81
|
+
},
|
82
|
+
"showPercent": {
|
83
|
+
"type": "boolean",
|
84
|
+
"mutable": false,
|
85
|
+
"complexType": {
|
86
|
+
"original": "boolean",
|
87
|
+
"resolved": "boolean",
|
88
|
+
"references": {}
|
89
|
+
},
|
90
|
+
"required": false,
|
91
|
+
"optional": false,
|
92
|
+
"docs": {
|
93
|
+
"tags": [],
|
94
|
+
"text": "Whether to show the progress bar's current percent as text. Will be overwritten if you use the default slot."
|
95
|
+
},
|
96
|
+
"getter": false,
|
97
|
+
"setter": false,
|
98
|
+
"attribute": "show-percent",
|
99
|
+
"reflect": false,
|
100
|
+
"defaultValue": "false"
|
101
|
+
}
|
102
|
+
};
|
103
|
+
}
|
104
|
+
static get elementRef() { return "host"; }
|
105
|
+
}
|
106
|
+
//# sourceMappingURL=progress-bar.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"progress-bar.js","sourceRoot":"","sources":["../../../src/components/progress-bar/progress-bar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE5D;;;;;;;;GAQG;AAOH,MAAM,OAAO,WAAW;;iBAIN,CAAC;yBAGO,KAAK;uBAGP,KAAK;;EAE3B,MAAM;IACJ,OAAO,CACL,WACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE;QACL,cAAc,EAAE,IAAI;QACpB,6BAA6B,EAAE,IAAI,CAAC,aAAa;OAClD,EACD,IAAI,EAAC,aAAa,EAClB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,gBACxB,UAAU,mBACP,GAAG,mBACH,KAAK,mBACJ,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK;MAErD,WACE,IAAI,EAAC,WAAW,EAChB,KAAK,EAAC,yBAAyB,EAC/B,KAAK,EAAE;UACL,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG;SACxB;QAED,YAAM,IAAI,EAAC,OAAO,EAAC,KAAK,EAAC,qBAAqB;UAC5C,gBACG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAC3D,CACF,CACH,CACF,CACP,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Prop, h, Element } from '@stencil/core';\n\n/**\n * Used to show the status of an ongoing operation.\n *\n * @slot - A label to show inside the indicator.\n *\n * @part base - The component's base wrapper.\n * @part indicator - The progress bar indicator.\n * @part label - The progress bar label.\n */\n\n@Component({\n tag: 'nano-progress-bar',\n styleUrl: 'progress-bar.scss',\n shadow: true,\n})\nexport class ProgressBar {\n @Element() host: HTMLNanoProgressBarElement;\n\n /** The progress bar's percentage, 0 to 100. */\n @Prop() value = 0;\n\n /** When true, percentage is ignored, the label is hidden, and the progress bar is drawn in an indeterminate state. */\n @Prop() indeterminate = false;\n\n /** Whether to show the progress bar's current percent as text. Will be overwritten if you use the default slot. */\n @Prop() showPercent = false;\n\n render() {\n return (\n <div\n part=\"base\"\n class={{\n 'progress-bar': true,\n 'progress-bar--indeterminate': this.indeterminate,\n }}\n role=\"progressbar\"\n title={this.host.title || undefined}\n aria-label=\"Progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={this.indeterminate ? null : this.value}\n >\n <div\n part=\"indicator\"\n class=\"progress-bar__indicator\"\n style={{\n width: `${this.value}%`,\n }}\n >\n <span part=\"label\" class=\"progress-bar__label\">\n <slot>\n {!this.indeterminate && this.showPercent ? `${this.value}%` : ''}\n </slot>\n </span>\n </div>\n </div>\n );\n }\n}\n"]}
|
@@ -12,26 +12,28 @@
|
|
12
12
|
}
|
13
13
|
:host {
|
14
14
|
/**
|
15
|
-
* @prop --base-color-rgb: default var(--nano-skeleton-
|
15
|
+
* @prop --base-color-rgb: default var(--nano-skeleton-rgb, 228, 230, 232);
|
16
16
|
* @prop --color: default var(--nano-skeleton-color, rgba(var(--base-color-rgb), 1));
|
17
17
|
* @prop --tint: default var(--nano-skeleton-tint, rgba(var(--base-color-rgb), .3));
|
18
18
|
*/
|
19
|
-
--base-color-rgb: var(--nano-skeleton-
|
19
|
+
--base-color-rgb: var(--nano-skeleton-rgb, 228, 230, 232);
|
20
20
|
--color: var(--nano-skeleton-color, rgba(var(--base-color-rgb), 1));
|
21
21
|
--tint: var(--nano-skeleton-tint, rgba(var(--base-color-rgb), 0.5));
|
22
22
|
display: block;
|
23
23
|
position: relative;
|
24
24
|
border-radius: 0.25rem;
|
25
|
-
block-size: 1em;
|
25
|
+
min-block-size: 1em;
|
26
|
+
line-height: inherit;
|
26
27
|
}
|
27
28
|
|
28
29
|
.skeleton {
|
29
30
|
display: -webkit-box;
|
30
31
|
display: -ms-flexbox;
|
31
32
|
display: flex;
|
32
|
-
inline-size: 100%;
|
33
|
-
block-size: 100%;
|
33
|
+
min-inline-size: 100%;
|
34
|
+
min-block-size: 100%;
|
34
35
|
border-radius: inherit;
|
36
|
+
line-height: inherit;
|
35
37
|
}
|
36
38
|
|
37
39
|
.skeleton__indicator {
|
@@ -40,6 +42,7 @@
|
|
40
42
|
flex: 1 1 auto;
|
41
43
|
background: var(--color);
|
42
44
|
border-radius: inherit;
|
45
|
+
line-height: inherit;
|
43
46
|
}
|
44
47
|
|
45
48
|
.skeleton.animate .skeleton__indicator {
|
@@ -15,7 +15,7 @@ export class Skeleton {
|
|
15
15
|
return (h("div", { class: {
|
16
16
|
skeleton: true,
|
17
17
|
animate: this.animated,
|
18
|
-
} }, h("div", { class: "skeleton__indicator" })));
|
18
|
+
} }, h("div", { class: "skeleton__indicator" }, "\u00A0")));
|
19
19
|
}
|
20
20
|
static get is() { return "nano-skeleton"; }
|
21
21
|
static get encapsulation() { return "shadow"; }
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../src/components/skeleton/skeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAsB,MAAM,eAAe,CAAC;AAEvE;;;;GAIG;AAMH,MAAM,OAAO,QAAQ;;oBAEA,IAAI;;EAEvB,MAAM;IACJ,OAAO,CACL,WACE,KAAK,EAAE;QACL,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI,CAAC,QAAQ;OACvB;MAED,WAAK,KAAK,EAAC,qBAAqB,
|
1
|
+
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../src/components/skeleton/skeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAsB,MAAM,eAAe,CAAC;AAEvE;;;;GAIG;AAMH,MAAM,OAAO,QAAQ;;oBAEA,IAAI;;EAEvB,MAAM;IACJ,OAAO,CACL,WACE,KAAK,EAAE;QACL,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI,CAAC,QAAQ;OACvB;MAED,WAAK,KAAK,EAAC,qBAAqB,aAAa,CACzC,CACP,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Prop, h, ComponentInterface } from '@stencil/core';\n\n/**\n * Skeletons are used to show where content will eventually be drawn.\n * Simple containers for scaffolding layouts that mimic what users will see when content has finished loading.\n * Prevents large areas of empty space during asynchronous operations.\n */\n@Component({\n tag: 'nano-skeleton',\n styleUrl: 'skeleton.scss',\n shadow: true,\n})\nexport class Skeleton implements ComponentInterface {\n /** When `true`, the skeleton will animate. */\n @Prop() animated = true;\n\n render() {\n return (\n <div\n class={{\n skeleton: true,\n animate: this.animated,\n }}\n >\n <div class=\"skeleton__indicator\"> </div>\n </div>\n );\n }\n}\n"]}
|
@@ -12,19 +12,15 @@
|
|
12
12
|
}
|
13
13
|
:host {
|
14
14
|
/**
|
15
|
-
* @prop --base-color-rgb: default var(--nano-
|
16
|
-
* @prop --indicator-color: default var(--nano-
|
17
|
-
* @prop --track-color: default var(--nano-track-color, rgba(var(--base-color-rgb), .2))
|
15
|
+
* @prop --base-color-rgb: default var(--nano-indicator-rgb, 84, 140, 175)
|
16
|
+
* @prop --indicator-color: default var(--nano-indicator-color, rgba(var(--base-color-rgb), 1));
|
17
|
+
* @prop --track-color: default var(--nano-track-color, rgba(var(--base-color-rgb), 0.2));
|
18
18
|
* @prop --spinner-scale: optional scaling of the spinner. default contextual font-size
|
19
19
|
* @prop --overlay-color: var(--nano-layer-overlay-light, rgba(255, 255, 255, .7));
|
20
20
|
*/
|
21
21
|
display: inline-block;
|
22
|
-
--base-color-rgb: var(--nano-
|
23
|
-
--indicator-color:
|
24
|
-
var(
|
25
|
-
--nano-spinner-indicator-color,
|
26
|
-
rgba(var(--base-color-rgb), 1)
|
27
|
-
);
|
22
|
+
--base-color-rgb: var(--nano-indicator-rgb, 84, 140, 175);
|
23
|
+
--indicator-color: var(--nano-indicator-color, rgba(var(--base-color-rgb), 1));
|
28
24
|
--track-color: var(--nano-track-color, rgba(var(--base-color-rgb), 0.2));
|
29
25
|
--overlay-color: var(--nano-layer-overlay-light, rgba(255, 255, 255, .7));
|
30
26
|
}
|
@@ -3,7 +3,7 @@
|
|
3
3
|
*/
|
4
4
|
import { Fragment, h } from '@stencil/core';
|
5
5
|
import { CSSNAMESPACE } from './table.constants';
|
6
|
-
import { cellRender,
|
6
|
+
import { cellRender, colheadFootRender, fetchStores, mergeCellProperties, mergeProperties, rowDataModel, } from './table.service';
|
7
7
|
function baseClasses(type, vPinned, toString = false) {
|
8
8
|
const classes = {
|
9
9
|
[`${CSSNAMESPACE}__${type}`]: true,
|
@@ -26,33 +26,56 @@ const stickyVIOs = new WeakMap();
|
|
26
26
|
function addHObserver(el, pos, cb) {
|
27
27
|
if (stickyHIOs.get(el))
|
28
28
|
return;
|
29
|
+
const store = fetchStores();
|
30
|
+
const root = store.general.state.scrollParent;
|
31
|
+
const host = store.general.state.host;
|
29
32
|
const observer = new IntersectionObserver(([e]) => {
|
30
33
|
const positions = {};
|
31
|
-
if (pos === 'start')
|
32
|
-
positions.start =
|
33
|
-
|
34
|
+
if (pos === 'start') {
|
35
|
+
positions.start =
|
36
|
+
e.boundingClientRect.x -
|
37
|
+
(host.getBoundingClientRect().x + root.scrollLeft) <
|
38
|
+
0 && !e.isIntersecting;
|
39
|
+
}
|
40
|
+
if (pos === 'end') {
|
41
|
+
// TODO - sort these out for RtL
|
34
42
|
positions.end =
|
35
|
-
e.boundingClientRect.
|
43
|
+
e.boundingClientRect.right > e.boundingClientRect.width &&
|
36
44
|
!e.isIntersecting;
|
45
|
+
}
|
37
46
|
cb(positions);
|
38
|
-
}, {
|
47
|
+
}, {
|
48
|
+
threshold: [1],
|
49
|
+
rootMargin: '1px 0px 1px 0px',
|
50
|
+
root: root === document.scrollingElement ? null : root,
|
51
|
+
});
|
39
52
|
stickyHIOs.set(el, observer);
|
40
53
|
requestAnimationFrame(() => observer.observe(el));
|
41
54
|
}
|
42
55
|
function addVObserver(el, pos, cb) {
|
43
56
|
if (stickyVIOs.get(el))
|
44
57
|
return;
|
58
|
+
const store = fetchStores();
|
59
|
+
const root = store.general.state.scrollParent;
|
60
|
+
const host = store.general.state.host;
|
45
61
|
const observer = new IntersectionObserver(([e]) => {
|
46
|
-
console.log(e);
|
47
62
|
const positions = {};
|
48
|
-
if (pos === 'top')
|
49
|
-
positions.top =
|
63
|
+
if (pos === 'top') {
|
64
|
+
positions.top =
|
65
|
+
e.boundingClientRect.y -
|
66
|
+
(host.getBoundingClientRect().y + root.scrollTop) <
|
67
|
+
0 && !e.isIntersecting;
|
68
|
+
}
|
50
69
|
if (pos === 'bottom')
|
51
70
|
positions.bottom =
|
52
71
|
e.boundingClientRect.height > e.intersectionRect.height &&
|
53
72
|
!e.isIntersecting;
|
54
73
|
cb(positions);
|
55
|
-
}, {
|
74
|
+
}, {
|
75
|
+
threshold: [0.99],
|
76
|
+
rootMargin: '0px 100px 0px 100px',
|
77
|
+
root: root === document.scrollingElement ? null : root,
|
78
|
+
});
|
56
79
|
stickyVIOs.set(el, observer);
|
57
80
|
requestAnimationFrame(() => observer.observe(el));
|
58
81
|
}
|
@@ -125,7 +148,7 @@ export const TableColHead = ({ column, headRenderer, onColumnOrderClick, onColum
|
|
125
148
|
default:
|
126
149
|
order = 'asc';
|
127
150
|
}
|
128
|
-
onColumnOrderClick(order, column.prop, e.target.
|
151
|
+
onColumnOrderClick(order, column.prop, e.target.closest('th'));
|
129
152
|
}
|
130
153
|
let extraProps = {};
|
131
154
|
if (column.columnProperties) {
|
@@ -141,7 +164,7 @@ export const TableColHead = ({ column, headRenderer, onColumnOrderClick, onColum
|
|
141
164
|
},
|
142
165
|
};
|
143
166
|
let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
|
144
|
-
const content =
|
167
|
+
const content = colheadFootRender(column);
|
145
168
|
if (!content)
|
146
169
|
return h(Fragment, null);
|
147
170
|
props =
|
@@ -158,7 +181,10 @@ export const TableColHead = ({ column, headRenderer, onColumnOrderClick, onColum
|
|
158
181
|
addHObserver(th, column.pinned, onColumnPinned);
|
159
182
|
if (['top', 'bottom'].includes(headRenderer.pinned))
|
160
183
|
addVObserver(th, headRenderer.pinned, onColumnPinned);
|
161
|
-
} }, h("button", { class:
|
184
|
+
} }, h("button", { class: {
|
185
|
+
[`${CSSNAMESPACE}__order-btn`]: true,
|
186
|
+
[`${CSSNAMESPACE}__cell-content`]: true,
|
187
|
+
}, onClick: handleColumnOrderClick }, colheadFootRender(column), !!column.filter && h("nano-icon", { name: "light/filter" }), !!column.order &&
|
162
188
|
(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" })))));
|
163
189
|
}
|
164
190
|
return (h("th", { ...props, ref: (th) => {
|
@@ -166,10 +192,10 @@ export const TableColHead = ({ column, headRenderer, onColumnOrderClick, onColum
|
|
166
192
|
addHObserver(th, column.pinned, onColumnPinned);
|
167
193
|
if (['top', 'bottom'].includes(headRenderer.pinned))
|
168
194
|
addVObserver(th, headRenderer.pinned, onColumnPinned);
|
169
|
-
} },
|
195
|
+
} }, h("div", { class: `${CSSNAMESPACE}__cell-content` }, colheadFootRender(column), !!column.filter && h("nano-icon", { name: "light/bars-filter" }))));
|
170
196
|
};
|
171
|
-
export const TableCell = ({ rowIndex, colIndex, }) => {
|
172
|
-
const content = cellRender(rowIndex, colIndex);
|
197
|
+
export const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
|
198
|
+
const content = nestedContent || cellRender(rowIndex, colIndex);
|
173
199
|
if (!content)
|
174
200
|
return h(Fragment, null);
|
175
201
|
const store = fetchStores();
|
@@ -193,6 +219,6 @@ export const TableCell = ({ rowIndex, colIndex, }) => {
|
|
193
219
|
}
|
194
220
|
return (h(CellType
|
195
221
|
// role="gridcell"
|
196
|
-
, { ...props },
|
222
|
+
, { ...props }, h("div", { class: `${CSSNAMESPACE}__cell-content` }, content)));
|
197
223
|
};
|
198
224
|
//# sourceMappingURL=table.children.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"table.children.js","sourceRoot":"","sources":["../../../src/components/table/table.children.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Fragment, FunctionalComponent, h, VNode } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n cellRender,\n colheadRender,\n fetchStores,\n mergeCellProperties,\n mergeProperties,\n rowDataModel,\n} from './table.service';\nimport type { TableTypes } from '../../interface';\n\ntype ValidRenderTypes = 'tr' | 'th' | 'td';\n\ntype PinnedCb = (positions: { [key in TableTypes.Position]?: boolean }) => void;\n\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: false\n): { [key: string]: boolean };\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: true\n): string;\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString = false\n): { [key: string]: boolean } | string {\n const classes = {\n [`${CSSNAMESPACE}__${type}`]: true,\n [`${CSSNAMESPACE}__pin`]: !!vPinned,\n [`${CSSNAMESPACE}__pin--top`]: vPinned === 'top',\n [`${CSSNAMESPACE}__pin--bottom`]: vPinned === 'bottom',\n };\n\n if (toString) {\n let classString = '';\n Object.entries(classes).forEach(([className, on]) => {\n if (on) classString += className + ' ';\n });\n return classString;\n }\n return classes;\n}\n\nconst stickyHIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\nconst stickyVIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\n\nfunction addHObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyHIOs.get(el)) return;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'start')\n positions.start = e.boundingClientRect.x < 0 && !e.isIntersecting;\n if (pos === 'end')\n positions.end =\n e.boundingClientRect.width > e.intersectionRect.width &&\n !e.isIntersecting;\n cb(positions);\n },\n { threshold: [1], rootMargin: '1px 0px 1px 0px' }\n );\n stickyHIOs.set(el, observer);\n requestAnimationFrame(() => observer.observe(el));\n}\n\nfunction addVObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyVIOs.get(el)) return;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n console.log(e);\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'top')\n positions.top = e.boundingClientRect.y < 0 && !e.isIntersecting;\n if (pos === 'bottom')\n positions.bottom =\n e.boundingClientRect.height > e.intersectionRect.height &&\n !e.isIntersecting;\n cb(positions);\n },\n { threshold: [0.99], rootMargin: '0px 100px 0px 100px' }\n );\n stickyVIOs.set(el, observer);\n requestAnimationFrame(() => observer.observe(el));\n}\n\ntype TableRowProps = {\n rowRenderer: TableTypes.RowRenderer;\n rowIndex?: number;\n row?: TableTypes.RowData;\n};\n\nexport const TableRow: FunctionalComponent<TableRowProps> = (\n { rowRenderer, rowIndex, row },\n children\n) => {\n let extraProps = {};\n\n if (!row) {\n const model = rowDataModel(rowIndex);\n row = model.row;\n }\n\n if (rowRenderer?.rowProperties) {\n extraProps =\n rowRenderer.rowProperties({ row: row, rowIndex }) || extraProps;\n }\n\n let pinned: TableTypes.Position;\n if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {\n pinned = rowRenderer.pinned();\n }\n\n const baseProps = { class: baseClasses('tr', pinned) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n\n return (\n <tr {...props} key={row.__uuid}>\n {children}\n </tr>\n );\n};\n\ntype TableHeadFootProps = {\n rowRenderer: TableTypes.HeadFootRenderer;\n onColumnPinned?: PinnedCb;\n};\n\nexport const TableHeadFootRow: FunctionalComponent<TableHeadFootProps> = (\n { rowRenderer, onColumnPinned },\n children,\n utils\n) => {\n let extraProps = {};\n if (rowRenderer.rowProperties) {\n extraProps = rowRenderer.rowProperties() || {};\n }\n\n const pinned = rowRenderer.pinned || null;\n const baseProps = { class: baseClasses('tr', null) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const tpl = rowRenderer?.template;\n\n if (tpl) {\n let toRender = tpl(h as TableTypes.HFunc<VNode>, {\n renderedRow: <tr {...props}>{children}</tr>,\n });\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node) => {\n if (node.vtag === 'tr') {\n node.vattrs = mergeProperties(\n { class: baseClasses('tr', null, true) },\n node.vattrs\n );\n\n if (!!node.vchildren) {\n node.vchildren = utils.map(node.vchildren, (cNode) => {\n if (['td', 'th'].includes(cNode.vtag.toString())) {\n cNode.vattrs = mergeProperties(\n {\n class: baseClasses(\n cNode.vtag.toString() as ValidRenderTypes,\n pinned,\n true\n ),\n ref: (th) => {\n addVObserver(th, pinned, onColumnPinned);\n },\n },\n cNode.vattrs\n );\n }\n return cNode;\n });\n }\n }\n return node;\n });\n }\n return toRender;\n }\n\n return <tr {...props}>{children}</tr>;\n};\n\ntype TableColHeadProps = {\n column: TableTypes.ColumnConfig;\n headRenderer: TableTypes.HeadFootRenderer;\n onColumnOrderClick?: (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n el: HTMLElement\n ) => void;\n onColumnPinned?: PinnedCb;\n};\n\nexport const TableColHead: FunctionalComponent<TableColHeadProps> = ({\n column,\n headRenderer,\n onColumnOrderClick,\n onColumnPinned,\n}) => {\n function handleColumnOrderClick(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 onColumnOrderClick(order, column.prop, e.target.parentElement);\n }\n\n let extraProps = {};\n if (column.columnProperties) {\n extraProps = column.columnProperties(column) || extraProps;\n }\n\n const baseProps = {\n class: {\n ...baseClasses('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 = colheadRender(column);\n\n if (!content) return <Fragment></Fragment>;\n\n props =\n Number((props as TableTypes.EleProps).colspan) > 1\n ? { ...props, scope: 'colgroup' }\n : { ...props, scope: 'col' };\n\n if (column.sortable !== false) {\n return (\n <th\n {...props}\n aria-sort={\n column.order\n ? column.order === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n }\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 >\n <button\n class={`${CSSNAMESPACE}__order-btn`}\n onClick={handleColumnOrderClick}\n >\n {colheadRender(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 </th>\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 >\n {colheadRender(column)}\n {!!column.filter && <nano-icon name=\"light/bars-filter\" />}\n </th>\n );\n};\n\ntype TableCellProps = {\n rowIndex: number;\n colIndex: number;\n};\n\nexport const TableCell: FunctionalComponent<TableCellProps> = ({\n rowIndex,\n colIndex,\n}) => {\n const content = cellRender(rowIndex, colIndex);\n if (!content) return <Fragment></Fragment>;\n\n const store = fetchStores();\n const column = store.config.state.columns[colIndex];\n let CellType = 'td';\n let props = mergeCellProperties(rowIndex, colIndex, {\n class: {\n [`${CSSNAMESPACE}__td`]: true,\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__pin`]: !!column.pinned,\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n },\n });\n\n if (column.rowHeader) {\n props =\n Number((props as TableTypes.EleProps).rowspan) > 1\n ? { ...props, scope: 'rowgroup' }\n : { ...props, scope: 'row' };\n CellType = 'th';\n }\n\n return (\n <CellType\n // role=\"gridcell\"\n {...props}\n >\n {cellRender(rowIndex, colIndex)}\n </CellType>\n );\n};\n"]}
|
1
|
+
{"version":3,"file":"table.children.js","sourceRoot":"","sources":["../../../src/components/table/table.children.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Fragment, FunctionalComponent, h, VNode } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n cellRender,\n colheadFootRender,\n fetchStores,\n mergeCellProperties,\n mergeProperties,\n rowDataModel,\n} from './table.service';\nimport type { TableTypes } from '../../interface';\n\ntype ValidRenderTypes = 'tr' | 'th' | 'td';\n\ntype PinnedCb = (positions: { [key in TableTypes.Position]?: boolean }) => void;\n\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: false\n): { [key: string]: boolean };\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: true\n): string;\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString = false\n): { [key: string]: boolean } | string {\n const classes = {\n [`${CSSNAMESPACE}__${type}`]: true,\n [`${CSSNAMESPACE}__pin`]: !!vPinned,\n [`${CSSNAMESPACE}__pin--top`]: vPinned === 'top',\n [`${CSSNAMESPACE}__pin--bottom`]: vPinned === 'bottom',\n };\n\n if (toString) {\n let classString = '';\n Object.entries(classes).forEach(([className, on]) => {\n if (on) classString += className + ' ';\n });\n return classString;\n }\n return classes;\n}\n\nconst stickyHIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\nconst stickyVIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\n\nfunction addHObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyHIOs.get(el)) return;\n\n const store = fetchStores();\n const root = store.general.state.scrollParent;\n const host = store.general.state.host;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'start') {\n positions.start =\n e.boundingClientRect.x -\n (host.getBoundingClientRect().x + root.scrollLeft) <\n 0 && !e.isIntersecting;\n }\n if (pos === 'end') {\n // TODO - sort these out for RtL\n positions.end =\n e.boundingClientRect.right > e.boundingClientRect.width &&\n !e.isIntersecting;\n }\n cb(positions);\n },\n {\n threshold: [1],\n rootMargin: '1px 0px 1px 0px',\n root: root === document.scrollingElement ? null : root,\n }\n );\n stickyHIOs.set(el, observer);\n requestAnimationFrame(() => observer.observe(el));\n}\n\nfunction addVObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyVIOs.get(el)) return;\n\n const store = fetchStores();\n const root = store.general.state.scrollParent;\n const host = store.general.state.host;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'top') {\n positions.top =\n e.boundingClientRect.y -\n (host.getBoundingClientRect().y + root.scrollTop) <\n 0 && !e.isIntersecting;\n }\n if (pos === 'bottom')\n positions.bottom =\n e.boundingClientRect.height > e.intersectionRect.height &&\n !e.isIntersecting;\n cb(positions);\n },\n {\n threshold: [0.99],\n rootMargin: '0px 100px 0px 100px',\n root: root === document.scrollingElement ? null : root,\n }\n );\n stickyVIOs.set(el, observer);\n requestAnimationFrame(() => observer.observe(el));\n}\n\ntype TableRowProps = {\n rowRenderer: TableTypes.RowRenderer;\n rowIndex?: number;\n row?: TableTypes.RowData;\n};\n\nexport const TableRow: FunctionalComponent<TableRowProps> = (\n { rowRenderer, rowIndex, row },\n children\n) => {\n let extraProps = {};\n\n if (!row) {\n const model = rowDataModel(rowIndex);\n row = model.row;\n }\n\n if (rowRenderer?.rowProperties) {\n extraProps =\n rowRenderer.rowProperties({ row: row, rowIndex }) || extraProps;\n }\n\n let pinned: TableTypes.Position;\n if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {\n pinned = rowRenderer.pinned();\n }\n\n const baseProps = { class: baseClasses('tr', pinned) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n\n return (\n <tr {...props} key={row.__uuid}>\n {children}\n </tr>\n );\n};\n\ntype TableHeadFootProps = {\n rowRenderer: TableTypes.HeadFootRenderer;\n onColumnPinned?: PinnedCb;\n};\n\nexport const TableHeadFootRow: FunctionalComponent<TableHeadFootProps> = (\n { rowRenderer, onColumnPinned },\n children,\n utils\n) => {\n let extraProps = {};\n if (rowRenderer.rowProperties) {\n extraProps = rowRenderer.rowProperties() || {};\n }\n\n const pinned = rowRenderer.pinned || null;\n const baseProps = { class: baseClasses('tr', null) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const tpl = rowRenderer?.template;\n\n if (tpl) {\n let toRender = tpl(h as TableTypes.HFunc<VNode>, {\n renderedRow: <tr {...props}>{children}</tr>,\n });\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node) => {\n if (node.vtag === 'tr') {\n node.vattrs = mergeProperties(\n { class: baseClasses('tr', null, true) },\n node.vattrs\n );\n\n if (!!node.vchildren) {\n node.vchildren = utils.map(node.vchildren, (cNode) => {\n if (['td', 'th'].includes(cNode.vtag.toString())) {\n cNode.vattrs = mergeProperties(\n {\n class: baseClasses(\n cNode.vtag.toString() as ValidRenderTypes,\n pinned,\n true\n ),\n ref: (th) => {\n addVObserver(th, pinned, onColumnPinned);\n },\n },\n cNode.vattrs\n );\n }\n return cNode;\n });\n }\n }\n return node;\n });\n }\n return toRender;\n }\n\n return <tr {...props}>{children}</tr>;\n};\n\ntype TableColHeadProps = {\n column: TableTypes.ColumnConfig;\n headRenderer: TableTypes.HeadFootRenderer;\n onColumnOrderClick?: (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n el: HTMLElement\n ) => void;\n onColumnPinned?: PinnedCb;\n};\n\nexport const TableColHead: FunctionalComponent<TableColHeadProps> = ({\n column,\n headRenderer,\n onColumnOrderClick,\n onColumnPinned,\n}) => {\n function handleColumnOrderClick(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 onColumnOrderClick(order, column.prop, e.target.closest('th'));\n }\n\n let extraProps = {};\n if (column.columnProperties) {\n extraProps = column.columnProperties(column) || extraProps;\n }\n\n const baseProps = {\n class: {\n ...baseClasses('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.EleProps).colspan) > 1\n ? { ...props, scope: 'colgroup' }\n : { ...props, scope: 'col' };\n\n if (column.sortable !== false) {\n return (\n <th\n {...props}\n aria-sort={\n column.order\n ? column.order === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n }\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 >\n <button\n class={{\n [`${CSSNAMESPACE}__order-btn`]: true,\n [`${CSSNAMESPACE}__cell-content`]: true,\n }}\n onClick={handleColumnOrderClick}\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 </th>\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 >\n <div class={`${CSSNAMESPACE}__cell-content`}>\n {colheadFootRender(column)}\n {!!column.filter && <nano-icon name=\"light/bars-filter\" />}\n </div>\n </th>\n );\n};\n\ntype TableCellProps = {\n rowIndex: number;\n colIndex: number;\n nestedContent?: VNode;\n};\n\nexport const TableCell: FunctionalComponent<TableCellProps> = ({\n rowIndex,\n colIndex,\n nestedContent,\n}) => {\n const content = nestedContent || cellRender(rowIndex, colIndex);\n if (!content) return <Fragment></Fragment>;\n\n const store = fetchStores();\n const column = store.config.state.columns[colIndex];\n let CellType = 'td';\n let props = mergeCellProperties(rowIndex, colIndex, {\n class: {\n [`${CSSNAMESPACE}__td`]: true,\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__pin`]: !!column.pinned,\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n },\n });\n\n if (column.rowHeader) {\n props =\n Number((props as TableTypes.EleProps).rowspan) > 1\n ? { ...props, scope: 'rowgroup' }\n : { ...props, scope: 'row' };\n CellType = 'th';\n }\n\n return (\n <CellType\n // role=\"gridcell\"\n {...props}\n >\n <div class={`${CSSNAMESPACE}__cell-content`}>{content}</div>\n </CellType>\n );\n};\n"]}
|