@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.
Files changed (171) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/index-41582c2a.js +8 -4
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/nano-checkbox-group.cjs.entry.js +12 -3
  5. package/dist/cjs/nano-checkbox-group.cjs.entry.js.map +1 -1
  6. package/dist/cjs/nano-components.cjs.js +1 -1
  7. package/dist/cjs/nano-details.cjs.entry.js +1 -1
  8. package/dist/cjs/nano-field-validator.cjs.entry.js +2 -0
  9. package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -1
  10. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +2 -2
  11. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  12. package/dist/cjs/nano-global-nav.cjs.entry.js +18 -20
  13. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  14. package/dist/cjs/nano-progress-bar.cjs.entry.js +33 -0
  15. package/dist/cjs/nano-progress-bar.cjs.entry.js.map +1 -0
  16. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +2 -2
  17. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  18. package/dist/cjs/nano-spinner.cjs.entry.js +1 -1
  19. package/dist/cjs/nano-spinner.cjs.entry.js.map +1 -1
  20. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
  21. package/dist/cjs/{nano-table-8a898621.js → nano-table-7e02106c.js} +146 -58
  22. package/dist/cjs/nano-table-7e02106c.js.map +1 -0
  23. package/dist/cjs/nano-table.cjs.entry.js +2 -1
  24. package/dist/cjs/nano-table.cjs.entry.js.map +1 -1
  25. package/dist/cjs/{table.worker-b0b0044a.js → table.worker-daf39ca9.js} +3 -2
  26. package/dist/cjs/table.worker-daf39ca9.js.map +1 -0
  27. package/dist/cjs/{transitions-d295a09e.js → transitions-5cd8f697.js} +10 -8
  28. package/dist/cjs/transitions-5cd8f697.js.map +1 -0
  29. package/dist/collection/collection-manifest.json +1 -0
  30. package/dist/collection/components/checkbox/checkbox-group.js +12 -3
  31. package/dist/collection/components/checkbox/checkbox-group.js.map +1 -1
  32. package/dist/collection/components/field-validator/field-validator.js +2 -0
  33. package/dist/collection/components/field-validator/field-validator.js.map +1 -1
  34. package/dist/collection/components/global-nav/assets/ont-logo.svg +89 -47
  35. package/dist/collection/components/global-nav/global-nav-interface.js.map +1 -1
  36. package/dist/collection/components/global-nav/global-nav.js +19 -21
  37. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  38. package/dist/collection/components/global-nav/{global-nav.css → style/global-nav.css} +462 -404
  39. package/dist/collection/components/nav-item/nav-item.css +4 -6
  40. package/dist/collection/components/progress-bar/progress-bar.css +84 -0
  41. package/dist/collection/components/progress-bar/progress-bar.js +106 -0
  42. package/dist/collection/components/progress-bar/progress-bar.js.map +1 -0
  43. package/dist/collection/components/skeleton/skeleton.css +8 -5
  44. package/dist/collection/components/skeleton/skeleton.js +1 -1
  45. package/dist/collection/components/skeleton/skeleton.js.map +1 -1
  46. package/dist/collection/components/spinner/spinner.css +5 -9
  47. package/dist/collection/components/table/table.children.js +43 -17
  48. package/dist/collection/components/table/table.children.js.map +1 -1
  49. package/dist/collection/components/table/table.css +97 -27
  50. package/dist/collection/components/table/table.js +143 -33
  51. package/dist/collection/components/table/table.js.map +1 -1
  52. package/dist/collection/components/table/table.service.js +1 -10
  53. package/dist/collection/components/table/table.service.js.map +1 -1
  54. package/dist/collection/components/table/table.store.js +11 -11
  55. package/dist/collection/components/table/table.store.js.map +1 -1
  56. package/dist/collection/utils/transitions.js +9 -7
  57. package/dist/collection/utils/transitions.js.map +1 -1
  58. package/dist/components/index.d.ts +1 -0
  59. package/dist/components/index.js +1 -0
  60. package/dist/components/index.js.map +1 -1
  61. package/dist/components/nano-checkbox-group.js +12 -3
  62. package/dist/components/nano-checkbox-group.js.map +1 -1
  63. package/dist/components/nano-field-validator.js +2 -0
  64. package/dist/components/nano-field-validator.js.map +1 -1
  65. package/dist/components/nano-global-nav.js +17 -19
  66. package/dist/components/nano-global-nav.js.map +1 -1
  67. package/dist/components/nano-progress-bar.d.ts +11 -0
  68. package/dist/components/nano-progress-bar.js +11 -0
  69. package/dist/components/nano-progress-bar.js.map +1 -0
  70. package/dist/components/nano-table.js +167 -58
  71. package/dist/components/nano-table.js.map +1 -1
  72. package/dist/components/nav-item.js +1 -1
  73. package/dist/components/nav-item.js.map +1 -1
  74. package/dist/components/progress-bar.js +48 -0
  75. package/dist/components/progress-bar.js.map +1 -0
  76. package/dist/components/skeleton.js +2 -2
  77. package/dist/components/skeleton.js.map +1 -1
  78. package/dist/components/spinner.js +1 -1
  79. package/dist/components/spinner.js.map +1 -1
  80. package/dist/components/transitions.js +9 -7
  81. package/dist/components/transitions.js.map +1 -1
  82. package/dist/custom-elements/index.d.ts +6 -0
  83. package/dist/custom-elements/index.js +214 -91
  84. package/dist/custom-elements/index.js.map +1 -1
  85. package/dist/esm/index-3c280603.js +8 -4
  86. package/dist/esm/loader.js +1 -1
  87. package/dist/esm/nano-checkbox-group.entry.js +12 -3
  88. package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
  89. package/dist/esm/nano-components.js +1 -1
  90. package/dist/esm/nano-details.entry.js +1 -1
  91. package/dist/esm/nano-field-validator.entry.js +2 -0
  92. package/dist/esm/nano-field-validator.entry.js.map +1 -1
  93. package/dist/esm/nano-global-nav-user-profile_3.entry.js +2 -2
  94. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  95. package/dist/esm/nano-global-nav.entry.js +18 -20
  96. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  97. package/dist/esm/nano-progress-bar.entry.js +29 -0
  98. package/dist/esm/nano-progress-bar.entry.js.map +1 -0
  99. package/dist/esm/nano-resize-observe_2.entry.js +2 -2
  100. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  101. package/dist/esm/nano-spinner.entry.js +1 -1
  102. package/dist/esm/nano-spinner.entry.js.map +1 -1
  103. package/dist/esm/nano-tab-group.entry.js +1 -1
  104. package/dist/esm/{nano-table-efdf3dba.js → nano-table-930d9245.js} +146 -58
  105. package/dist/esm/nano-table-930d9245.js.map +1 -0
  106. package/dist/esm/nano-table.entry.js +2 -1
  107. package/dist/esm/nano-table.entry.js.map +1 -1
  108. package/dist/esm/{table.worker-10ba1126.js → table.worker-7666db6d.js} +3 -2
  109. package/dist/esm/table.worker-7666db6d.js.map +1 -0
  110. package/dist/esm/{transitions-d75d242e.js → transitions-71cca3ed.js} +10 -8
  111. package/dist/esm/transitions-71cca3ed.js.map +1 -0
  112. package/dist/nano-components/assets/ont-logo.svg +89 -47
  113. package/dist/nano-components/nano-components.esm.js +1 -1
  114. package/dist/nano-components/nano-components.esm.js.map +1 -1
  115. package/dist/nano-components/p-167b9165.js +5 -0
  116. package/dist/nano-components/p-167b9165.js.map +1 -0
  117. package/dist/nano-components/p-28344d24.entry.js +5 -0
  118. package/dist/nano-components/p-28344d24.entry.js.map +1 -0
  119. package/dist/nano-components/p-40b47b05.entry.js +5 -0
  120. package/dist/nano-components/{p-8a6834ff.entry.js.map → p-40b47b05.entry.js.map} +0 -0
  121. package/dist/nano-components/p-49458cd9.js +5 -0
  122. package/dist/nano-components/p-49458cd9.js.map +1 -0
  123. package/dist/nano-components/p-65f84bbd.entry.js +5 -0
  124. package/dist/nano-components/p-65f84bbd.entry.js.map +1 -0
  125. package/dist/nano-components/{p-8ef2363b.entry.js → p-6cd59e58.entry.js} +2 -2
  126. package/dist/nano-components/{p-8ef2363b.entry.js.map → p-6cd59e58.entry.js.map} +0 -0
  127. package/dist/nano-components/{p-687350a5.entry.js → p-701e8ebf.entry.js} +2 -2
  128. package/dist/nano-components/p-701e8ebf.entry.js.map +1 -0
  129. package/dist/nano-components/p-a2d0d7b9.entry.js.map +1 -1
  130. package/dist/nano-components/p-b717f6d7.js +5 -0
  131. package/dist/nano-components/{p-b7b06e04.js.map → p-b717f6d7.js.map} +0 -0
  132. package/dist/nano-components/p-b7901427.entry.js +5 -0
  133. package/dist/nano-components/p-b7901427.entry.js.map +1 -0
  134. package/dist/nano-components/{p-9f8b091a.entry.js → p-b7c3aecb.entry.js} +2 -2
  135. package/dist/nano-components/{p-9f8b091a.entry.js.map → p-b7c3aecb.entry.js.map} +0 -0
  136. package/dist/nano-components/p-d8e8d7e3.entry.js +5 -0
  137. package/dist/nano-components/p-d8e8d7e3.entry.js.map +1 -0
  138. package/dist/nano-components/p-f95a263c.entry.js +5 -0
  139. package/dist/nano-components/p-f95a263c.entry.js.map +1 -0
  140. package/dist/types/components/global-nav/global-nav-interface.d.ts +43 -0
  141. package/dist/types/components/global-nav/global-nav.d.ts +1 -1
  142. package/dist/types/components/progress-bar/progress-bar.d.ts +19 -0
  143. package/dist/types/components/table/table.children.d.ts +2 -1
  144. package/dist/types/components/table/table.d.ts +25 -7
  145. package/dist/types/components/table/table.service.d.ts +1 -7
  146. package/dist/types/components/table/table.store.d.ts +4 -2
  147. package/dist/types/components.d.ts +60 -5
  148. package/docs-json.json +273 -49
  149. package/docs-vscode.json +31 -2
  150. package/package.json +3 -3
  151. package/dist/cjs/nano-table-8a898621.js.map +0 -1
  152. package/dist/cjs/table.worker-b0b0044a.js.map +0 -1
  153. package/dist/cjs/transitions-d295a09e.js.map +0 -1
  154. package/dist/esm/nano-table-efdf3dba.js.map +0 -1
  155. package/dist/esm/table.worker-10ba1126.js.map +0 -1
  156. package/dist/esm/transitions-d75d242e.js.map +0 -1
  157. package/dist/nano-components/p-03402e69.entry.js +0 -5
  158. package/dist/nano-components/p-03402e69.entry.js.map +0 -1
  159. package/dist/nano-components/p-2382d5e9.entry.js +0 -5
  160. package/dist/nano-components/p-2382d5e9.entry.js.map +0 -1
  161. package/dist/nano-components/p-4c6ef60b.js +0 -5
  162. package/dist/nano-components/p-4c6ef60b.js.map +0 -1
  163. package/dist/nano-components/p-61bfb8b9.entry.js +0 -5
  164. package/dist/nano-components/p-61bfb8b9.entry.js.map +0 -1
  165. package/dist/nano-components/p-687350a5.entry.js.map +0 -1
  166. package/dist/nano-components/p-82295d91.js +0 -5
  167. package/dist/nano-components/p-82295d91.js.map +0 -1
  168. package/dist/nano-components/p-8a6834ff.entry.js +0 -5
  169. package/dist/nano-components/p-9f2524d4.entry.js +0 -5
  170. package/dist/nano-components/p-9f2524d4.entry.js.map +0 -1
  171. 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: #86bee2;
296
- height: 3px;
293
+ background-color: #0c5a71;
294
+ height: 9px;
297
295
  inset-inline: 0 5px;
298
- inset-block-end: -14px;
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.5;
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-base-rgb, 228, 230, 232);
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-base-rgb, 228, 230, 232);
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,GAAG,CAC/B,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\" />\n </div>\n );\n }\n}\n"]}
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\">&nbsp;</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-spinner-base-rgb, 0, 116, 149)
16
- * @prop --indicator-color: default var(--nano-spinner-indicator-color, rgba(var(--base-color-rgb), 1))
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-spinner-base-rgb, 0, 116, 149);
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, colheadRender, fetchStores, mergeCellProperties, mergeProperties, rowDataModel, } from './table.service';
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 = e.boundingClientRect.x < 0 && !e.isIntersecting;
33
- if (pos === 'end')
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.width > e.intersectionRect.width &&
43
+ e.boundingClientRect.right > e.boundingClientRect.width &&
36
44
  !e.isIntersecting;
45
+ }
37
46
  cb(positions);
38
- }, { threshold: [1], rootMargin: '1px 0px 1px 0px' });
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 = e.boundingClientRect.y < 0 && !e.isIntersecting;
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
- }, { threshold: [0.99], rootMargin: '0px 100px 0px 100px' });
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.parentElement);
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 = colheadRender(column);
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: `${CSSNAMESPACE}__order-btn`, onClick: handleColumnOrderClick }, colheadRender(column), !!column.filter && h("nano-icon", { name: "light/filter" }), !!column.order &&
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
- } }, colheadRender(column), !!column.filter && h("nano-icon", { name: "light/bars-filter" })));
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 }, cellRender(rowIndex, colIndex)));
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"]}