@nanoporetech-digital/components 3.0.0 → 3.1.1

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 (212) hide show
  1. package/CHANGELOG.md +31 -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 +2 -2
  8. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  9. package/dist/cjs/nano-field-validator.cjs.entry.js +2 -0
  10. package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -1
  11. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +3 -3
  12. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  13. package/dist/cjs/nano-global-nav.cjs.entry.js +18 -20
  14. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nano-input.cjs.entry.js +1 -1
  16. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-menu-drawer.cjs.entry.js +1 -1
  18. package/dist/cjs/nano-menu-drawer.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-progress-bar.cjs.entry.js +33 -0
  20. package/dist/cjs/nano-progress-bar.cjs.entry.js.map +1 -0
  21. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +2 -2
  22. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nano-spinner.cjs.entry.js +1 -1
  24. package/dist/cjs/nano-spinner.cjs.entry.js.map +1 -1
  25. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
  26. package/dist/cjs/nano-tab.cjs.entry.js +1 -1
  27. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  28. package/dist/cjs/{nano-table-8a898621.js → nano-table-844394ad.js} +146 -58
  29. package/dist/cjs/nano-table-844394ad.js.map +1 -0
  30. package/dist/cjs/nano-table.cjs.entry.js +2 -1
  31. package/dist/cjs/nano-table.cjs.entry.js.map +1 -1
  32. package/dist/cjs/{table.worker-b0b0044a.js → table.worker-1bc19978.js} +3 -2
  33. package/dist/cjs/table.worker-1bc19978.js.map +1 -0
  34. package/dist/cjs/{transitions-d295a09e.js → transitions-5cd8f697.js} +10 -8
  35. package/dist/cjs/transitions-5cd8f697.js.map +1 -0
  36. package/dist/collection/collection-manifest.json +1 -0
  37. package/dist/collection/components/checkbox/checkbox-group.js +12 -3
  38. package/dist/collection/components/checkbox/checkbox-group.js.map +1 -1
  39. package/dist/collection/components/details/details.css +1 -0
  40. package/dist/collection/components/field-validator/field-validator.js +2 -0
  41. package/dist/collection/components/field-validator/field-validator.js.map +1 -1
  42. package/dist/collection/components/global-nav/assets/ont-logo.svg +89 -47
  43. package/dist/collection/components/global-nav/global-nav-interface.js.map +1 -1
  44. package/dist/collection/components/global-nav/global-nav.js +19 -21
  45. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  46. package/dist/collection/components/global-nav/{global-nav.css → style/global-nav.css} +465 -405
  47. package/dist/collection/components/input/input.css +2 -0
  48. package/dist/collection/components/menu-drawer/menu-drawer.css +1 -0
  49. package/dist/collection/components/nav-item/nav-item.css +6 -6
  50. package/dist/collection/components/progress-bar/progress-bar.css +84 -0
  51. package/dist/collection/components/progress-bar/progress-bar.js +106 -0
  52. package/dist/collection/components/progress-bar/progress-bar.js.map +1 -0
  53. package/dist/collection/components/select/select.css +4 -0
  54. package/dist/collection/components/skeleton/skeleton.css +8 -5
  55. package/dist/collection/components/skeleton/skeleton.js +1 -1
  56. package/dist/collection/components/skeleton/skeleton.js.map +1 -1
  57. package/dist/collection/components/spinner/spinner.css +5 -9
  58. package/dist/collection/components/table/table.children.js +43 -17
  59. package/dist/collection/components/table/table.children.js.map +1 -1
  60. package/dist/collection/components/table/table.css +97 -27
  61. package/dist/collection/components/table/table.js +143 -33
  62. package/dist/collection/components/table/table.js.map +1 -1
  63. package/dist/collection/components/table/table.service.js +1 -10
  64. package/dist/collection/components/table/table.service.js.map +1 -1
  65. package/dist/collection/components/table/table.store.js +11 -11
  66. package/dist/collection/components/table/table.store.js.map +1 -1
  67. package/dist/collection/components/tabs/tab.css +1 -0
  68. package/dist/collection/utils/transitions.js +9 -7
  69. package/dist/collection/utils/transitions.js.map +1 -1
  70. package/dist/components/index.d.ts +1 -0
  71. package/dist/components/index.js +1 -0
  72. package/dist/components/index.js.map +1 -1
  73. package/dist/components/input.js +1 -1
  74. package/dist/components/input.js.map +1 -1
  75. package/dist/components/nano-checkbox-group.js +12 -3
  76. package/dist/components/nano-checkbox-group.js.map +1 -1
  77. package/dist/components/nano-details.js +1 -1
  78. package/dist/components/nano-details.js.map +1 -1
  79. package/dist/components/nano-field-validator.js +2 -0
  80. package/dist/components/nano-field-validator.js.map +1 -1
  81. package/dist/components/nano-global-nav.js +17 -19
  82. package/dist/components/nano-global-nav.js.map +1 -1
  83. package/dist/components/nano-menu-drawer.js +1 -1
  84. package/dist/components/nano-menu-drawer.js.map +1 -1
  85. package/dist/components/nano-progress-bar.d.ts +11 -0
  86. package/dist/components/nano-progress-bar.js +11 -0
  87. package/dist/components/nano-progress-bar.js.map +1 -0
  88. package/dist/components/nano-tab.js +1 -1
  89. package/dist/components/nano-tab.js.map +1 -1
  90. package/dist/components/nano-table.js +167 -58
  91. package/dist/components/nano-table.js.map +1 -1
  92. package/dist/components/nav-item.js +1 -1
  93. package/dist/components/nav-item.js.map +1 -1
  94. package/dist/components/progress-bar.js +48 -0
  95. package/dist/components/progress-bar.js.map +1 -0
  96. package/dist/components/select.js +1 -1
  97. package/dist/components/select.js.map +1 -1
  98. package/dist/components/skeleton.js +2 -2
  99. package/dist/components/skeleton.js.map +1 -1
  100. package/dist/components/spinner.js +1 -1
  101. package/dist/components/spinner.js.map +1 -1
  102. package/dist/components/transitions.js +9 -7
  103. package/dist/components/transitions.js.map +1 -1
  104. package/dist/custom-elements/index.d.ts +6 -0
  105. package/dist/custom-elements/index.js +219 -96
  106. package/dist/custom-elements/index.js.map +1 -1
  107. package/dist/esm/index-3c280603.js +8 -4
  108. package/dist/esm/loader.js +1 -1
  109. package/dist/esm/nano-checkbox-group.entry.js +12 -3
  110. package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
  111. package/dist/esm/nano-components.js +1 -1
  112. package/dist/esm/nano-details.entry.js +2 -2
  113. package/dist/esm/nano-details.entry.js.map +1 -1
  114. package/dist/esm/nano-field-validator.entry.js +2 -0
  115. package/dist/esm/nano-field-validator.entry.js.map +1 -1
  116. package/dist/esm/nano-global-nav-user-profile_3.entry.js +3 -3
  117. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  118. package/dist/esm/nano-global-nav.entry.js +18 -20
  119. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  120. package/dist/esm/nano-input.entry.js +1 -1
  121. package/dist/esm/nano-input.entry.js.map +1 -1
  122. package/dist/esm/nano-menu-drawer.entry.js +1 -1
  123. package/dist/esm/nano-menu-drawer.entry.js.map +1 -1
  124. package/dist/esm/nano-progress-bar.entry.js +29 -0
  125. package/dist/esm/nano-progress-bar.entry.js.map +1 -0
  126. package/dist/esm/nano-resize-observe_2.entry.js +2 -2
  127. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  128. package/dist/esm/nano-spinner.entry.js +1 -1
  129. package/dist/esm/nano-spinner.entry.js.map +1 -1
  130. package/dist/esm/nano-tab-group.entry.js +1 -1
  131. package/dist/esm/nano-tab.entry.js +1 -1
  132. package/dist/esm/nano-tab.entry.js.map +1 -1
  133. package/dist/esm/{nano-table-efdf3dba.js → nano-table-19d19d72.js} +146 -58
  134. package/dist/esm/nano-table-19d19d72.js.map +1 -0
  135. package/dist/esm/nano-table.entry.js +2 -1
  136. package/dist/esm/nano-table.entry.js.map +1 -1
  137. package/dist/esm/{table.worker-10ba1126.js → table.worker-c82cecdf.js} +3 -2
  138. package/dist/esm/table.worker-c82cecdf.js.map +1 -0
  139. package/dist/esm/{transitions-d75d242e.js → transitions-71cca3ed.js} +10 -8
  140. package/dist/esm/transitions-71cca3ed.js.map +1 -0
  141. package/dist/nano-components/assets/ont-logo.svg +89 -47
  142. package/dist/nano-components/nano-components.esm.js +1 -1
  143. package/dist/nano-components/nano-components.esm.js.map +1 -1
  144. package/dist/nano-components/p-02df1f62.entry.js +5 -0
  145. package/dist/nano-components/{p-9f8b091a.entry.js.map → p-02df1f62.entry.js.map} +1 -1
  146. package/dist/nano-components/p-167b9165.js +5 -0
  147. package/dist/nano-components/p-167b9165.js.map +1 -0
  148. package/dist/nano-components/p-1ae8c03e.entry.js +5 -0
  149. package/dist/nano-components/p-1ae8c03e.entry.js.map +1 -0
  150. package/dist/nano-components/p-28b43ee9.entry.js +5 -0
  151. package/dist/nano-components/{p-49a831a3.entry.js.map → p-28b43ee9.entry.js.map} +1 -1
  152. package/dist/nano-components/{p-8ef2363b.entry.js → p-6cd59e58.entry.js} +2 -2
  153. package/dist/nano-components/{p-8ef2363b.entry.js.map → p-6cd59e58.entry.js.map} +0 -0
  154. package/dist/nano-components/{p-687350a5.entry.js → p-701e8ebf.entry.js} +2 -2
  155. package/dist/nano-components/p-701e8ebf.entry.js.map +1 -0
  156. package/dist/nano-components/p-7ade1695.js +5 -0
  157. package/dist/nano-components/{p-8a6834ff.entry.js.map → p-7ade1695.js.map} +0 -0
  158. package/dist/nano-components/p-8a52a411.entry.js +5 -0
  159. package/dist/nano-components/{p-68b18b99.entry.js.map → p-8a52a411.entry.js.map} +1 -1
  160. package/dist/nano-components/p-a2d0d7b9.entry.js.map +1 -1
  161. package/dist/nano-components/p-b4a045a2.entry.js +5 -0
  162. package/dist/nano-components/{p-b7b06e04.js.map → p-b4a045a2.entry.js.map} +0 -0
  163. package/dist/nano-components/p-b7901427.entry.js +5 -0
  164. package/dist/nano-components/p-b7901427.entry.js.map +1 -0
  165. package/dist/nano-components/p-b83a8320.js +5 -0
  166. package/dist/nano-components/p-b83a8320.js.map +1 -0
  167. package/dist/nano-components/p-d8e8d7e3.entry.js +5 -0
  168. package/dist/nano-components/p-d8e8d7e3.entry.js.map +1 -0
  169. package/dist/nano-components/p-efa8c520.entry.js +5 -0
  170. package/dist/nano-components/{p-47bd0f5d.entry.js.map → p-efa8c520.entry.js.map} +1 -1
  171. package/dist/nano-components/p-f95a263c.entry.js +5 -0
  172. package/dist/nano-components/p-f95a263c.entry.js.map +1 -0
  173. package/dist/nano-components/p-fa2a6733.entry.js +5 -0
  174. package/dist/nano-components/p-fa2a6733.entry.js.map +1 -0
  175. package/dist/themes/london-calling.css.map +1 -1
  176. package/dist/themes/nanopore.css.map +1 -1
  177. package/dist/types/components/global-nav/global-nav-interface.d.ts +43 -0
  178. package/dist/types/components/global-nav/global-nav.d.ts +1 -1
  179. package/dist/types/components/progress-bar/progress-bar.d.ts +19 -0
  180. package/dist/types/components/table/table.children.d.ts +2 -1
  181. package/dist/types/components/table/table.d.ts +25 -7
  182. package/dist/types/components/table/table.service.d.ts +1 -7
  183. package/dist/types/components/table/table.store.d.ts +4 -2
  184. package/dist/types/components.d.ts +60 -5
  185. package/docs-json.json +274 -49
  186. package/docs-vscode.json +31 -2
  187. package/package.json +3 -3
  188. package/dist/cjs/nano-table-8a898621.js.map +0 -1
  189. package/dist/cjs/table.worker-b0b0044a.js.map +0 -1
  190. package/dist/cjs/transitions-d295a09e.js.map +0 -1
  191. package/dist/esm/nano-table-efdf3dba.js.map +0 -1
  192. package/dist/esm/table.worker-10ba1126.js.map +0 -1
  193. package/dist/esm/transitions-d75d242e.js.map +0 -1
  194. package/dist/nano-components/p-03402e69.entry.js +0 -5
  195. package/dist/nano-components/p-03402e69.entry.js.map +0 -1
  196. package/dist/nano-components/p-2382d5e9.entry.js +0 -5
  197. package/dist/nano-components/p-2382d5e9.entry.js.map +0 -1
  198. package/dist/nano-components/p-47bd0f5d.entry.js +0 -5
  199. package/dist/nano-components/p-49a831a3.entry.js +0 -5
  200. package/dist/nano-components/p-4c6ef60b.js +0 -5
  201. package/dist/nano-components/p-4c6ef60b.js.map +0 -1
  202. package/dist/nano-components/p-61bfb8b9.entry.js +0 -5
  203. package/dist/nano-components/p-61bfb8b9.entry.js.map +0 -1
  204. package/dist/nano-components/p-687350a5.entry.js.map +0 -1
  205. package/dist/nano-components/p-68b18b99.entry.js +0 -5
  206. package/dist/nano-components/p-82295d91.js +0 -5
  207. package/dist/nano-components/p-82295d91.js.map +0 -1
  208. package/dist/nano-components/p-8a6834ff.entry.js +0 -5
  209. package/dist/nano-components/p-9f2524d4.entry.js +0 -5
  210. package/dist/nano-components/p-9f2524d4.entry.js.map +0 -1
  211. package/dist/nano-components/p-9f8b091a.entry.js +0 -5
  212. package/dist/nano-components/p-b7b06e04.js +0 -5
@@ -1 +1 @@
1
- {"file":"nano-spinner.entry.cjs.js","mappings":";;;;;;;;;AAAA,MAAM,UAAU,GAAG,msMAAmsM;;MCkBzsM,OAAO;;;mBAEU,KAAK;gBAGA,KAAK;mBAGM,KAAK;;EAEjD,iBAAiB;IACf,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;GAC5C;EAED,MAAM;IACJ,QACEA,iBAAK,KAAK,EAAC,SAAS,eAAW,MAAM,eAAW,QAAQ,IACtDA,iBAAK,KAAK,EAAC,iBAAiB,IACzB,IAAI,CAAC,IAAI,KAAK,KAAK,KAClBA,iBAAK,KAAK,EAAC,cAAc,IACvBA,iBAAK,KAAK,EAAC,wCAAwC,IACjDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,EACtDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,CAClD,EACNA,iBAAK,KAAK,EAAC,wCAAwC,IACjDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,EACtDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,CAClD,EACNA,iBAAK,KAAK,EAAC,wCAAwC,IACjDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,EACtDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,CAClD,EACNA,iBAAK,KAAK,EAAC,wCAAwC,IACjDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,EACtDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,CAClD,EACNA,iBAAK,KAAK,EAAC,wCAAwC,IACjDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,EACtDA,iBAAK,KAAK,EAAC,qCAAqC,GAAO,CACnD,CACF,CACP,EACA,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAIA,kBAAM,KAAK,EAAC,eAAe,GAAQ,CAC1D,EACL,IAAI,CAAC,OAAO,KACXA,iBAAK,KAAK,EAAC,eAAe,IACxBA,qBAAQ,CACJ,CACP,EACA,IAAI,CAAC,OAAO,IAAIA,iBAAK,KAAK,EAAC,kBAAkB,GAAO,CACjD,EACN;GACH;;;;;;;","names":["h"],"sources":["./src/components/spinner/spinner.scss?tag=nano-spinner&encapsulation=shadow","./src/components/spinner/spinner.tsx"],"sourcesContent":["@import '../../global/style/nano-theme/components';\n@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --base-color-rgb: default #{$spinner-color-rgb}\n * @prop --indicator-color: default var(--nano-spinner-indicator-color, rgba(var(--base-color-rgb), 1))\n * @prop --track-color: default var(--nano-track-color, rgba(var(--base-color-rgb), .2))\n * @prop --spinner-scale: optional scaling of the spinner. default contextual font-size\n * @prop --overlay-color: #{$layer-overlay-light};\n */\n\n display: inline-block;\n\n // --spinner-scale: 5em;\n --base-color-rgb: #{$spinner-color-rgb};\n --indicator-color:\n var(\n --nano-spinner-indicator-color,\n rgba(var(--base-color-rgb), 1)\n );\n --track-color: var(--nano-track-color, rgba(var(--base-color-rgb), 0.2));\n --overlay-color: #{$layer-overlay-light};\n}\n\n.spinner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n :host([overlay]:not([overlay='false'])) & {\n position: absolute;\n inset: 0;\n\n .spinner__loader,\n .spinner__text {\n z-index: 1;\n }\n }\n\n &__overlay {\n background: var(--overlay-color);\n position: absolute;\n inset: 0;\n z-index: 0;\n backdrop-filter: blur(#{$layer-overlay-blur});\n }\n\n &__loader {\n font-size: var(--spinner-scale, 1em);\n }\n\n &__spin {\n display: block;\n margin: auto;\n inline-size: 1em;\n block-size: 1em;\n border-radius: 50%;\n border: solid 0.1em var(--track-color);\n border-block-start-color: var(--indicator-color);\n border-inline-end-color: var(--indicator-color);\n border-inline-start-color: var(--indicator-color);\n animation: 1s linear infinite spin;\n }\n\n &__dna {\n font-size: 0.2286em;\n display: flex;\n }\n\n &__dnatrack {\n position: relative;\n padding-block: 0;\n padding-inline: 0.625em;\n block-size: 4.375em;\n inline-size: 0.625em;\n overflow: hidden;\n\n &::before {\n content: '';\n position: absolute;\n inset-block-start: 1.875em;\n inset-inline-start: 50%;\n transform: translateX(-50%) translateZ(0);\n inline-size: 0.0625em;\n inline-size: #{'max(.0625em, 1px)'};\n block-size: 0.625em;\n background: var(--track-color);\n animation: flex 1.5s linear infinite;\n transform-origin: center center;\n }\n\n &--2::before {\n animation: flex 1.5s -1.3s linear infinite;\n }\n\n &--3::before {\n animation: flex 1.5s -1.1s linear infinite;\n }\n\n &--4::before {\n animation: flex 1.5s -0.9s linear infinite;\n }\n\n &--5::before {\n animation: flex 1.5s -0.75s linear infinite;\n }\n }\n\n &__dnadot {\n position: absolute;\n inline-size: 0.5em;\n block-size: 0.5em;\n border-radius: 50% 50%;\n background: var(--indicator-color);\n animation: rotate 1.5s linear infinite;\n transform-origin: center center;\n inset-inline-start: 50%;\n transform: translateX(-50%) translateZ(0) translateY(0);\n\n &--2 {\n animation: rotate 1.5s -0.75s linear infinite;\n }\n\n &--3 {\n animation: rotate 1.5s -1.3s linear infinite;\n }\n\n &--4 {\n animation: rotate 1.5s -0.55s linear infinite;\n }\n\n &--5 {\n animation: rotate 1.5s -1.1s linear infinite;\n }\n\n &--6 {\n animation: rotate 1.5s -0.35s linear infinite;\n }\n\n &--7 {\n animation: rotate 1.5s -0.9s linear infinite;\n }\n\n &--8 {\n animation: rotate 1.5s -0.15s linear infinite;\n }\n\n &--9 {\n animation: rotate 1.5s -0.75s linear infinite;\n }\n\n &--10 {\n animation: rotate 1.5s 0s linear infinite;\n }\n }\n\n &__text {\n text-align: center;\n position: relative;\n margin-block-start: 0.5em;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n }\n\n @keyframes rotate {\n 0%,\n 100% {\n transform: translateX(-50%) translateY(0) scale(1);\n }\n\n 25% {\n transform: translateX(-50%) translateY(1.875em) scale(2);\n }\n\n 50% {\n transform: translateX(-50%) translateY(3.75em) scale(1);\n }\n\n 75% {\n transform: translateX(-50%) translateY(1.875em) scale(0.3);\n }\n }\n\n @keyframes flex {\n 0%,\n 100% {\n transform: translateX(-50%) scaleY(5);\n }\n\n 25% {\n transform: translateX(-50%) scaleY(1);\n }\n\n 50% {\n transform: translateX(-50%) scaleY(5);\n }\n\n 75% {\n transform: translateX(-50%) scaleY(1);\n }\n }\n}\n","import {\n Component,\n h,\n ComponentInterface,\n Prop,\n Element,\n State,\n} from '@stencil/core';\n\n/**\n * Spinners are used to show the progress of an indeterminate operation.\n * @slot - Used for loading messages\n */\n@Component({\n tag: 'nano-spinner',\n styleUrl: 'spinner.scss',\n shadow: true,\n})\nexport class Spinner implements ComponentInterface {\n @Element() el: HTMLNanoSpinnerElement;\n @State() hasText: boolean = false;\n\n /** The type of spinner animation. dna should be used for larger, page loads. Circle for smaller component loaders. */\n @Prop() type: 'dna' | 'circle' = 'dna';\n\n /** Displays absolutely with an overlay */\n @Prop({ reflect: true }) overlay: boolean = false;\n\n componentWillLoad() {\n this.hasText = !!this.el.childNodes.length;\n }\n\n render() {\n return (\n <div class=\"spinner\" aria-busy=\"true\" aria-live=\"polite\">\n <div class=\"spinner__loader\">\n {this.type === 'dna' && (\n <div class=\"spinner__dna\">\n <div class=\"spinner__dnatrack spinner__dnatrack--1\">\n <div class=\"spinner__dnadot spinner__dnadot--1\"></div>\n <div class=\"spinner__dnadot spinner__dnadot--2\"></div>\n </div>\n <div class=\"spinner__dnatrack spinner__dnatrack--2\">\n <div class=\"spinner__dnadot spinner__dnadot--3\"></div>\n <div class=\"spinner__dnadot spinner__dnadot--4\"></div>\n </div>\n <div class=\"spinner__dnatrack spinner__dnatrack--3\">\n <div class=\"spinner__dnadot spinner__dnadot--5\"></div>\n <div class=\"spinner__dnadot spinner__dnadot--6\"></div>\n </div>\n <div class=\"spinner__dnatrack spinner__dnatrack--4\">\n <div class=\"spinner__dnadot spinner__dnadot--7\"></div>\n <div class=\"spinner__dnadot spinner__dnadot--8\"></div>\n </div>\n <div class=\"spinner__dnatrack spinner__dnatrack--5\">\n <div class=\"spinner__dnadot spinner__dnadot--9\"></div>\n <div class=\"spinner__dnadot spinner__dnadot--10\"></div>\n </div>\n </div>\n )}\n {this.type === 'circle' && <span class=\"spinner__spin\"></span>}\n </div>\n {this.hasText && (\n <div class=\"spinner__text\">\n <slot />\n </div>\n )}\n {this.overlay && <div class=\"spinner__overlay\"></div>}\n </div>\n );\n }\n}\n"],"version":3}
1
+ {"file":"nano-spinner.entry.cjs.js","mappings":";;;;;;;;;AAAA,MAAM,UAAU,GAAG,oqMAAoqM;;MCkB1qM,OAAO;;;mBAEU,KAAK;gBAGA,KAAK;mBAGM,KAAK;;EAEjD,iBAAiB;IACf,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;GAC5C;EAED,MAAM;IACJ,QACEA,iBAAK,KAAK,EAAC,SAAS,eAAW,MAAM,eAAW,QAAQ,IACtDA,iBAAK,KAAK,EAAC,iBAAiB,IACzB,IAAI,CAAC,IAAI,KAAK,KAAK,KAClBA,iBAAK,KAAK,EAAC,cAAc,IACvBA,iBAAK,KAAK,EAAC,wCAAwC,IACjDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,EACtDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,CAClD,EACNA,iBAAK,KAAK,EAAC,wCAAwC,IACjDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,EACtDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,CAClD,EACNA,iBAAK,KAAK,EAAC,wCAAwC,IACjDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,EACtDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,CAClD,EACNA,iBAAK,KAAK,EAAC,wCAAwC,IACjDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,EACtDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,CAClD,EACNA,iBAAK,KAAK,EAAC,wCAAwC,IACjDA,iBAAK,KAAK,EAAC,oCAAoC,GAAO,EACtDA,iBAAK,KAAK,EAAC,qCAAqC,GAAO,CACnD,CACF,CACP,EACA,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAIA,kBAAM,KAAK,EAAC,eAAe,GAAQ,CAC1D,EACL,IAAI,CAAC,OAAO,KACXA,iBAAK,KAAK,EAAC,eAAe,IACxBA,qBAAQ,CACJ,CACP,EACA,IAAI,CAAC,OAAO,IAAIA,iBAAK,KAAK,EAAC,kBAAkB,GAAO,CACjD,EACN;GACH;;;;;;;","names":["h"],"sources":["./src/components/spinner/spinner.scss?tag=nano-spinner&encapsulation=shadow","./src/components/spinner/spinner.tsx"],"sourcesContent":["@import '../../global/style/nano-theme/components';\n@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --base-color-rgb: default #{$progress-indicator-color-rgb}\n * @prop --indicator-color: default var(--nano-indicator-color, rgba(var(--base-color-rgb), 1));\n * @prop --track-color: default var(--nano-track-color, rgba(var(--base-color-rgb), 0.2));\n * @prop --spinner-scale: optional scaling of the spinner. default contextual font-size\n * @prop --overlay-color: #{$layer-overlay-light};\n */\n\n display: inline-block;\n\n // --spinner-scale: 5em;\n --base-color-rgb: #{$progress-indicator-color-rgb};\n --indicator-color: var(--nano-indicator-color, rgba(var(--base-color-rgb), 1));\n --track-color: var(--nano-track-color, rgba(var(--base-color-rgb), 0.2));\n --overlay-color: #{$layer-overlay-light};\n}\n\n.spinner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n :host([overlay]:not([overlay='false'])) & {\n position: absolute;\n inset: 0;\n\n .spinner__loader,\n .spinner__text {\n z-index: 1;\n }\n }\n\n &__overlay {\n background: var(--overlay-color);\n position: absolute;\n inset: 0;\n z-index: 0;\n backdrop-filter: blur(#{$layer-overlay-blur});\n }\n\n &__loader {\n font-size: var(--spinner-scale, 1em);\n }\n\n &__spin {\n display: block;\n margin: auto;\n inline-size: 1em;\n block-size: 1em;\n border-radius: 50%;\n border: solid 0.1em var(--track-color);\n border-block-start-color: var(--indicator-color);\n border-inline-end-color: var(--indicator-color);\n border-inline-start-color: var(--indicator-color);\n animation: 1s linear infinite spin;\n }\n\n &__dna {\n font-size: 0.2286em;\n display: flex;\n }\n\n &__dnatrack {\n position: relative;\n padding-block: 0;\n padding-inline: 0.625em;\n block-size: 4.375em;\n inline-size: 0.625em;\n overflow: hidden;\n\n &::before {\n content: '';\n position: absolute;\n inset-block-start: 1.875em;\n inset-inline-start: 50%;\n transform: translateX(-50%) translateZ(0);\n inline-size: 0.0625em;\n inline-size: #{'max(.0625em, 1px)'};\n block-size: 0.625em;\n background: var(--track-color);\n animation: flex 1.5s linear infinite;\n transform-origin: center center;\n }\n\n &--2::before {\n animation: flex 1.5s -1.3s linear infinite;\n }\n\n &--3::before {\n animation: flex 1.5s -1.1s linear infinite;\n }\n\n &--4::before {\n animation: flex 1.5s -0.9s linear infinite;\n }\n\n &--5::before {\n animation: flex 1.5s -0.75s linear infinite;\n }\n }\n\n &__dnadot {\n position: absolute;\n inline-size: 0.5em;\n block-size: 0.5em;\n border-radius: 50% 50%;\n background: var(--indicator-color);\n animation: rotate 1.5s linear infinite;\n transform-origin: center center;\n inset-inline-start: 50%;\n transform: translateX(-50%) translateZ(0) translateY(0);\n\n &--2 {\n animation: rotate 1.5s -0.75s linear infinite;\n }\n\n &--3 {\n animation: rotate 1.5s -1.3s linear infinite;\n }\n\n &--4 {\n animation: rotate 1.5s -0.55s linear infinite;\n }\n\n &--5 {\n animation: rotate 1.5s -1.1s linear infinite;\n }\n\n &--6 {\n animation: rotate 1.5s -0.35s linear infinite;\n }\n\n &--7 {\n animation: rotate 1.5s -0.9s linear infinite;\n }\n\n &--8 {\n animation: rotate 1.5s -0.15s linear infinite;\n }\n\n &--9 {\n animation: rotate 1.5s -0.75s linear infinite;\n }\n\n &--10 {\n animation: rotate 1.5s 0s linear infinite;\n }\n }\n\n &__text {\n text-align: center;\n position: relative;\n margin-block-start: 0.5em;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n }\n\n @keyframes rotate {\n 0%,\n 100% {\n transform: translateX(-50%) translateY(0) scale(1);\n }\n\n 25% {\n transform: translateX(-50%) translateY(1.875em) scale(2);\n }\n\n 50% {\n transform: translateX(-50%) translateY(3.75em) scale(1);\n }\n\n 75% {\n transform: translateX(-50%) translateY(1.875em) scale(0.3);\n }\n }\n\n @keyframes flex {\n 0%,\n 100% {\n transform: translateX(-50%) scaleY(5);\n }\n\n 25% {\n transform: translateX(-50%) scaleY(1);\n }\n\n 50% {\n transform: translateX(-50%) scaleY(5);\n }\n\n 75% {\n transform: translateX(-50%) scaleY(1);\n }\n }\n}\n","import {\n Component,\n h,\n ComponentInterface,\n Prop,\n Element,\n State,\n} from '@stencil/core';\n\n/**\n * Spinners are used to show the progress of an indeterminate operation.\n * @slot - Used for loading messages\n */\n@Component({\n tag: 'nano-spinner',\n styleUrl: 'spinner.scss',\n shadow: true,\n})\nexport class Spinner implements ComponentInterface {\n @Element() el: HTMLNanoSpinnerElement;\n @State() hasText: boolean = false;\n\n /** The type of spinner animation. dna should be used for larger, page loads. Circle for smaller component loaders. */\n @Prop() type: 'dna' | 'circle' = 'dna';\n\n /** Displays absolutely with an overlay */\n @Prop({ reflect: true }) overlay: boolean = false;\n\n componentWillLoad() {\n this.hasText = !!this.el.childNodes.length;\n }\n\n render() {\n return (\n <div class=\"spinner\" aria-busy=\"true\" aria-live=\"polite\">\n <div class=\"spinner__loader\">\n {this.type === 'dna' && (\n <div class=\"spinner__dna\">\n <div class=\"spinner__dnatrack spinner__dnatrack--1\">\n <div class=\"spinner__dnadot spinner__dnadot--1\"></div>\n <div class=\"spinner__dnadot spinner__dnadot--2\"></div>\n </div>\n <div class=\"spinner__dnatrack spinner__dnatrack--2\">\n <div class=\"spinner__dnadot spinner__dnadot--3\"></div>\n <div class=\"spinner__dnadot spinner__dnadot--4\"></div>\n </div>\n <div class=\"spinner__dnatrack spinner__dnatrack--3\">\n <div class=\"spinner__dnadot spinner__dnadot--5\"></div>\n <div class=\"spinner__dnadot spinner__dnadot--6\"></div>\n </div>\n <div class=\"spinner__dnatrack spinner__dnatrack--4\">\n <div class=\"spinner__dnadot spinner__dnadot--7\"></div>\n <div class=\"spinner__dnadot spinner__dnadot--8\"></div>\n </div>\n <div class=\"spinner__dnatrack spinner__dnatrack--5\">\n <div class=\"spinner__dnadot spinner__dnadot--9\"></div>\n <div class=\"spinner__dnadot spinner__dnadot--10\"></div>\n </div>\n </div>\n )}\n {this.type === 'circle' && <span class=\"spinner__spin\"></span>}\n </div>\n {this.hasText && (\n <div class=\"spinner__text\">\n <slot />\n </div>\n )}\n {this.overlay && <div class=\"spinner__overlay\"></div>}\n </div>\n );\n }\n}\n"],"version":3}
@@ -11,7 +11,7 @@ const focusVisible = require('./focus-visible-569511f0.js');
11
11
  const scroll = require('./scroll-9bb5e060.js');
12
12
  const componentStore = require('./component-store-d7c8c326.js');
13
13
  const theme = require('./theme-50275e1a.js');
14
- const transitions = require('./transitions-d295a09e.js');
14
+ const transitions = require('./transitions-5cd8f697.js');
15
15
  require('./throttle-f55496c8.js');
16
16
  require('./_commonjsHelpers-9f2314fc.js');
17
17
 
@@ -7,7 +7,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
8
  const index = require('./index-41582c2a.js');
9
9
 
10
- const tabCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--padding:0.75rem 1rem;--bg-rgb:var(--nano-layer-bg-rgb, 255, 255, 255);--active-bg:rgba(var(--bg-rgb), 1);--inactive-bg:rgba(var(--bg-rgb), 0.7);--disabled-bg-rgb:var(--bg-rgb);--text-color:#007495;--disabled-text-color:#455556;--active-text-color:#0c5a71;--h-font-size:0.93em;--v-font-size:0.875em;--tab-spacing:0.5rem;--tab-divider-size:0;--tab-divider-color:#90c6e7;--tab-indicator-size:5px;display:inline-block}:host([direction=vertical]){--padding:1rem}:host([direction=vertical]) .nanotab{font-size:var(--v-font-size)}:host([direction=vertical]) .nanotab.nanotab--active{font-weight:600;color:var(--active-text-color)}:host([direction=horizontal]) .nanotab{font-size:var(--h-font-size);-webkit-margin-before:var(--tab-indicator-size);margin-block-start:var(--tab-indicator-size);-webkit-border-end:solid var(--tab-divider-size) var(--tab-divider-color);border-inline-end:solid var(--tab-divider-size) var(--tab-divider-color)}:host([direction=horizontal]) .nanotab.nanotab--active{-webkit-margin-before:0;margin-block-start:0;-webkit-border-before:solid var(--tab-indicator-size) var(--tab-indicator-color);border-block-start:solid var(--tab-indicator-size) var(--tab-indicator-color);background:var(--active-bg);color:var(--active-text-color)}.nanotab{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;-webkit-margin-end:var(--tab-spacing);margin-inline-end:var(--tab-spacing);padding:var(--padding);display:-webkit-box;display:-ms-flexbox;display:flex;block-size:100%;inline-size:auto;background:var(--inactive-bg);border-radius:var(--border-radius) var(--border-radius) 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;overflow:visible;white-space:nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.nanotab ::slotted(*){display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}:host(:last-of-type) .nanotab{-webkit-margin-end:0;margin-inline-end:0}.nanotab:hover:not(.tab--disabled){text-shadow:0 0 0.01px var(--text-color)}.nanotab:focus{outline:none;outline-style:none;-webkit-box-shadow:none;box-shadow:none;border-color:transparent}.nanotab:focus:not(.nanotab--disabled){-webkit-box-shadow:var(--focus-shadow) inset;box-shadow:var(--focus-shadow) inset}.nanotab--disabled{background:rgba(var(--disabled-bg-rgb), 1);opacity:0.5;cursor:not-allowed;color:var(--disabled-text-color)}.nanotab__close-button{-webkit-margin-start:var(--nano-spacing-small, 8px);margin-inline-start:var(--nano-spacing-small, 8px);--padding:var(--nano-spacing-xsmall, 4px) !important}";
10
+ const tabCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--padding:0.75rem 1rem;--bg-rgb:var(--nano-layer-bg-rgb, 255, 255, 255);--active-bg:rgba(var(--bg-rgb), 1);--inactive-bg:rgba(var(--bg-rgb), 0.7);--disabled-bg-rgb:var(--bg-rgb);--text-color:#007495;--disabled-text-color:#455556;--active-text-color:#0c5a71;--h-font-size:0.93em;--v-font-size:0.875em;--tab-spacing:0.5rem;--tab-divider-size:0;--tab-divider-color:#90c6e7;--tab-indicator-size:5px;display:inline-block}:host([direction=vertical]){--padding:1rem}:host([direction=vertical]) .nanotab{font-size:var(--v-font-size)}:host([direction=vertical]) .nanotab.nanotab--active{font-weight:600;color:var(--active-text-color)}:host([direction=horizontal]) .nanotab{font-size:var(--h-font-size);-webkit-margin-before:var(--tab-indicator-size);margin-block-start:var(--tab-indicator-size);-webkit-border-end:solid var(--tab-divider-size) var(--tab-divider-color);border-inline-end:solid var(--tab-divider-size) var(--tab-divider-color)}:host([direction=horizontal]) .nanotab.nanotab--active{-webkit-margin-before:0;margin-block-start:0;-webkit-border-before:solid var(--tab-indicator-size) var(--tab-indicator-color);border-block-start:solid var(--tab-indicator-size) var(--tab-indicator-color);background:var(--active-bg);color:var(--active-text-color)}.nanotab{font-family:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;-webkit-margin-end:var(--tab-spacing);margin-inline-end:var(--tab-spacing);padding:var(--padding);display:-webkit-box;display:-ms-flexbox;display:flex;block-size:100%;inline-size:auto;background:var(--inactive-bg);border-radius:var(--border-radius) var(--border-radius) 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;overflow:visible;white-space:nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.nanotab ::slotted(*){display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}:host(:last-of-type) .nanotab{-webkit-margin-end:0;margin-inline-end:0}.nanotab:hover:not(.tab--disabled){text-shadow:0 0 0.01px var(--text-color)}.nanotab:focus{outline:none;outline-style:none;-webkit-box-shadow:none;box-shadow:none;border-color:transparent}.nanotab:focus:not(.nanotab--disabled){-webkit-box-shadow:var(--focus-shadow) inset;box-shadow:var(--focus-shadow) inset}.nanotab--disabled{background:rgba(var(--disabled-bg-rgb), 1);opacity:0.5;cursor:not-allowed;color:var(--disabled-text-color)}.nanotab__close-button{-webkit-margin-start:var(--nano-spacing-small, 8px);margin-inline-start:var(--nano-spacing-small, 8px);--padding:var(--nano-spacing-xsmall, 4px) !important}";
11
11
 
12
12
  let id = 0;
13
13
  const Tab = class {
@@ -1 +1 @@
1
- {"file":"nano-tab.entry.cjs.js","mappings":";;;;;;;;;AAAA,MAAM,MAAM,GAAG,48FAA48F;;ACY39F,IAAI,EAAE,GAAG,CAAC,CAAC;MAWE,GAAG;;;;IACN,UAAK,GAAG,YAAY,EAAE,EAAE,EAAE,CAAC;IAgC3B,qBAAgB,GAAG;MACzB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B,CAAC;IAEM,uBAAkB,GAAG,CAAC,CAAgB;MAC5C,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG;QAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAC5C,CAAC;iBAhC+B,EAAE;kBAGD,KAAK;oBAGH,KAAK;oBAGtB,KAAK;;;EAOxB,MAAM,QAAQ;IACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;GACzC;;EAID,MAAM,WAAW;IACf,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;GACjB;EAUD,MAAM;IACJ,QACEA,QAACC,UAAI,IAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,IAClCD,iBACE,IAAI,EAAC,MAAM,EACX,GAAG,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,EAC5B,KAAK,EAAE;QACL,OAAO,EAAE,IAAI;QACb,iBAAiB,EAAE,IAAI,CAAC,MAAM;QAC9B,mBAAmB,EAAE,IAAI,CAAC,QAAQ;QAClC,mBAAmB,EAAE,IAAI,CAAC,QAAQ;OACnC,EACD,IAAI,EAAC,KAAK,mBACK,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO,mBAChC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,EAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,GAAG,IAEpDA,qBAAQ,EACP,IAAI,CAAC,QAAQ,KACZA,8BACE,KAAK,EAAC,gBAAgB,EACtB,QAAQ,EAAC,aAAa,EACtB,KAAK,EAAC,uBAAuB,EAC7B,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAC9B,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAClC,QAAQ,EAAE,CAAC,CAAC,GACZ,CACH,CACG,CACD,EACP;GACH;;;;;;;","names":["h","Host"],"sources":["./src/components/tabs/tab.scss?tag=nano-tab&encapsulation=shadow","./src/components/tabs/tab.tsx"],"sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/layers';\n\n/**\n * @prop --focus-shadow: Defaults to #{$control-focus-style};\n\n * @prop --padding: Defaults to .75rem 1rem on placement 'top' and 1rem on placement 'start';\n\n * @prop --bg-rgb: Defaults to #{$layer-bg-color-rgb};\n * @prop --active-bg: Defaults to rgba(var(--bg-rgb), 1);\n * @prop --disabled-bg-rgb: Defaults to var(--bg-rgb);\n * @prop --inactive-bg: Defaults to rgba(var(--bg-rgb), 0.7);\n\n * @prop --text-color: Defaults to #{map.get($colors, blue)};\n * @prop --disabled-text-color: Defaults to #{map.get($colors, darkgrey)};\n * @prop --active-text-color: Defaults to #{map.get($colors, darkblue)};\n\n * @prop --h-font-size: Defaults to .93em;\n * @prop --v-font-size: Defaults to .875em;\n * @prop --tab-spacing: Gap between tabs. Defaults to 1rem;\n * @prop --tab-divider-size: Defaults to 0;\n * @prop --tab-divider-color: Defaults to #{map.get($colors, lightblue)};\n */\n\n:host {\n --focus-shadow: #{$control-focus-style};\n --padding: 0.75rem 1rem;\n --bg-rgb: #{$layer-bg-color-rgb};\n --active-bg: rgba(var(--bg-rgb), 1);\n --inactive-bg: rgba(var(--bg-rgb), 0.7);\n --disabled-bg-rgb: var(--bg-rgb);\n --text-color: #{map.get($colors, blue)};\n --disabled-text-color: #{map.get($colors, darkgrey)};\n --active-text-color: #{map.get($colors, darkblue)};\n --h-font-size: 0.93em;\n --v-font-size: 0.875em;\n --tab-spacing: 0.5rem;\n --tab-divider-size: 0;\n --tab-divider-color: #{map.get($colors, lightblue)};\n --tab-indicator-size: 5px;\n\n display: inline-block;\n}\n\n:host([direction='vertical']) {\n --padding: 1rem;\n\n .nanotab {\n font-size: var(--v-font-size);\n\n &.nanotab--active {\n font-weight: 600;\n color: var(--active-text-color);\n }\n }\n}\n\n:host([direction='horizontal']) {\n .nanotab {\n font-size: var(--h-font-size);\n margin-block-start: var(--tab-indicator-size);\n border-inline-end: solid var(--tab-divider-size) var(--tab-divider-color);\n\n &.nanotab--active {\n margin-block-start: 0;\n border-block-start: solid var(--tab-indicator-size) var(--tab-indicator-color);\n background: var(--active-bg);\n color: var(--active-text-color);\n }\n }\n}\n\n.nanotab {\n @include text-inherit();\n\n margin-inline-end: var(--tab-spacing);\n padding: var(--padding);\n display: flex;\n block-size: 100%;\n inline-size: auto;\n background: var(--inactive-bg);\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n user-select: none;\n cursor: pointer;\n overflow: visible;\n white-space: nowrap;\n align-items: center;\n\n & ::slotted(*) {\n display: flex;\n align-items: center;\n }\n\n :host(:last-of-type) & {\n margin-inline-end: 0;\n }\n\n &:hover:not(.tab--disabled) {\n text-shadow: 0 0 0.01px var(--text-color);\n }\n\n &:focus {\n outline: none;\n outline-style: none;\n box-shadow: none;\n border-color: transparent;\n }\n\n &:focus:not(.nanotab--disabled) {\n box-shadow: var(--focus-shadow) inset;\n }\n\n &--disabled {\n background: rgba(var(--disabled-bg-rgb), 1);\n opacity: 0.5;\n cursor: not-allowed;\n color: var(--disabled-text-color);\n }\n\n &__close-button {\n margin-inline-start: #{$spacing-small};\n\n --padding: #{$spacing-xsmall} !important;\n }\n}\n","import {\n Component,\n Element,\n Host,\n ComponentInterface,\n Method,\n Prop,\n h,\n Event,\n EventEmitter,\n} from '@stencil/core';\n\nlet id = 0;\n\n/**\n * @slot - The tab's label.\n */\n\n@Component({\n tag: 'nano-tab',\n styleUrl: 'tab.scss',\n shadow: true,\n})\nexport class Tab implements ComponentInterface {\n private tabId = `nano-tab-${++id}`;\n private tab: HTMLElement;\n\n @Element() host: HTMLNanoTabElement;\n\n /** The name of the tab panel the tab will control. The panel must be located in the same tab group. */\n @Prop({ reflect: true }) panel = '';\n\n /** The active, selected tab. If none active, the first will automatically be selected. */\n @Prop({ reflect: true }) active = false;\n\n /** Set to true to draw the tab in an active state. */\n @Prop({ reflect: true }) disabled = false;\n\n /** When true, the tab will be rendered with a close icon. */\n @Prop() closable = false;\n\n /** Emitted when the tab is closable and the close button is activated. */\n @Event() nanoTabClose: EventEmitter;\n\n /** Sets focus to the tab. */\n @Method()\n async setFocus() {\n this.tab.focus({ preventScroll: true });\n }\n\n /** Removes focus from the tab. */\n @Method()\n async removeFocus() {\n this.tab.blur();\n }\n\n private handleCloseClick = () => {\n this.nanoTabClose.emit();\n };\n\n private handleCloseKeydown = (e: KeyboardEvent) => {\n if (e.key === ' ') this.handleCloseClick();\n };\n\n render() {\n return (\n <Host id={this.host.id || this.tabId}>\n <div\n part=\"base\"\n ref={(el) => (this.tab = el)}\n class={{\n nanotab: true,\n 'nanotab--active': this.active,\n 'nanotab--disabled': this.disabled,\n 'nanotab--closable': this.closable,\n }}\n role=\"tab\"\n aria-disabled={this.disabled ? 'true' : 'false'}\n aria-selected={this.active ? 'true' : 'false'}\n tabindex={this.disabled || !this.active ? '-1' : '0'}\n >\n <slot />\n {this.closable && (\n <nano-icon-button\n label=\"Close this tab\"\n iconName=\"light/times\"\n class=\"nanotab__close-button\"\n onClick={this.handleCloseClick}\n onKeyDown={this.handleCloseKeydown}\n tabIndex={-1}\n />\n )}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"nano-tab.entry.cjs.js","mappings":";;;;;;;;;AAAA,MAAM,MAAM,GAAG,i+FAAi+F;;ACYh/F,IAAI,EAAE,GAAG,CAAC,CAAC;MAWE,GAAG;;;;IACN,UAAK,GAAG,YAAY,EAAE,EAAE,EAAE,CAAC;IAgC3B,qBAAgB,GAAG;MACzB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B,CAAC;IAEM,uBAAkB,GAAG,CAAC,CAAgB;MAC5C,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG;QAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAC5C,CAAC;iBAhC+B,EAAE;kBAGD,KAAK;oBAGH,KAAK;oBAGtB,KAAK;;;EAOxB,MAAM,QAAQ;IACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;GACzC;;EAID,MAAM,WAAW;IACf,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;GACjB;EAUD,MAAM;IACJ,QACEA,QAACC,UAAI,IAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,IAClCD,iBACE,IAAI,EAAC,MAAM,EACX,GAAG,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,EAC5B,KAAK,EAAE;QACL,OAAO,EAAE,IAAI;QACb,iBAAiB,EAAE,IAAI,CAAC,MAAM;QAC9B,mBAAmB,EAAE,IAAI,CAAC,QAAQ;QAClC,mBAAmB,EAAE,IAAI,CAAC,QAAQ;OACnC,EACD,IAAI,EAAC,KAAK,mBACK,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO,mBAChC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,EAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,GAAG,IAEpDA,qBAAQ,EACP,IAAI,CAAC,QAAQ,KACZA,8BACE,KAAK,EAAC,gBAAgB,EACtB,QAAQ,EAAC,aAAa,EACtB,KAAK,EAAC,uBAAuB,EAC7B,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAC9B,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAClC,QAAQ,EAAE,CAAC,CAAC,GACZ,CACH,CACG,CACD,EACP;GACH;;;;;;;","names":["h","Host"],"sources":["./src/components/tabs/tab.scss?tag=nano-tab&encapsulation=shadow","./src/components/tabs/tab.tsx"],"sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/layers';\n\n/**\n * @prop --focus-shadow: Defaults to #{$control-focus-style};\n\n * @prop --padding: Defaults to .75rem 1rem on placement 'top' and 1rem on placement 'start';\n\n * @prop --bg-rgb: Defaults to #{$layer-bg-color-rgb};\n * @prop --active-bg: Defaults to rgba(var(--bg-rgb), 1);\n * @prop --disabled-bg-rgb: Defaults to var(--bg-rgb);\n * @prop --inactive-bg: Defaults to rgba(var(--bg-rgb), 0.7);\n\n * @prop --text-color: Defaults to #{map.get($colors, blue)};\n * @prop --disabled-text-color: Defaults to #{map.get($colors, darkgrey)};\n * @prop --active-text-color: Defaults to #{map.get($colors, darkblue)};\n\n * @prop --h-font-size: Defaults to .93em;\n * @prop --v-font-size: Defaults to .875em;\n * @prop --tab-spacing: Gap between tabs. Defaults to 1rem;\n * @prop --tab-divider-size: Defaults to 0;\n * @prop --tab-divider-color: Defaults to #{map.get($colors, lightblue)};\n */\n\n:host {\n --focus-shadow: #{$control-focus-style};\n --padding: 0.75rem 1rem;\n --bg-rgb: #{$layer-bg-color-rgb};\n --active-bg: rgba(var(--bg-rgb), 1);\n --inactive-bg: rgba(var(--bg-rgb), 0.7);\n --disabled-bg-rgb: var(--bg-rgb);\n --text-color: #{map.get($colors, blue)};\n --disabled-text-color: #{map.get($colors, darkgrey)};\n --active-text-color: #{map.get($colors, darkblue)};\n --h-font-size: 0.93em;\n --v-font-size: 0.875em;\n --tab-spacing: 0.5rem;\n --tab-divider-size: 0;\n --tab-divider-color: #{map.get($colors, lightblue)};\n --tab-indicator-size: 5px;\n\n display: inline-block;\n}\n\n:host([direction='vertical']) {\n --padding: 1rem;\n\n .nanotab {\n font-size: var(--v-font-size);\n\n &.nanotab--active {\n font-weight: 600;\n color: var(--active-text-color);\n }\n }\n}\n\n:host([direction='horizontal']) {\n .nanotab {\n font-size: var(--h-font-size);\n margin-block-start: var(--tab-indicator-size);\n border-inline-end: solid var(--tab-divider-size) var(--tab-divider-color);\n\n &.nanotab--active {\n margin-block-start: 0;\n border-block-start: solid var(--tab-indicator-size) var(--tab-indicator-color);\n background: var(--active-bg);\n color: var(--active-text-color);\n }\n }\n}\n\n.nanotab {\n @include text-inherit();\n\n margin-inline-end: var(--tab-spacing);\n padding: var(--padding);\n display: flex;\n block-size: 100%;\n inline-size: auto;\n background: var(--inactive-bg);\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n user-select: none;\n cursor: pointer;\n overflow: visible;\n white-space: nowrap;\n align-items: center;\n\n & ::slotted(*) {\n display: flex;\n align-items: center;\n }\n\n :host(:last-of-type) & {\n margin-inline-end: 0;\n }\n\n &:hover:not(.tab--disabled) {\n text-shadow: 0 0 0.01px var(--text-color);\n }\n\n &:focus {\n outline: none;\n outline-style: none;\n box-shadow: none;\n border-color: transparent;\n }\n\n &:focus:not(.nanotab--disabled) {\n box-shadow: var(--focus-shadow) inset;\n }\n\n &--disabled {\n background: rgba(var(--disabled-bg-rgb), 1);\n opacity: 0.5;\n cursor: not-allowed;\n color: var(--disabled-text-color);\n }\n\n &__close-button {\n margin-inline-start: #{$spacing-small};\n\n --padding: #{$spacing-xsmall} !important;\n }\n}\n","import {\n Component,\n Element,\n Host,\n ComponentInterface,\n Method,\n Prop,\n h,\n Event,\n EventEmitter,\n} from '@stencil/core';\n\nlet id = 0;\n\n/**\n * @slot - The tab's label.\n */\n\n@Component({\n tag: 'nano-tab',\n styleUrl: 'tab.scss',\n shadow: true,\n})\nexport class Tab implements ComponentInterface {\n private tabId = `nano-tab-${++id}`;\n private tab: HTMLElement;\n\n @Element() host: HTMLNanoTabElement;\n\n /** The name of the tab panel the tab will control. The panel must be located in the same tab group. */\n @Prop({ reflect: true }) panel = '';\n\n /** The active, selected tab. If none active, the first will automatically be selected. */\n @Prop({ reflect: true }) active = false;\n\n /** Set to true to draw the tab in an active state. */\n @Prop({ reflect: true }) disabled = false;\n\n /** When true, the tab will be rendered with a close icon. */\n @Prop() closable = false;\n\n /** Emitted when the tab is closable and the close button is activated. */\n @Event() nanoTabClose: EventEmitter;\n\n /** Sets focus to the tab. */\n @Method()\n async setFocus() {\n this.tab.focus({ preventScroll: true });\n }\n\n /** Removes focus from the tab. */\n @Method()\n async removeFocus() {\n this.tab.blur();\n }\n\n private handleCloseClick = () => {\n this.nanoTabClose.emit();\n };\n\n private handleCloseKeydown = (e: KeyboardEvent) => {\n if (e.key === ' ') this.handleCloseClick();\n };\n\n render() {\n return (\n <Host id={this.host.id || this.tabId}>\n <div\n part=\"base\"\n ref={(el) => (this.tab = el)}\n class={{\n nanotab: true,\n 'nanotab--active': this.active,\n 'nanotab--disabled': this.disabled,\n 'nanotab--closable': this.closable,\n }}\n role=\"tab\"\n aria-disabled={this.disabled ? 'true' : 'false'}\n aria-selected={this.active ? 'true' : 'false'}\n tabindex={this.disabled || !this.active ? '-1' : '0'}\n >\n <slot />\n {this.closable && (\n <nano-icon-button\n label=\"Close this tab\"\n iconName=\"light/times\"\n class=\"nanotab__close-button\"\n onClick={this.handleCloseClick}\n onKeyDown={this.handleCloseKeydown}\n tabIndex={-1}\n />\n )}\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -5,6 +5,7 @@
5
5
 
6
6
  const index = require('./index-41582c2a.js');
7
7
  const math = require('./math-a8123703.js');
8
+ const throttle = require('./throttle-f55496c8.js');
8
9
  const index$1 = require('./index-bb2a6ab8.js');
9
10
 
10
11
  const CSSNAMESPACE = 'nano-tbl';
@@ -111,7 +112,7 @@ const createWorkerProxy = (worker, workerMsgId, exportedMethod) => (
111
112
  })
112
113
  );
113
114
 
114
- const workerPromise = Promise.resolve().then(function () { return require('./table.worker-b0b0044a.js'); }).then(m => m.worker);
115
+ const workerPromise = Promise.resolve().then(function () { return require('./table.worker-1bc19978.js'); }).then(m => m.worker);
115
116
  const createWorkerStore = /*@__PURE__*/createWorkerProxy(workerPromise, 'stencil.table.worker', 'createWorkerStore');
116
117
  const syncConfigToWorker = /*@__PURE__*/createWorkerProxy(workerPromise, 'stencil.table.worker', 'syncConfigToWorker');
117
118
  const syncDataToWorker = /*@__PURE__*/createWorkerProxy(workerPromise, 'stencil.table.worker', 'syncDataToWorker');
@@ -130,17 +131,11 @@ function colsToWorker(columns) {
130
131
  return safeColumns;
131
132
  }
132
133
  const stores = new WeakMap();
133
- async function generateStore(host, rows, columns) {
134
- // augment data with some internal props
135
- rows = rows.map((row, i) => ({
136
- ...row,
137
- __index: i,
138
- __uuid: math.cyrb53(Object.values(row).join()),
139
- }));
134
+ async function generateStore(host, columns, scrollParent) {
140
135
  const store = {
141
- data: index$1.createStore({ rows }),
136
+ data: index$1.createStore({ rows: [] }),
142
137
  config: index$1.createStore({ columns }),
143
- general: index$1.createStore({ workerId: null }),
138
+ general: index$1.createStore({ workerId: null, scrollParent, host }),
144
139
  };
145
140
  const id = await createWorkerStore(store.data.state.rows, colsToWorker(store.config.state.columns));
146
141
  store.general.state.workerId = id;
@@ -175,9 +170,15 @@ function storeSetData(host, rows) {
175
170
  const store = stores.get(host);
176
171
  if (!store)
177
172
  return;
178
- if (store.general.state.workerId)
179
- syncDataToWorker(store.general.state.workerId, rows);
173
+ // augment data with some internal props
174
+ rows = rows.map((row, i) => ({
175
+ ...row,
176
+ __index: i,
177
+ __uuid: math.cyrb53(Object.values(row).join()),
178
+ }));
180
179
  store.data.state.rows = rows;
180
+ if (store.general.state.workerId)
181
+ return syncDataToWorker(store.general.state.workerId, rows);
181
182
  }
182
183
  function storeSetConfig(host, columns) {
183
184
  const store = stores.get(host);
@@ -332,7 +333,7 @@ function cellRender(rowIndex, colIndex) {
332
333
  * @param col - the current column config object
333
334
  * @returns - a JSX node
334
335
  */
335
- function colheadRender(col) {
336
+ function colheadFootRender(col) {
336
337
  const tpl = col?.colTemplate;
337
338
  return tpl ? (tpl(index.h, col)) : (index.h(index.Fragment, null, col.title));
338
339
  }
@@ -359,33 +360,56 @@ const stickyVIOs = new WeakMap();
359
360
  function addHObserver(el, pos, cb) {
360
361
  if (stickyHIOs.get(el))
361
362
  return;
363
+ const store = fetchStores();
364
+ const root = store.general.state.scrollParent;
365
+ const host = store.general.state.host;
362
366
  const observer = new IntersectionObserver(([e]) => {
363
367
  const positions = {};
364
- if (pos === 'start')
365
- positions.start = e.boundingClientRect.x < 0 && !e.isIntersecting;
366
- if (pos === 'end')
368
+ if (pos === 'start') {
369
+ positions.start =
370
+ e.boundingClientRect.x -
371
+ (host.getBoundingClientRect().x + root.scrollLeft) <
372
+ 0 && !e.isIntersecting;
373
+ }
374
+ if (pos === 'end') {
375
+ // TODO - sort these out for RtL
367
376
  positions.end =
368
- e.boundingClientRect.width > e.intersectionRect.width &&
377
+ e.boundingClientRect.right > e.boundingClientRect.width &&
369
378
  !e.isIntersecting;
379
+ }
370
380
  cb(positions);
371
- }, { threshold: [1], rootMargin: '1px 0px 1px 0px' });
381
+ }, {
382
+ threshold: [1],
383
+ rootMargin: '1px 0px 1px 0px',
384
+ root: root === document.scrollingElement ? null : root,
385
+ });
372
386
  stickyHIOs.set(el, observer);
373
387
  requestAnimationFrame(() => observer.observe(el));
374
388
  }
375
389
  function addVObserver(el, pos, cb) {
376
390
  if (stickyVIOs.get(el))
377
391
  return;
392
+ const store = fetchStores();
393
+ const root = store.general.state.scrollParent;
394
+ const host = store.general.state.host;
378
395
  const observer = new IntersectionObserver(([e]) => {
379
- console.log(e);
380
396
  const positions = {};
381
- if (pos === 'top')
382
- positions.top = e.boundingClientRect.y < 0 && !e.isIntersecting;
397
+ if (pos === 'top') {
398
+ positions.top =
399
+ e.boundingClientRect.y -
400
+ (host.getBoundingClientRect().y + root.scrollTop) <
401
+ 0 && !e.isIntersecting;
402
+ }
383
403
  if (pos === 'bottom')
384
404
  positions.bottom =
385
405
  e.boundingClientRect.height > e.intersectionRect.height &&
386
406
  !e.isIntersecting;
387
407
  cb(positions);
388
- }, { threshold: [0.99], rootMargin: '0px 100px 0px 100px' });
408
+ }, {
409
+ threshold: [0.99],
410
+ rootMargin: '0px 100px 0px 100px',
411
+ root: root === document.scrollingElement ? null : root,
412
+ });
389
413
  stickyVIOs.set(el, observer);
390
414
  requestAnimationFrame(() => observer.observe(el));
391
415
  }
@@ -458,7 +482,7 @@ const TableColHead = ({ column, headRenderer, onColumnOrderClick, onColumnPinned
458
482
  default:
459
483
  order = 'asc';
460
484
  }
461
- onColumnOrderClick(order, column.prop, e.target.parentElement);
485
+ onColumnOrderClick(order, column.prop, e.target.closest('th'));
462
486
  }
463
487
  let extraProps = {};
464
488
  if (column.columnProperties) {
@@ -474,7 +498,7 @@ const TableColHead = ({ column, headRenderer, onColumnOrderClick, onColumnPinned
474
498
  },
475
499
  };
476
500
  let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
477
- const content = colheadRender(column);
501
+ const content = colheadFootRender(column);
478
502
  if (!content)
479
503
  return index.h(index.Fragment, null);
480
504
  props =
@@ -492,8 +516,11 @@ const TableColHead = ({ column, headRenderer, onColumnOrderClick, onColumnPinned
492
516
  if (['top', 'bottom'].includes(headRenderer.pinned))
493
517
  addVObserver(th, headRenderer.pinned, onColumnPinned);
494
518
  } },
495
- index.h("button", { class: `${CSSNAMESPACE}__order-btn`, onClick: handleColumnOrderClick },
496
- colheadRender(column),
519
+ index.h("button", { class: {
520
+ [`${CSSNAMESPACE}__order-btn`]: true,
521
+ [`${CSSNAMESPACE}__cell-content`]: true,
522
+ }, onClick: handleColumnOrderClick },
523
+ colheadFootRender(column),
497
524
  !!column.filter && index.h("nano-icon", { name: "light/filter" }),
498
525
  !!column.order &&
499
526
  (column.order === 'desc' ? (index.h("nano-icon", { name: "solid/long-arrow-down" })) : (index.h("nano-icon", { name: "solid/long-arrow-up" }))),
@@ -506,11 +533,12 @@ const TableColHead = ({ column, headRenderer, onColumnOrderClick, onColumnPinned
506
533
  if (['top', 'bottom'].includes(headRenderer.pinned))
507
534
  addVObserver(th, headRenderer.pinned, onColumnPinned);
508
535
  } },
509
- colheadRender(column),
510
- !!column.filter && index.h("nano-icon", { name: "light/bars-filter" })));
536
+ index.h("div", { class: `${CSSNAMESPACE}__cell-content` },
537
+ colheadFootRender(column),
538
+ !!column.filter && index.h("nano-icon", { name: "light/bars-filter" }))));
511
539
  };
512
- const TableCell = ({ rowIndex, colIndex, }) => {
513
- const content = cellRender(rowIndex, colIndex);
540
+ const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
541
+ const content = nestedContent || cellRender(rowIndex, colIndex);
514
542
  if (!content)
515
543
  return index.h(index.Fragment, null);
516
544
  const store = fetchStores();
@@ -534,7 +562,8 @@ const TableCell = ({ rowIndex, colIndex, }) => {
534
562
  }
535
563
  return (index.h(CellType
536
564
  // role="gridcell"
537
- , { ...props }, cellRender(rowIndex, colIndex)));
565
+ , { ...props },
566
+ index.h("div", { class: `${CSSNAMESPACE}__cell-content` }, content)));
538
567
  };
539
568
 
540
569
  const detectScrollSpeed = (() => {
@@ -592,7 +621,7 @@ function isInViewport(el, percentVisible = 100) {
592
621
  percentVisible);
593
622
  }
594
623
 
595
- const tableCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}nano-table{display:block;--max-col-width:200px;--color:var(--nano-color-mediumgrey, #68767e);--font-size:0.87rem;--cell-line-height:1.5;--border-color:var(--nano-color-palegrey, #b5aea7);--border-style:1px solid var(--border-color);--border-tint-color:var(--nano-color-blue, #90c6e7);--border-tint-style:2px solid var(--border-tint-color);--cell-bg-rgb:var(--nano-color-white-rgb);--head-bg-rgb:var(--cell-bg-rgb);--foot-bg-rgb:var(--cell-bg-rgb);--th-row-bg-rgb:var(--cell-bg-rgb);--ordered-bg-rgb:var(--nano-color-lightgrey-rgb);--td-padding:0.5rem 0.625rem 0.4125rem;--th-padding:0.875rem 0.625rem 0.6875rem;--head-th-padding:var(--th-padding);--foot-th-padding:var(--td-padding);--bookend-col-padding:2rem}.nano-tbl{color:var(--color);text-align:start;width:100%;font-size:var(--font-size);border-spacing:0 0;-webkit-margin-after:32px;margin-block-end:32px;border-collapse:separate;background:rgb(var(--cell-bg-rgb))}.nano-tbl__ordered{background-color:var(--ordered-bg);-webkit-border-start:var(--border-style);border-inline-start:var(--border-style);-webkit-border-end:var(--border-style);border-inline-end:var(--border-style)}.nano-tbl__order-btn{padding:0;border:none;outline:none;font:inherit;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;color:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%}.nano-tbl__status-icons{margin-inline:auto 10px;display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px}.nano-tbl__loader{font-size:2rem;width:100%;display:block}.nano-tbl__caption{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nano-tbl__td,.nano-tbl__th{line-height:var(--cell-line-height);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;-webkit-border-after:var(--border-style);border-block-end:var(--border-style);padding:var(--td-padding);max-width:var(--max-col-width);background-color:rgb(var(--cell-bg-rgb))}@media (min-width: 768px){.nano-tbl__td:first-child,.nano-tbl__th:first-child{-webkit-padding-start:var(--bookend-col-padding) !important;padding-inline-start:var(--bookend-col-padding) !important}.nano-tbl__td:last-child,.nano-tbl__th:last-child{-webkit-padding-end:var(--bookend-col-padding) !important;padding-inline-end:var(--bookend-col-padding) !important}}thead .nano-tbl__td,thead .nano-tbl__th{padding:var(--head-th-padding);font-weight:800;background:rgba(var(--head-bg-rgb), 90%)}tfoot .nano-tbl__td,tfoot .nano-tbl__th{padding:var(--foot-th-padding);font-weight:800;-webkit-border-after:none;border-block-end:none;background:rgba(var(--foot-bg-rgb), 90%)}.nano-tbl__td.nano-tbl__ordered,.nano-tbl__th.nano-tbl__ordered{background-color:rgba(var(--ordered-bg-rgb), 0.8) !important}.nano-tbl tbody{will-change:scroll-position;visibility:visible}.nano-tbl tbody.nano-tbl__inactive{visibility:hidden}.nano-tbl th[scope=row]{font-weight:800;max-width:65vw;margin:0}.nano-tbl__pin{position:sticky}.nano-tbl__pin--start{inset-inline:-1px auto;will-change:scroll-position;overflow:visible}.nano-tbl__pin--start::after{content:\"\";position:absolute;inset:0;-webkit-box-shadow:5px 0 4px 0 rgba(0, 0, 0, 0.2);box-shadow:5px 0 4px 0 rgba(0, 0, 0, 0.2);opacity:0}.nano-tbl__pinned--start .nano-tbl__pin--start{z-index:1}.nano-tbl__pinned--start .nano-tbl__pin--start::after{opacity:1}.nano-tbl__pin--end{inset-inline:auto -1px}.nano-tbl__pin--end::after{content:\"\";position:absolute;inset:0;-webkit-box-shadow:-5px 0 4px 0 rgba(0, 0, 0, 0.2);box-shadow:-5px 0 4px 0 rgba(0, 0, 0, 0.2);opacity:0}.nano-tbl__pinned--end .nano-tbl__pin--end{z-index:2}.nano-tbl__pinned--end .nano-tbl__pin--end::after{opacity:1}.nano-tbl__pin--top{inset-block:-1px auto}.nano-tbl__pinned--top .nano-tbl__pin--top{z-index:3}.nano-tbl__pin--bottom{inset-block:auto -1px}.nano-tbl__pinned--bottom .nano-tbl__pin--bottom{z-index:4;-webkit-border-before:var(--border-tint-style);border-block-start:var(--border-tint-style)}.nano-tbl__pinned--top.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:5}.nano-tbl__pinned--top.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:5}.nano-tbl__pinned--bottom.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:5}.nano-tbl__pinned--bottom.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:5}.nano-tbl thead tr:last-of-type td,.nano-tbl thead tr:last-of-type th,.nano-tbl tfoot tr:last-of-type td,.nano-tbl tfoot tr:last-of-type th{-webkit-border-after:var(--border-tint-style);border-block-end:var(--border-tint-style)}.nano-tbl .unlimited-width{max-width:none}";
624
+ const tableCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}@charset \"UTF-8\";nano-table{display:table;width:100%;--max-col-width:200px;--color:var(--nano-color-mediumgrey, #68767e);--font-size:0.87rem;--cell-line-height:1.5;--border-color:var(--nano-color-palegrey, #b5aea7);--border-style:1px solid var(--border-color);--border-tint-color:var(--nano-color-blue, #90c6e7);--border-tint-style:2px solid var(--border-tint-color);--cell-bg-rgb:var(--nano-color-white-rgb, 255 255 255);--head-bg-rgb:var(--cell-bg-rgb);--foot-bg-rgb:var(--cell-bg-rgb);--th-row-bg-rgb:var(--cell-bg-rgb);--ordered-bg-rgb:var(--nano-color-offwhite-rgb, 249 249 251);--td-padding:0.5rem 0.625rem 0.4125rem;--th-padding:0.875rem 0.625rem 0.6875rem;--head-th-padding:var(--th-padding);--foot-th-padding:var(--td-padding);--bookend-col-padding:2rem}.nano-tbl{color:var(--color);text-align:start;width:100%;font-size:var(--font-size);border-spacing:0 0;border-collapse:separate;background:rgb(var(--cell-bg-rgb));-webkit-border-end:1px solid transparent;border-inline-end:1px solid transparent}.nano-tbl__top-anchor{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nano-tbl__ordered{background-color:var(--ordered-bg);-webkit-border-start:var(--border-style);border-inline-start:var(--border-style);-webkit-border-end:var(--border-style);border-inline-end:var(--border-style)}.nano-tbl__order-btn{padding:0;border:none;outline:none;font:inherit;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;color:inherit;display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%}.nano-tbl__status-icons{margin-inline:auto 10px;display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px}.nano-tbl__progress-bar{font-size:0.2rem;position:sticky;inset-block-start:0;inset-inline:0;z-index:10;-webkit-transition:scale 0.25s;transition:scale 0.25s;scale:0;width:100%;height:0}.nano-tbl__progress-bar--show{scale:1;height:auto}.nano-tbl__caption--hide{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nano-tbl__td,.nano-tbl__th{line-height:var(--cell-line-height);text-align:start;-webkit-border-after:var(--border-style);border-block-end:var(--border-style);max-width:var(--max-col-width);background-color:rgb(var(--cell-bg-rgb))}@media (min-width: 768px){.nano-tbl__td:first-child .nano-tbl__cell-content,.nano-tbl__th:first-child .nano-tbl__cell-content{-webkit-padding-start:var(--bookend-col-padding) !important;padding-inline-start:var(--bookend-col-padding) !important}.nano-tbl__td:last-child .nano-tbl__cell-content,.nano-tbl__th:last-child .nano-tbl__cell-content{-webkit-padding-end:var(--bookend-col-padding) !important;padding-inline-end:var(--bookend-col-padding) !important}}thead .nano-tbl__td,thead .nano-tbl__th{font-weight:800;background:rgba(var(--head-bg-rgb), 90%)}thead .nano-tbl__td .nano-tbl__cell-content,thead .nano-tbl__th .nano-tbl__cell-content{padding:var(--head-th-padding)}tfoot .nano-tbl__td,tfoot .nano-tbl__th{font-weight:800;-webkit-border-after:none;border-block-end:none;background:rgba(var(--foot-bg-rgb), 90%)}tfoot .nano-tbl__td .nano-tbl__cell-content,tfoot .nano-tbl__th .nano-tbl__cell-content{padding:var(--foot-th-padding)}.nano-tbl__td.nano-tbl__ordered,.nano-tbl__th.nano-tbl__ordered{background-color:rgba(var(--ordered-bg-rgb), 0.8) !important}.nano-tbl__cell-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:var(--td-padding)}.nano-tbl tbody{will-change:scroll-position;visibility:visible}.nano-tbl tbody.nano-tbl__inactive{visibility:hidden}.nano-tbl th[scope=row]{font-weight:800;max-width:65vw;margin:0}.nano-tbl__pin{position:sticky;z-index:1}.nano-tbl__pin--start{inset-inline:-1px auto;-webkit-transition:max-width 0.25s;transition:max-width 0.25s}.nano-tbl__pin--start::after{content:\"\";position:absolute;inset:0;-webkit-box-shadow:5px 0 4px 0 rgba(0, 0, 0, 0.2);box-shadow:5px 0 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.nano-tbl__pinned--start .nano-tbl__pin--start{z-index:2}@media (max-width: 576px){.nano-tbl__pinned--start .nano-tbl__pin--start{max-width:25vw !important}}.nano-tbl__pinned--start .nano-tbl__pin--start::after{opacity:1}.nano-tbl__pin--end{inset-inline:auto -1px;max-width:min(50vw, 200px);}.nano-tbl__pin--end::after{content:\"\";position:absolute;inset:0;-webkit-box-shadow:-5px 0 4px 0 rgba(0, 0, 0, 0.2);box-shadow:-5px 0 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.nano-tbl__pinned--end .nano-tbl__pin--end{z-index:3}.nano-tbl__pinned--end .nano-tbl__pin--end::after{opacity:1}@media (max-width: 576px){.nano-tbl__pin--start~.nano-tbl__pin--end{inset-inline:auto auto}.nano-tbl__pin--start~.nano-tbl__pin--end::after{display:none}}.nano-tbl__pin--top{inset-block:-1px auto}.nano-tbl__pinned--top .nano-tbl__pin--top{z-index:4}.nano-tbl__pin--bottom{inset-block:auto -1px}.nano-tbl__pinned--bottom .nano-tbl__pin--bottom{z-index:5;-webkit-border-before:var(--border-tint-style);border-block-start:var(--border-tint-style)}.nano-tbl__pinned--top.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:6}.nano-tbl__pinned--top.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:6}.nano-tbl__pinned--bottom.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:6}.nano-tbl__pinned--bottom.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:6}.nano-tbl thead tr:last-of-type td,.nano-tbl thead tr:last-of-type th,.nano-tbl tfoot tr:last-of-type td,.nano-tbl tfoot tr:last-of-type th{-webkit-border-after:var(--border-tint-style);border-block-end:var(--border-tint-style)}.nano-tbl .unlimited-width{max-width:none}.nano-tbl__spinner{font-size:1.5rem;-webkit-transition:scale 0.25s;transition:scale 0.25s;scale:0;padding:0.5rem;position:absolute;inset-block-end:0;inset-inline-start:calc(50% - 0.75rem);z-index:-1}.nano-tbl__spinner--show{scale:1;position:sticky}.nano-tbl nano-skeleton{line-height:var(--cell-line-height)}";
596
625
 
597
626
  let id = 0;
598
627
  const Table = class {
@@ -606,6 +635,9 @@ const Table = class {
606
635
  this.nanoTblAfterFilter = index.createEvent(this, "nanoTblAfterFilter", 7);
607
636
  this.nanoTblBeforeSearch = index.createEvent(this, "nanoTblBeforeSearch", 7);
608
637
  this.nanoTblAfterSearch = index.createEvent(this, "nanoTblAfterSearch", 7);
638
+ this.debounceSetLoading = (l) => {
639
+ this._loading = l;
640
+ };
609
641
  this.renderId = 'tbl-' + id++;
610
642
  this.filters = [];
611
643
  this.currentFilters = '';
@@ -623,8 +655,10 @@ const Table = class {
623
655
  * @returns A promise
624
656
  */
625
657
  this.sortStart = async (order, column, element) => {
658
+ // did order change?
626
659
  if (this.currentSort === order + ':' + column)
627
660
  return;
661
+ this.loading = true;
628
662
  const sortEvent = this.nanoTblBeforeSort.emit({ column: column, order });
629
663
  if (sortEvent.defaultPrevented)
630
664
  return;
@@ -649,10 +683,13 @@ const Table = class {
649
683
  console.warn('sort failed', e);
650
684
  this.currentSort = '';
651
685
  }
686
+ finally {
687
+ this.loading = false;
688
+ }
652
689
  };
653
690
  /**
654
- * Attaches an intersection observer to each rendered tbody elements
655
- * shows / hides intersecting blocks' and sets heights for when their hidden
691
+ * Attaches an intersection observer to each rendered tbody element
692
+ * shows / hides intersecting blocks' and sets heights for when they're hidden
656
693
  * @param el - the tbody element to observe
657
694
  * @param blockIndex - the rendering tbody we're attaching the IO to
658
695
  */
@@ -667,8 +704,8 @@ const Table = class {
667
704
  // The Intersection Observer (IO) fires in an incorrect order when the scrolling is very fast
668
705
  // i.e. we go past blocks 3, 2, 1 and land on 0, but 3 can fire as 'intersecting' after 0.
669
706
  // To fix that, we check - for realsies - if the block IS visible.
670
- // BUT that test is not as sensitive to a block being visible as the IO,
671
- // so doesn't always fire if scrolling slowing
707
+ // BUT that test is not as sensitive to a block being visible via the IO,
708
+ // so doesn't always fire if scrolling slowly
672
709
  // *sigh*
673
710
  index.readTask(() => {
674
711
  if (this.scrollSpeed < 100 || isInViewport(el, 0.01)) {
@@ -685,7 +722,12 @@ const Table = class {
685
722
  }
686
723
  });
687
724
  }
688
- }, { threshold: [0] });
725
+ }, {
726
+ threshold: [0],
727
+ root: this.scrollParent === document.scrollingElement
728
+ ? null
729
+ : this.scrollParent,
730
+ });
689
731
  blockIo.observe(el);
690
732
  this.blockIos.set(el, blockIo);
691
733
  };
@@ -697,7 +739,9 @@ const Table = class {
697
739
  this.type = 'table';
698
740
  this.caption = undefined;
699
741
  this.showCaption = false;
700
- this.rows = [];
742
+ this._loading = true;
743
+ this.placeholderSize = 5;
744
+ this.rows = undefined;
701
745
  this.columns = [];
702
746
  this.headRender = { pinned: 'top' };
703
747
  this.rowRender = undefined;
@@ -710,9 +754,29 @@ const Table = class {
710
754
  this.blocks = [];
711
755
  this.activeBlocks = [0, 1, 2];
712
756
  this.measureHeight = 0;
757
+ this.debounceSetLoading = throttle.debounce(this.debounceSetLoading.bind(this), 50);
758
+ }
759
+ /** Will show a loading state when true.
760
+ * Will be shown automatically if `rows` is a promise waiting to resolve
761
+ * or when performing custom filtering or sorting */
762
+ get loading() {
763
+ return this._loading;
764
+ }
765
+ set loading(l) {
766
+ this.debounceSetLoading(l);
713
767
  }
714
768
  handleRowsChange() {
715
- storeSetData(this.host, this.rows);
769
+ if (!this.rows)
770
+ return;
771
+ this.loading = true;
772
+ Promise.resolve(this.rows).then(async (rows) => {
773
+ await storeSetData(this.host, rows);
774
+ if (!this.isReady) {
775
+ await this.columnInit();
776
+ this.setInitialBlockDimension();
777
+ }
778
+ this.loading = false;
779
+ });
716
780
  }
717
781
  handleColsChange() {
718
782
  storeSetConfig(this.host, this.columns);
@@ -760,6 +824,8 @@ const Table = class {
760
824
  }
761
825
  // uses the first 'tr' of an active block as our yard stick
762
826
  set measureEle(el) {
827
+ if (!el)
828
+ return;
763
829
  this.measureHeight = el.getBoundingClientRect().height;
764
830
  this.unitHeight =
765
831
  el.querySelector('tr')?.getBoundingClientRect().height || this.unitHeight;
@@ -806,6 +872,7 @@ const Table = class {
806
872
  this.nanoTblAfterSort.emit({ column: column, order });
807
873
  }
808
874
  async searchStart() {
875
+ this.loading = true;
809
876
  const sortEvent = this.nanoTblBeforeSearch.emit({ term: this.searchTerm });
810
877
  if (sortEvent.defaultPrevented)
811
878
  return;
@@ -815,7 +882,12 @@ const Table = class {
815
882
  await storeSearch(this.host, this.searchTerm);
816
883
  this.nanoTblAfterSearch.emit({ term: this.searchTerm });
817
884
  }
818
- catch (e) { }
885
+ catch (e) {
886
+ console.warn('search failed', e);
887
+ }
888
+ finally {
889
+ this.loading = false;
890
+ }
819
891
  }
820
892
  async filterStart(filters, additive = true) {
821
893
  if (filters) {
@@ -831,6 +903,7 @@ const Table = class {
831
903
  }
832
904
  if (this.currentFilters === JSON.stringify(this.filters))
833
905
  return;
906
+ this.loading = true;
834
907
  const sortEvent = this.nanoTblBeforeFilter.emit({ filters: this.filters });
835
908
  if (sortEvent.defaultPrevented)
836
909
  return;
@@ -852,7 +925,12 @@ const Table = class {
852
925
  await storeFilter(this.host, this.filters);
853
926
  this.filterComplete();
854
927
  }
855
- catch (e) { }
928
+ catch (e) {
929
+ console.warn('filter failed', e);
930
+ }
931
+ finally {
932
+ this.loading = false;
933
+ }
856
934
  }
857
935
  filterComplete() {
858
936
  this.columns = this.columns.map((c) => {
@@ -866,16 +944,20 @@ const Table = class {
866
944
  /** Scrolls to the top immediately - used whilst sorting / filtering */
867
945
  scrollToTop(element) {
868
946
  const scrollBehaviour = this.scrollParent.style?.scrollBehavior;
947
+ const scrollX = this.scrollParent.scrollLeft;
869
948
  this.scrollParent.style.scrollBehavior = 'auto';
870
- this.host.scrollIntoView();
949
+ if (this.topAnchorEle && !isInViewport(this.topAnchorEle, 0.1))
950
+ this.topAnchorEle.scrollIntoView();
871
951
  if (element)
872
- element.scrollIntoView();
952
+ element.scrollIntoView({ block: 'start' });
953
+ if (scrollX)
954
+ this.scrollParent.scrollLeft = scrollX;
873
955
  if (scrollBehaviour)
874
956
  this.scrollParent.style.scrollBehavior = scrollBehaviour;
875
957
  }
876
958
  setMeasureElement() {
877
959
  index.readTask(() => {
878
- this.measureEle = this.blockElements.find((b) => !b.classList?.contains(`${CSSNAMESPACE}__inactive`));
960
+ this.measureEle = this.blockElements.find((b) => !b?.classList?.contains(`${CSSNAMESPACE}__inactive`));
879
961
  });
880
962
  }
881
963
  /**
@@ -900,11 +982,6 @@ const Table = class {
900
982
  }
901
983
  if (i === this.blockElements.length - 1)
902
984
  resolve();
903
- // const heightGuess = this.getBlockHeight(this.blockElements.indexOf(el));
904
- // writeTask(() => {
905
- // el.style.height = heightGuess;
906
- // if (i === this.blockElements.length - 1) resolve();
907
- // });
908
985
  });
909
986
  });
910
987
  });
@@ -988,8 +1065,8 @@ const Table = class {
988
1065
  if (!el)
989
1066
  return;
990
1067
  const height = el.getBoundingClientRect().height;
991
- // cache height to our block heights
992
- // array for subsequent renders
1068
+ // cache height to our block heights array
1069
+ // for subsequent renders
993
1070
  const fBhI = this.blockHeights.findIndex((bh) => bh.blockIndex === blockIndex);
994
1071
  if (fBhI > 0) {
995
1072
  this.blockHeights[fBhI] = { height, blockIndex };
@@ -1008,8 +1085,8 @@ const Table = class {
1008
1085
  }
1009
1086
  // Component lifecycle
1010
1087
  async componentWillLoad() {
1011
- this.store = await generateStore(this.host, this.rows, this.columns);
1012
- await this.columnInit();
1088
+ this.store = await generateStore(this.host, this.columns, this.scrollParent);
1089
+ await this.handleRowsChange();
1013
1090
  this.processSlots();
1014
1091
  this.setBlocks();
1015
1092
  this.store.data.onChange('rows', () => this.setBlocks());
@@ -1035,9 +1112,17 @@ const Table = class {
1035
1112
  }
1036
1113
  render() {
1037
1114
  this.blockElements = [];
1038
- return (index.h(index.Host, null, index.h("div", { "aria-labelledby": 'table-caption-' + this.renderId, tabindex: this.type === 'grid' ? '0' : undefined }, index.h("table", { role: this.type === 'grid' ? 'grid' : undefined, "aria-readonly": this.type === 'table' ? 'true' : undefined, "aria-rowcount": this.store.data.state.rows.length, "aria-colcount": this.store.config.state.columns.length, class: `${CSSNAMESPACE}`, ref: (tbl) => (this.tableEle = tbl) }, index.h("caption", { class: `${CSSNAMESPACE}__caption`, id: 'table-caption-' + this.renderId }, index.h("slot", { name: "caption" }, this.caption)), index.h("thead", null, index.h(TableHeadFootRow, { rowRenderer: this.headRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
1115
+ return (index.h(index.Host, null, index.h("div", { class: `${CSSNAMESPACE}__top-anchor`, ref: (a) => (this.topAnchorEle = a) }, "\u00A0"), index.h("div", { "aria-labelledby": 'table-caption-' + this.renderId, tabindex: this.type === 'grid' ? '0' : undefined }, index.h("nano-progress-bar", { indeterminate: true, class: {
1116
+ [`${CSSNAMESPACE}__progress-bar`]: true,
1117
+ [`${CSSNAMESPACE}__progress-bar--show`]: this.loading,
1118
+ } }), index.h("table", { role: this.type === 'grid' ? 'grid' : undefined, "aria-readonly": this.type === 'table' ? 'true' : undefined, "aria-rowcount": this.store.data.state.rows.length, "aria-colcount": this.store.config.state.columns.length, class: `${CSSNAMESPACE}`, ref: (tbl) => (this.tableEle = tbl) }, index.h("caption", { class: {
1119
+ [`${CSSNAMESPACE}__caption`]: true,
1120
+ [`${CSSNAMESPACE}__caption--hide`]: !this.showCaption,
1121
+ }, id: 'table-caption-' + this.renderId }, index.h("slot", { name: "caption" }, this.caption)), index.h("thead", null, index.h(TableHeadFootRow, { rowRenderer: this.headRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
1039
1122
  index.h(TableColHead, { column: colModel, headRenderer: this.headRender, onColumnOrderClick: this.sortStart, onColumnPinned: this.handleColumnPinned }),
1040
- ]))), this.blocks.map((block, blockIndex) => (index.h("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
1123
+ ]))), this.loading &&
1124
+ !this.blocks.length &&
1125
+ [...Array(10).keys()].map((rowIndex) => (index.h("tr", null, this.store.config.state.columns.map((_colModel, colIndex) => (index.h(TableCell, { rowIndex: rowIndex, colIndex: colIndex, nestedContent: index.h("nano-skeleton", null) })))))), this.blocks.map((block, blockIndex) => (index.h("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
1041
1126
  this.blockElements.push(tb);
1042
1127
  this.setupBlockIO(tb, blockIndex);
1043
1128
  }, class: {
@@ -1048,9 +1133,12 @@ const Table = class {
1048
1133
  return (index.h(TableRow, { rowRenderer: this.rowRender, row: row }, this.store.config.state.columns.map((_colModel, colIndex) => (index.h(TableCell, { rowIndex: rowIndex, colIndex: colIndex })))));
1049
1134
  })) : (index.h("td", { colSpan: this.store.config.state.columns.length, style: {
1050
1135
  height: this.getBlockHeight(blockIndex),
1051
- } }))))), (this.showFooter || !!this.footRender) && (index.h("tfoot", null, index.h(TableHeadFootRow, { rowRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
1136
+ } }))))), this.showFooter && (index.h("tfoot", null, index.h(TableHeadFootRow, { rowRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
1052
1137
  index.h(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }),
1053
- ]))))))));
1138
+ ]))))), !!this.blocks.length && (index.h("nano-spinner", { type: "circle", class: {
1139
+ [`${CSSNAMESPACE}__spinner`]: true,
1140
+ [`${CSSNAMESPACE}__spinner--show`]: this.loading,
1141
+ } })))));
1054
1142
  }
1055
1143
  get host() { return index.getElement(this); }
1056
1144
  static get watchers() { return {
@@ -1064,4 +1152,4 @@ Table.style = tableCss;
1064
1152
  exports.Table = Table;
1065
1153
  exports.createWorker = createWorker;
1066
1154
 
1067
- //# sourceMappingURL=nano-table-8a898621.js.map
1155
+ //# sourceMappingURL=nano-table-844394ad.js.map