@nanoporetech-digital/components 5.1.3 → 5.2.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 (188) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/cjs/{component-store-74d25f63.js → component-store-f1dc1276.js} +2 -2
  3. package/dist/cjs/{component-store-74d25f63.js.map → component-store-f1dc1276.js.map} +1 -1
  4. package/dist/cjs/index.cjs.js +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/nano-algolia-filter.cjs.entry.js +2 -2
  7. package/dist/cjs/nano-algolia-input.cjs.entry.js +2 -2
  8. package/dist/cjs/nano-algolia.cjs.entry.js +2 -2
  9. package/dist/cjs/nano-checkbox-group.cjs.entry.js +1 -1
  10. package/dist/cjs/nano-components.cjs.js +1 -1
  11. package/dist/cjs/nano-datalist_3.cjs.entry.js +1 -1
  12. package/dist/cjs/nano-dialog.cjs.entry.js +2 -2
  13. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +2 -2
  14. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nano-global-nav.cjs.entry.js +2 -2
  16. package/dist/cjs/nano-input.cjs.entry.js +1 -1
  17. package/dist/cjs/nano-overflow-nav.cjs.entry.js +1 -1
  18. package/dist/cjs/nano-range.cjs.entry.js +1 -1
  19. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +3 -1
  20. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  21. package/dist/cjs/nano-sortable.cjs.entry.js +16 -8
  22. package/dist/cjs/nano-sortable.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nano-split-pane.cjs.entry.js +1 -1
  24. package/dist/cjs/nano-sticker.cjs.entry.js +4 -2
  25. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  26. package/dist/cjs/nano-tab-group.cjs.entry.js +2 -2
  27. package/dist/cjs/{nano-table-5a7a4d53.js → nano-table-10a40ab3.js} +557 -185
  28. package/dist/cjs/nano-table-10a40ab3.js.map +1 -0
  29. package/dist/cjs/nano-table.cjs.entry.js +2 -2
  30. package/dist/cjs/{table.worker-77e56070.js → table.worker-f04588c1.js} +4 -4
  31. package/dist/cjs/table.worker-f04588c1.js.map +1 -0
  32. package/dist/cjs/{table.worker-bd51e29f.js → table.worker-f258383d.js} +1 -1
  33. package/dist/cjs/{throttle-f55496c8.js → throttle-dfa64b9e.js} +17 -20
  34. package/dist/cjs/throttle-dfa64b9e.js.map +1 -0
  35. package/dist/collection/components/resize-observe/resize-observe.js +21 -1
  36. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  37. package/dist/collection/components/select/select.css +0 -1
  38. package/dist/collection/components/sortable/sortable.js +3 -7
  39. package/dist/collection/components/sortable/sortable.js.map +1 -1
  40. package/dist/collection/components/sticker/sticker.js +11 -5
  41. package/dist/collection/components/sticker/sticker.js.map +1 -1
  42. package/dist/collection/components/table/table-interface.js.map +1 -1
  43. package/dist/collection/components/table/table.cell.js +43 -10
  44. package/dist/collection/components/table/table.cell.js.map +1 -1
  45. package/dist/collection/components/table/table.css +38 -55
  46. package/dist/collection/components/table/table.header.js +4 -9
  47. package/dist/collection/components/table/table.header.js.map +1 -1
  48. package/dist/collection/components/table/table.js +101 -47
  49. package/dist/collection/components/table/table.js.map +1 -1
  50. package/dist/collection/components/table/table.pin-service.js +382 -0
  51. package/dist/collection/components/table/table.pin-service.js.map +1 -0
  52. package/dist/collection/components/table/table.row.js +39 -46
  53. package/dist/collection/components/table/table.row.js.map +1 -1
  54. package/dist/collection/components/table/table.utils.js +0 -124
  55. package/dist/collection/components/table/table.utils.js.map +1 -1
  56. package/dist/collection/components/table/table.worker.js +1 -0
  57. package/dist/collection/components/table/table.worker.js.map +1 -1
  58. package/dist/collection/utils/events.js +27 -0
  59. package/dist/collection/utils/events.js.map +1 -0
  60. package/dist/collection/utils/throttle.js +16 -19
  61. package/dist/collection/utils/throttle.js.map +1 -1
  62. package/dist/components/nano-sortable.js +15 -7
  63. package/dist/components/nano-sortable.js.map +1 -1
  64. package/dist/components/resize-observe.js +3 -1
  65. package/dist/components/resize-observe.js.map +1 -1
  66. package/dist/components/select.js +1 -1
  67. package/dist/components/select.js.map +1 -1
  68. package/dist/components/sticker.js +3 -1
  69. package/dist/components/sticker.js.map +1 -1
  70. package/dist/components/table.js +530 -187
  71. package/dist/components/table.js.map +1 -1
  72. package/dist/components/table.worker.js +1 -1
  73. package/dist/components/throttle.js +16 -19
  74. package/dist/components/throttle.js.map +1 -1
  75. package/dist/esm/{component-store-244a8431.js → component-store-c23ebc9c.js} +2 -2
  76. package/dist/esm/{component-store-244a8431.js.map → component-store-c23ebc9c.js.map} +1 -1
  77. package/dist/esm/index.js +1 -1
  78. package/dist/esm/loader.js +1 -1
  79. package/dist/esm/nano-algolia-filter.entry.js +2 -2
  80. package/dist/esm/nano-algolia-input.entry.js +2 -2
  81. package/dist/esm/nano-algolia.entry.js +2 -2
  82. package/dist/esm/nano-checkbox-group.entry.js +1 -1
  83. package/dist/esm/nano-components.js +1 -1
  84. package/dist/esm/nano-datalist_3.entry.js +1 -1
  85. package/dist/esm/nano-dialog.entry.js +2 -2
  86. package/dist/esm/nano-global-nav-user-profile_3.entry.js +2 -2
  87. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  88. package/dist/esm/nano-global-nav.entry.js +2 -2
  89. package/dist/esm/nano-input.entry.js +1 -1
  90. package/dist/esm/nano-overflow-nav.entry.js +1 -1
  91. package/dist/esm/nano-range.entry.js +1 -1
  92. package/dist/esm/nano-resize-observe_2.entry.js +3 -1
  93. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  94. package/dist/esm/nano-sortable.entry.js +16 -8
  95. package/dist/esm/nano-sortable.entry.js.map +1 -1
  96. package/dist/esm/nano-split-pane.entry.js +1 -1
  97. package/dist/esm/nano-sticker.entry.js +4 -2
  98. package/dist/esm/nano-sticker.entry.js.map +1 -1
  99. package/dist/esm/nano-tab-group.entry.js +2 -2
  100. package/dist/esm/{nano-table-026a0d30.js → nano-table-2bbcaa8d.js} +558 -186
  101. package/dist/esm/nano-table-2bbcaa8d.js.map +1 -0
  102. package/dist/esm/nano-table.entry.js +2 -2
  103. package/dist/esm/{table.worker-c17a27ed.js → table.worker-7324ad73.js} +4 -4
  104. package/dist/esm/table.worker-7324ad73.js.map +1 -0
  105. package/dist/esm/{table.worker-bd51e29f.js → table.worker-f258383d.js} +1 -1
  106. package/dist/esm/{throttle-7836544e.js → throttle-ac4fcefa.js} +17 -20
  107. package/dist/esm/throttle-ac4fcefa.js.map +1 -0
  108. package/dist/nano-components/index.esm.js +1 -1
  109. package/dist/nano-components/nano-components.esm.js +1 -1
  110. package/dist/nano-components/nano-components.esm.js.map +1 -1
  111. package/dist/nano-components/{p-7d6065c6.entry.js → p-0697795a.entry.js} +2 -2
  112. package/dist/nano-components/p-0697795a.entry.js.map +1 -0
  113. package/dist/nano-components/{p-6975f110.entry.js → p-192902e0.entry.js} +2 -2
  114. package/dist/nano-components/{p-a6ff5ca6.js → p-1a0b5bc3.js} +2 -2
  115. package/dist/nano-components/{p-3a761d77.entry.js → p-1b791810.entry.js} +2 -2
  116. package/dist/nano-components/p-39aec880.entry.js +5 -0
  117. package/dist/nano-components/{p-3b4b7f40.entry.js → p-3eb6d833.entry.js} +2 -2
  118. package/dist/nano-components/{p-a1c0afb6.entry.js → p-4884b65a.entry.js} +2 -2
  119. package/dist/nano-components/p-52ae36ec.js +5 -0
  120. package/dist/nano-components/{p-34501eae.entry.js → p-565793a2.entry.js} +2 -2
  121. package/dist/nano-components/p-5aae2588.entry.js +5 -0
  122. package/dist/nano-components/p-5aae2588.entry.js.map +1 -0
  123. package/dist/nano-components/{p-935aef3d.entry.js → p-6920ad69.entry.js} +2 -2
  124. package/dist/nano-components/{p-1c6c94cb.entry.js → p-7baa9e14.entry.js} +2 -2
  125. package/dist/nano-components/p-7bff5224.js +5 -0
  126. package/dist/nano-components/p-7bff5224.js.map +1 -0
  127. package/dist/nano-components/{p-f60fe933.entry.js → p-898cbac7.entry.js} +2 -2
  128. package/dist/nano-components/p-9b533dc3.js +5 -0
  129. package/dist/nano-components/p-9b533dc3.js.map +1 -0
  130. package/dist/nano-components/{p-ace1ffc2.entry.js → p-a362bd23.entry.js} +2 -2
  131. package/dist/nano-components/{p-eb6c9191.entry.js → p-b72df1aa.entry.js} +2 -2
  132. package/dist/nano-components/{p-9c4efe14.entry.js → p-bf18e298.entry.js} +2 -2
  133. package/dist/nano-components/p-bf18e298.entry.js.map +1 -0
  134. package/dist/nano-components/p-ce5efc3f.entry.js +5 -0
  135. package/dist/nano-components/p-ce5efc3f.entry.js.map +1 -0
  136. package/dist/nano-components/{p-1b687f96.entry.js → p-d0eefd52.entry.js} +2 -2
  137. package/dist/nano-components/{p-1a9d9956.entry.js → p-d74e2642.entry.js} +2 -2
  138. package/dist/nano-components/{p-bd51e29f.js → p-f258383d.js} +1 -1
  139. package/dist/types/components/resize-observe/resize-observe.d.ts +2 -0
  140. package/dist/types/components/sortable/sortable.d.ts +0 -1
  141. package/dist/types/components/sticker/sticker.d.ts +2 -2
  142. package/dist/types/components/table/table-interface.d.ts +23 -11
  143. package/dist/types/components/table/table.cell.d.ts +0 -7
  144. package/dist/types/components/table/table.d.ts +10 -8
  145. package/dist/types/components/table/table.header.d.ts +0 -1
  146. package/dist/types/components/table/table.pin-service.d.ts +90 -0
  147. package/dist/types/components/table/table.row.d.ts +3 -2
  148. package/dist/types/components/table/table.utils.d.ts +0 -27
  149. package/dist/types/components.d.ts +29 -11
  150. package/dist/types/utils/events.d.ts +15 -0
  151. package/dist/types/utils/throttle.d.ts +1 -1
  152. package/docs-json.json +59 -24
  153. package/docs-vscode.json +2 -2
  154. package/hydrate/index.js +580 -194
  155. package/package.json +2 -2
  156. package/dist/cjs/nano-table-5a7a4d53.js.map +0 -1
  157. package/dist/cjs/table.worker-77e56070.js.map +0 -1
  158. package/dist/cjs/throttle-f55496c8.js.map +0 -1
  159. package/dist/esm/nano-table-026a0d30.js.map +0 -1
  160. package/dist/esm/table.worker-c17a27ed.js.map +0 -1
  161. package/dist/esm/throttle-7836544e.js.map +0 -1
  162. package/dist/nano-components/p-15217442.entry.js +0 -5
  163. package/dist/nano-components/p-15217442.entry.js.map +0 -1
  164. package/dist/nano-components/p-2e63676f.js +0 -5
  165. package/dist/nano-components/p-30cc21c2.entry.js +0 -5
  166. package/dist/nano-components/p-59eb9caa.js +0 -5
  167. package/dist/nano-components/p-59eb9caa.js.map +0 -1
  168. package/dist/nano-components/p-7759d185.entry.js +0 -5
  169. package/dist/nano-components/p-7759d185.entry.js.map +0 -1
  170. package/dist/nano-components/p-7d6065c6.entry.js.map +0 -1
  171. package/dist/nano-components/p-9746b0a5.js +0 -5
  172. package/dist/nano-components/p-9746b0a5.js.map +0 -1
  173. package/dist/nano-components/p-9c4efe14.entry.js.map +0 -1
  174. /package/dist/nano-components/{p-6975f110.entry.js.map → p-192902e0.entry.js.map} +0 -0
  175. /package/dist/nano-components/{p-a6ff5ca6.js.map → p-1a0b5bc3.js.map} +0 -0
  176. /package/dist/nano-components/{p-3a761d77.entry.js.map → p-1b791810.entry.js.map} +0 -0
  177. /package/dist/nano-components/{p-2e63676f.js.map → p-39aec880.entry.js.map} +0 -0
  178. /package/dist/nano-components/{p-3b4b7f40.entry.js.map → p-3eb6d833.entry.js.map} +0 -0
  179. /package/dist/nano-components/{p-a1c0afb6.entry.js.map → p-4884b65a.entry.js.map} +0 -0
  180. /package/dist/nano-components/{p-30cc21c2.entry.js.map → p-52ae36ec.js.map} +0 -0
  181. /package/dist/nano-components/{p-34501eae.entry.js.map → p-565793a2.entry.js.map} +0 -0
  182. /package/dist/nano-components/{p-935aef3d.entry.js.map → p-6920ad69.entry.js.map} +0 -0
  183. /package/dist/nano-components/{p-1c6c94cb.entry.js.map → p-7baa9e14.entry.js.map} +0 -0
  184. /package/dist/nano-components/{p-f60fe933.entry.js.map → p-898cbac7.entry.js.map} +0 -0
  185. /package/dist/nano-components/{p-ace1ffc2.entry.js.map → p-a362bd23.entry.js.map} +0 -0
  186. /package/dist/nano-components/{p-eb6c9191.entry.js.map → p-b72df1aa.entry.js.map} +0 -0
  187. /package/dist/nano-components/{p-1b687f96.entry.js.map → p-d0eefd52.entry.js.map} +0 -0
  188. /package/dist/nano-components/{p-1a9d9956.entry.js.map → p-d74e2642.entry.js.map} +0 -0
@@ -3,8 +3,8 @@
3
3
  */
4
4
  import { Fragment, h } from '@stencil/core';
5
5
  import { CSSNAMESPACE } from './table.constants';
6
- import { addHObserver, addVObserver, colheadFootRender, headerPinClasses, mergeProperties, } from './table.utils';
7
- export const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned, defaults, }) => {
6
+ import { colheadFootRender, headerPinClasses, mergeProperties, } from './table.utils';
7
+ export const TableColHead = ({ column, onColumnSortClick, defaults, }) => {
8
8
  // Sort handling
9
9
  function handleColumnSortClick(e) {
10
10
  let order;
@@ -29,7 +29,7 @@ export const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumn
29
29
  extraProps = column.columnProperties(column) || extraProps;
30
30
  }
31
31
  const baseProps = {
32
- class: Object.assign(Object.assign({}, headerPinClasses('th', headRenderer === null || headRenderer === void 0 ? void 0 : headRenderer.pinned)), { [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start', [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end', [`${CSSNAMESPACE}__ordered`]: !!column.order, [`${CSSNAMESPACE}__filtered`]: column.filter !== undefined && column.filter !== null }),
32
+ class: Object.assign(Object.assign({}, headerPinClasses('th', column.pinned)), { [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start', [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end', [`${CSSNAMESPACE}__ordered`]: !!column.order, [`${CSSNAMESPACE}__filtered`]: column.filter !== undefined && column.filter !== null }),
33
33
  };
34
34
  let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
35
35
  const content = colheadFootRender(column);
@@ -46,12 +46,7 @@ export const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumn
46
46
  : 'none';
47
47
  props = Object.assign(Object.assign({}, props), { 'aria-sort': sort });
48
48
  }
49
- return (h("th", Object.assign({}, props, { ref: (th) => {
50
- if (['end', 'start'].includes(column.pinned))
51
- addHObserver(th, column.pinned, onColumnPinned);
52
- if (['top', 'bottom'].includes(headRenderer.pinned))
53
- addVObserver(th, headRenderer.pinned, onColumnPinned);
54
- }, key: column.prop }), isSortable() ? (h("button", { class: {
49
+ return (h("th", Object.assign({}, props, { key: column.prop }), isSortable() ? (h("button", { class: {
55
50
  [`${CSSNAMESPACE}__order-btn`]: true,
56
51
  [`${CSSNAMESPACE}__cell-content`]: true,
57
52
  }, onClick: handleColumnSortClick }, colheadFootRender(column), column.filter !== undefined && column.filter !== null && (h("nano-icon", { name: "light/filter" })), !!column.order &&
@@ -1 +1 @@
1
- {"version":3,"file":"table.header.js","sourceRoot":"","sources":["../../../src/components/table/table.header.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n addHObserver,\n addVObserver,\n colheadFootRender,\n headerPinClasses,\n mergeProperties,\n} from './table.utils';\nimport type { TableTypes } from '../../interface';\n\n// TABLE HEADERS\n// (thead > tr > th, tfoot > tr > th)\n\ntype TableColHeadProps = {\n column: TableTypes.ColumnConfig;\n headRenderer: TableTypes.HeadFootRenderer;\n onColumnSortClick?: (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n el: HTMLTableCellElement\n ) => void;\n onColumnPinned?: TableTypes.PinnedCb;\n defaults: { sortable?: boolean };\n};\n\nexport const TableColHead: FunctionalComponent<TableColHeadProps> = ({\n column,\n headRenderer,\n onColumnSortClick,\n onColumnPinned,\n defaults,\n}) => {\n // Sort handling\n\n function handleColumnSortClick(e: MouseEvent & { target: HTMLElement }) {\n let order;\n switch (column.order) {\n case 'asc':\n order = 'desc';\n break;\n case 'desc':\n order = null;\n break;\n default:\n order = 'asc';\n }\n onColumnSortClick(order, column.prop, e.target.closest('th'));\n }\n\n function isSortable() {\n return (\n (!!defaults.sortable && column.sortable !== false) ||\n (!defaults.sortable && column.sortable === true)\n );\n }\n\n let extraProps = {};\n if (column.columnProperties) {\n extraProps = column.columnProperties(column) || extraProps;\n }\n\n const baseProps = {\n class: {\n ...headerPinClasses('th', headRenderer?.pinned),\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__filtered`]:\n column.filter !== undefined && column.filter !== null,\n },\n };\n let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const content = colheadFootRender(column);\n\n if (!content) return <Fragment></Fragment>;\n\n props =\n Number((props as TableTypes.CellProps).colSpan) > 1\n ? { ...props, scope: 'colgroup' }\n : { ...props, scope: 'col' };\n\n if (isSortable()) {\n const sort = column.order\n ? column.order === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n\n props = { ...props, 'aria-sort': sort };\n }\n\n return (\n <th\n {...props}\n ref={(th) => {\n if (['end', 'start'].includes(column.pinned))\n addHObserver(th, column.pinned, onColumnPinned);\n if (['top', 'bottom'].includes(headRenderer.pinned))\n addVObserver(th, headRenderer.pinned, onColumnPinned);\n }}\n key={column.prop}\n >\n {isSortable() ? (\n <button\n class={{\n [`${CSSNAMESPACE}__order-btn`]: true,\n [`${CSSNAMESPACE}__cell-content`]: true,\n }}\n onClick={handleColumnSortClick}\n >\n {colheadFootRender(column)}\n {column.filter !== undefined && column.filter !== null && (\n <nano-icon name=\"light/filter\" />\n )}\n {!!column.order &&\n (column.order === 'desc' ? (\n <nano-icon name=\"solid/long-arrow-down\" />\n ) : (\n <nano-icon name=\"solid/long-arrow-up\" />\n ))}\n <div class={`${CSSNAMESPACE}__status-icons`}>\n <nano-icon name=\"light/chevron-down\" />\n </div>\n </button>\n ) : (\n <div class={`${CSSNAMESPACE}__cell-content`}>\n {colheadFootRender(column)}\n {column.filter !== undefined && column.filter !== null && (\n <nano-icon name=\"light/bars-filter\" />\n )}\n </div>\n )}\n </th>\n );\n};\n"]}
1
+ {"version":3,"file":"table.header.js","sourceRoot":"","sources":["../../../src/components/table/table.header.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n colheadFootRender,\n headerPinClasses,\n mergeProperties,\n} from './table.utils';\nimport type { TableTypes } from '../../interface';\n\n// TABLE HEADERS\n// (thead > tr > th, tfoot > tr > th)\n\ntype TableColHeadProps = {\n column: TableTypes.ColumnConfig;\n headRenderer: TableTypes.HeadFootRenderer;\n onColumnSortClick?: (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n el: HTMLTableCellElement\n ) => void;\n defaults: { sortable?: boolean };\n};\n\nexport const TableColHead: FunctionalComponent<TableColHeadProps> = ({\n column,\n onColumnSortClick,\n defaults,\n}) => {\n // Sort handling\n\n function handleColumnSortClick(e: MouseEvent & { target: HTMLElement }) {\n let order;\n switch (column.order) {\n case 'asc':\n order = 'desc';\n break;\n case 'desc':\n order = null;\n break;\n default:\n order = 'asc';\n }\n onColumnSortClick(order, column.prop, e.target.closest('th'));\n }\n\n function isSortable() {\n return (\n (!!defaults.sortable && column.sortable !== false) ||\n (!defaults.sortable && column.sortable === true)\n );\n }\n\n let extraProps = {};\n if (column.columnProperties) {\n extraProps = column.columnProperties(column) || extraProps;\n }\n\n const baseProps = {\n class: {\n ...headerPinClasses('th', column.pinned),\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__filtered`]:\n column.filter !== undefined && column.filter !== null,\n },\n };\n let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const content = colheadFootRender(column);\n\n if (!content) return <Fragment></Fragment>;\n\n props =\n Number((props as TableTypes.CellProps).colSpan) > 1\n ? { ...props, scope: 'colgroup' }\n : { ...props, scope: 'col' };\n\n if (isSortable()) {\n const sort = column.order\n ? column.order === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n\n props = { ...props, 'aria-sort': sort };\n }\n\n return (\n <th {...props} key={column.prop}>\n {isSortable() ? (\n <button\n class={{\n [`${CSSNAMESPACE}__order-btn`]: true,\n [`${CSSNAMESPACE}__cell-content`]: true,\n }}\n onClick={handleColumnSortClick}\n >\n {colheadFootRender(column)}\n {column.filter !== undefined && column.filter !== null && (\n <nano-icon name=\"light/filter\" />\n )}\n {!!column.order &&\n (column.order === 'desc' ? (\n <nano-icon name=\"solid/long-arrow-down\" />\n ) : (\n <nano-icon name=\"solid/long-arrow-up\" />\n ))}\n <div class={`${CSSNAMESPACE}__status-icons`}>\n <nano-icon name=\"light/chevron-down\" />\n </div>\n </button>\n ) : (\n <div class={`${CSSNAMESPACE}__cell-content`}>\n {colheadFootRender(column)}\n {column.filter !== undefined && column.filter !== null && (\n <nano-icon name=\"light/bars-filter\" />\n )}\n </div>\n )}\n </th>\n );\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
- import { h, Host, readTask, Build, } from '@stencil/core';
4
+ import { h, Host, readTask, } from '@stencil/core';
5
5
  import { cyrb53 } from '../../utils/math';
6
6
  import { debounce } from '../../utils/throttle';
7
7
  import { TableColHead } from './table.header';
@@ -10,9 +10,10 @@ import { TableCell } from './table.cell';
10
10
  import { CSSNAMESPACE } from './table.constants';
11
11
  import { generateStore, storeSearch, storeSetConfig, storeSetData, storeSort, storeFilter, } from './table.store';
12
12
  import { findScrollParent, isInViewport } from './table.utils';
13
+ import { TablePinService } from './table.pin-service';
13
14
  const measurePerf = false;
14
15
  function perMark(name, end = false) {
15
- if (!Build.isDev || Build.isTesting || !performance || !measurePerf)
16
+ if (!performance || !measurePerf)
16
17
  return;
17
18
  if (end) {
18
19
  performance === null || performance === void 0 ? void 0 : performance.mark('end' + name);
@@ -45,7 +46,6 @@ export class Table {
45
46
  this.filters = [];
46
47
  this.currentFilters = '[]';
47
48
  this.currentSort = '';
48
- this.cacheScrollPosition = 0;
49
49
  this.measureHeight = 0;
50
50
  this.blockHeights = [];
51
51
  this.unitHeight = 0;
@@ -108,25 +108,40 @@ export class Table {
108
108
  * stop loop - it's on the current active block.
109
109
  */
110
110
  this.scrollHandler = () => {
111
+ var _a;
112
+ let scrollPos = 0;
113
+ perMark('scrollHandler');
111
114
  // don't listen if this table isn't in the viewport
112
- if (!this.store.general.state.isActive || !this.rows)
115
+ if (!((_a = this.store) === null || _a === void 0 ? void 0 : _a.general.state.isActive) || !this.rows)
113
116
  return;
114
117
  if (this.primaryBlockIndex === undefined)
115
118
  this.primaryBlockIndex = 0;
116
119
  readTask(() => {
117
- this.cacheScrollPosition = this.scrollParent.scrollTop || window.scrollY;
120
+ scrollPos =
121
+ typeof this.scrollParent.scrollTop !== 'undefined'
122
+ ? this.scrollParent.scrollTop
123
+ : window.scrollY;
124
+ scrollPos += this.host.offsetTop;
125
+ if (this.tablePinnedService) {
126
+ this.tablePinnedService.onScroll({
127
+ x: typeof this.scrollParent.scrollLeft !== 'undefined'
128
+ ? this.scrollParent.scrollLeft
129
+ : window.scrollX,
130
+ y: scrollPos,
131
+ });
132
+ }
118
133
  let cumulativeHeight = this.host.offsetTop;
119
134
  let blockIndex = 0;
120
135
  const blockLen = this.blocks.length;
121
- while (blockIndex < blockLen &&
122
- this.cacheScrollPosition >= cumulativeHeight) {
136
+ while (blockIndex < blockLen && scrollPos >= cumulativeHeight) {
123
137
  cumulativeHeight += this.getBlockHeight(blockIndex);
124
- if (this.cacheScrollPosition < cumulativeHeight) {
138
+ if (scrollPos < cumulativeHeight) {
125
139
  const potentialBlocks = [
126
140
  blockIndex,
127
141
  blockIndex + 1,
128
- Math.max(0, blockIndex - 1),
142
+ // Math.max(0, blockIndex - 1),
129
143
  ];
144
+ console.log(potentialBlocks);
130
145
  if (potentialBlocks.toString() !== this.activeBlocks.toString()) {
131
146
  this.activeBlocks = potentialBlocks;
132
147
  }
@@ -134,11 +149,7 @@ export class Table {
134
149
  }
135
150
  blockIndex++;
136
151
  }
137
- });
138
- };
139
- this.handleColumnPinned = (positions) => {
140
- Object.entries(positions).forEach(([key, applied]) => {
141
- this.tableEle.classList.toggle(`${CSSNAMESPACE}__pinned--${key}`, applied);
152
+ perMark('scrollHandler', true);
142
153
  });
143
154
  };
144
155
  this.handleResizeChange = (e) => {
@@ -149,12 +160,12 @@ export class Table {
149
160
  classes = [...e.target.className.split(' '), ...classes];
150
161
  this.tableWrapperEle.classList.add(...classes.filter((cl) => !!cl));
151
162
  };
152
- this.jsxRenderer = undefined;
163
+ this.customRenderer = undefined;
153
164
  this.type = 'table';
154
165
  this.caption = undefined;
155
166
  this.showCaption = false;
156
167
  this.loading = undefined;
157
- this.internalLoading = false;
168
+ this.internalLoading = true;
158
169
  this.placeholderSize = 5;
159
170
  this.rows = undefined;
160
171
  this.columns = [];
@@ -162,14 +173,14 @@ export class Table {
162
173
  this.rowRender = undefined;
163
174
  this.footRender = { pinned: 'bottom' };
164
175
  this.showFooter = false;
165
- this.perBlock = 40;
176
+ this.perBlock = 50;
166
177
  this.searchTerm = undefined;
167
178
  this.customFilterFn = undefined;
168
179
  this.customSortFn = undefined;
169
180
  this.defaultSort = true;
170
181
  this.virtualTotalItems = 0;
171
182
  this.blocks = [];
172
- this.activeBlocks = [0, 1, 2];
183
+ this.activeBlocks = [0, 1];
173
184
  this.debounceSetLoading = debounce(this.debounceSetLoading.bind(this), 50);
174
185
  }
175
186
  get _loading() {
@@ -198,6 +209,8 @@ export class Table {
198
209
  if (!this.isReady)
199
210
  requestAnimationFrame(() => this.setInitialBlockDimension());
200
211
  this._loading = false;
212
+ if (this.tablePinnedService)
213
+ this.tablePinnedService.assessRows();
201
214
  });
202
215
  }
203
216
  async handleColsChange() {
@@ -215,6 +228,10 @@ export class Table {
215
228
  virtualTotalItemsChangeHandler() {
216
229
  this.setBlocks();
217
230
  }
231
+ /** @readonly - shows the currently applied filters */
232
+ get appliedFilters() {
233
+ return this.filters;
234
+ }
218
235
  /** Remove any column sorts currently applied
219
236
  * @returns a promise which resolves when complete */
220
237
  async resetSorting() {
@@ -257,8 +274,6 @@ export class Table {
257
274
  }
258
275
  /** Updates a row model at a given index
259
276
  * @param row - the row to update.
260
- * *Note* - this should come from the `col.cellTemplate` or `row.rowRender.template` `rowModel` property
261
- * - rows are augmented with certain properties to aid with efficient rendering
262
277
  * @param rowIndex - the row index to insert this row
263
278
  */
264
279
  async updateRow(row, rowIndex) {
@@ -289,7 +304,9 @@ export class Table {
289
304
  ? document
290
305
  : this._scrollParent).removeEventListener('scroll', this.scrollHandler);
291
306
  }
292
- (ele === document.documentElement ? document : ele).addEventListener('scroll', this.scrollHandler);
307
+ (ele === document.documentElement ? document : ele).addEventListener('scroll', this.scrollHandler
308
+ // {passive: true}
309
+ );
293
310
  this._scrollParent = ele;
294
311
  }
295
312
  // used to fire `nanoTblBlockRendered` on block render change
@@ -392,10 +409,11 @@ export class Table {
392
409
  const res = await this.customFilterFn(this.filters);
393
410
  // if the response is 'true', the custom filter did it's thing
394
411
  // handover to finish and stop loading state.
395
- // if response is falsey, carry on to do a FE filter
412
+ // if response is falsy, carry on to do a FE filter
396
413
  if (res === true) {
397
414
  this.filterComplete();
398
415
  this._loading = false;
416
+ return;
399
417
  }
400
418
  }
401
419
  catch (e) {
@@ -404,8 +422,8 @@ export class Table {
404
422
  console.warn('custom filter failed', e);
405
423
  this.currentFilters = '';
406
424
  this._loading = false;
425
+ return;
407
426
  }
408
- return;
409
427
  }
410
428
  try {
411
429
  await storeFilter(this.host, this.filters);
@@ -421,9 +439,17 @@ export class Table {
421
439
  filterComplete() {
422
440
  this.columns = this.columns.map((c) => {
423
441
  const cFilter = this.filters.find((f) => f.prop === c.prop);
424
- if (cFilter)
442
+ // if we found a filter AND
443
+ // it isn't true / false and has a length OR
444
+ // it is true or false
445
+ if (cFilter &&
446
+ ((typeof cFilter.filter !== 'boolean' && cFilter.filter.length) ||
447
+ typeof cFilter.filter === 'boolean'))
425
448
  c.filter = cFilter.filter;
426
- else if (c.filter !== null && c.filter !== undefined)
449
+ // if a filter value is not set OR
450
+ // it isn't true / false and has no length
451
+ else if ((c.filter !== null && c.filter !== undefined) ||
452
+ (!!c.filter && typeof c.filter !== 'boolean' && !c.filter.length))
427
453
  c.filter = undefined;
428
454
  return c;
429
455
  });
@@ -512,6 +538,8 @@ export class Table {
512
538
  if (!!col) {
513
539
  await this.sortStart(col.order, col.prop);
514
540
  }
541
+ if (this.tablePinnedService)
542
+ this.tablePinnedService.assessCols();
515
543
  }
516
544
  /** Split up all incoming rows into 'blocks' split amongst tbody elements.
517
545
  * These can then be hidden / shown to improve performance.
@@ -634,6 +662,9 @@ export class Table {
634
662
  }
635
663
  componentDidLoad() {
636
664
  this.setInitialBlockDimension();
665
+ if (!this.tablePinnedService) {
666
+ this.tablePinnedService = new TablePinService(this.tableEle, this.scrollParent);
667
+ }
637
668
  }
638
669
  componentShouldUpdate(_newVal, _oldVal, stateName) {
639
670
  // stop double rendering - we use the store for rendering internally
@@ -641,7 +672,7 @@ export class Table {
641
672
  // but we don't want it to cause renders
642
673
  if (['rows', 'columns'].includes(stateName))
643
674
  return false;
644
- if (Build.isDev && !Build.isTesting && measurePerf)
675
+ if (measurePerf)
645
676
  console.log(stateName, _newVal, _oldVal);
646
677
  }
647
678
  componentWillRender() {
@@ -662,17 +693,20 @@ export class Table {
662
693
  }
663
694
  render() {
664
695
  this.blockElements = [];
665
- return (h(Host, null, h("div", { class: `${CSSNAMESPACE}__top-anchor`, ref: (a) => (this.topAnchorEle = a) }, "\u00A0"), h("nano-resize-observe", { states: "576w sm, 768w md", class: "sm md", onNanoResizeStateChange: this.handleResizeChange }), h("div", { class: `${CSSNAMESPACE}__wrap sm md`, ref: (div) => (this.tableWrapperEle = div), "aria-labelledby": 'table-caption-' + this.renderId, tabindex: this.type === 'grid' ? '0' : undefined }, h("nano-progress-bar", { indeterminate: true, class: {
696
+ return (h(Host, null, h("div", { class: `${CSSNAMESPACE}__top-anchor`, ref: (a) => (this.topAnchorEle = a) }, "\u00A0"), h("nano-resize-observe", { states: "576w sm, 768w md", class: "sm md", onNanoResizeStateChange: this.handleResizeChange, onNanoResize: () => {
697
+ if (this.tablePinnedService)
698
+ this.tablePinnedService.onResize();
699
+ } }), h("div", { class: `${CSSNAMESPACE}__wrap sm md`, ref: (div) => (this.tableWrapperEle = div), "aria-labelledby": 'nano-table-caption-' + this.renderId, tabindex: this.type === 'grid' ? '0' : undefined }, h("nano-progress-bar", { indeterminate: true, class: {
666
700
  [`${CSSNAMESPACE}__progress-bar`]: true,
667
701
  [`${CSSNAMESPACE}__progress-bar--show`]: this._loading,
668
- } }), h("table", { role: this.type === 'grid' ? 'grid' : undefined, "aria-rowcount": this.store.data.state.rows.length, "aria-colcount": this.store.config.state.columns.length, class: `${CSSNAMESPACE}`, ref: (tbl) => (this.tableEle = tbl) }, h("caption", { class: {
702
+ } }), h("table", { role: this.type === 'grid' ? 'grid' : undefined, "aria-rowcount": this.store.data.state.rows.length, "aria-colcount": this.store.config.state.columns.length, class: `${CSSNAMESPACE}`, ref: (tbl) => (this.tableEle = tbl), id: 'nano-table-' + this.renderId }, h("caption", { class: {
669
703
  [`${CSSNAMESPACE}__caption`]: true,
670
704
  [`${CSSNAMESPACE}__caption--hide`]: !this.showCaption,
671
- }, id: 'table-caption-' + this.renderId }, h("slot", { name: "caption" }, this.caption)), h("thead", null, h(TableHeadFootRow, { rowRenderer: this.headRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
672
- h(TableColHead, { column: colModel, headRenderer: this.headRender, onColumnSortClick: this.sortStart, onColumnPinned: this.handleColumnPinned, defaults: {
705
+ }, id: 'nano-table-caption-' + this.renderId }, h("slot", { name: "caption" }, this.caption)), h("thead", null, h(TableHeadFootRow, { rowRenderer: this.headRender }, this.store.config.state.columns.map((colModel) => [
706
+ h(TableColHead, { column: colModel, headRenderer: this.headRender, onColumnSortClick: this.sortStart, defaults: {
673
707
  sortable: this.defaultSort,
674
708
  } }),
675
- ]))), 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) })))))))), h("tr", { hidden: !!this._loading || !!this.blocks.length }, 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) => {
709
+ ]))), this._loading && !this.blocks.length && (h("tbody", { class: `${CSSNAMESPACE}__active ${CSSNAMESPACE}__loading` }, [...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) })))))))), h("tr", { hidden: !!this._loading || !!this.blocks.length }, 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) => {
676
710
  this.blockElements.push(tb);
677
711
  }, class: {
678
712
  [`${CSSNAMESPACE}__inactive`]: !this.activeBlocks.includes(blockIndex),
@@ -680,10 +714,10 @@ export class Table {
680
714
  } }, this.activeBlocks.includes(blockIndex) ? (block.rows.map((row, i) => {
681
715
  const rowIndex = blockIndex > 0 ? blockIndex * this.perBlock + i : i;
682
716
  return (h(TableRow, { rowRenderer: this.rowRender, rowModel: row, rowIndex: rowIndex }, this.store.config.state.columns.map((_colModel, colIndex) => (h(TableCell, { rowIndex: rowIndex, colIndex: colIndex })))));
683
- })) : (h("tr", null, h("td", { colSpan: this.store.config.state.columns.length, style: {
717
+ })) : (h("tr", { class: `${CSSNAMESPACE}__tr--placeholder` }, h("td", { colSpan: this.store.config.state.columns.length, style: {
684
718
  height: this.getBlockHeight(blockIndex) + 'px',
685
- } })))))), this.showFooter && (h("tfoot", null, h(TableHeadFootRow, { rowRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
686
- h(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnPinned: this.handleColumnPinned, onColumnSortClick: this.sortStart, defaults: {
719
+ } })))))), this.showFooter && (h("tfoot", null, h(TableHeadFootRow, { rowRenderer: this.footRender }, this.store.config.state.columns.map((colModel) => [
720
+ h(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnSortClick: this.sortStart, defaults: {
687
721
  sortable: this.defaultSort,
688
722
  } }),
689
723
  ]))))), !!this.blocks.length && (h("nano-spinner", { type: "circle", class: {
@@ -704,16 +738,15 @@ export class Table {
704
738
  }
705
739
  static get properties() {
706
740
  return {
707
- "jsxRenderer": {
741
+ "customRenderer": {
708
742
  "type": "unknown",
709
743
  "mutable": false,
710
744
  "complexType": {
711
- "original": "TableTypes.HFunc<any>",
712
- "resolved": "HFunc<any>",
745
+ "original": "(node: any, cell: HTMLElement) => void",
746
+ "resolved": "(node: any, cell: HTMLElement) => void",
713
747
  "references": {
714
- "TableTypes": {
715
- "location": "import",
716
- "path": "../../interface"
748
+ "HTMLElement": {
749
+ "location": "global"
717
750
  }
718
751
  }
719
752
  },
@@ -721,7 +754,7 @@ export class Table {
721
754
  "optional": false,
722
755
  "docs": {
723
756
  "tags": [],
724
- "text": ""
757
+ "text": "Function called whenever `col.cellTemplate` renders an unknown object.\nThe function should render a valid HTMLElement to the cell arg.\nExample usage - render JSX from a 3rd party lib and append the result to the cell element."
725
758
  },
726
759
  "getter": false,
727
760
  "setter": false
@@ -797,7 +830,7 @@ export class Table {
797
830
  "optional": false,
798
831
  "docs": {
799
832
  "tags": [],
800
- "text": "Will show a loading state when set to true.\nBy default, will be shown automatically if `rows` is a promise waiting to resolve\nor when performing custom filtering or sorting.\n*Note* when set manually, will overwrite any internal loading state.\nSet to 'undefined' to revert to default behaviour."
833
+ "text": "Will show a loading state when set to true.\nBy default, will be shown automatically if `rows` is a promise waiting to resolve / or falsy\n*or* when performing custom filtering or sorting.\n*Note* when set manually, will overwrite any internal loading state.\nSet to 'undefined' to revert to default behaviour."
801
834
  },
802
835
  "getter": false,
803
836
  "setter": false,
@@ -979,7 +1012,7 @@ export class Table {
979
1012
  "setter": false,
980
1013
  "attribute": "per-block",
981
1014
  "reflect": false,
982
- "defaultValue": "40"
1015
+ "defaultValue": "50"
983
1016
  },
984
1017
  "blocksLength": {
985
1018
  "type": "number",
@@ -1039,7 +1072,7 @@ export class Table {
1039
1072
  "optional": true,
1040
1073
  "docs": {
1041
1074
  "tags": [],
1042
- "text": "A custom filtering function. Should return a promise.\nIf the promise resolves as `true` the column UI will be updated.\nIf the promise resolves as falsey, the sort will be performed by the component.\nA good use-case would be performing the filter on a server / via fetch.\nThen on success, updating the table's data via the `rows` property"
1075
+ "text": "A custom filtering function. Should return a promise.\nIf the promise resolves as `true` the column UI will be updated.\nIf the promise resolves as falsy, the sort will be performed by the component.\nA good use-case would be performing the filter on a server / via fetch.\nThen on success, updating the table's data via the `rows` property"
1043
1076
  },
1044
1077
  "getter": false,
1045
1078
  "setter": false
@@ -1108,6 +1141,27 @@ export class Table {
1108
1141
  "attribute": "virtual-total-items",
1109
1142
  "reflect": false,
1110
1143
  "defaultValue": "0"
1144
+ },
1145
+ "appliedFilters": {
1146
+ "type": "unknown",
1147
+ "mutable": false,
1148
+ "complexType": {
1149
+ "original": "Filter[]",
1150
+ "resolved": "Filter[]",
1151
+ "references": {}
1152
+ },
1153
+ "required": false,
1154
+ "optional": false,
1155
+ "docs": {
1156
+ "tags": [{
1157
+ "name": "readonly",
1158
+ "text": "- shows the currently applied filters"
1159
+ }],
1160
+ "text": ""
1161
+ },
1162
+ "getter": true,
1163
+ "setter": false,
1164
+ "defaultValue": "[]"
1111
1165
  }
1112
1166
  };
1113
1167
  }
@@ -1428,9 +1482,9 @@ export class Table {
1428
1482
  "parameters": [{
1429
1483
  "tags": [{
1430
1484
  "name": "param",
1431
- "text": "row - the row to update.\n*Note* - this should come from the `col.cellTemplate` or `row.rowRender.template` `rowModel` property\n- rows are augmented with certain properties to aid with efficient rendering"
1485
+ "text": "row - the row to update."
1432
1486
  }],
1433
- "text": "- the row to update.\n*Note* - this should come from the `col.cellTemplate` or `row.rowRender.template` `rowModel` property\n- rows are augmented with certain properties to aid with efficient rendering"
1487
+ "text": "- the row to update."
1434
1488
  }, {
1435
1489
  "tags": [{
1436
1490
  "name": "param",
@@ -1453,7 +1507,7 @@ export class Table {
1453
1507
  "text": "Updates a row model at a given index",
1454
1508
  "tags": [{
1455
1509
  "name": "param",
1456
- "text": "row - the row to update.\n*Note* - this should come from the `col.cellTemplate` or `row.rowRender.template` `rowModel` property\n- rows are augmented with certain properties to aid with efficient rendering"
1510
+ "text": "row - the row to update."
1457
1511
  }, {
1458
1512
  "name": "param",
1459
1513
  "text": "rowIndex - the row index to insert this row"