@nanoporetech-digital/components 4.9.4 → 5.0.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 (240) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/dist/cjs/drag-777bd8dd.js +74 -0
  3. package/dist/cjs/drag-777bd8dd.js.map +1 -0
  4. package/dist/cjs/{form-control-2e900f54.js → form-control-443e90bf.js} +2 -3
  5. package/dist/cjs/form-control-443e90bf.js.map +1 -0
  6. package/dist/cjs/index-71f899a7.js +10 -2
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/cjs/nano-components.cjs.js +1 -1
  9. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +6 -6
  10. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  11. package/dist/cjs/nano-grid-item.cjs.entry.js +29 -0
  12. package/dist/cjs/nano-grid-item.cjs.entry.js.map +1 -0
  13. package/dist/cjs/nano-grid_2.cjs.entry.js +436 -0
  14. package/dist/cjs/nano-grid_2.cjs.entry.js.map +1 -0
  15. package/dist/cjs/nano-hero.cjs.entry.js +4 -10
  16. package/dist/cjs/nano-hero.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-icon-button_2.cjs.entry.js +40 -3
  18. package/dist/cjs/nano-icon-button_2.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-input.cjs.entry.js +2 -2
  20. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  21. package/dist/cjs/nano-range.cjs.entry.js +1 -1
  22. package/dist/cjs/nano-range.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nano-sortable.cjs.entry.js +654 -0
  24. package/dist/cjs/nano-sortable.cjs.entry.js.map +1 -0
  25. package/dist/cjs/nano-split-pane.cjs.entry.js +30 -45
  26. package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -1
  27. package/dist/cjs/nano-tab-group.cjs.entry.js +39 -43
  28. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  29. package/dist/cjs/nano-tab.cjs.entry.js +3 -3
  30. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  31. package/dist/cjs/{nano-table-54a4ba34.js → nano-table-11052a34.js} +52 -172
  32. package/dist/cjs/nano-table-11052a34.js.map +1 -0
  33. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  34. package/dist/cjs/{table.worker-20ed37a5.js → table.worker-83433a8b.js} +3 -3
  35. package/dist/cjs/table.worker-83433a8b.js.map +1 -0
  36. package/dist/cjs/{table.worker-f820b411.js → table.worker-bd51e29f.js} +1 -1
  37. package/dist/collection/collection-manifest.json +1 -0
  38. package/dist/collection/components/form-control/form-control.js +1 -2
  39. package/dist/collection/components/form-control/form-control.js.map +1 -1
  40. package/dist/collection/components/grid/grid-item.js +11 -136
  41. package/dist/collection/components/grid/grid-item.js.map +1 -1
  42. package/dist/collection/components/grid/grid.css +9 -242
  43. package/dist/collection/components/grid/grid.js +248 -240
  44. package/dist/collection/components/grid/grid.js.map +1 -1
  45. package/dist/collection/components/hero/hero.css +42 -89
  46. package/dist/collection/components/hero/hero.js +4 -11
  47. package/dist/collection/components/hero/hero.js.map +1 -1
  48. package/dist/collection/components/icon-button/icon-button.css +18 -4
  49. package/dist/collection/components/icon-button/icon-button.js +83 -4
  50. package/dist/collection/components/icon-button/icon-button.js.map +1 -1
  51. package/dist/collection/components/input/input.css +8 -9
  52. package/dist/collection/components/nav-item/nav-item.js +4 -4
  53. package/dist/collection/components/nav-item/nav-item.js.map +1 -1
  54. package/dist/collection/components/range/range.css +0 -3
  55. package/dist/collection/components/select/select.css +8 -9
  56. package/dist/collection/components/sortable/sortable.css +28 -0
  57. package/dist/collection/components/sortable/sortable.js +1181 -0
  58. package/dist/collection/components/sortable/sortable.js.map +1 -0
  59. package/dist/collection/components/split-pane/split-pane.js +29 -27
  60. package/dist/collection/components/split-pane/split-pane.js.map +1 -1
  61. package/dist/collection/components/table/table-interface.js.map +1 -1
  62. package/dist/collection/components/table/table.css +18 -38
  63. package/dist/collection/components/table/table.header.js +3 -86
  64. package/dist/collection/components/table/table.header.js.map +1 -1
  65. package/dist/collection/components/table/table.js +27 -108
  66. package/dist/collection/components/table/table.js.map +1 -1
  67. package/dist/collection/components/table/table.row.js +7 -7
  68. package/dist/collection/components/table/table.row.js.map +1 -1
  69. package/dist/collection/components/table/table.store.js +1 -1
  70. package/dist/collection/components/table/table.store.js.map +1 -1
  71. package/dist/collection/components/table/table.worker.js +3 -3
  72. package/dist/collection/components/table/table.worker.js.map +1 -1
  73. package/dist/collection/components/tabs/tab-group.css +9 -13
  74. package/dist/collection/components/tabs/tab-group.js +39 -43
  75. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  76. package/dist/collection/components/tabs/tab.css +53 -14
  77. package/dist/collection/components/tabs/tab.js +8 -2
  78. package/dist/collection/components/tabs/tab.js.map +1 -1
  79. package/dist/collection/utils/constructible-style.js +129 -0
  80. package/dist/collection/utils/constructible-style.js.map +1 -0
  81. package/dist/collection/utils/drag.js +52 -4
  82. package/dist/collection/utils/drag.js.map +1 -1
  83. package/dist/components/drag.js +72 -0
  84. package/dist/components/drag.js.map +1 -0
  85. package/dist/components/form-control.js +1 -2
  86. package/dist/components/form-control.js.map +1 -1
  87. package/dist/components/grid.js +268 -183
  88. package/dist/components/grid.js.map +1 -1
  89. package/dist/components/icon-button.js +45 -5
  90. package/dist/components/icon-button.js.map +1 -1
  91. package/dist/components/index.d.ts +1 -0
  92. package/dist/components/index.js +1 -0
  93. package/dist/components/index.js.map +1 -1
  94. package/dist/components/input.js +1 -1
  95. package/dist/components/input.js.map +1 -1
  96. package/dist/components/nano-grid-item.js +33 -1
  97. package/dist/components/nano-grid-item.js.map +1 -1
  98. package/dist/components/nano-hero.js +6 -19
  99. package/dist/components/nano-hero.js.map +1 -1
  100. package/dist/components/nano-range.js +1 -1
  101. package/dist/components/nano-range.js.map +1 -1
  102. package/dist/components/nano-sortable.d.ts +11 -0
  103. package/dist/components/nano-sortable.js +692 -0
  104. package/dist/components/nano-sortable.js.map +1 -0
  105. package/dist/components/nano-split-pane.js +30 -45
  106. package/dist/components/nano-split-pane.js.map +1 -1
  107. package/dist/components/nano-tab-group.js +40 -44
  108. package/dist/components/nano-tab-group.js.map +1 -1
  109. package/dist/components/nano-tab.js +3 -3
  110. package/dist/components/nano-tab.js.map +1 -1
  111. package/dist/components/nav-item.js +4 -4
  112. package/dist/components/nav-item.js.map +1 -1
  113. package/dist/components/select.js +1 -1
  114. package/dist/components/select.js.map +1 -1
  115. package/dist/components/table.js +52 -173
  116. package/dist/components/table.js.map +1 -1
  117. package/dist/components/table.worker.js +1 -1
  118. package/dist/esm/drag-1723a4cc.js +72 -0
  119. package/dist/esm/drag-1723a4cc.js.map +1 -0
  120. package/dist/esm/{form-control-269ba84f.js → form-control-e8739b2e.js} +2 -3
  121. package/dist/esm/form-control-e8739b2e.js.map +1 -0
  122. package/dist/esm/index-dad5627b.js +10 -2
  123. package/dist/esm/loader.js +1 -1
  124. package/dist/esm/nano-components.js +1 -1
  125. package/dist/esm/nano-global-nav-user-profile_3.entry.js +6 -6
  126. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  127. package/dist/esm/nano-grid-item.entry.js +25 -0
  128. package/dist/esm/nano-grid-item.entry.js.map +1 -0
  129. package/dist/esm/nano-grid_2.entry.js +431 -0
  130. package/dist/esm/nano-grid_2.entry.js.map +1 -0
  131. package/dist/esm/nano-hero.entry.js +4 -10
  132. package/dist/esm/nano-hero.entry.js.map +1 -1
  133. package/dist/esm/nano-icon-button_2.entry.js +41 -4
  134. package/dist/esm/nano-icon-button_2.entry.js.map +1 -1
  135. package/dist/esm/nano-input.entry.js +2 -2
  136. package/dist/esm/nano-input.entry.js.map +1 -1
  137. package/dist/esm/nano-range.entry.js +1 -1
  138. package/dist/esm/nano-range.entry.js.map +1 -1
  139. package/dist/esm/nano-sortable.entry.js +650 -0
  140. package/dist/esm/nano-sortable.entry.js.map +1 -0
  141. package/dist/esm/nano-split-pane.entry.js +30 -45
  142. package/dist/esm/nano-split-pane.entry.js.map +1 -1
  143. package/dist/esm/nano-tab-group.entry.js +39 -43
  144. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  145. package/dist/esm/nano-tab.entry.js +3 -3
  146. package/dist/esm/nano-tab.entry.js.map +1 -1
  147. package/dist/esm/{nano-table-929ac4d9.js → nano-table-ba637f26.js} +53 -173
  148. package/dist/esm/nano-table-ba637f26.js.map +1 -0
  149. package/dist/esm/nano-table.entry.js +1 -1
  150. package/dist/esm/{table.worker-2425382a.js → table.worker-1cae39c9.js} +3 -3
  151. package/dist/esm/table.worker-1cae39c9.js.map +1 -0
  152. package/dist/{nano-components/p-f820b411.js → esm/table.worker-bd51e29f.js} +1 -1
  153. package/dist/nano-components/nano-components.css +1 -1
  154. package/dist/nano-components/nano-components.esm.js +1 -1
  155. package/dist/nano-components/nano-components.esm.js.map +1 -1
  156. package/dist/nano-components/p-00cf8021.entry.js +5 -0
  157. package/dist/nano-components/p-00cf8021.entry.js.map +1 -0
  158. package/dist/nano-components/{p-906de5a2.entry.js → p-158c73b0.entry.js} +2 -2
  159. package/dist/nano-components/p-365c997a.js +5 -0
  160. package/dist/nano-components/p-553acf24.entry.js +5 -0
  161. package/dist/nano-components/p-553acf24.entry.js.map +1 -0
  162. package/dist/nano-components/p-6975f110.entry.js +5 -0
  163. package/dist/nano-components/p-6975f110.entry.js.map +1 -0
  164. package/dist/nano-components/p-71057181.js +5 -0
  165. package/dist/nano-components/p-71057181.js.map +1 -0
  166. package/dist/nano-components/p-842cf127.js +5 -0
  167. package/dist/nano-components/p-842cf127.js.map +1 -0
  168. package/dist/nano-components/p-ad6209ec.entry.js +5 -0
  169. package/dist/nano-components/p-ad6209ec.entry.js.map +1 -0
  170. package/dist/nano-components/p-b8e76fdf.entry.js +5 -0
  171. package/dist/nano-components/p-b8e76fdf.entry.js.map +1 -0
  172. package/dist/{esm/table.worker-f820b411.js → nano-components/p-bd51e29f.js} +1 -1
  173. package/dist/nano-components/p-bdef618c.entry.js +5 -0
  174. package/dist/nano-components/p-bdef618c.entry.js.map +1 -0
  175. package/dist/nano-components/p-d79c6862.entry.js +5 -0
  176. package/dist/nano-components/p-d79c6862.entry.js.map +1 -0
  177. package/dist/nano-components/p-deb0799c.entry.js +5 -0
  178. package/dist/nano-components/{p-6a3a29c6.entry.js.map → p-deb0799c.entry.js.map} +1 -1
  179. package/dist/nano-components/p-ebb98a9e.entry.js +5 -0
  180. package/dist/nano-components/p-ebb98a9e.entry.js.map +1 -0
  181. package/dist/nano-components/p-f60fe933.entry.js +5 -0
  182. package/dist/nano-components/p-f60fe933.entry.js.map +1 -0
  183. package/dist/nano-components/p-f7535f45.entry.js +5 -0
  184. package/dist/nano-components/p-f7535f45.entry.js.map +1 -0
  185. package/dist/nano-components/p-fc585ea2.js +5 -0
  186. package/dist/nano-components/p-fc585ea2.js.map +1 -0
  187. package/dist/types/components/grid/grid-item.d.ts +3 -11
  188. package/dist/types/components/grid/grid.d.ts +44 -68
  189. package/dist/types/components/hero/hero.d.ts +1 -3
  190. package/dist/types/components/icon-button/icon-button.d.ts +14 -0
  191. package/dist/types/components/sortable/sortable.d.ts +204 -0
  192. package/dist/types/components/table/table-interface.d.ts +2 -4
  193. package/dist/types/components/table/table.d.ts +5 -30
  194. package/dist/types/components/table/table.header.d.ts +0 -3
  195. package/dist/types/components/tabs/tab-group.d.ts +0 -1
  196. package/dist/types/components/tabs/tab.d.ts +6 -0
  197. package/dist/types/components.d.ts +333 -89
  198. package/dist/types/utils/constructible-style.d.ts +31 -0
  199. package/dist/types/utils/drag.d.ts +21 -1
  200. package/docs-json.json +743 -168
  201. package/docs-vscode.json +102 -26
  202. package/hydrate/index.js +1210 -552
  203. package/package.json +2 -2
  204. package/dist/cjs/form-control-2e900f54.js.map +0 -1
  205. package/dist/cjs/nano-grid_3.cjs.entry.js +0 -431
  206. package/dist/cjs/nano-grid_3.cjs.entry.js.map +0 -1
  207. package/dist/cjs/nano-table-54a4ba34.js.map +0 -1
  208. package/dist/cjs/table.worker-20ed37a5.js.map +0 -1
  209. package/dist/collection/components/grid/grid-item.css +0 -15
  210. package/dist/components/grid-item.js +0 -107
  211. package/dist/components/grid-item.js.map +0 -1
  212. package/dist/esm/form-control-269ba84f.js.map +0 -1
  213. package/dist/esm/nano-grid_3.entry.js +0 -425
  214. package/dist/esm/nano-grid_3.entry.js.map +0 -1
  215. package/dist/esm/nano-table-929ac4d9.js.map +0 -1
  216. package/dist/esm/table.worker-2425382a.js.map +0 -1
  217. package/dist/nano-components/p-068bdd89.entry.js +0 -5
  218. package/dist/nano-components/p-068bdd89.entry.js.map +0 -1
  219. package/dist/nano-components/p-107d4549.entry.js +0 -5
  220. package/dist/nano-components/p-107d4549.entry.js.map +0 -1
  221. package/dist/nano-components/p-239d343a.entry.js +0 -5
  222. package/dist/nano-components/p-239d343a.entry.js.map +0 -1
  223. package/dist/nano-components/p-4f260028.js +0 -5
  224. package/dist/nano-components/p-4f260028.js.map +0 -1
  225. package/dist/nano-components/p-5381c118.js +0 -5
  226. package/dist/nano-components/p-58b53239.entry.js +0 -5
  227. package/dist/nano-components/p-58b53239.entry.js.map +0 -1
  228. package/dist/nano-components/p-5ac74848.js +0 -5
  229. package/dist/nano-components/p-5ac74848.js.map +0 -1
  230. package/dist/nano-components/p-64b56ee6.entry.js +0 -5
  231. package/dist/nano-components/p-64b56ee6.entry.js.map +0 -1
  232. package/dist/nano-components/p-6a3a29c6.entry.js +0 -5
  233. package/dist/nano-components/p-a5a560e7.entry.js +0 -5
  234. package/dist/nano-components/p-a5a560e7.entry.js.map +0 -1
  235. package/dist/nano-components/p-a761ac89.entry.js +0 -5
  236. package/dist/nano-components/p-a761ac89.entry.js.map +0 -1
  237. package/dist/nano-components/p-d792f692.entry.js +0 -5
  238. package/dist/nano-components/p-d792f692.entry.js.map +0 -1
  239. /package/dist/nano-components/{p-5381c118.js.map → p-158c73b0.entry.js.map} +0 -0
  240. /package/dist/nano-components/{p-906de5a2.entry.js.map → p-365c997a.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"table.row.js","sourceRoot":"","sources":["../../../src/components/table/table.row.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FunctionalComponent, h, VNode } from '@stencil/core';\nimport {\n addHObserver,\n addVObserver,\n headerPinClasses,\n mergeProperties,\n rowDataModel,\n} from './table.utils';\nimport { baseCellClasses } from './table.cell';\nimport { CSSNAMESPACE } from './table.constants';\nimport type { TableTypes } from '../../interface';\n\n// TABLE ROWS\n// (thead > tr, tfoot > tr, tr)\n\ntype TableRowCellHelperProps = { header: boolean; wrap: boolean };\n\ntype TableRowProps = {\n rowRenderer: TableTypes.RowRenderer;\n rowIndex: number;\n rowModel: TableTypes.RowData;\n onColumnPinned?: TableTypes.PinnedCb;\n};\n\nexport const TableRow: FunctionalComponent<TableRowProps> = (\n { rowRenderer, rowIndex, rowModel, onColumnPinned },\n children,\n utils\n) => {\n let extraProps = {};\n\n const TableCell: FunctionalComponent<TableRowCellHelperProps> = (\n { header, wrap },\n children\n ): VNode => {\n const cell = (\n <div\n class={{\n [`${CSSNAMESPACE}__cell-content`]: true,\n [`${CSSNAMESPACE}__cell-content--wrap`]: wrap,\n }}\n >\n {children}\n </div>\n );\n return header ? <th scope=\"row\">{cell}</th> : <td>{cell}</td>;\n };\n\n if (!rowModel) {\n const model = rowDataModel(rowIndex);\n rowModel = model.rowModel;\n }\n\n if (rowRenderer?.rowProperties) {\n extraProps =\n rowRenderer.rowProperties({ rowModel, rowIndex }) || extraProps;\n }\n\n let pinned: TableTypes.Position;\n if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {\n pinned = rowRenderer.pinned();\n }\n\n const baseProps = { class: headerPinClasses('tr', pinned) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const tpl = rowRenderer?.template;\n\n if (tpl) {\n let toRender = tpl(\n h as TableTypes.HFunc<VNode>,\n {\n renderedRow: (\n <tr {...props} key={rowModel.__uuid}>\n {children}\n </tr>\n ),\n rowModel,\n rowIndex,\n },\n TableCell\n );\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node, i) => {\n if (node.vtag === 'tr') {\n if (!node.vkey) node.vkey = `${rowModel.__uuid}_${i}`;\n\n node.vattrs = mergeProperties(\n { class: headerPinClasses('tr', pinned, true) },\n node.vattrs\n );\n\n if (!!node.vchildren) {\n node.vchildren = utils.map(node.vchildren, (cNode, i) => {\n if (['td', 'th'].includes(cNode.vtag.toString())) {\n cNode.vattrs = mergeProperties(\n {\n class:\n headerPinClasses(\n cNode.vtag.toString() as 'th' | 'td',\n pinned,\n true\n ) + baseCellClasses(i, true),\n ref: (th: HTMLTableCellElement) => {\n if ((!!th && pinned === 'top') || pinned === 'bottom')\n addVObserver(th, pinned, onColumnPinned);\n if (!!th && th.classList.contains('nano-tbl__pin--end'))\n addHObserver(th, 'end', onColumnPinned);\n if (!!th && th.classList.contains('nano-tbl__pin--start'))\n addHObserver(th, 'start', onColumnPinned);\n },\n },\n cNode.vattrs\n );\n }\n return cNode;\n });\n }\n }\n return node;\n });\n }\n return toRender;\n }\n\n return (\n <tr {...props} key={rowModel.__uuid}>\n {children}\n </tr>\n );\n};\n\ntype TableHeadFootProps = {\n rowRenderer: TableTypes.HeadFootRenderer;\n onColumnPinned?: TableTypes.PinnedCb;\n};\n\nexport const TableHeadFootRow: FunctionalComponent<TableHeadFootProps> = (\n { rowRenderer, onColumnPinned },\n children,\n utils\n) => {\n let extraProps = {};\n if (rowRenderer.rowProperties) {\n extraProps = rowRenderer.rowProperties() || {};\n }\n\n const TableCell: FunctionalComponent<TableRowCellHelperProps> = (\n { header, wrap },\n children\n ): VNode => {\n const cell = (\n <div\n class={{\n [`${CSSNAMESPACE}__cell-content`]: true,\n [`${CSSNAMESPACE}__cell-content--wrap`]: wrap,\n }}\n >\n {children}\n </div>\n );\n return header !== false ? <th scope=\"col\">{cell}</th> : <td>{cell}</td>;\n };\n\n const pinned = rowRenderer.pinned || null;\n const baseProps = { class: headerPinClasses('tr', null) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const tpl = rowRenderer?.template;\n\n if (tpl) {\n let toRender = tpl(\n h as TableTypes.HFunc<VNode>,\n {\n renderedRow: <tr {...props}>{children}</tr>,\n },\n TableCell\n );\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node) => {\n if (node.vtag === 'tr') {\n node.vattrs = mergeProperties(\n { class: headerPinClasses('tr', pinned, true) },\n node.vattrs\n );\n\n if (!!node.vchildren) {\n node.vchildren = utils.map(node.vchildren, (cNode) => {\n if (['td', 'th'].includes(cNode.vtag.toString())) {\n cNode.vattrs = mergeProperties(\n {\n class: headerPinClasses(\n cNode.vtag.toString() as 'th' | 'td',\n pinned,\n true\n ),\n ref: (th) => {\n if ((!!th && pinned === 'top') || pinned === 'bottom')\n addVObserver(th, pinned, onColumnPinned);\n if (!!th && th.classList.contains('nano-tbl__pin--end'))\n addHObserver(th, 'end', onColumnPinned);\n if (!!th && th.classList.contains('nano-tbl__pin--start'))\n addHObserver(th, 'start', onColumnPinned);\n },\n },\n cNode.vattrs\n );\n }\n return cNode;\n });\n }\n }\n return node;\n });\n }\n return toRender;\n }\n\n return <tr {...props}>{children}</tr>;\n};\n"]}
1
+ {"version":3,"file":"table.row.js","sourceRoot":"","sources":["../../../src/components/table/table.row.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FunctionalComponent, h, VNode } from '@stencil/core';\nimport {\n addHObserver,\n addVObserver,\n headerPinClasses,\n mergeProperties,\n rowDataModel,\n} from './table.utils';\nimport { baseCellClasses } from './table.cell';\nimport { CSSNAMESPACE } from './table.constants';\nimport type { TableTypes } from '../../interface';\n\n// TABLE ROWS\n// (thead > tr, tfoot > tr, tr)\n\ntype TableRowCellHelperProps = { header: boolean; wrap: boolean };\n\ntype TableRowProps = {\n rowRenderer: TableTypes.RowRenderer;\n rowIndex: number;\n rowModel: TableTypes.RowData;\n onColumnPinned?: TableTypes.PinnedCb;\n};\n\nconst TableCell: FunctionalComponent<TableRowCellHelperProps> = (\n { header, wrap },\n children\n): VNode => {\n const cell = (\n <div\n class={{\n [`${CSSNAMESPACE}__cell-content`]: true,\n [`${CSSNAMESPACE}__cell-content--wrap`]: wrap,\n }}\n >\n {children}\n </div>\n );\n return header ? <th scope=\"row\">{cell}</th> : <td>{cell}</td>;\n};\n\nexport const TableRow: FunctionalComponent<TableRowProps> = (\n { rowRenderer, rowIndex, rowModel, onColumnPinned },\n children,\n utils\n) => {\n let extraProps = {};\n\n if (!rowModel) {\n const model = rowDataModel(rowIndex);\n rowModel = model.rowModel;\n }\n\n if (rowRenderer?.rowProperties) {\n extraProps =\n rowRenderer.rowProperties({ rowModel, rowIndex }) || extraProps;\n }\n\n let pinned: TableTypes.Position;\n if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {\n pinned = rowRenderer.pinned();\n }\n\n const baseProps = { class: headerPinClasses('tr', pinned) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const tpl = rowRenderer?.template;\n\n if (tpl) {\n let toRender = tpl(\n h as TableTypes.HFunc<VNode>,\n {\n renderedRow: (\n <tr {...props} key={rowModel.__uuid}>\n {children}\n </tr>\n ),\n rowModel,\n rowIndex,\n },\n TableCell\n );\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node, i) => {\n if (node.vtag === 'tr') {\n if (!node.vkey) node.vkey = `${rowModel.__uuid}_${i}`;\n\n node.vattrs = mergeProperties(\n { class: headerPinClasses('tr', pinned, true) },\n node.vattrs\n );\n\n if (!!node.vchildren) {\n node.vchildren = utils.map(node.vchildren, (cNode, i) => {\n if (['td', 'th'].includes(cNode.vtag.toString())) {\n cNode.vattrs = mergeProperties(\n {\n class:\n headerPinClasses(\n cNode.vtag.toString() as 'th' | 'td',\n pinned,\n true\n ) + baseCellClasses(i, true),\n ref: (th: HTMLTableCellElement) => {\n if ((!!th && pinned === 'top') || pinned === 'bottom')\n addVObserver(th, pinned, onColumnPinned);\n if (!!th && th.classList.contains('nano-tbl__pin--end'))\n addHObserver(th, 'end', onColumnPinned);\n if (!!th && th.classList.contains('nano-tbl__pin--start'))\n addHObserver(th, 'start', onColumnPinned);\n },\n },\n cNode.vattrs\n );\n }\n return cNode;\n });\n }\n }\n return node;\n });\n }\n return toRender;\n }\n\n return (\n <tr {...props} key={rowModel.__uuid}>\n {children}\n </tr>\n );\n};\n\ntype TableHeadFootProps = {\n rowRenderer: TableTypes.HeadFootRenderer;\n onColumnPinned?: TableTypes.PinnedCb;\n};\n\nexport const TableHeadFootRow: FunctionalComponent<TableHeadFootProps> = (\n { rowRenderer, onColumnPinned },\n children,\n utils\n) => {\n let extraProps = {};\n if (rowRenderer.rowProperties) {\n extraProps = rowRenderer.rowProperties() || {};\n }\n\n const TableCell: FunctionalComponent<TableRowCellHelperProps> = (\n { header, wrap },\n children\n ): VNode => {\n const cell = (\n <div\n class={{\n [`${CSSNAMESPACE}__cell-content`]: true,\n [`${CSSNAMESPACE}__cell-content--wrap`]: wrap,\n }}\n >\n {children}\n </div>\n );\n return header !== false ? <th scope=\"col\">{cell}</th> : <td>{cell}</td>;\n };\n\n const pinned = rowRenderer.pinned || null;\n const baseProps = { class: headerPinClasses('tr', null) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const tpl = rowRenderer?.template;\n\n if (tpl) {\n let toRender = tpl(\n h as TableTypes.HFunc<VNode>,\n {\n renderedRow: <tr {...props}>{children}</tr>,\n },\n TableCell\n );\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node) => {\n if (node.vtag === 'tr') {\n node.vattrs = mergeProperties(\n { class: headerPinClasses('tr', pinned, true) },\n node.vattrs\n );\n\n if (!!node.vchildren) {\n node.vchildren = utils.map(node.vchildren, (cNode) => {\n if (['td', 'th'].includes(cNode.vtag.toString())) {\n cNode.vattrs = mergeProperties(\n {\n class: headerPinClasses(\n cNode.vtag.toString() as 'th' | 'td',\n pinned,\n true\n ),\n ref: (th) => {\n if ((!!th && pinned === 'top') || pinned === 'bottom')\n addVObserver(th, pinned, onColumnPinned);\n if (!!th && th.classList.contains('nano-tbl__pin--end'))\n addHObserver(th, 'end', onColumnPinned);\n if (!!th && th.classList.contains('nano-tbl__pin--start'))\n addHObserver(th, 'start', onColumnPinned);\n },\n },\n cNode.vattrs\n );\n }\n return cNode;\n });\n }\n }\n return node;\n });\n }\n return toRender;\n }\n\n return <tr {...props}>{children}</tr>;\n};\n"]}
@@ -7,7 +7,7 @@ import { createWorkerStore, syncConfigToWorker, syncDataToWorker, workerFilter,
7
7
  function colsToWorker(columns) {
8
8
  const safeColumns = JSON.parse(JSON.stringify(columns));
9
9
  columns.forEach((c) => {
10
- if (!!c.sortCompareFn) {
10
+ if (!!(c === null || c === void 0 ? void 0 : c.sortCompareFn)) {
11
11
  const safeCol = safeColumns.find((sc) => sc.prop === c.prop);
12
12
  safeCol.sortCompareFn = c.sortCompareFn.toString();
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"table.store.js","sourceRoot":"","sources":["../../../src/components/table/table.store.ts"],"names":[],"mappings":"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","sourcesContent":["import { createStore, ObservableMap } from '@stencil/store';\nimport { cyrb53 } from '../../utils/math';\nimport {\n createWorkerStore,\n syncConfigToWorker,\n syncDataToWorker,\n workerFilter,\n workerSearch,\n workerSort,\n} from './table.worker';\nimport type { TableTypes } from '../../interface';\n\nexport interface TableStores {\n data: ObservableMap<{ rows: TableTypes.NanoTable['rows'] }>;\n config: ObservableMap<{ columns: TableTypes.NanoTable['columns'] }>;\n general: ObservableMap<{\n workerId: string;\n scrollParent: HTMLElement;\n host: HTMLNanoTableElement;\n isReady: boolean;\n isActive?: boolean;\n }>;\n}\n\nfunction colsToWorker(columns: TableTypes.NanoTable['columns']) {\n const safeColumns: Partial<TableTypes.ColumnConfig>[] = JSON.parse(\n JSON.stringify(columns)\n );\n columns.forEach((c) => {\n if (!!c.sortCompareFn) {\n const safeCol = safeColumns.find((sc) => sc.prop === c.prop);\n safeCol.sortCompareFn = c.sortCompareFn.toString();\n }\n });\n return safeColumns;\n}\n\nconst stores: WeakMap<HTMLElement, TableStores> = new WeakMap();\n\nexport async function generateStore(\n host: HTMLNanoTableElement,\n columns: TableTypes.NanoTable['columns'],\n scrollParent: HTMLElement,\n isReady: boolean\n) {\n const store: TableStores = {\n data: createStore({ rows: [] }),\n config: createStore({ columns }),\n general: createStore({ workerId: null, scrollParent, host, isReady }),\n };\n\n const id = await createWorkerStore(\n store.data.state.rows,\n colsToWorker(store.config.state.columns)\n );\n store.general.state.workerId = id;\n stores.set(host, store);\n\n // sync data from our store to our worker\n\n store.data.use({\n reset: () => {\n if (store.general.state.workerId)\n syncDataToWorker(store.general.state.workerId, null);\n },\n dispose: () => {\n if (store.general.state.workerId)\n syncDataToWorker(store.general.state.workerId, null);\n },\n });\n store.config.use({\n reset: () => {\n if (store.general.state.workerId)\n syncConfigToWorker(store.general.state.workerId, null);\n },\n dispose: () => {\n if (store.general.state.workerId)\n syncConfigToWorker(store.general.state.workerId, null);\n },\n });\n return store;\n}\n\nexport function getStore(host: HTMLElement) {\n return stores.get(host);\n}\n\nfunction getDataType(value: any): TableTypes.ColumnType {\n if (value instanceof Date) {\n return 'date';\n }\n if (['number', 'string', 'boolean'].includes(typeof value)) {\n return typeof value as 'string' | 'number' | 'boolean';\n }\n return 'unknown';\n}\n\nexport function storeSetData(host: HTMLElement, rows: TableTypes.RowData[]) {\n const store = stores.get(host);\n if (!store) return;\n\n const cols = store.config.state.columns;\n const dateCols: (keyof TableTypes.RowData)[] = cols\n .filter((col) => col.type === 'date')\n .reduce((prev, curr) => {\n return [...prev, curr.prop];\n }, []);\n const unknownCols: TableTypes.RowData[] = cols.filter((col) => !col.type);\n\n // augments data with some internal props.\n // discern unknown column types\n // convert dates to numbers for worker\n rows = rows.map((row, i) => {\n // try our best to discern the column type (from first row) if unset\n if (unknownCols.length && i === 0) {\n store.config.state.columns = cols.map((col) => {\n if (unknownCols.includes(col) && row[col.prop] && !col.type) {\n col.type = getDataType(row[col.prop]);\n if (col.type === 'date') dateCols.push(col.prop);\n }\n return col;\n });\n }\n\n // convert date columns into numbers to send to our worker\n dateCols.forEach((colName) => {\n // coerce any date type;\n // Date(), timestamp, valid date string\n const coerceDate = new Date(row[colName]) ?? null;\n if (!!coerceDate && Number(coerceDate)) row[colName] = Number(coerceDate);\n });\n\n row['__index'] = i;\n row['__uuid'] = cyrb53(cols.map((c) => row[c.prop]).join());\n\n return row;\n });\n store.data.state.rows = rows;\n\n if (store.general.state.workerId)\n return syncDataToWorker(store.general.state.workerId, rows);\n}\n\nexport function storeSetConfig(\n host: HTMLElement,\n columns: TableTypes.ColumnConfig[]\n) {\n const store = stores.get(host);\n if (!store) return;\n\n store.config.state.columns = columns;\n\n if (store.general.state.workerId)\n return syncConfigToWorker(\n store.general.state.workerId,\n colsToWorker(columns)\n );\n}\n\nexport async function storeSearch(host: HTMLElement, term: string) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerSearch(\n store.general.state.workerId,\n term\n );\n } catch (e) {\n console.warn(e);\n }\n}\n\nexport async function storeFilter(\n host: HTMLElement,\n filters: TableTypes.Filter[]\n) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerFilter(\n store.general.state.workerId,\n filters\n );\n } catch (e) {\n console.warn(e);\n }\n}\n\nexport async function storeSort(\n host: HTMLNanoTableElement,\n prop: TableTypes.Prop,\n order: TableTypes.Order\n) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerSort(\n store.general.state.workerId,\n prop,\n order\n );\n } catch (e) {\n console.warn(e);\n }\n}\n"]}
1
+ {"version":3,"file":"table.store.js","sourceRoot":"","sources":["../../../src/components/table/table.store.ts"],"names":[],"mappings":"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","sourcesContent":["import { createStore, ObservableMap } from '@stencil/store';\nimport { cyrb53 } from '../../utils/math';\nimport {\n createWorkerStore,\n syncConfigToWorker,\n syncDataToWorker,\n workerFilter,\n workerSearch,\n workerSort,\n} from './table.worker';\nimport type { TableTypes } from '../../interface';\n\nexport interface TableStores {\n data: ObservableMap<{ rows: TableTypes.NanoTable['rows'] }>;\n config: ObservableMap<{ columns: TableTypes.NanoTable['columns'] }>;\n general: ObservableMap<{\n workerId: string;\n scrollParent: HTMLElement;\n host: HTMLNanoTableElement;\n isReady: boolean;\n isActive?: boolean;\n }>;\n}\n\nfunction colsToWorker(columns: TableTypes.NanoTable['columns']) {\n const safeColumns: Partial<TableTypes.ColumnConfig>[] = JSON.parse(\n JSON.stringify(columns)\n );\n columns.forEach((c) => {\n if (!!c?.sortCompareFn) {\n const safeCol = safeColumns.find((sc) => sc.prop === c.prop);\n safeCol.sortCompareFn = c.sortCompareFn.toString();\n }\n });\n return safeColumns;\n}\n\nconst stores: WeakMap<HTMLElement, TableStores> = new WeakMap();\n\nexport async function generateStore(\n host: HTMLNanoTableElement,\n columns: TableTypes.NanoTable['columns'],\n scrollParent: HTMLElement,\n isReady: boolean\n) {\n const store: TableStores = {\n data: createStore({ rows: [] }),\n config: createStore({ columns }),\n general: createStore({ workerId: null, scrollParent, host, isReady }),\n };\n\n const id = await createWorkerStore(\n store.data.state.rows,\n colsToWorker(store.config.state.columns)\n );\n store.general.state.workerId = id;\n stores.set(host, store);\n\n // sync data from our store to our worker\n\n store.data.use({\n reset: () => {\n if (store.general.state.workerId)\n syncDataToWorker(store.general.state.workerId, null);\n },\n dispose: () => {\n if (store.general.state.workerId)\n syncDataToWorker(store.general.state.workerId, null);\n },\n });\n store.config.use({\n reset: () => {\n if (store.general.state.workerId)\n syncConfigToWorker(store.general.state.workerId, null);\n },\n dispose: () => {\n if (store.general.state.workerId)\n syncConfigToWorker(store.general.state.workerId, null);\n },\n });\n return store;\n}\n\nexport function getStore(host: HTMLElement) {\n return stores.get(host);\n}\n\nfunction getDataType(value: any): TableTypes.ColumnType {\n if (value instanceof Date) {\n return 'date';\n }\n if (['number', 'string', 'boolean'].includes(typeof value)) {\n return typeof value as 'string' | 'number' | 'boolean';\n }\n return 'unknown';\n}\n\nexport function storeSetData(host: HTMLElement, rows: TableTypes.RowData[]) {\n const store = stores.get(host);\n if (!store) return;\n\n const cols = store.config.state.columns;\n const dateCols: (keyof TableTypes.RowData)[] = cols\n .filter((col) => col.type === 'date')\n .reduce((prev, curr) => {\n return [...prev, curr.prop];\n }, []);\n const unknownCols: TableTypes.RowData[] = cols.filter((col) => !col.type);\n\n // augments data with some internal props.\n // discern unknown column types\n // convert dates to numbers for worker\n rows = rows.map((row, i) => {\n // try our best to discern the column type (from first row) if unset\n if (unknownCols.length && i === 0) {\n store.config.state.columns = cols.map((col) => {\n if (unknownCols.includes(col) && row[col.prop] && !col.type) {\n col.type = getDataType(row[col.prop]);\n if (col.type === 'date') dateCols.push(col.prop);\n }\n return col;\n });\n }\n\n // convert date columns into numbers to send to our worker\n dateCols.forEach((colName) => {\n // coerce any date type;\n // Date(), timestamp, valid date string\n const coerceDate = new Date(row[colName]) ?? null;\n if (!!coerceDate && Number(coerceDate)) row[colName] = Number(coerceDate);\n });\n\n row['__index'] = i;\n row['__uuid'] = cyrb53(cols.map((c) => row[c.prop]).join());\n\n return row;\n });\n store.data.state.rows = rows;\n\n if (store.general.state.workerId)\n return syncDataToWorker(store.general.state.workerId, rows);\n}\n\nexport function storeSetConfig(\n host: HTMLElement,\n columns: TableTypes.ColumnConfig[]\n) {\n const store = stores.get(host);\n if (!store) return;\n\n store.config.state.columns = columns;\n\n if (store.general.state.workerId)\n return syncConfigToWorker(\n store.general.state.workerId,\n colsToWorker(columns)\n );\n}\n\nexport async function storeSearch(host: HTMLElement, term: string) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerSearch(\n store.general.state.workerId,\n term\n );\n } catch (e) {\n console.warn(e);\n }\n}\n\nexport async function storeFilter(\n host: HTMLElement,\n filters: TableTypes.Filter[]\n) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerFilter(\n store.general.state.workerId,\n filters\n );\n } catch (e) {\n console.warn(e);\n }\n}\n\nexport async function storeSort(\n host: HTMLNanoTableElement,\n prop: TableTypes.Prop,\n order: TableTypes.Order\n) {\n const store = stores.get(host);\n if (!store || !store.general.state.workerId) return;\n\n try {\n store.data.state.rows = await workerSort(\n store.general.state.workerId,\n prop,\n order\n );\n } catch (e) {\n console.warn(e);\n }\n}\n"]}
@@ -130,12 +130,12 @@ function sort(workerStore, rows, prop, order) {
130
130
  return rows;
131
131
  const col = workerStore.columns.find((c) => c.prop === prop);
132
132
  // custom sort
133
- if (!!col.sortCompareFn && typeof col.sortCompareFn === 'function') {
133
+ if (!!(col === null || col === void 0 ? void 0 : col.sortCompareFn) && typeof col.sortCompareFn === 'function') {
134
134
  const sorted = rows.slice().sort(col.sortCompareFn(prop, order));
135
135
  return sorted;
136
136
  }
137
137
  // text sort
138
- if (col.type === 'text' && typeof rows[0][prop] === 'string') {
138
+ if ((col === null || col === void 0 ? void 0 : col.type) === 'text' && typeof rows[0][prop] === 'string') {
139
139
  const sorted = rows.slice().sort((a, b) => {
140
140
  if (!a[prop])
141
141
  return 1;
@@ -179,7 +179,7 @@ function applyFiltersAndSort(workerStore, rows) {
179
179
  }
180
180
  function colsFromStore(safeColumns) {
181
181
  return safeColumns.map((c) => {
182
- if (!!c.sortCompareFn) {
182
+ if (!!(c === null || c === void 0 ? void 0 : c.sortCompareFn)) {
183
183
  c.sortCompareFn = new Function('return ' + c.sortCompareFn)();
184
184
  }
185
185
  return c;
@@ -1 +1 @@
1
- {"version":3,"file":"table.worker.js","sourceRoot":"","sources":["../../../src/components/table/table.worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { filter as smartFilter } from 'smart-array-filter';\nimport type { TableTypes } from '../../interface';\n\n// we'll do ordering and filtering in here\n\n/** SETUP */\n\ninterface WorkerStore {\n rows: TableTypes.NanoTable['rows'];\n columns: Partial<TableTypes.ColumnConfig>[];\n filterRows?: TableTypes.NanoTable['rows'];\n searchTerm?: string;\n}\n\nconst dataWorkers: Map<string, WorkerStore> = new Map();\n\nfunction uid() {\n return Date.now().toString(36) + Math.random().toString(36).substring(2);\n}\n\nexport async function createWorkerStore(\n rows: TableTypes.NanoTable['rows'],\n columns: Partial<TableTypes.ColumnConfig>[]\n) {\n const id = uid();\n dataWorkers.set(id, { rows, columns: colsFromStore(columns) });\n return id;\n}\n\nexport async function syncDataToWorker(\n workerId: string,\n rows: TableTypes.NanoTable['rows']\n) {\n const workerStore = dataWorkers.get(workerId);\n if (!workerStore) throw 'cannot find worker with ID ' + workerId;\n\n workerStore.rows = rows;\n if (!workerStore.rows && !workerStore.columns) destroyWorkerStore(workerId);\n return true;\n}\n\nexport async function syncConfigToWorker(\n workerId: string,\n columns: Partial<TableTypes.ColumnConfig>[]\n) {\n const workerStore = dataWorkers.get(workerId);\n if (!workerStore) throw 'cannot find worker with ID ' + workerId;\n\n workerStore.columns = colsFromStore(columns);\n if (!workerStore.rows && !workerStore.columns) destroyWorkerStore(workerId);\n return true;\n}\n\n/** SEARCH */\n\n/**\n * A general text search across all table columns.\n * Search is the first thing we do. Cache the result for filtering / sorting\n * @param workerId\n * @param term\n * @returns the searched for data rows - with col filters / sorts also applied\n */\nexport async function workerSearch(workerId: string, term: string) {\n const workerStore = dataWorkers.get(workerId);\n if (!workerStore) throw 'cannot find worker with ID ' + workerId;\n\n workerStore.searchTerm = term;\n if (!term || !term.length) {\n workerStore.filterRows = workerStore.rows;\n return applyFiltersAndSort(workerStore, workerStore.rows);\n }\n\n const availCols = workerStore.columns.filter((c) => c.searchable !== false);\n // cache result\n workerStore.filterRows = smartFilter(workerStore.rows, {\n keywords: term,\n predicate: 'OR',\n includePaths: [...(availCols.map((c) => c.prop) as string[])],\n ignorePaths: ['__uuid', '__index'],\n });\n\n // apply filter and sort\n return applyFiltersAndSort(workerStore, workerStore.filterRows);\n}\n\n/** FILTER */\n\n/**\n * Finds any currently applied filter conditions from the column config\n * @param workerStore\n * @returns the found column filter object array\n */\nfunction getCurrentFilters(workerStore: WorkerStore) {\n return workerStore.columns\n .filter((c) => c.filter !== undefined && c.filter !== null)\n .reduce((filters, col) => {\n const { prop, filter } = col;\n filters.push({ prop, filter });\n return filters;\n }, [] as TableTypes.Filter[]);\n}\n\nfunction filter(\n workerStore: WorkerStore,\n rows: TableTypes.NanoTable['rows'],\n filters: TableTypes.Filter[] = []\n) {\n if (!filters || !filters.length) filters = getCurrentFilters(workerStore);\n if (!filters || !filters.length) return rows;\n\n filters.forEach((filter) => {\n if (typeof filter.filter === 'boolean') {\n rows = rows.filter((row) => row[filter.prop] === filter.filter);\n } else {\n rows = smartFilter(rows, {\n keywords: filter.filter,\n includePaths: [filter.prop as string],\n ignorePaths: ['__uuid', '__index'],\n });\n }\n });\n return rows;\n}\n\nexport async function workerFilter(\n workerId: string,\n filters: TableTypes.Filter[]\n) {\n const workerStore = dataWorkers.get(workerId);\n if (!workerStore) throw 'cannot find worker with ID ' + workerId;\n\n // get cached results from a search\n const data =\n (!filters || !filters.length) && workerStore.searchTerm\n ? await workerSearch(workerId, workerStore.searchTerm)\n : workerStore.searchTerm\n ? workerStore.filterRows\n : workerStore.rows;\n workerStore.filterRows = filter(workerStore, data, filters);\n\n // apply sort\n return sort(workerStore, workerStore.filterRows);\n}\n\n/** SORT */\n\n/**\n * Finds any currently applied sort conditions from the column config\n * @param workerStore\n * @returns the found column name and it's sort direction\n */\nfunction getCurrentSort(workerStore: WorkerStore) {\n const foundSort = workerStore.columns.find((c) => !!c.order);\n\n if (foundSort) {\n const { prop, order } = foundSort;\n return { prop, order };\n }\n return null;\n}\n\nfunction sort(\n workerStore: WorkerStore,\n rows: TableTypes.NanoTable['rows'],\n prop?: TableTypes.Prop,\n order?: TableTypes.Order\n) {\n if (!prop && !order) {\n const currentSort = getCurrentSort(workerStore);\n if (currentSort) {\n ({ prop, order } = currentSort);\n }\n }\n if (!prop || !order || !rows.length) return rows;\n\n const col = workerStore.columns.find((c) => c.prop === prop);\n\n // custom sort\n if (!!col.sortCompareFn && typeof col.sortCompareFn === 'function') {\n const sorted = rows.slice().sort(col.sortCompareFn(prop, order));\n return sorted;\n }\n\n // text sort\n if (col.type === 'text' && typeof rows[0][prop] === 'string') {\n const sorted = rows.slice().sort((a, b) => {\n if (!a[prop]) return 1;\n if (!b[prop]) return -1;\n return order === 'asc'\n ? a[prop].localeCompare(b[prop])\n : b[prop].localeCompare(a[prop]);\n });\n return sorted;\n }\n\n // catch-all - number / date / string sort\n const sorted = rows.slice().sort((a, b) => {\n if (!a[prop]) return 1;\n if (!b[prop]) return -1;\n if (a[prop]! < b[prop]!) return order === 'asc' ? -1 : 1;\n if (a[prop]! > b[prop]!) return order === 'asc' ? 1 : -1;\n return 0;\n });\n return sorted;\n}\n\n/** Sorting is the last thing we do - don't cache this, there's no point */\nexport async function workerSort(\n workerId: string,\n prop: TableTypes.Prop,\n order: TableTypes.Order\n) {\n const workerStore = dataWorkers.get(workerId);\n if (!workerStore) throw 'cannot find worker with ID ' + workerId;\n\n // get cached results from a search / filter\n const data = workerStore.filterRows || workerStore.rows;\n return sort(workerStore, data, prop, order);\n}\n\n/** UTILS */\n\n// used after a search, it only sorts rn\n// (search acting like a filter 'reset' atm)\nfunction applyFiltersAndSort(\n workerStore: WorkerStore,\n rows: TableTypes.NanoTable['rows']\n) {\n rows = filter(workerStore, rows);\n return sort(workerStore, rows);\n}\n\nfunction colsFromStore(safeColumns: Partial<TableTypes.ColumnConfig>[]) {\n return safeColumns.map((c) => {\n if (!!c.sortCompareFn) {\n c.sortCompareFn = new Function('return ' + c.sortCompareFn)();\n }\n return c;\n });\n}\n\n/**\n * Clean up\n * @param workerId\n */\nexport async function destroyWorkerStore(workerId: string) {\n dataWorkers.delete(workerId);\n}\n"]}
1
+ {"version":3,"file":"table.worker.js","sourceRoot":"","sources":["../../../src/components/table/table.worker.ts"],"names":[],"mappings":"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","sourcesContent":["import { filter as smartFilter } from 'smart-array-filter';\nimport type { TableTypes } from '../../interface';\n\n// we'll do ordering and filtering in here\n\n/** SETUP */\n\ninterface WorkerStore {\n rows: TableTypes.NanoTable['rows'];\n columns: Partial<TableTypes.ColumnConfig>[];\n filterRows?: TableTypes.NanoTable['rows'];\n searchTerm?: string;\n}\n\nconst dataWorkers: Map<string, WorkerStore> = new Map();\n\nfunction uid() {\n return Date.now().toString(36) + Math.random().toString(36).substring(2);\n}\n\nexport async function createWorkerStore(\n rows: TableTypes.NanoTable['rows'],\n columns: Partial<TableTypes.ColumnConfig>[]\n) {\n const id = uid();\n dataWorkers.set(id, { rows, columns: colsFromStore(columns) });\n return id;\n}\n\nexport async function syncDataToWorker(\n workerId: string,\n rows: TableTypes.NanoTable['rows']\n) {\n const workerStore = dataWorkers.get(workerId);\n if (!workerStore) throw 'cannot find worker with ID ' + workerId;\n\n workerStore.rows = rows;\n if (!workerStore.rows && !workerStore.columns) destroyWorkerStore(workerId);\n return true;\n}\n\nexport async function syncConfigToWorker(\n workerId: string,\n columns: Partial<TableTypes.ColumnConfig>[]\n) {\n const workerStore = dataWorkers.get(workerId);\n if (!workerStore) throw 'cannot find worker with ID ' + workerId;\n\n workerStore.columns = colsFromStore(columns);\n if (!workerStore.rows && !workerStore.columns) destroyWorkerStore(workerId);\n return true;\n}\n\n/** SEARCH */\n\n/**\n * A general text search across all table columns.\n * Search is the first thing we do. Cache the result for filtering / sorting\n * @param workerId\n * @param term\n * @returns the searched for data rows - with col filters / sorts also applied\n */\nexport async function workerSearch(workerId: string, term: string) {\n const workerStore = dataWorkers.get(workerId);\n if (!workerStore) throw 'cannot find worker with ID ' + workerId;\n\n workerStore.searchTerm = term;\n if (!term || !term.length) {\n workerStore.filterRows = workerStore.rows;\n return applyFiltersAndSort(workerStore, workerStore.rows);\n }\n\n const availCols = workerStore.columns.filter((c) => c.searchable !== false);\n // cache result\n workerStore.filterRows = smartFilter(workerStore.rows, {\n keywords: term,\n predicate: 'OR',\n includePaths: [...(availCols.map((c) => c.prop) as string[])],\n ignorePaths: ['__uuid', '__index'],\n });\n\n // apply filter and sort\n return applyFiltersAndSort(workerStore, workerStore.filterRows);\n}\n\n/** FILTER */\n\n/**\n * Finds any currently applied filter conditions from the column config\n * @param workerStore\n * @returns the found column filter object array\n */\nfunction getCurrentFilters(workerStore: WorkerStore) {\n return workerStore.columns\n .filter((c) => c.filter !== undefined && c.filter !== null)\n .reduce((filters, col) => {\n const { prop, filter } = col;\n filters.push({ prop, filter });\n return filters;\n }, [] as TableTypes.Filter[]);\n}\n\nfunction filter(\n workerStore: WorkerStore,\n rows: TableTypes.NanoTable['rows'],\n filters: TableTypes.Filter[] = []\n) {\n if (!filters || !filters.length) filters = getCurrentFilters(workerStore);\n if (!filters || !filters.length) return rows;\n\n filters.forEach((filter) => {\n if (typeof filter.filter === 'boolean') {\n rows = rows.filter((row) => row[filter.prop] === filter.filter);\n } else {\n rows = smartFilter(rows, {\n keywords: filter.filter,\n includePaths: [filter.prop as string],\n ignorePaths: ['__uuid', '__index'],\n });\n }\n });\n return rows;\n}\n\nexport async function workerFilter(\n workerId: string,\n filters: TableTypes.Filter[]\n) {\n const workerStore = dataWorkers.get(workerId);\n if (!workerStore) throw 'cannot find worker with ID ' + workerId;\n\n // get cached results from a search\n const data =\n (!filters || !filters.length) && workerStore.searchTerm\n ? await workerSearch(workerId, workerStore.searchTerm)\n : workerStore.searchTerm\n ? workerStore.filterRows\n : workerStore.rows;\n workerStore.filterRows = filter(workerStore, data, filters);\n\n // apply sort\n return sort(workerStore, workerStore.filterRows);\n}\n\n/** SORT */\n\n/**\n * Finds any currently applied sort conditions from the column config\n * @param workerStore\n * @returns the found column name and it's sort direction\n */\nfunction getCurrentSort(workerStore: WorkerStore) {\n const foundSort = workerStore.columns.find((c) => !!c.order);\n\n if (foundSort) {\n const { prop, order } = foundSort;\n return { prop, order };\n }\n return null;\n}\n\nfunction sort(\n workerStore: WorkerStore,\n rows: TableTypes.NanoTable['rows'],\n prop?: TableTypes.Prop,\n order?: TableTypes.Order\n) {\n if (!prop && !order) {\n const currentSort = getCurrentSort(workerStore);\n if (currentSort) {\n ({ prop, order } = currentSort);\n }\n }\n if (!prop || !order || !rows.length) return rows;\n\n const col = workerStore.columns.find((c) => c.prop === prop);\n\n // custom sort\n if (!!col?.sortCompareFn && typeof col.sortCompareFn === 'function') {\n const sorted = rows.slice().sort(col.sortCompareFn(prop, order));\n return sorted;\n }\n\n // text sort\n if (col?.type === 'text' && typeof rows[0][prop] === 'string') {\n const sorted = rows.slice().sort((a, b) => {\n if (!a[prop]) return 1;\n if (!b[prop]) return -1;\n return order === 'asc'\n ? a[prop].localeCompare(b[prop])\n : b[prop].localeCompare(a[prop]);\n });\n return sorted;\n }\n\n // catch-all - number / date / string sort\n const sorted = rows.slice().sort((a, b) => {\n if (!a[prop]) return 1;\n if (!b[prop]) return -1;\n if (a[prop]! < b[prop]!) return order === 'asc' ? -1 : 1;\n if (a[prop]! > b[prop]!) return order === 'asc' ? 1 : -1;\n return 0;\n });\n return sorted;\n}\n\n/** Sorting is the last thing we do - don't cache this, there's no point */\nexport async function workerSort(\n workerId: string,\n prop: TableTypes.Prop,\n order: TableTypes.Order\n) {\n const workerStore = dataWorkers.get(workerId);\n if (!workerStore) throw 'cannot find worker with ID ' + workerId;\n\n // get cached results from a search / filter\n const data = workerStore.filterRows || workerStore.rows;\n return sort(workerStore, data, prop, order);\n}\n\n/** UTILS */\n\n// used after a search, it only sorts rn\n// (search acting like a filter 'reset' atm)\nfunction applyFiltersAndSort(\n workerStore: WorkerStore,\n rows: TableTypes.NanoTable['rows']\n) {\n rows = filter(workerStore, rows);\n return sort(workerStore, rows);\n}\n\nfunction colsFromStore(safeColumns: Partial<TableTypes.ColumnConfig>[]) {\n return safeColumns.map((c) => {\n if (!!c?.sortCompareFn) {\n c.sortCompareFn = new Function('return ' + c.sortCompareFn)();\n }\n return c;\n });\n}\n\n/**\n * Clean up\n * @param workerId\n */\nexport async function destroyWorkerStore(workerId: string) {\n dataWorkers.delete(workerId);\n}\n"]}
@@ -23,14 +23,14 @@
23
23
 
24
24
  * @prop --content-padding: defaults to 2rem 2.5rem;
25
25
  * @prop --content-bg: defaults to rgb(var(--background-rgb));
26
- * @prop --content-border-radius: defaults to var(--border-radius);
26
+ * @prop --content-border-radius: defaults to `var(--border-radius)` `position="top"`. `0 var(--border-radius) var(--border-radius) 0` `position="start"`;
27
27
 
28
28
  * @prop --tabs-padding-start: defaults to 2.5rem on placement 'top' and 0 on placement 'start';
29
29
  * @prop --tabs-padding-end: defaults to 2.5rem on placement 'top' and 0 on placement 'start';
30
30
  * @prop --tabs-padding-top: defaults to 0;
31
31
  * @prop --tabs-padding-bottom: defaults to 0;
32
32
  * @prop --tabs-bg-rgb: defaults to var(--bg-color);
33
- * @prop --tab-border-radius: defaults to var(--border-radius);
33
+ * @prop --tab-border-radius: defaults to `var(--border-radius) var(--border-radius) 0 0` `position="top"`. `0` `position="start"`. ;
34
34
  * @prop --tab-text-color: defaults to #007495 on placement 'top' and #455556 on placement 'start';
35
35
  * @prop --fade-transparency: controls the strength of the fade on overflowing tabs, defaults to 0;
36
36
  */
@@ -51,7 +51,7 @@
51
51
  --tabs-padding-bottom: 0;
52
52
  --tabs-container-bg: "transparent";
53
53
  --tabs-bg-rgb: var(--background-rgb);
54
- --tab-border-radius: var(--border-radius);
54
+ --tab-border-radius: var(--border-radius) var(--border-radius) 0 0;
55
55
  --tab-text-color: #007495;
56
56
  --shadow-opacity: 0.1;
57
57
  --fade-transparency: 0;
@@ -69,11 +69,13 @@
69
69
  --tab-indicator-color: var(--indicator-color);
70
70
  --bg-rgb: var(--tabs-bg-rgb);
71
71
  --border-radius: var(--tab-border-radius);
72
+ --grab-offset-x: var(--tabs-padding-start);
72
73
  }
73
74
 
74
- :host([placement=start]),
75
- :host([placement=end]) {
75
+ :host([placement=start]) {
76
+ --content-border-radius: 0 var(--border-radius) var(--border-radius) 0;
76
77
  --content-padding: 1rem;
78
+ --tab-border-radius: 0;
77
79
  --tabs-padding-start: 0;
78
80
  --tabs-padding-end: 0;
79
81
  --tabs-padding-top: 0;
@@ -109,9 +111,6 @@
109
111
  .nano-tab-group__body {
110
112
  background: var(--content-bg);
111
113
  }
112
- .nano-tab-group:not(.focus-visible) ::slotted(nano-tab) {
113
- --focus-shadow: none;
114
- }
115
114
  .nano-tab-group .nano-tab-group__nav-container {
116
115
  position: relative;
117
116
  display: flex;
@@ -140,7 +139,7 @@
140
139
  .nano-tab-group__scroll-button.is-shown {
141
140
  opacity: 1;
142
141
  }
143
- .nano-tab-group__scroll-button.focus-visible:focus {
142
+ .nano-tab-group__scroll-button:focus-visible {
144
143
  box-shadow: var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset;
145
144
  }
146
145
  .nano-tab-group__scroll-button--left {
@@ -261,8 +260,5 @@
261
260
  order: 2;
262
261
  padding: var(--content-padding);
263
262
  overflow: hidden;
264
- border-start-start-radius: 0;
265
- border-start-end-radius: var(--content-border-radius);
266
- border-end-end-radius: var(--content-border-radius);
267
- border-end-start-radius: 0;
263
+ border-radius: var(--content-border-radius);
268
264
  }
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import { h, Host, Build, } from '@stencil/core';
5
5
  import { getDirectChildren, getOffset } from '../../utils/dom';
6
- import { focusVisible } from '../../utils/focus-visible';
7
6
  import { scrollIntoView } from '../../utils/scroll';
8
7
  import { ComponentStore, } from '../../utils/store/component-store';
9
8
  import { createColorClasses } from '../../utils/theme';
@@ -48,6 +47,9 @@ export class TabGroup {
48
47
  this.setActiveTab(tab);
49
48
  };
50
49
  this.handleKeyDown = (event) => {
50
+ const activeEl = document.activeElement;
51
+ if (!activeEl || activeEl.tagName.toLowerCase() !== 'nano-tab')
52
+ return;
51
53
  // Activate a tab
52
54
  if (['Enter', ' '].includes(event.key)) {
53
55
  const target = event.target;
@@ -55,45 +57,49 @@ export class TabGroup {
55
57
  if (tab) {
56
58
  this.setActiveTab(tab);
57
59
  event.preventDefault();
60
+ event.stopPropagation();
58
61
  }
59
62
  }
60
63
  // Move focus left or right
61
- if ([
64
+ if (![
62
65
  'ArrowLeft',
63
66
  'ArrowRight',
64
67
  'ArrowUp',
65
68
  'ArrowDown',
66
69
  'Home',
67
70
  'End',
68
- ].includes(event.key)) {
69
- const activeEl = document.activeElement;
70
- if (activeEl && activeEl.tagName.toLowerCase() === 'nano-tab') {
71
- const tabs = this.getAllActiveTabs;
72
- let index = tabs.indexOf(activeEl);
73
- if (event.key === 'Home') {
74
- index = 0;
75
- }
76
- else if (event.key === 'End') {
77
- index = tabs.length - 1;
78
- }
79
- else if ((this.isRtl && event.key === 'ArrowRight') ||
80
- (!this.isRtl && event.key === 'ArrowLeft')) {
81
- index = Math.max(0, index - 1);
82
- }
83
- else if ((this.isRtl && event.key === 'ArrowLeft') ||
84
- (!this.isRtl && event.key === 'ArrowRight')) {
85
- index = Math.min(tabs.length - 1, index + 1);
86
- }
87
- tabs[index].setFocus();
88
- if (['top'].includes(this.placement)) {
89
- scrollIntoView(tabs[index], this.nav, 'horizontal', 'center');
90
- }
91
- // need to stop bubbling otherwise it will focus on parent tabs if nested
92
- event.stopPropagation();
93
- // stop the browser moving about
94
- event.preventDefault();
71
+ ].includes(event.key))
72
+ return;
73
+ const tabs = this.getAllActiveTabs;
74
+ let index = tabs.indexOf(activeEl);
75
+ if (event.key === 'Home')
76
+ index = 0;
77
+ if (event.key === 'End')
78
+ index = tabs.length - 1;
79
+ if (this.placement === 'top') {
80
+ if ((this.isRtl && event.key === 'ArrowRight') ||
81
+ (!this.isRtl && event.key === 'ArrowLeft')) {
82
+ index = Math.max(0, index - 1);
95
83
  }
84
+ if ((this.isRtl && event.key === 'ArrowLeft') ||
85
+ (!this.isRtl && event.key === 'ArrowRight')) {
86
+ index = Math.min(tabs.length - 1, index + 1);
87
+ }
88
+ }
89
+ if (this.placement === 'start') {
90
+ if (event.key === 'ArrowUp')
91
+ index = Math.max(0, index - 1);
92
+ if (event.key === 'ArrowDown')
93
+ index = Math.min(tabs.length - 1, index + 1);
96
94
  }
95
+ tabs[index].setFocus();
96
+ if (this.placement === 'top') {
97
+ scrollIntoView(tabs[index], this.nav, 'horizontal', 'center');
98
+ }
99
+ // need to stop bubbling otherwise it will focus on parent tabs if nested
100
+ event.stopPropagation();
101
+ // stop the browser moving about
102
+ event.preventDefault();
97
103
  };
98
104
  this.handleTabScroll = () => {
99
105
  if (!this.hasScrollControls) {
@@ -384,11 +390,6 @@ export class TabGroup {
384
390
  }
385
391
  });
386
392
  observer.observe(this.host);
387
- focusVisible.observe(this.tabGroup);
388
- if (this.leftBtn) {
389
- focusVisible.observe(this.leftBtn);
390
- focusVisible.observe(this.rightBtn);
391
- }
392
393
  requestAnimationFrame(() => this.updateScrollControls());
393
394
  if (!window['ResizeObserver'])
394
395
  return;
@@ -411,27 +412,22 @@ export class TabGroup {
411
412
  }
412
413
  }
413
414
  disconnectedCallback() {
414
- focusVisible.unobserve(this.tabGroup);
415
- if (this.leftBtn) {
416
- focusVisible.unobserve(this.leftBtn);
417
- focusVisible.unobserve(this.rightBtn);
418
- }
419
415
  if (this.resizeObserver)
420
416
  this.resizeObserver.unobserve(this.nav);
421
417
  }
422
418
  render() {
423
419
  this.isRtl = this.host.ownerDocument.dir === 'rtl';
424
- return (h(Host, { class: Object.assign({}, createColorClasses(this.color)), dir: this.isRtl ? 'rtl' : null }, h("div", { part: "base", ref: (el) => (this.tabGroup = el), class: {
420
+ return (h(Host, { class: Object.assign({}, createColorClasses(this.color)), dir: this.isRtl ? 'rtl' : null }, h("div", { part: "base", class: {
425
421
  'nano-tab-group': true,
426
422
  'nano-tab-group--top': this.placement === 'top',
427
423
  'nano-tab-group--start': this.placement === 'start',
428
424
  'nano-tab-group--has-scroll-controls': this.hasScrollControls,
429
425
  'nano-tab-group--has-scroll-controls-left': !this.hideControlLeft,
430
426
  'nano-tab-group--has-scroll-controls-right': !this.hideControlRight,
431
- }, onClick: this.handleClick, onKeyDown: this.handleKeyDown }, h("div", { class: "nano-tab-group__nav-container", part: "nav" }, this.placement === 'top' && (h("button", { class: {
427
+ }, onClick: this.handleClick, onKeyDown: this.handleKeyDown }, h("div", { class: "nano-tab-group__nav-container", part: "nav" }, this.placement === 'top' && (h("button", { disabled: !this.hasScrollControls, class: {
432
428
  'nano-tab-group__scroll-button': true,
433
429
  'nano-tab-group__scroll-button--left': true,
434
- }, ref: (btn) => (this.leftBtn = btn), onClick: () => this.handleBtnClick(false) }, h("nano-icon", { name: "light/chevron-left" }))), h("div", { ref: (el) => (this.nav = el), class: "nano-tab-group__nav", onScroll: this.handleTabScroll }, h("div", { ref: (el) => (this.tabs = el), part: "tabs", class: "nano-tab-group__tabs", role: "tablist" }, h("div", { ref: (el) => (this.activeTabIndicator = el), part: "active-tab-indicator", class: "nano-tab-group__active-tab-indicator" }), h("slot", { name: "tabs", onSlotchange: this.handleTabSlotChange }))), this.placement === 'top' && (h("button", { class: {
430
+ }, ref: (btn) => (this.leftBtn = btn), onClick: () => this.handleBtnClick(false) }, h("nano-icon", { name: "light/chevron-left" }))), h("div", { ref: (el) => (this.nav = el), class: "nano-tab-group__nav", onScroll: this.handleTabScroll }, h("div", { ref: (el) => (this.tabs = el), part: "tabs", class: "nano-tab-group__tabs", role: "tablist" }, h("div", { ref: (el) => (this.activeTabIndicator = el), part: "active-tab-indicator", class: "nano-tab-group__active-tab-indicator" }), h("slot", { name: "tabs", onSlotchange: this.handleTabSlotChange }))), this.placement === 'top' && (h("button", { disabled: !this.hasScrollControls, class: {
435
431
  'nano-tab-group__scroll-button': true,
436
432
  'nano-tab-group__scroll-button--right': true,
437
433
  }, ref: (btn) => (this.rightBtn = btn), onClick: () => this.handleBtnClick(true) }, h("nano-icon", { name: "light/chevron-right" })))), h("slot", { name: "tab-content-header" }), h("div", { part: "body", class: "nano-tab-group__body", onTouchStart: this.handleTouchStart, onTouchEnd: this.handleTouchEnd }, h("slot", { onSlotchange: this.handleContentSlotChange })))));
@@ -467,7 +463,7 @@ export class TabGroup {
467
463
  "getter": false,
468
464
  "setter": false,
469
465
  "attribute": "placement",
470
- "reflect": false,
466
+ "reflect": true,
471
467
  "defaultValue": "'top'"
472
468
  },
473
469
  "noScrollControls": {