@nanoporetech-digital/components 5.1.3 → 5.2.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 (187) hide show
  1. package/CHANGELOG.md +15 -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-04993bb4.js} +552 -181
  28. package/dist/cjs/nano-table-04993bb4.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-85877b23.js} +4 -4
  31. package/dist/cjs/table.worker-85877b23.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 +96 -43
  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 +525 -183
  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-91f09583.js} +553 -182
  101. package/dist/esm/nano-table-91f09583.js.map +1 -0
  102. package/dist/esm/nano-table.entry.js +2 -2
  103. package/dist/esm/{table.worker-c17a27ed.js → table.worker-625475ba.js} +4 -4
  104. package/dist/esm/table.worker-625475ba.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-17ee0c07.entry.js +5 -0
  114. package/dist/nano-components/{p-6975f110.entry.js → p-192902e0.entry.js} +2 -2
  115. package/dist/nano-components/{p-a6ff5ca6.js → p-1a0b5bc3.js} +2 -2
  116. package/dist/nano-components/{p-3a761d77.entry.js → p-1b791810.entry.js} +2 -2
  117. package/dist/nano-components/p-3de3449e.js +5 -0
  118. package/dist/nano-components/p-3de3449e.js.map +1 -0
  119. package/dist/nano-components/{p-3b4b7f40.entry.js → p-3eb6d833.entry.js} +2 -2
  120. package/dist/nano-components/{p-a1c0afb6.entry.js → p-4884b65a.entry.js} +2 -2
  121. package/dist/nano-components/{p-34501eae.entry.js → p-565793a2.entry.js} +2 -2
  122. package/dist/nano-components/p-5aae2588.entry.js +5 -0
  123. package/dist/nano-components/p-5aae2588.entry.js.map +1 -0
  124. package/dist/nano-components/{p-935aef3d.entry.js → p-6920ad69.entry.js} +2 -2
  125. package/dist/nano-components/{p-1c6c94cb.entry.js → p-7baa9e14.entry.js} +2 -2
  126. package/dist/nano-components/p-7bff5224.js +5 -0
  127. package/dist/nano-components/p-7bff5224.js.map +1 -0
  128. package/dist/nano-components/{p-f60fe933.entry.js → p-898cbac7.entry.js} +2 -2
  129. package/dist/nano-components/{p-ace1ffc2.entry.js → p-a362bd23.entry.js} +2 -2
  130. package/dist/nano-components/{p-eb6c9191.entry.js → p-b72df1aa.entry.js} +2 -2
  131. package/dist/nano-components/{p-9c4efe14.entry.js → p-bf18e298.entry.js} +2 -2
  132. package/dist/nano-components/p-bf18e298.entry.js.map +1 -0
  133. package/dist/nano-components/p-ce5efc3f.entry.js +5 -0
  134. package/dist/nano-components/p-ce5efc3f.entry.js.map +1 -0
  135. package/dist/nano-components/{p-1b687f96.entry.js → p-d0eefd52.entry.js} +2 -2
  136. package/dist/nano-components/{p-1a9d9956.entry.js → p-d74e2642.entry.js} +2 -2
  137. package/dist/nano-components/{p-2e63676f.js → p-dfbf0d56.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 -7
  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 +575 -190
  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-30cc21c2.entry.js +0 -5
  165. package/dist/nano-components/p-59eb9caa.js +0 -5
  166. package/dist/nano-components/p-59eb9caa.js.map +0 -1
  167. package/dist/nano-components/p-7759d185.entry.js +0 -5
  168. package/dist/nano-components/p-7759d185.entry.js.map +0 -1
  169. package/dist/nano-components/p-7d6065c6.entry.js.map +0 -1
  170. package/dist/nano-components/p-9746b0a5.js +0 -5
  171. package/dist/nano-components/p-9746b0a5.js.map +0 -1
  172. package/dist/nano-components/p-9c4efe14.entry.js.map +0 -1
  173. /package/dist/nano-components/{p-2e63676f.js.map → p-17ee0c07.entry.js.map} +0 -0
  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-3b4b7f40.entry.js.map → p-3eb6d833.entry.js.map} +0 -0
  178. /package/dist/nano-components/{p-a1c0afb6.entry.js.map → p-4884b65a.entry.js.map} +0 -0
  179. /package/dist/nano-components/{p-34501eae.entry.js.map → p-565793a2.entry.js.map} +0 -0
  180. /package/dist/nano-components/{p-935aef3d.entry.js.map → p-6920ad69.entry.js.map} +0 -0
  181. /package/dist/nano-components/{p-1c6c94cb.entry.js.map → p-7baa9e14.entry.js.map} +0 -0
  182. /package/dist/nano-components/{p-f60fe933.entry.js.map → p-898cbac7.entry.js.map} +0 -0
  183. /package/dist/nano-components/{p-ace1ffc2.entry.js.map → p-a362bd23.entry.js.map} +0 -0
  184. /package/dist/nano-components/{p-eb6c9191.entry.js.map → p-b72df1aa.entry.js.map} +0 -0
  185. /package/dist/nano-components/{p-1b687f96.entry.js.map → p-d0eefd52.entry.js.map} +0 -0
  186. /package/dist/nano-components/{p-1a9d9956.entry.js.map → p-d74e2642.entry.js.map} +0 -0
  187. /package/dist/nano-components/{p-30cc21c2.entry.js.map → p-dfbf0d56.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);
@@ -108,13 +109,24 @@ export class Table {
108
109
  * stop loop - it's on the current active block.
109
110
  */
110
111
  this.scrollHandler = () => {
112
+ var _a;
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
+ this.cacheScrollPosition =
121
+ typeof this.scrollParent.scrollTop !== 'undefined'
122
+ ? this.scrollParent.scrollTop
123
+ : window.scrollY;
124
+ if (this.tablePinnedService) {
125
+ this.tablePinnedService.onScroll({
126
+ x: this.scrollParent.scrollLeft || window.scrollX,
127
+ y: this.cacheScrollPosition,
128
+ });
129
+ }
118
130
  let cumulativeHeight = this.host.offsetTop;
119
131
  let blockIndex = 0;
120
132
  const blockLen = this.blocks.length;
@@ -125,7 +137,9 @@ export class Table {
125
137
  const potentialBlocks = [
126
138
  blockIndex,
127
139
  blockIndex + 1,
128
- Math.max(0, blockIndex - 1),
140
+ this.cacheScrollPosition,
141
+ cumulativeHeight,
142
+ // Math.max(0, blockIndex - 1),
129
143
  ];
130
144
  if (potentialBlocks.toString() !== this.activeBlocks.toString()) {
131
145
  this.activeBlocks = potentialBlocks;
@@ -134,11 +148,7 @@ export class Table {
134
148
  }
135
149
  blockIndex++;
136
150
  }
137
- });
138
- };
139
- this.handleColumnPinned = (positions) => {
140
- Object.entries(positions).forEach(([key, applied]) => {
141
- this.tableEle.classList.toggle(`${CSSNAMESPACE}__pinned--${key}`, applied);
151
+ perMark('scrollHandler', true);
142
152
  });
143
153
  };
144
154
  this.handleResizeChange = (e) => {
@@ -149,12 +159,12 @@ export class Table {
149
159
  classes = [...e.target.className.split(' '), ...classes];
150
160
  this.tableWrapperEle.classList.add(...classes.filter((cl) => !!cl));
151
161
  };
152
- this.jsxRenderer = undefined;
162
+ this.customRenderer = undefined;
153
163
  this.type = 'table';
154
164
  this.caption = undefined;
155
165
  this.showCaption = false;
156
166
  this.loading = undefined;
157
- this.internalLoading = false;
167
+ this.internalLoading = true;
158
168
  this.placeholderSize = 5;
159
169
  this.rows = undefined;
160
170
  this.columns = [];
@@ -162,14 +172,14 @@ export class Table {
162
172
  this.rowRender = undefined;
163
173
  this.footRender = { pinned: 'bottom' };
164
174
  this.showFooter = false;
165
- this.perBlock = 40;
175
+ this.perBlock = 50;
166
176
  this.searchTerm = undefined;
167
177
  this.customFilterFn = undefined;
168
178
  this.customSortFn = undefined;
169
179
  this.defaultSort = true;
170
180
  this.virtualTotalItems = 0;
171
181
  this.blocks = [];
172
- this.activeBlocks = [0, 1, 2];
182
+ this.activeBlocks = [0, 1];
173
183
  this.debounceSetLoading = debounce(this.debounceSetLoading.bind(this), 50);
174
184
  }
175
185
  get _loading() {
@@ -198,6 +208,8 @@ export class Table {
198
208
  if (!this.isReady)
199
209
  requestAnimationFrame(() => this.setInitialBlockDimension());
200
210
  this._loading = false;
211
+ if (this.tablePinnedService)
212
+ this.tablePinnedService.assessRows();
201
213
  });
202
214
  }
203
215
  async handleColsChange() {
@@ -215,6 +227,10 @@ export class Table {
215
227
  virtualTotalItemsChangeHandler() {
216
228
  this.setBlocks();
217
229
  }
230
+ /** @readonly - shows the currently applied filters */
231
+ get appliedFilters() {
232
+ return this.filters;
233
+ }
218
234
  /** Remove any column sorts currently applied
219
235
  * @returns a promise which resolves when complete */
220
236
  async resetSorting() {
@@ -257,8 +273,6 @@ export class Table {
257
273
  }
258
274
  /** Updates a row model at a given index
259
275
  * @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
276
  * @param rowIndex - the row index to insert this row
263
277
  */
264
278
  async updateRow(row, rowIndex) {
@@ -289,7 +303,9 @@ export class Table {
289
303
  ? document
290
304
  : this._scrollParent).removeEventListener('scroll', this.scrollHandler);
291
305
  }
292
- (ele === document.documentElement ? document : ele).addEventListener('scroll', this.scrollHandler);
306
+ (ele === document.documentElement ? document : ele).addEventListener('scroll', this.scrollHandler
307
+ // {passive: true}
308
+ );
293
309
  this._scrollParent = ele;
294
310
  }
295
311
  // used to fire `nanoTblBlockRendered` on block render change
@@ -392,10 +408,11 @@ export class Table {
392
408
  const res = await this.customFilterFn(this.filters);
393
409
  // if the response is 'true', the custom filter did it's thing
394
410
  // handover to finish and stop loading state.
395
- // if response is falsey, carry on to do a FE filter
411
+ // if response is falsy, carry on to do a FE filter
396
412
  if (res === true) {
397
413
  this.filterComplete();
398
414
  this._loading = false;
415
+ return;
399
416
  }
400
417
  }
401
418
  catch (e) {
@@ -404,8 +421,8 @@ export class Table {
404
421
  console.warn('custom filter failed', e);
405
422
  this.currentFilters = '';
406
423
  this._loading = false;
424
+ return;
407
425
  }
408
- return;
409
426
  }
410
427
  try {
411
428
  await storeFilter(this.host, this.filters);
@@ -421,9 +438,17 @@ export class Table {
421
438
  filterComplete() {
422
439
  this.columns = this.columns.map((c) => {
423
440
  const cFilter = this.filters.find((f) => f.prop === c.prop);
424
- if (cFilter)
441
+ // if we found a filter AND
442
+ // it isn't true / false and has a length OR
443
+ // it is true or false
444
+ if (cFilter &&
445
+ ((typeof cFilter.filter !== 'boolean' && cFilter.filter.length) ||
446
+ typeof cFilter.filter === 'boolean'))
425
447
  c.filter = cFilter.filter;
426
- else if (c.filter !== null && c.filter !== undefined)
448
+ // if a filter value is not set OR
449
+ // it isn't true / false and has no length
450
+ else if ((c.filter !== null && c.filter !== undefined) ||
451
+ (!!c.filter && typeof c.filter !== 'boolean' && !c.filter.length))
427
452
  c.filter = undefined;
428
453
  return c;
429
454
  });
@@ -512,6 +537,8 @@ export class Table {
512
537
  if (!!col) {
513
538
  await this.sortStart(col.order, col.prop);
514
539
  }
540
+ if (this.tablePinnedService)
541
+ this.tablePinnedService.assessCols();
515
542
  }
516
543
  /** Split up all incoming rows into 'blocks' split amongst tbody elements.
517
544
  * These can then be hidden / shown to improve performance.
@@ -634,6 +661,9 @@ export class Table {
634
661
  }
635
662
  componentDidLoad() {
636
663
  this.setInitialBlockDimension();
664
+ if (!this.tablePinnedService) {
665
+ this.tablePinnedService = new TablePinService(this.tableEle, this.scrollParent);
666
+ }
637
667
  }
638
668
  componentShouldUpdate(_newVal, _oldVal, stateName) {
639
669
  // stop double rendering - we use the store for rendering internally
@@ -641,7 +671,7 @@ export class Table {
641
671
  // but we don't want it to cause renders
642
672
  if (['rows', 'columns'].includes(stateName))
643
673
  return false;
644
- if (Build.isDev && !Build.isTesting && measurePerf)
674
+ if (measurePerf)
645
675
  console.log(stateName, _newVal, _oldVal);
646
676
  }
647
677
  componentWillRender() {
@@ -662,17 +692,20 @@ export class Table {
662
692
  }
663
693
  render() {
664
694
  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: {
695
+ 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: () => {
696
+ if (this.tablePinnedService)
697
+ this.tablePinnedService.onResize();
698
+ } }), 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
699
  [`${CSSNAMESPACE}__progress-bar`]: true,
667
700
  [`${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: {
701
+ } }), 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
702
  [`${CSSNAMESPACE}__caption`]: true,
670
703
  [`${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: {
704
+ }, 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) => [
705
+ h(TableColHead, { column: colModel, headRenderer: this.headRender, onColumnSortClick: this.sortStart, defaults: {
673
706
  sortable: this.defaultSort,
674
707
  } }),
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) => {
708
+ ]))), 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
709
  this.blockElements.push(tb);
677
710
  }, class: {
678
711
  [`${CSSNAMESPACE}__inactive`]: !this.activeBlocks.includes(blockIndex),
@@ -680,10 +713,10 @@ export class Table {
680
713
  } }, this.activeBlocks.includes(blockIndex) ? (block.rows.map((row, i) => {
681
714
  const rowIndex = blockIndex > 0 ? blockIndex * this.perBlock + i : i;
682
715
  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: {
716
+ })) : (h("tr", { class: `${CSSNAMESPACE}__tr--placeholder` }, h("td", { colSpan: this.store.config.state.columns.length, style: {
684
717
  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: {
718
+ } })))))), this.showFooter && (h("tfoot", null, h(TableHeadFootRow, { rowRenderer: this.footRender }, this.store.config.state.columns.map((colModel) => [
719
+ h(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnSortClick: this.sortStart, defaults: {
687
720
  sortable: this.defaultSort,
688
721
  } }),
689
722
  ]))))), !!this.blocks.length && (h("nano-spinner", { type: "circle", class: {
@@ -704,16 +737,15 @@ export class Table {
704
737
  }
705
738
  static get properties() {
706
739
  return {
707
- "jsxRenderer": {
740
+ "customRenderer": {
708
741
  "type": "unknown",
709
742
  "mutable": false,
710
743
  "complexType": {
711
- "original": "TableTypes.HFunc<any>",
712
- "resolved": "HFunc<any>",
744
+ "original": "(node: any, cell: HTMLElement) => void",
745
+ "resolved": "(node: any, cell: HTMLElement) => void",
713
746
  "references": {
714
- "TableTypes": {
715
- "location": "import",
716
- "path": "../../interface"
747
+ "HTMLElement": {
748
+ "location": "global"
717
749
  }
718
750
  }
719
751
  },
@@ -721,7 +753,7 @@ export class Table {
721
753
  "optional": false,
722
754
  "docs": {
723
755
  "tags": [],
724
- "text": ""
756
+ "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
757
  },
726
758
  "getter": false,
727
759
  "setter": false
@@ -797,7 +829,7 @@ export class Table {
797
829
  "optional": false,
798
830
  "docs": {
799
831
  "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."
832
+ "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
833
  },
802
834
  "getter": false,
803
835
  "setter": false,
@@ -979,7 +1011,7 @@ export class Table {
979
1011
  "setter": false,
980
1012
  "attribute": "per-block",
981
1013
  "reflect": false,
982
- "defaultValue": "40"
1014
+ "defaultValue": "50"
983
1015
  },
984
1016
  "blocksLength": {
985
1017
  "type": "number",
@@ -1039,7 +1071,7 @@ export class Table {
1039
1071
  "optional": true,
1040
1072
  "docs": {
1041
1073
  "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"
1074
+ "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
1075
  },
1044
1076
  "getter": false,
1045
1077
  "setter": false
@@ -1108,6 +1140,27 @@ export class Table {
1108
1140
  "attribute": "virtual-total-items",
1109
1141
  "reflect": false,
1110
1142
  "defaultValue": "0"
1143
+ },
1144
+ "appliedFilters": {
1145
+ "type": "unknown",
1146
+ "mutable": false,
1147
+ "complexType": {
1148
+ "original": "Filter[]",
1149
+ "resolved": "Filter[]",
1150
+ "references": {}
1151
+ },
1152
+ "required": false,
1153
+ "optional": false,
1154
+ "docs": {
1155
+ "tags": [{
1156
+ "name": "readonly",
1157
+ "text": "- shows the currently applied filters"
1158
+ }],
1159
+ "text": ""
1160
+ },
1161
+ "getter": true,
1162
+ "setter": false,
1163
+ "defaultValue": "[]"
1111
1164
  }
1112
1165
  };
1113
1166
  }
@@ -1428,9 +1481,9 @@ export class Table {
1428
1481
  "parameters": [{
1429
1482
  "tags": [{
1430
1483
  "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"
1484
+ "text": "row - the row to update."
1432
1485
  }],
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"
1486
+ "text": "- the row to update."
1434
1487
  }, {
1435
1488
  "tags": [{
1436
1489
  "name": "param",
@@ -1453,7 +1506,7 @@ export class Table {
1453
1506
  "text": "Updates a row model at a given index",
1454
1507
  "tags": [{
1455
1508
  "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"
1509
+ "text": "row - the row to update."
1457
1510
  }, {
1458
1511
  "name": "param",
1459
1512
  "text": "rowIndex - the row index to insert this row"