@nanoporetech-digital/components 3.5.1 → 3.7.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 (226) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/cjs/{date-utils-c581f187.js → date-utils-42fbcb42.js} +5 -3
  3. package/dist/cjs/date-utils-42fbcb42.js.map +1 -0
  4. package/dist/cjs/index-41582c2a.js +2 -6
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/nano-components.cjs.js +1 -1
  7. package/dist/cjs/nano-datalist_3.cjs.entry.js +10 -5
  8. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  9. package/dist/cjs/nano-date-input.cjs.entry.js +1 -1
  10. package/dist/cjs/nano-date-picker.cjs.entry.js +1 -1
  11. package/dist/cjs/nano-demo.cjs.entry.js +3 -2
  12. package/dist/cjs/nano-demo.cjs.entry.js.map +1 -1
  13. package/dist/cjs/nano-dropdown.cjs.entry.js +5 -2
  14. package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nano-file-upload.cjs.entry.js +4 -0
  16. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +1 -2
  18. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-icon-button.cjs.entry.js +1 -1
  20. package/dist/cjs/nano-icon-button.cjs.entry.js.map +1 -1
  21. package/dist/cjs/nano-icon.cjs.entry.js.map +1 -1
  22. package/dist/cjs/{nano-tooltip.cjs.entry.js → nano-progress-bar_2.cjs.entry.js} +28 -4
  23. package/dist/cjs/nano-progress-bar_2.cjs.entry.js.map +1 -0
  24. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +74 -12
  25. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  26. package/dist/cjs/nano-sticker.cjs.entry.js +2 -0
  27. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  28. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
  29. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  30. package/dist/cjs/{nano-table-067e0c12.js → nano-table-56eb29c1.js} +172 -88
  31. package/dist/cjs/nano-table-56eb29c1.js.map +1 -0
  32. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  33. package/dist/cjs/{table.worker-a4d75c46.js → table.worker-b1c53001.js} +3 -3
  34. package/dist/cjs/table.worker-b1c53001.js.map +1 -0
  35. package/dist/{esm/table.worker-e9fb087e.js → cjs/table.worker-e2f9ccfa.js} +1 -1
  36. package/dist/collection/components/datalist/datalist.js +3 -3
  37. package/dist/collection/components/datalist/datalist.js.map +1 -1
  38. package/dist/collection/components/demo/demo.js +3 -2
  39. package/dist/collection/components/demo/demo.js.map +1 -1
  40. package/dist/collection/components/dropdown/dropdown.js +5 -2
  41. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  42. package/dist/collection/components/file-upload/file-upload.js +4 -0
  43. package/dist/collection/components/file-upload/file-upload.js.map +1 -1
  44. package/dist/collection/components/icon/icon.js +1 -1
  45. package/dist/collection/components/icon/icon.js.map +1 -1
  46. package/dist/collection/components/icon-button/icon-button.js +1 -1
  47. package/dist/collection/components/icon-button/icon-button.js.map +1 -1
  48. package/dist/collection/components/menu/menu.js +8 -3
  49. package/dist/collection/components/menu/menu.js.map +1 -1
  50. package/dist/collection/components/nav-item/nav-item.js +1 -2
  51. package/dist/collection/components/nav-item/nav-item.js.map +1 -1
  52. package/dist/collection/components/resize-observe/resize-observe.js +118 -14
  53. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  54. package/dist/collection/components/sticker/sticker.js +2 -0
  55. package/dist/collection/components/sticker/sticker.js.map +1 -1
  56. package/dist/collection/components/table/table-interface.js.map +1 -1
  57. package/dist/collection/components/table/table.cell.js +10 -5
  58. package/dist/collection/components/table/table.cell.js.map +1 -1
  59. package/dist/collection/components/table/table.css +9 -23
  60. package/dist/collection/components/table/table.js +236 -93
  61. package/dist/collection/components/table/table.js.map +1 -1
  62. package/dist/collection/components/table/table.row.js +19 -12
  63. package/dist/collection/components/table/table.row.js.map +1 -1
  64. package/dist/collection/components/table/table.store.js +1 -1
  65. package/dist/collection/components/table/table.store.js.map +1 -1
  66. package/dist/collection/components/table/table.utils.js +4 -4
  67. package/dist/collection/components/table/table.utils.js.map +1 -1
  68. package/dist/collection/components/table/table.worker.js +8 -0
  69. package/dist/collection/components/table/table.worker.js.map +1 -1
  70. package/dist/collection/components/tabs/tab-group.js +1 -1
  71. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  72. package/dist/collection/components/tooltip/tooltip.js +25 -3
  73. package/dist/collection/components/tooltip/tooltip.js.map +1 -1
  74. package/dist/collection/utils/date-utils.js +4 -2
  75. package/dist/collection/utils/date-utils.js.map +1 -1
  76. package/dist/collection/utils/testing/index.js +15 -8
  77. package/dist/collection/utils/testing/index.js.map +1 -1
  78. package/dist/components/datalist.js +3 -3
  79. package/dist/components/datalist.js.map +1 -1
  80. package/dist/components/date-picker.js +4 -2
  81. package/dist/components/date-picker.js.map +1 -1
  82. package/dist/components/dropdown.js +5 -2
  83. package/dist/components/dropdown.js.map +1 -1
  84. package/dist/components/icon-button.js +1 -1
  85. package/dist/components/icon-button.js.map +1 -1
  86. package/dist/components/icon.js.map +1 -1
  87. package/dist/components/menu.js +8 -3
  88. package/dist/components/menu.js.map +1 -1
  89. package/dist/components/nano-demo.js +21 -14
  90. package/dist/components/nano-demo.js.map +1 -1
  91. package/dist/components/nano-file-upload.js +4 -0
  92. package/dist/components/nano-file-upload.js.map +1 -1
  93. package/dist/components/nano-tab-group.js +1 -1
  94. package/dist/components/nano-tab-group.js.map +1 -1
  95. package/dist/components/nav-item.js +1 -2
  96. package/dist/components/nav-item.js.map +1 -1
  97. package/dist/components/resize-observe.js +80 -14
  98. package/dist/components/resize-observe.js.map +1 -1
  99. package/dist/components/sticker.js +2 -0
  100. package/dist/components/sticker.js.map +1 -1
  101. package/dist/components/table.js +196 -103
  102. package/dist/components/table.js.map +1 -1
  103. package/dist/components/table.worker.js +1 -1
  104. package/dist/components/tooltip.js +6 -3
  105. package/dist/components/tooltip.js.map +1 -1
  106. package/dist/custom-elements/index.js +285 -120
  107. package/dist/custom-elements/index.js.map +1 -1
  108. package/dist/esm/{date-utils-bb82b123.js → date-utils-6b7a6e1f.js} +5 -3
  109. package/dist/esm/date-utils-6b7a6e1f.js.map +1 -0
  110. package/dist/esm/index-3c280603.js +2 -6
  111. package/dist/esm/loader.js +1 -1
  112. package/dist/esm/nano-components.js +1 -1
  113. package/dist/esm/nano-datalist_3.entry.js +10 -5
  114. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  115. package/dist/esm/nano-date-input.entry.js +1 -1
  116. package/dist/esm/nano-date-picker.entry.js +1 -1
  117. package/dist/esm/nano-demo.entry.js +3 -2
  118. package/dist/esm/nano-demo.entry.js.map +1 -1
  119. package/dist/esm/nano-dropdown.entry.js +5 -2
  120. package/dist/esm/nano-dropdown.entry.js.map +1 -1
  121. package/dist/esm/nano-file-upload.entry.js +4 -0
  122. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  123. package/dist/esm/nano-global-nav-user-profile_3.entry.js +1 -2
  124. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  125. package/dist/esm/nano-icon-button.entry.js +1 -1
  126. package/dist/esm/nano-icon-button.entry.js.map +1 -1
  127. package/dist/esm/nano-icon.entry.js.map +1 -1
  128. package/dist/esm/{nano-tooltip.entry.js → nano-progress-bar_2.entry.js} +29 -6
  129. package/dist/esm/nano-progress-bar_2.entry.js.map +1 -0
  130. package/dist/esm/nano-resize-observe_2.entry.js +74 -12
  131. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  132. package/dist/esm/nano-sticker.entry.js +2 -0
  133. package/dist/esm/nano-sticker.entry.js.map +1 -1
  134. package/dist/esm/nano-tab-group.entry.js +1 -1
  135. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  136. package/dist/esm/{nano-table-95921f46.js → nano-table-38f3c797.js} +172 -88
  137. package/dist/esm/nano-table-38f3c797.js.map +1 -0
  138. package/dist/esm/nano-table.entry.js +1 -1
  139. package/dist/{nano-components/p-e9fb087e.js → esm/table.worker-e2f9ccfa.js} +1 -1
  140. package/dist/esm/{table.worker-769f1441.js → table.worker-e57fffd8.js} +3 -3
  141. package/dist/esm/table.worker-e57fffd8.js.map +1 -0
  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-0b29b22c.js +5 -0
  145. package/dist/nano-components/{p-26905bca.js.map → p-0b29b22c.js.map} +0 -0
  146. package/dist/nano-components/p-135fed16.entry.js +5 -0
  147. package/dist/nano-components/p-135fed16.entry.js.map +1 -0
  148. package/dist/nano-components/{p-2cb4615b.entry.js → p-2a97ef51.entry.js} +2 -2
  149. package/dist/nano-components/{p-2cb4615b.entry.js.map → p-2a97ef51.entry.js.map} +0 -0
  150. package/dist/nano-components/{p-751927d1.entry.js → p-3f25fc76.entry.js} +2 -2
  151. package/dist/nano-components/p-3f25fc76.entry.js.map +1 -0
  152. package/dist/nano-components/p-5d149792.entry.js +5 -0
  153. package/dist/nano-components/p-5d149792.entry.js.map +1 -0
  154. package/dist/nano-components/p-69e5a37d.entry.js.map +1 -1
  155. package/dist/nano-components/p-6ad194e4.entry.js +5 -0
  156. package/dist/nano-components/p-6ad194e4.entry.js.map +1 -0
  157. package/dist/nano-components/{p-46b348b7.entry.js → p-6cb77d5c.entry.js} +2 -2
  158. package/dist/nano-components/{p-46b348b7.entry.js.map → p-6cb77d5c.entry.js.map} +0 -0
  159. package/dist/nano-components/{p-85cfb0af.entry.js → p-9a4297e1.entry.js} +2 -2
  160. package/dist/nano-components/p-9a4297e1.entry.js.map +1 -0
  161. package/dist/nano-components/{p-d1c8eca4.entry.js → p-b55ffa92.entry.js} +2 -2
  162. package/dist/nano-components/p-b55ffa92.entry.js.map +1 -0
  163. package/dist/nano-components/{p-fb12a45d.entry.js → p-ba9cd047.entry.js} +2 -2
  164. package/dist/nano-components/{p-fb12a45d.entry.js.map → p-ba9cd047.entry.js.map} +0 -0
  165. package/dist/nano-components/p-cc5e7acb.entry.js +5 -0
  166. package/dist/nano-components/p-cc5e7acb.entry.js.map +1 -0
  167. package/dist/nano-components/p-cecb9af1.js +5 -0
  168. package/dist/nano-components/p-cecb9af1.js.map +1 -0
  169. package/dist/nano-components/p-d26b97d1.js +5 -0
  170. package/dist/nano-components/p-d26b97d1.js.map +1 -0
  171. package/dist/nano-components/{p-601e18d5.entry.js → p-d5303933.entry.js} +2 -2
  172. package/dist/nano-components/p-d5303933.entry.js.map +1 -0
  173. package/dist/nano-components/{p-4f0e14b5.entry.js → p-d565991d.entry.js} +2 -2
  174. package/dist/nano-components/p-d565991d.entry.js.map +1 -0
  175. package/dist/nano-components/{p-244223f0.entry.js → p-dc50b93c.entry.js} +2 -2
  176. package/dist/nano-components/p-dc50b93c.entry.js.map +1 -0
  177. package/dist/{cjs/table.worker-e9fb087e.js → nano-components/p-e2f9ccfa.js} +1 -1
  178. package/dist/types/components/icon/icon.d.ts +1 -1
  179. package/dist/types/components/menu/menu.d.ts +1 -0
  180. package/dist/types/components/resize-observe/resize-observe.d.ts +20 -1
  181. package/dist/types/components/table/table-interface.d.ts +35 -24
  182. package/dist/types/components/table/table.cell.d.ts +1 -1
  183. package/dist/types/components/table/table.d.ts +49 -15
  184. package/dist/types/components/table/table.row.d.ts +1 -1
  185. package/dist/types/components/table/table.store.d.ts +1 -1
  186. package/dist/types/components/table/table.utils.d.ts +1 -1
  187. package/dist/types/components/table/table.worker.d.ts +3 -3
  188. package/dist/types/components/tooltip/tooltip.d.ts +5 -0
  189. package/dist/types/components.d.ts +59 -14
  190. package/dist/types/utils/date-utils.d.ts +1 -1
  191. package/docs-json.json +179 -31
  192. package/docs-vscode.json +26 -3
  193. package/package.json +2 -2
  194. package/dist/cjs/date-utils-c581f187.js.map +0 -1
  195. package/dist/cjs/nano-progress-bar.cjs.entry.js +0 -33
  196. package/dist/cjs/nano-progress-bar.cjs.entry.js.map +0 -1
  197. package/dist/cjs/nano-table-067e0c12.js.map +0 -1
  198. package/dist/cjs/nano-tooltip.cjs.entry.js.map +0 -1
  199. package/dist/cjs/table.worker-a4d75c46.js.map +0 -1
  200. package/dist/esm/date-utils-bb82b123.js.map +0 -1
  201. package/dist/esm/nano-progress-bar.entry.js +0 -29
  202. package/dist/esm/nano-progress-bar.entry.js.map +0 -1
  203. package/dist/esm/nano-table-95921f46.js.map +0 -1
  204. package/dist/esm/nano-tooltip.entry.js.map +0 -1
  205. package/dist/esm/table.worker-769f1441.js.map +0 -1
  206. package/dist/nano-components/p-15a60f7e.js +0 -5
  207. package/dist/nano-components/p-15a60f7e.js.map +0 -1
  208. package/dist/nano-components/p-244223f0.entry.js.map +0 -1
  209. package/dist/nano-components/p-26905bca.js +0 -5
  210. package/dist/nano-components/p-4f0e14b5.entry.js.map +0 -1
  211. package/dist/nano-components/p-601e18d5.entry.js.map +0 -1
  212. package/dist/nano-components/p-751927d1.entry.js.map +0 -1
  213. package/dist/nano-components/p-85cfb0af.entry.js.map +0 -1
  214. package/dist/nano-components/p-8fc2a38d.js +0 -5
  215. package/dist/nano-components/p-8fc2a38d.js.map +0 -1
  216. package/dist/nano-components/p-9e8c9bac.entry.js +0 -5
  217. package/dist/nano-components/p-9e8c9bac.entry.js.map +0 -1
  218. package/dist/nano-components/p-a2e38472.entry.js +0 -5
  219. package/dist/nano-components/p-a2e38472.entry.js.map +0 -1
  220. package/dist/nano-components/p-b9c8b99f.entry.js +0 -5
  221. package/dist/nano-components/p-b9c8b99f.entry.js.map +0 -1
  222. package/dist/nano-components/p-d1c8eca4.entry.js.map +0 -1
  223. package/dist/nano-components/p-f43d1d8e.entry.js +0 -5
  224. package/dist/nano-components/p-f43d1d8e.entry.js.map +0 -1
  225. package/dist/nano-components/p-feb9f164.entry.js +0 -5
  226. package/dist/nano-components/p-feb9f164.entry.js.map +0 -1
@@ -1,15 +1,16 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- import { consoleError, getElement, getRenderingRef, h, Fragment, proxyCustomElement, HTMLElement, createEvent, readTask, Host, Build } from '@stencil/core/internal/client';
4
+ import { consoleError, getElement, getRenderingRef, h, Fragment, proxyCustomElement, HTMLElement, createEvent, readTask, Build, Host } from '@stencil/core/internal/client';
5
5
  import { a as cyrb53 } from './math.js';
6
6
  import { d as debounce } from './throttle.js';
7
7
  import { c as createStore } from './index2.js';
8
- import { d as defineCustomElement$5 } from './icon.js';
9
- import { d as defineCustomElement$4 } from './progress-bar.js';
10
- import { d as defineCustomElement$3 } from './resize-observe.js';
11
- import { d as defineCustomElement$2 } from './skeleton.js';
12
- import { d as defineCustomElement$1 } from './spinner.js';
8
+ import { d as defineCustomElement$6 } from './icon.js';
9
+ import { d as defineCustomElement$5 } from './progress-bar.js';
10
+ import { d as defineCustomElement$4 } from './resize-observe.js';
11
+ import { d as defineCustomElement$3 } from './skeleton.js';
12
+ import { d as defineCustomElement$2 } from './spinner.js';
13
+ import { d as defineCustomElement$1 } from './tooltip.js';
13
14
 
14
15
  const CSSNAMESPACE = 'nano-tbl';
15
16
 
@@ -213,7 +214,7 @@ function storeSetData(host, rows) {
213
214
  row[colName] = Number(coerceDate);
214
215
  });
215
216
  row['__index'] = i;
216
- row['__uuid'] = cyrb53(Object.values(row).join());
217
+ row['__uuid'] = cyrb53(cols.map((c) => row[c.prop]).join());
217
218
  return row;
218
219
  });
219
220
  store.data.state.rows = rows;
@@ -275,7 +276,7 @@ function colDataModel(rowIndex, colIndex) {
275
276
  const column = columns[colIndex];
276
277
  const prop = column?.prop;
277
278
  const rowModel = rows[rowIndex];
278
- const cellModel = rowModel[columns[colIndex].prop];
279
+ const cellModel = rowModel ? rowModel[columns[colIndex].prop] : '';
279
280
  return {
280
281
  prop,
281
282
  cellModel,
@@ -292,9 +293,9 @@ function colDataModel(rowIndex, colIndex) {
292
293
  function rowDataModel(rowIndex) {
293
294
  const store = fetchStores();
294
295
  const rows = store.data.state.rows;
295
- const row = rows[rowIndex];
296
+ const rowModel = rows[rowIndex];
296
297
  return {
297
- row,
298
+ rowModel,
298
299
  rowIndex,
299
300
  };
300
301
  }
@@ -361,7 +362,7 @@ function mergeCellProperties(rowIndex, colIndex, defaultProps) {
361
362
  * @returns - a JSX node
362
363
  */
363
364
  function colheadFootRender(col) {
364
- const tpl = col?.colTemplate;
365
+ const tpl = col?.columnTemplate;
365
366
  return tpl ? (tpl(h, col)) : (h(Fragment, null, col.title));
366
367
  }
367
368
  const stickyHIOs = new WeakMap();
@@ -724,7 +725,7 @@ function cellRender(rowIndex, colIndex) {
724
725
  : d;
725
726
  }
726
727
  }
727
- return tpl ? (tpl(h, model)) : (h(Fragment, null, model.cellModel?.toString()));
728
+ return tpl ? (tpl(h, model)) : model.cellModel ? (h(Fragment, null, model.cellModel?.toString())) : ('');
728
729
  }
729
730
  const baseCellClasses = (colIndex, toString = false) => {
730
731
  const store = fetchStores();
@@ -741,9 +742,9 @@ const baseCellClasses = (colIndex, toString = false) => {
741
742
  return classes;
742
743
  };
743
744
  const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
744
- const content = nestedContent || cellRender(rowIndex, colIndex);
745
- if (!content)
746
- return h(Fragment, null);
745
+ const Content = () => nestedContent
746
+ ? nestedContent()
747
+ : cellRender(rowIndex, colIndex) || (h("span", { class: "placeholder" }, "\u00A0"));
747
748
  let CellType = 'td';
748
749
  const store = fetchStores();
749
750
  const column = store.config.state.columns[colIndex];
@@ -757,24 +758,37 @@ const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
757
758
  : { ...props, scope: 'row' };
758
759
  CellType = 'th';
759
760
  }
761
+ const ContentWrap = (props) => (h("div", { ...props, class: {
762
+ [`${CSSNAMESPACE}__cell-content`]: true,
763
+ [`${CSSNAMESPACE}__cell-content--wrap`]: !!column.wrap,
764
+ } },
765
+ h(Content, null)));
760
766
  return (h(CellType
761
767
  // role="gridcell"
762
- , { ...props },
763
- h("div", { class: `${CSSNAMESPACE}__cell-content` }, content)));
768
+ , { ...props }, column.autoTooltip && !column.wrap ? (h("nano-resize-observe", { notifyContentFit: "x", onNanoResizeContentFitChange: (e) => (e.target.firstElementChild.disabled =
769
+ e.detail.x) },
770
+ h("nano-tooltip", { disabled: true, hoist: true },
771
+ h(ContentWrap, null),
772
+ h("span", { slot: "content" },
773
+ h(Content, null))))) : (h(ContentWrap, null))));
764
774
  };
765
775
 
766
- const TableRow = ({ rowRenderer, rowIndex, row, onColumnPinned }, children, utils) => {
776
+ const TableRow = ({ rowRenderer, rowIndex, rowModel, onColumnPinned }, children, utils) => {
767
777
  let extraProps = {};
768
- const TableCell = ({ header }, children) => {
769
- const cell = h("div", { class: CSSNAMESPACE + '__cell-content' }, children);
778
+ const TableCell = ({ header, wrap }, children) => {
779
+ const cell = (h("div", { class: {
780
+ [`${CSSNAMESPACE}__cell-content`]: true,
781
+ [`${CSSNAMESPACE}__cell-content--wrap`]: wrap,
782
+ } }, children));
770
783
  return header ? h("th", { scope: "row" }, cell) : h("td", null, cell);
771
784
  };
772
- if (!row) {
785
+ if (!rowModel) {
773
786
  const model = rowDataModel(rowIndex);
774
- row = model.row;
787
+ rowModel = model.rowModel;
775
788
  }
776
789
  if (rowRenderer?.rowProperties) {
777
- extraProps = rowRenderer.rowProperties({ row, rowIndex }) || extraProps;
790
+ extraProps =
791
+ rowRenderer.rowProperties({ rowModel, rowIndex }) || extraProps;
778
792
  }
779
793
  let pinned;
780
794
  if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {
@@ -785,15 +799,15 @@ const TableRow = ({ rowRenderer, rowIndex, row, onColumnPinned }, children, util
785
799
  const tpl = rowRenderer?.template;
786
800
  if (tpl) {
787
801
  let toRender = tpl(h, {
788
- renderedRow: (h("tr", { ...props, key: row.__uuid }, children)),
789
- row,
802
+ renderedRow: (h("tr", { ...props, key: rowModel.__uuid }, children)),
803
+ rowModel,
790
804
  rowIndex,
791
805
  }, TableCell);
792
806
  if (Array.isArray(toRender)) {
793
807
  toRender = utils.map(toRender, (node, i) => {
794
808
  if (node.vtag === 'tr') {
795
809
  if (!node.vkey)
796
- node.vkey = `${row.__uuid}_${i}`;
810
+ node.vkey = `${rowModel.__uuid}_${i}`;
797
811
  node.vattrs = mergeProperties({ class: headerPinClasses('tr', pinned, true) }, node.vattrs);
798
812
  if (!!node.vchildren) {
799
813
  node.vchildren = utils.map(node.vchildren, (cNode, i) => {
@@ -819,15 +833,18 @@ const TableRow = ({ rowRenderer, rowIndex, row, onColumnPinned }, children, util
819
833
  }
820
834
  return toRender;
821
835
  }
822
- return (h("tr", { ...props, key: row.__uuid }, children));
836
+ return (h("tr", { ...props, key: rowModel.__uuid }, children));
823
837
  };
824
838
  const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
825
839
  let extraProps = {};
826
840
  if (rowRenderer.rowProperties) {
827
841
  extraProps = rowRenderer.rowProperties() || {};
828
842
  }
829
- const TableCell = ({ header }, children) => {
830
- const cell = h("div", { class: CSSNAMESPACE + '__cell-content' }, children);
843
+ const TableCell = ({ header, wrap }, children) => {
844
+ const cell = (h("div", { class: {
845
+ [`${CSSNAMESPACE}__cell-content`]: true,
846
+ [`${CSSNAMESPACE}__cell-content--wrap`]: wrap,
847
+ } }, children));
831
848
  return header !== false ? h("th", { scope: "col" }, cell) : h("td", null, cell);
832
849
  };
833
850
  const pinned = rowRenderer.pinned || null;
@@ -869,10 +886,10 @@ const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
869
886
  return h("tr", { ...props }, children);
870
887
  };
871
888
 
872
- const tableCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}nano-table{display:block;width:100%;--max-col-width:clamp(200px, 30%, 20vw);--color:var(--nano-color-mediumgrey, #68767e);--font-size:0.87rem;--cell-line-height:1.5;--thead-font-size:0.95rem;--thead-color:#455560;--tfoot-color:#455560;--border-color:#dddbda;--border-style:thin solid var(--border-color);--border-tint-color:#0084a9;--border-tint-style:3px solid var(--border-tint-color);--cell-bg-rgb:var(--nano-color-white-rgb, 255 255 255);--head-bg-rgb:250, 250, 249;--foot-bg-rgb:var(--head-bg-rgb);--th-row-bg-rgb:var(--cell-bg-rgb);--ordered-bg-rgb:var(--nano-color-offwhite-rgb, 249 249 251);--td-padding-start:0.625rem;--td-padding-end:0.625rem;--td-padding-top:0.5rem;--td-padding-bottom:0.4125rem;--th-padding-start:0.625rem;--th-padding-end:0.625rem;--th-padding-top:0.875rem;--th-padding-bottom:0.6875rem;--td-padding-v:var(--td-padding-top) var(--td-padding-bottom);--td-padding-h:var(--td-padding-start) var(--td-padding-end);--th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--th-padding-h:var(--th-padding-start) var(--th-padding-end);--foot-th-padding-v:var(--td-padding-top) var(--td-padding-bottom);--foot-th-padding-h:var(--td-padding-start) var(--td-padding-end);--head-th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--head-th-padding-h:var(--th-padding-start) var(--th-padding-end);--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));border-inline-end:1px solid transparent;border-block-start:1px solid transparent;position:relative;z-index:1}.nano-tbl__wrap{display:table;min-width:100%}.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;position:relative}.nano-tbl__ordered{background-color:var(--ordered-bg);border-inline-start:var(--border-style);border-inline-end:var(--border-style)}.nano-tbl__drag-mask{display:none;position:absolute;inset-block:-2px -2px;z-index:10;opacity:0;transition:0.2s ease opacity}.nano-tbl__drag-mask--start{width:calc(50% + 2px);inset-inline-start:-2px;border-inline-start:2px dashed var(--border-tint-color)}.nano-tbl__drag-mask--end{width:50%;inset-inline-end:0;border-inline-end:2px dashed var(--border-tint-color)}.nano-tbl__drag-mask--active{opacity:1}.nano-tbl__dragging .nano-tbl__drag-mask{display:block}.nano-tbl__drag--start{opacity:0.4}.nano-tbl__dragging .nano-tbl__td,.nano-tbl__dragging .nano-tbl__th{cursor:no-drop}.nano-tbl__dragging .nano-tbl__td .nano-tbl__cell-content,.nano-tbl__dragging .nano-tbl__th .nano-tbl__cell-content{pointer-events:none}.nano-tbl__order-btn{padding:0;border:none;outline:none;font:inherit;background:none;-webkit-appearance:none;appearance:none;color:inherit;display:flex;gap:10px;align-items:center;width:100%}.nano-tbl__status-icons{margin-inline:auto 10px;display:flex;gap:10px}.nano-tbl__progress-bar{font-size:0.2rem;position:sticky;inset-block-start:0;inset-inline:0;z-index:10;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;border-block-start:var(--border-style);max-width:var(--max-col-width);background-color:rgb(var(--cell-bg-rgb))}tbody:first-of-type tr:first-child .nano-tbl__td,tbody:first-of-type tr:first-child .nano-tbl__th{border-block-start:none}tbody:last-of-type tr:last-child .nano-tbl__td,tbody:last-of-type tr:last-child .nano-tbl__th{border-block-end:var(--border-style)}.md .nano-tbl__td:first-child .nano-tbl__cell-content,.md .nano-tbl__th:first-child .nano-tbl__cell-content{padding-inline-start:var(--bookend-col-padding)}.md .nano-tbl__td:last-child .nano-tbl__cell-content,.md .nano-tbl__th:last-child .nano-tbl__cell-content{padding-inline-end:var(--bookend-col-padding)}@media (max-width: 768px){.nano-tbl__td:first-child .nano-tbl__cell-content,.nano-tbl__th:first-child .nano-tbl__cell-content{padding-inline-start:var(--td-padding-start) !important}.nano-tbl__td:last-child .nano-tbl__cell-content,.nano-tbl__th:last-child .nano-tbl__cell-content{padding-inline-end:var(--td-padding-end) !important}}thead .nano-tbl__td,thead .nano-tbl__th{color:var(--thead-color);font-weight:800;background:rgba(var(--head-bg-rgb), 90%);font-size:var(--thead-font-size);border-block-start:none !important;transition:all 0.2s ease}thead .nano-tbl__td .nano-tbl__cell-content,thead .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--head-th-padding-v);padding-inline:var(--head-th-padding-h)}tfoot .nano-tbl__td,tfoot .nano-tbl__th{color:var(--tfoot-color);font-weight:800;border-block-start:none;background:rgba(var(--foot-bg-rgb), 90%);font-size:var(--thead-font-size)}tfoot .nano-tbl__td .nano-tbl__cell-content,tfoot .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--foot-th-padding-v);padding-inline:var(--foot-th-padding-h)}.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-block:var(--td-padding-v);padding-inline:var(--td-padding-h)}.nano-tbl__cell-content--no-result{padding-block:2rem}.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;margin:0}.nano-tbl__pin{position:sticky;z-index:1}.nano-tbl__pin--start{inset-inline:-1px auto;transition:max-width 0.25s ease;z-index:2}.nano-tbl__pin--start::after{content:\"\";position:absolute;inset:0;box-shadow:5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.nano-tbl__pinned--start .nano-tbl__pin--start{z-index:2;max-width:125px !important}.sm .nano-tbl__pinned--start .nano-tbl__pin--start{max-width:var(--max-col-width) !important}.nano-tbl__pinned--start .nano-tbl__pin--start::after{opacity:1}.nano-tbl__pin--end{z-index:2;}.nano-tbl__pin--start+.nano-tbl__pin--end{inset-inline:auto auto}.nano-tbl__pin--start+.nano-tbl__pin--end::after{display:none}.sm .nano-tbl__pin--end{inset-inline:auto -1px !important;max-width:min(50vw, 200px)}.sm .nano-tbl__pin--end::after{display:block !important;content:\"\";position:absolute;inset:0;box-shadow:-5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.sm .nano-tbl__pinned--end .nano-tbl__pin--end{z-index:3}.sm .nano-tbl__pinned--end .nano-tbl__pin--end::after{opacity:1}.nano-tbl__pin--top{inset-block:-1px auto;z-index:3}.nano-tbl__pinned--top .nano-tbl__pin--top{z-index:4 !important}.nano-tbl__pin--bottom{inset-block:auto -1px;z-index:3}.nano-tbl__pinned--bottom .nano-tbl__pin--bottom{z-index:5 !important}.nano-tbl__pin--top.nano-tbl__pin--start{z-index:4}.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pin--top.nano-tbl__pin--end{z-index:4}.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:6 !important}.nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:4}.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:4}.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:6 !important}.nano-tbl thead tr:last-of-type td,.nano-tbl thead tr:last-of-type th{border-block-end:var(--border-tint-style)}.nano-tbl tfoot tr:first-of-type td,.nano-tbl tfoot tr:first-of-type th{border-block-start:none}.nano-tbl tfoot tr:last-of-type td,.nano-tbl tfoot tr:last-of-type th{border-block-end:var(--border-tint-style)}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type th{border-block-start:var(--border-tint-style) !important}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type th{border-block-end:none !important}.nano-tbl .unlimited-width{max-width:none}.nano-tbl__spinner{font-size:1.5rem;transition:scale 0.25s;scale:0;padding:0.5rem;position:absolute;inset-block-end:0;inset-inline-start:calc(50% - 0.75rem);z-index:0}.nano-tbl__spinner--show{scale:1;position:sticky}.nano-tbl nano-skeleton{line-height:var(--cell-line-height)}";
889
+ const tableCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}nano-table{display:block;width:100%;--max-col-width:clamp(200px, 500px, 50vw);--color:var(--nano-color-mediumgrey, #68767e);--font-size:0.87rem;--cell-line-height:1.5;--thead-font-size:0.95rem;--thead-color:#455560;--tfoot-color:#455560;--border-color:#dddbda;--border-style:thin solid var(--border-color);--border-tint-color:#0084a9;--border-tint-style:3px solid var(--border-tint-color);--cell-bg-rgb:var(--nano-color-white-rgb, 255 255 255);--head-bg-rgb:250, 250, 249;--foot-bg-rgb:var(--head-bg-rgb);--th-row-bg-rgb:var(--cell-bg-rgb);--ordered-bg-rgb:var(--nano-color-offwhite-rgb, 249 249 251);--td-padding-start:0.625rem;--td-padding-end:0.625rem;--td-padding-top:0.5rem;--td-padding-bottom:0.4125rem;--th-padding-start:0.625rem;--th-padding-end:0.625rem;--th-padding-top:0.875rem;--th-padding-bottom:0.6875rem;--td-padding-v:var(--td-padding-top) var(--td-padding-bottom);--td-padding-h:var(--td-padding-start) var(--td-padding-end);--th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--th-padding-h:var(--th-padding-start) var(--th-padding-end);--foot-th-padding-v:var(--td-padding-top) var(--td-padding-bottom);--foot-th-padding-h:var(--td-padding-start) var(--td-padding-end);--head-th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--head-th-padding-h:var(--th-padding-start) var(--th-padding-end);--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));border-inline-end:1px solid transparent;border-block-start:1px solid transparent;position:relative;z-index:1}.nano-tbl__wrap{display:table;min-width:100%}.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;position:relative}.nano-tbl__ordered{background-color:var(--ordered-bg);border-inline-start:var(--border-style);border-inline-end:var(--border-style)}.nano-tbl__drag-mask{display:none;position:absolute;inset-block:-2px -2px;z-index:10;opacity:0;transition:0.2s ease opacity}.nano-tbl__drag-mask--start{width:calc(50% + 2px);inset-inline-start:-2px;border-inline-start:2px dashed var(--border-tint-color)}.nano-tbl__drag-mask--end{width:50%;inset-inline-end:0;border-inline-end:2px dashed var(--border-tint-color)}.nano-tbl__drag-mask--active{opacity:1}.nano-tbl__dragging .nano-tbl__drag-mask{display:block}.nano-tbl__drag--start{opacity:0.4}.nano-tbl__dragging .nano-tbl__td,.nano-tbl__dragging .nano-tbl__th{cursor:no-drop}.nano-tbl__dragging .nano-tbl__td .nano-tbl__cell-content,.nano-tbl__dragging .nano-tbl__th .nano-tbl__cell-content{pointer-events:none}.nano-tbl__order-btn{padding:0;border:none;outline:none;font:inherit;background:none;-webkit-appearance:none;appearance:none;color:inherit;display:flex;gap:10px;align-items:center;width:100%}.nano-tbl__status-icons{margin-inline:auto 10px;display:flex;gap:10px}.nano-tbl__progress-bar{font-size:0.2rem;position:sticky;inset-block-start:0;inset-inline:0;z-index:10;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;border-block-start:var(--border-style);max-width:var(--max-col-width);background-color:rgb(var(--cell-bg-rgb))}tbody:first-of-type tr:first-child .nano-tbl__td,tbody:first-of-type tr:first-child .nano-tbl__th{border-block-start:none}tbody:last-of-type tr:last-child .nano-tbl__td,tbody:last-of-type tr:last-child .nano-tbl__th{border-block-end:var(--border-style)}.md .nano-tbl__td:first-child .nano-tbl__cell-content,.md .nano-tbl__th:first-child .nano-tbl__cell-content{padding-inline-start:var(--bookend-col-padding)}.md .nano-tbl__td:last-child .nano-tbl__cell-content,.md .nano-tbl__th:last-child .nano-tbl__cell-content{padding-inline-end:var(--bookend-col-padding)}@media (max-width: 768px){.nano-tbl__td:first-child .nano-tbl__cell-content,.nano-tbl__th:first-child .nano-tbl__cell-content{padding-inline-start:var(--td-padding-start) !important}.nano-tbl__td:last-child .nano-tbl__cell-content,.nano-tbl__th:last-child .nano-tbl__cell-content{padding-inline-end:var(--td-padding-end) !important}}thead .nano-tbl__td,thead .nano-tbl__th{color:var(--thead-color);font-weight:800;background:rgba(var(--head-bg-rgb), 90%);font-size:var(--thead-font-size);border-block-start:none !important;transition:all 0.2s ease}thead .nano-tbl__td .nano-tbl__cell-content,thead .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--head-th-padding-v);padding-inline:var(--head-th-padding-h)}tfoot .nano-tbl__td,tfoot .nano-tbl__th{color:var(--tfoot-color);font-weight:800;border-block-start:none;background:rgba(var(--foot-bg-rgb), 90%);font-size:var(--thead-font-size)}tfoot .nano-tbl__td .nano-tbl__cell-content,tfoot .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--foot-th-padding-v);padding-inline:var(--foot-th-padding-h)}.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-block:var(--td-padding-v);padding-inline:var(--td-padding-h)}.nano-tbl__cell-content--no-result{padding-block:2rem}.nano-tbl__cell-content--wrap{white-space:normal;overflow:visible}.nano-tbl tbody{will-change:scroll-position;opacity:1;transition:0.1s ease opacity;transform:translateZ(0)}.nano-tbl tbody.nano-tbl__inactive{opacity:0}.nano-tbl th[scope=row]{font-weight:800;margin:0}.nano-tbl__pin{position:sticky}.nano-tbl__pin--start{inset-inline:-1px auto;transition:max-width 0.25s ease}.nano-tbl__pin--start::after{content:\"\";position:absolute;inset:0;box-shadow:5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.nano-tbl__pinned--start .nano-tbl__pin--start{z-index:2;max-width:125px !important}.sm .nano-tbl__pinned--start .nano-tbl__pin--start{max-width:var(--max-col-width) !important}.nano-tbl__pinned--start .nano-tbl__pin--start::after{opacity:1}.nano-tbl__pin--end{}.nano-tbl__pin--start+.nano-tbl__pin--end{inset-inline:auto auto}.nano-tbl__pin--start+.nano-tbl__pin--end::after{display:none}.sm .nano-tbl__pin--end{inset-inline:auto -1px !important;max-width:min(50vw, 200px)}.sm .nano-tbl__pin--end::after{display:block !important;content:\"\";position:absolute;inset:0;box-shadow:-5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.sm .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:4 !important}.nano-tbl__pin--bottom{inset-block:auto -1px}.nano-tbl__pinned--bottom .nano-tbl__pin--bottom{z-index:5 !important}.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:6 !important}.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:6 !important}.nano-tbl thead tr:last-of-type td,.nano-tbl thead tr:last-of-type th{border-block-end:var(--border-tint-style)}.nano-tbl tfoot tr:first-of-type td,.nano-tbl tfoot tr:first-of-type th{border-block-start:none}.nano-tbl tfoot tr:last-of-type td,.nano-tbl tfoot tr:last-of-type th{border-block-end:var(--border-tint-style)}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type th{border-block-start:var(--border-tint-style) !important}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type th{border-block-end:none !important}.nano-tbl .unlimited-width{max-width:none}.nano-tbl__spinner{font-size:1.5rem;transition:scale 0.25s;scale:0;padding:0.5rem;position:absolute;inset-block-end:0;inset-inline-start:calc(50% - 0.75rem);z-index:0}.nano-tbl__spinner--show{scale:1;position:sticky}.nano-tbl nano-skeleton{line-height:var(--cell-line-height)}";
873
890
 
874
891
  function perMark(name, end = false) {
875
- if (!Build.isDev)
892
+ if (!Build.isDev || Build.isTesting || !performance)
876
893
  return;
877
894
  if (end) {
878
895
  performance?.mark('end' + name);
@@ -889,8 +906,8 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
889
906
  constructor() {
890
907
  super();
891
908
  this.__registerHost();
892
- this.nanoTblBlockRendered = createEvent(this, "nanoTblBlockRendered", 7);
893
909
  this.nanoTblReady = createEvent(this, "nanoTblReady", 7);
910
+ this.nanoTblBlockRendered = createEvent(this, "nanoTblBlockRendered", 7);
894
911
  this.nanoTblBeforeSort = createEvent(this, "nanoTblBeforeSort", 7);
895
912
  this.nanoTblAfterSort = createEvent(this, "nanoTblAfterSort", 7);
896
913
  this.nanoTblColDrag = createEvent(this, "nanoTblColDrag", 7);
@@ -899,22 +916,30 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
899
916
  this.nanoTblAfterFilter = createEvent(this, "nanoTblAfterFilter", 7);
900
917
  this.nanoTblBeforeSearch = createEvent(this, "nanoTblBeforeSearch", 7);
901
918
  this.nanoTblAfterSearch = createEvent(this, "nanoTblAfterSearch", 7);
902
- this.debounceSetLoading = (l) => {
903
- this._loading = l;
904
- };
919
+ this.nanoTblBeforeEdit = createEvent(this, "nanoTblBeforeEdit", 7);
905
920
  this.renderId = 'tbl-' + id++;
906
921
  this.filters = [];
907
922
  this.currentFilters = '[]';
908
923
  this.currentSort = '';
924
+ this.measureHeight = 0;
909
925
  this.blockIos = new WeakMap();
910
926
  this.blockHeights = [];
911
927
  this.unitHeight = 0;
912
928
  // Scroll / IO used for hiding / showing blocks
913
929
  this.ignoreIO = true;
914
930
  this._isReady = false;
931
+ /**
932
+ * Fired when a column is dragged
933
+ * @param column
934
+ */
915
935
  this.colDrag = (column) => {
916
936
  this.nanoTblColDrag.emit({ column });
917
937
  };
938
+ /**
939
+ * Fired when a column is dropped after being dragged
940
+ * @param fromCol
941
+ * @param toCol
942
+ */
918
943
  this.colDrop = (fromCol, toCol) => {
919
944
  const cols = this.store.config.state.columns;
920
945
  const toIndex = cols.findIndex((col) => col.prop === toCol);
@@ -927,7 +952,7 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
927
952
  });
928
953
  if (dropEvent.defaultPrevented)
929
954
  return;
930
- this.store.config.state.columns = arrMove(fromIndex, toIndex, cols);
955
+ this.columns = arrMove(fromIndex, toIndex, cols);
931
956
  };
932
957
  /**
933
958
  * Start a sort - can be cancelled by `preventDefault`
@@ -939,7 +964,7 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
939
964
  // did order change?
940
965
  if (this.currentSort === order + ':' + column)
941
966
  return;
942
- this.loading = true;
967
+ this._loading = true;
943
968
  const sortEvent = this.nanoTblBeforeSort.emit({ column: column, order });
944
969
  if (sortEvent.defaultPrevented)
945
970
  return;
@@ -949,13 +974,24 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
949
974
  this.scrollToTop(element);
950
975
  if (this.customSortFn) {
951
976
  try {
952
- await this.customSortFn(column, order);
953
- this.sortComplete(order, column);
977
+ const res = await this.customSortFn(column, order);
978
+ // if the response is 'true', the custom sort did it's thing
979
+ // handover to finish and stop loading state.
980
+ // if response is falsey, carry on to do a FE sort
981
+ if (res === true) {
982
+ this.sortComplete(order, column);
983
+ this._loading = false;
984
+ return;
985
+ }
954
986
  }
955
987
  catch (e) {
988
+ // if response errored, stop loading state
989
+ // clear current sort cache
956
990
  console.warn('custom sort failed', e);
991
+ this.currentSort = '';
992
+ this._loading = false;
993
+ return;
957
994
  }
958
- return;
959
995
  }
960
996
  try {
961
997
  await storeSort(this.host, column, order);
@@ -966,7 +1002,8 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
966
1002
  this.currentSort = '';
967
1003
  }
968
1004
  finally {
969
- this.loading = false;
1005
+ if (this.blocks.length)
1006
+ this._loading = false;
970
1007
  }
971
1008
  };
972
1009
  /**
@@ -979,31 +1016,34 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
979
1016
  if (!el || this.blockIos.has(el))
980
1017
  return;
981
1018
  const blockIo = new IntersectionObserver(([ioEntry]) => {
982
- if (this.ignoreIO)
1019
+ if (ioEntry.intersectionRatio === 0)
983
1020
  return;
984
- if (ioEntry.isIntersecting) {
985
- // This is a bit gross
986
- // The Intersection Observer (IO) fires in an incorrect order when the scrolling is very fast
987
- // i.e. we go past blocks 3, 2, 1 and land on 0, but 3 can fire as 'intersecting' after 0.
988
- // To fix that, we check - for realzies - if the block IS visible.
989
- // BUT that test is not as sensitive to a block being visible via the IO,
990
- // so doesn't always fire if scrolling slowly
991
- // *sigh*
992
- readTask(() => {
993
- if (this.scrollSpeed < 100 || isInViewport(el, 0.01)) {
994
- this.activeBlocks = [
1021
+ // This is a bit gross
1022
+ // The Intersection Observer (IO) fires in an incorrect order when the scrolling is very fast
1023
+ // i.e. we go past blocks 3, 2, 1 and land on 0, but 3 can fire as 'intersecting' after 0.
1024
+ // To fix that, we check - for realzies - if the block IS visible.
1025
+ // BUT that test is not as sensitive to a block being visible via the IO,
1026
+ // so doesn't always fire if scrolling slowly
1027
+ // *sigh*
1028
+ readTask(() => {
1029
+ if (this.scrollSpeed < 100 || isInViewport(el, 0.01)) {
1030
+ if (!this.ignoreIO) {
1031
+ const potentialBlocks = [
995
1032
  blockIndex,
996
1033
  blockIndex + 1,
997
1034
  Math.max(0, blockIndex - 1),
998
1035
  ];
999
- this.nanoTblBlockRendered.emit({
1000
- block: blockIndex,
1001
- totalBlocks: this.blockElements.length,
1002
- });
1003
- requestAnimationFrame(() => this.setBlockHeight());
1036
+ if (potentialBlocks.toString() !== this.activeBlocks.toString()) {
1037
+ this.debouncedBlockChange(potentialBlocks);
1038
+ }
1004
1039
  }
1005
- });
1006
- }
1040
+ // fire the event regardless
1041
+ this.nanoTblBlockRendered.emit({
1042
+ block: blockIndex,
1043
+ totalBlocks: this.blockElements.length,
1044
+ });
1045
+ }
1046
+ });
1007
1047
  }, {
1008
1048
  threshold: [0],
1009
1049
  root: this.scrollParent === document.scrollingElement
@@ -1025,7 +1065,8 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1025
1065
  this.type = 'table';
1026
1066
  this.caption = undefined;
1027
1067
  this.showCaption = false;
1028
- this._loading = false;
1068
+ this.loading = undefined;
1069
+ this.internalLoading = false;
1029
1070
  this.placeholderSize = 5;
1030
1071
  this.rows = undefined;
1031
1072
  this.columns = [];
@@ -1039,26 +1080,29 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1039
1080
  this.customSortFn = undefined;
1040
1081
  this.defaultSort = true;
1041
1082
  this.defaultColDraggable = false;
1083
+ this.virtualTotalItems = 0;
1042
1084
  this.blocks = [];
1043
1085
  this.activeBlocks = [0, 1, 2];
1044
- this.measureHeight = 0;
1045
1086
  this.debounceSetLoading = debounce(this.debounceSetLoading.bind(this), 50);
1087
+ this.debouncedBlockChange = debounce(this.debouncedBlockChange.bind(this), 100);
1046
1088
  }
1047
- /** Will show a loading state when true.
1048
- * Will be shown automatically if `rows` is a promise waiting to resolve
1049
- * or when performing custom filtering or sorting */
1050
- get loading() {
1051
- return this._loading;
1089
+ get _loading() {
1090
+ return this.loading !== undefined ? this.loading : this.internalLoading;
1052
1091
  }
1053
- set loading(l) {
1092
+ set _loading(l) {
1093
+ if (this.loading !== undefined)
1094
+ return;
1054
1095
  this.debounceSetLoading(l);
1055
1096
  }
1097
+ debounceSetLoading(l) {
1098
+ this.internalLoading = l;
1099
+ }
1056
1100
  handleRowsChange() {
1057
1101
  if (!this.rows) {
1058
- this.loading = true;
1102
+ this._loading = true;
1059
1103
  return;
1060
1104
  }
1061
- this.loading = true;
1105
+ this._loading = true;
1062
1106
  Promise.resolve(this.rows).then(async (rows) => {
1063
1107
  await storeSetData(this.host, rows);
1064
1108
  // reset everything
@@ -1067,7 +1111,7 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1067
1111
  await this.columnInit();
1068
1112
  if (!this.isReady)
1069
1113
  this.setInitialBlockDimension();
1070
- this.loading = false;
1114
+ this._loading = false;
1071
1115
  });
1072
1116
  }
1073
1117
  async handleColsChange() {
@@ -1082,6 +1126,9 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1082
1126
  handleSearchTermChange() {
1083
1127
  this.searchStart();
1084
1128
  }
1129
+ virtualTotalItemsChangeHandler() {
1130
+ this.setBlocks();
1131
+ }
1085
1132
  /** Remove any column sorts currently applied
1086
1133
  * @returns a promise which resolves when complete */
1087
1134
  async resetSorting() {
@@ -1122,11 +1169,25 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1122
1169
  this.filters = this.filters.filter((f) => !columnNames.includes(f.prop));
1123
1170
  return this.filterStart();
1124
1171
  }
1172
+ /** Updates a row model at a given index
1173
+ * @param row - the row to update.
1174
+ * *Note* - this should come from the `col.cellTemplate` or `row.rowRender.template` `rowModel` property
1175
+ * - rows are augmented with certain properties to aid with efficient rendering
1176
+ * @param rowIndex - the row index to insert this row
1177
+ */
1178
+ async updateRow(row, rowIndex) {
1179
+ this.rows.splice(rowIndex, 1, row);
1180
+ this.handleRowsChange();
1181
+ }
1125
1182
  // uses the first 'tr' of an active block as our yard stick
1126
1183
  set measureEle(el) {
1127
1184
  if (!el)
1128
1185
  return;
1129
- this.measureHeight = el.getBoundingClientRect().height;
1186
+ const potentialHeight = el.getBoundingClientRect().height;
1187
+ this.measureHeight =
1188
+ Math.abs(this.measureHeight - potentialHeight) < 5
1189
+ ? this.measureHeight
1190
+ : potentialHeight;
1130
1191
  this.unitHeight =
1131
1192
  el.querySelector('tr')?.getBoundingClientRect().height || this.unitHeight;
1132
1193
  }
@@ -1173,7 +1234,7 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1173
1234
  perMark('sort', true);
1174
1235
  }
1175
1236
  async searchStart() {
1176
- this.loading = true;
1237
+ this._loading = true;
1177
1238
  const sortEvent = this.nanoTblBeforeSearch.emit({ term: this.searchTerm });
1178
1239
  if (sortEvent.defaultPrevented)
1179
1240
  return;
@@ -1189,7 +1250,7 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1189
1250
  console.warn('search failed', e);
1190
1251
  }
1191
1252
  finally {
1192
- this.loading = false;
1253
+ this._loading = false;
1193
1254
  }
1194
1255
  }
1195
1256
  async filterStart(filters, additive = true) {
@@ -1206,7 +1267,7 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1206
1267
  }
1207
1268
  if (this.currentFilters === JSON.stringify(this.filters))
1208
1269
  return;
1209
- this.loading = true;
1270
+ this._loading = true;
1210
1271
  const sortEvent = this.nanoTblBeforeFilter.emit({ filters: this.filters });
1211
1272
  if (sortEvent.defaultPrevented)
1212
1273
  return;
@@ -1216,12 +1277,21 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1216
1277
  this.scrollToTop();
1217
1278
  if (this.customFilterFn) {
1218
1279
  try {
1219
- await this.customFilterFn(this.filters);
1220
- this.filterComplete();
1280
+ const res = await this.customFilterFn(this.filters);
1281
+ // if the response is 'true', the custom filter did it's thing
1282
+ // handover to finish and stop loading state.
1283
+ // if response is falsey, carry on to do a FE filter
1284
+ if (res === true) {
1285
+ this.filterComplete();
1286
+ this._loading = false;
1287
+ }
1221
1288
  }
1222
1289
  catch (e) {
1290
+ // if response errored, stop loading state
1291
+ // clear current sort cache
1223
1292
  console.warn('custom filter failed', e);
1224
1293
  this.currentFilters = '';
1294
+ this._loading = false;
1225
1295
  }
1226
1296
  return;
1227
1297
  }
@@ -1233,7 +1303,7 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1233
1303
  console.warn('filter failed', e);
1234
1304
  }
1235
1305
  finally {
1236
- this.loading = false;
1306
+ this._loading = false;
1237
1307
  }
1238
1308
  }
1239
1309
  filterComplete() {
@@ -1325,24 +1395,34 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1325
1395
  * These can then be hidden / shown to improve performance.
1326
1396
  */
1327
1397
  setBlocks() {
1398
+ const dRows = this.store.data.state.rows;
1399
+ if (!dRows.length) {
1400
+ this.blocks = [];
1401
+ return;
1402
+ }
1328
1403
  perMark('setBlocks');
1329
- this.activeBlocks = [0, 1, 2];
1330
1404
  this.ignoreIO = true;
1331
1405
  let i = 1;
1332
- const l = this.store.data.state.rows.length;
1406
+ const l = this.virtualTotalItems > dRows.length
1407
+ ? this.virtualTotalItems
1408
+ : dRows.length;
1333
1409
  let rows = [];
1334
1410
  const blocks = [];
1335
1411
  this.blockHeights = [];
1336
1412
  // old skool loop for perf
1337
1413
  for (i; i <= l; i++) {
1338
- rows.push(this.store.data.state.rows[i - 1]);
1414
+ rows.push(this.store.data.state.rows[i - 1] || { __uuid: '' });
1339
1415
  if (i % this.perBlock === 0) {
1416
+ // assign a UUID for the whole block
1417
+ // for block diffing
1340
1418
  blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });
1341
1419
  rows = [];
1342
1420
  }
1343
1421
  }
1344
- if (rows.length)
1422
+ // any leftover rows
1423
+ if (rows.length) {
1345
1424
  blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });
1425
+ }
1346
1426
  this.blocks = blocks;
1347
1427
  perMark('setBlocks', true);
1348
1428
  }
@@ -1370,11 +1450,11 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1370
1450
  }
1371
1451
  /** cache the height for all active blocks for later renders */
1372
1452
  setBlockHeight() {
1373
- readTask(() => {
1374
- this.activeBlocks.forEach((blockIndex) => {
1375
- const el = this.blockElements[blockIndex];
1376
- if (!el)
1377
- return;
1453
+ this.activeBlocks.forEach((blockIndex) => {
1454
+ const el = this.blockElements[blockIndex];
1455
+ if (!el)
1456
+ return;
1457
+ readTask(() => {
1378
1458
  const height = el.getBoundingClientRect().height;
1379
1459
  // cache height to our block heights array
1380
1460
  // for subsequent renders
@@ -1387,6 +1467,10 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1387
1467
  });
1388
1468
  });
1389
1469
  }
1470
+ debouncedBlockChange(newBlocks) {
1471
+ this.activeBlocks = newBlocks;
1472
+ this.setBlockHeight();
1473
+ }
1390
1474
  /** Process slotted content */
1391
1475
  processSlots() {
1392
1476
  // see if we have slot content
@@ -1416,6 +1500,8 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1416
1500
  // but we don't want it to cause renders
1417
1501
  if (['rows', 'columns'].includes(stateName))
1418
1502
  return false;
1503
+ if (Build.isDev)
1504
+ console.log(stateName, _newVal, _oldVal);
1419
1505
  }
1420
1506
  componentWillRender() {
1421
1507
  perMark('render');
@@ -1438,18 +1524,18 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1438
1524
  sortable: this.defaultSort,
1439
1525
  draggable: this.defaultColDraggable,
1440
1526
  } }),
1441
- ]))), this._loading && !this.blocks.length && (h("tbody", { class: `${CSSNAMESPACE}__active` }, [...Array(10).keys()].map((rowIndex) => (h("tr", null, this.store.config.state.columns.map((_colModel, colIndex) => (h(TableCell, { rowIndex: rowIndex, colIndex: colIndex, nestedContent: h("nano-skeleton", null) })))))))), !this._loading && !this.blocks.length && (h("tr", null, h("th", { class: `${CSSNAMESPACE}__th`, colSpan: this.store.config.state.columns.length }, h("div", { class: "nano-tbl__cell-content nano-tbl__cell-content--no-result" }, h("slot", { name: "no-results" }, "No results found"))))), this.blocks.map((block, blockIndex) => (h("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
1527
+ ]))), this._loading && !this.blocks.length && (h("tbody", { class: `${CSSNAMESPACE}__active` }, [...Array(10).keys()].map((rowIndex) => (h("tr", null, this.store.config.state.columns.map((_colModel, colIndex) => (h(TableCell, { rowIndex: rowIndex, colIndex: colIndex, nestedContent: () => h("nano-skeleton", null) })))))))), !this._loading && !this.blocks.length && (h("tr", null, h("th", { class: `${CSSNAMESPACE}__th`, colSpan: this.store.config.state.columns.length }, h("div", { class: "nano-tbl__cell-content nano-tbl__cell-content--no-result" }, h("slot", { name: "no-results" }, "No results found"))))), this.blocks.map((block, blockIndex) => (h("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
1442
1528
  this.blockElements.push(tb);
1443
- this.setupBlockIO(tb, blockIndex);
1529
+ requestAnimationFrame(() => this.setupBlockIO(tb, blockIndex));
1444
1530
  }, class: {
1445
1531
  [`${CSSNAMESPACE}__inactive`]: !this.activeBlocks.includes(blockIndex),
1446
1532
  [`${CSSNAMESPACE}__active`]: this.activeBlocks.includes(blockIndex),
1447
1533
  } }, this.activeBlocks.includes(blockIndex) ? (block.rows.map((row, i) => {
1448
1534
  const rowIndex = blockIndex > 0 ? blockIndex * this.perBlock + i : i;
1449
- return (h(TableRow, { rowRenderer: this.rowRender, row: row, rowIndex: rowIndex }, this.store.config.state.columns.map((_colModel, colIndex) => (h(TableCell, { rowIndex: rowIndex, colIndex: colIndex })))));
1450
- })) : (h("td", { colSpan: this.store.config.state.columns.length, style: {
1535
+ return (h(TableRow, { rowRenderer: this.rowRender, rowModel: row, rowIndex: rowIndex }, this.store.config.state.columns.map((_colModel, colIndex) => (h(TableCell, { rowIndex: rowIndex, colIndex: colIndex })))));
1536
+ })) : (h("tr", null, h("td", { colSpan: this.store.config.state.columns.length, style: {
1451
1537
  height: this.getBlockHeight(blockIndex),
1452
- } }))))), this.showFooter && (h("tfoot", null, h(TableHeadFootRow, { rowRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
1538
+ } })))))), this.showFooter && (h("tfoot", null, h(TableHeadFootRow, { rowRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
1453
1539
  h(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnPinned: this.handleColumnPinned, onColumnSortClick: this.sortStart, defaults: {
1454
1540
  sortable: this.defaultSort,
1455
1541
  draggable: this.defaultColDraggable,
@@ -1463,16 +1549,17 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1463
1549
  static get watchers() { return {
1464
1550
  "rows": ["handleRowsChange"],
1465
1551
  "columns": ["handleColsChange"],
1466
- "searchTerm": ["handleSearchTermChange"]
1552
+ "searchTerm": ["handleSearchTermChange"],
1553
+ "virtualTotalItems": ["virtualTotalItemsChangeHandler"]
1467
1554
  }; }
1468
1555
  static get style() { return tableCss; }
1469
1556
  }, [4, "nano-table", {
1470
1557
  "type": [1],
1471
1558
  "caption": [1],
1472
1559
  "showCaption": [4, "show-caption"],
1473
- "loading": [6148],
1560
+ "loading": [4],
1474
1561
  "placeholderSize": [2, "placeholder-size"],
1475
- "rows": [16],
1562
+ "rows": [1040],
1476
1563
  "columns": [1040],
1477
1564
  "headRender": [16],
1478
1565
  "rowRender": [16],
@@ -1485,21 +1572,22 @@ const Table = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1485
1572
  "customSortFn": [16],
1486
1573
  "defaultSort": [4, "default-sort"],
1487
1574
  "defaultColDraggable": [4, "default-col-draggable"],
1488
- "_loading": [32],
1575
+ "virtualTotalItems": [2, "virtual-total-items"],
1576
+ "internalLoading": [32],
1489
1577
  "blocks": [32],
1490
1578
  "activeBlocks": [32],
1491
- "measureHeight": [32],
1492
1579
  "resetSorting": [64],
1493
1580
  "addSort": [64],
1494
1581
  "resetFilters": [64],
1495
1582
  "addFilters": [64],
1496
- "removeFilters": [64]
1583
+ "removeFilters": [64],
1584
+ "updateRow": [64]
1497
1585
  }, [[9, "scroll", "scrollListener"]]]);
1498
1586
  function defineCustomElement() {
1499
1587
  if (typeof customElements === "undefined") {
1500
1588
  return;
1501
1589
  }
1502
- const components = ["nano-table", "nano-icon", "nano-progress-bar", "nano-resize-observe", "nano-skeleton", "nano-spinner"];
1590
+ const components = ["nano-table", "nano-icon", "nano-progress-bar", "nano-resize-observe", "nano-skeleton", "nano-spinner", "nano-tooltip"];
1503
1591
  components.forEach(tagName => { switch (tagName) {
1504
1592
  case "nano-table":
1505
1593
  if (!customElements.get(tagName)) {
@@ -1508,25 +1596,30 @@ function defineCustomElement() {
1508
1596
  break;
1509
1597
  case "nano-icon":
1510
1598
  if (!customElements.get(tagName)) {
1511
- defineCustomElement$5();
1599
+ defineCustomElement$6();
1512
1600
  }
1513
1601
  break;
1514
1602
  case "nano-progress-bar":
1515
1603
  if (!customElements.get(tagName)) {
1516
- defineCustomElement$4();
1604
+ defineCustomElement$5();
1517
1605
  }
1518
1606
  break;
1519
1607
  case "nano-resize-observe":
1520
1608
  if (!customElements.get(tagName)) {
1521
- defineCustomElement$3();
1609
+ defineCustomElement$4();
1522
1610
  }
1523
1611
  break;
1524
1612
  case "nano-skeleton":
1525
1613
  if (!customElements.get(tagName)) {
1526
- defineCustomElement$2();
1614
+ defineCustomElement$3();
1527
1615
  }
1528
1616
  break;
1529
1617
  case "nano-spinner":
1618
+ if (!customElements.get(tagName)) {
1619
+ defineCustomElement$2();
1620
+ }
1621
+ break;
1622
+ case "nano-tooltip":
1530
1623
  if (!customElements.get(tagName)) {
1531
1624
  defineCustomElement$1();
1532
1625
  }