@nanoporetech-digital/components 3.4.0 → 3.5.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 (101) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/index-41582c2a.js +16 -12
  3. package/dist/cjs/index.cjs.js.map +1 -1
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/nano-components.cjs.js +1 -1
  6. package/dist/cjs/nano-demo.cjs.entry.js +291 -0
  7. package/dist/cjs/nano-demo.cjs.entry.js.map +1 -0
  8. package/dist/cjs/{nano-table-b9cdafab.js → nano-table-83e46f68.js} +486 -202
  9. package/dist/cjs/nano-table-83e46f68.js.map +1 -0
  10. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  11. package/dist/cjs/{table.worker-291904c9.js → table.worker-525ec230.js} +3 -3
  12. package/dist/cjs/table.worker-525ec230.js.map +1 -0
  13. package/dist/cjs/table.worker-e9fb087e.js +4 -0
  14. package/dist/collection/collection-manifest.json +1 -0
  15. package/dist/collection/components/alert/alert.helpers.js.map +1 -1
  16. package/dist/collection/components/demo/demo.js +284 -0
  17. package/dist/collection/components/demo/demo.js.map +1 -0
  18. package/dist/collection/components/dialog/dialog.helpers.js.map +1 -1
  19. package/dist/collection/components/table/table-interface.js.map +1 -1
  20. package/dist/collection/components/table/table.cell.js +65 -0
  21. package/dist/collection/components/table/table.cell.js.map +1 -0
  22. package/dist/collection/components/table/table.css +98 -20
  23. package/dist/collection/components/table/table.header.js +156 -0
  24. package/dist/collection/components/table/table.header.js.map +1 -0
  25. package/dist/collection/components/table/table.js +170 -18
  26. package/dist/collection/components/table/table.js.map +1 -1
  27. package/dist/collection/components/table/table.row.js +113 -0
  28. package/dist/collection/components/table/table.row.js.map +1 -0
  29. package/dist/collection/components/table/table.store.js +46 -9
  30. package/dist/collection/components/table/table.store.js.map +1 -1
  31. package/dist/collection/components/table/table.utils.js +230 -0
  32. package/dist/collection/components/table/table.utils.js.map +1 -1
  33. package/dist/collection/components/table/table.worker.js +1 -0
  34. package/dist/collection/components/table/table.worker.js.map +1 -1
  35. package/dist/components/index.d.ts +1 -0
  36. package/dist/components/index.js +1 -0
  37. package/dist/components/index.js.map +1 -1
  38. package/dist/components/nano-demo.d.ts +11 -0
  39. package/dist/components/nano-demo.js +341 -0
  40. package/dist/components/nano-demo.js.map +1 -0
  41. package/dist/components/nano-table.js +2 -1247
  42. package/dist/components/nano-table.js.map +1 -1
  43. package/dist/components/table.js +1539 -0
  44. package/dist/components/table.js.map +1 -0
  45. package/dist/components/table.worker.js +2 -2
  46. package/dist/custom-elements/index.d.ts +6 -0
  47. package/dist/custom-elements/index.js +772 -204
  48. package/dist/custom-elements/index.js.map +1 -1
  49. package/dist/esm/index-3c280603.js +16 -12
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/loader.js +1 -1
  52. package/dist/esm/nano-components.js +1 -1
  53. package/dist/esm/nano-demo.entry.js +287 -0
  54. package/dist/esm/nano-demo.entry.js.map +1 -0
  55. package/dist/esm/{nano-table-c8ef2276.js → nano-table-e2405350.js} +487 -203
  56. package/dist/esm/nano-table-e2405350.js.map +1 -0
  57. package/dist/esm/nano-table.entry.js +1 -1
  58. package/dist/esm/{table.worker-65438fa0.js → table.worker-739c193f.js} +3 -3
  59. package/dist/esm/table.worker-739c193f.js.map +1 -0
  60. package/dist/esm/table.worker-e9fb087e.js +4 -0
  61. package/dist/nano-components/index.esm.js.map +1 -1
  62. package/dist/nano-components/nano-components.esm.js +1 -1
  63. package/dist/nano-components/nano-components.esm.js.map +1 -1
  64. package/dist/nano-components/p-28fdfa6b.js +5 -0
  65. package/dist/nano-components/p-28fdfa6b.js.map +1 -0
  66. package/dist/nano-components/p-85cfb0af.entry.js +5 -0
  67. package/dist/nano-components/p-85cfb0af.entry.js.map +1 -0
  68. package/dist/nano-components/p-a71989f3.js +5 -0
  69. package/dist/nano-components/{p-14218d23.entry.js.map → p-a71989f3.js.map} +0 -0
  70. package/dist/nano-components/{p-14218d23.entry.js → p-e4a28360.entry.js} +2 -2
  71. package/dist/nano-components/{p-fe1f8360.js.map → p-e4a28360.entry.js.map} +0 -0
  72. package/dist/nano-components/p-e9fb087e.js +4 -0
  73. package/dist/types/components/alert/alert.helpers.d.ts +1 -1
  74. package/dist/types/components/demo/demo.d.ts +6 -0
  75. package/dist/types/components/dialog/dialog.helpers.d.ts +1 -1
  76. package/dist/types/components/table/table-interface.d.ts +38 -23
  77. package/dist/types/components/table/table.cell.d.ts +18 -0
  78. package/dist/types/components/table/table.d.ts +36 -1
  79. package/dist/types/components/table/table.header.d.ts +16 -0
  80. package/dist/types/components/table/table.row.d.ts +15 -0
  81. package/dist/types/components/table/table.utils.d.ts +99 -0
  82. package/dist/types/components.d.ts +50 -0
  83. package/docs-json.json +124 -3
  84. package/docs-vscode.json +17 -1
  85. package/package.json +2 -2
  86. package/dist/cjs/nano-table-b9cdafab.js.map +0 -1
  87. package/dist/cjs/table.worker-1fd13775.js +0 -4
  88. package/dist/cjs/table.worker-291904c9.js.map +0 -1
  89. package/dist/collection/components/table/table.children.js +0 -224
  90. package/dist/collection/components/table/table.children.js.map +0 -1
  91. package/dist/collection/components/table/table.service.js +0 -121
  92. package/dist/collection/components/table/table.service.js.map +0 -1
  93. package/dist/esm/nano-table-c8ef2276.js.map +0 -1
  94. package/dist/esm/table.worker-1fd13775.js +0 -4
  95. package/dist/esm/table.worker-65438fa0.js.map +0 -1
  96. package/dist/nano-components/p-1fd13775.js +0 -4
  97. package/dist/nano-components/p-f9349146.js +0 -5
  98. package/dist/nano-components/p-f9349146.js.map +0 -1
  99. package/dist/nano-components/p-fe1f8360.js +0 -5
  100. package/dist/types/components/table/table.children.d.ts +0 -30
  101. package/dist/types/components/table/table.service.d.ts +0 -42
@@ -1,224 +0,0 @@
1
- /*!
2
- * Web Components for Nanopore digital Web Apps
3
- */
4
- import { Fragment, h } from '@stencil/core';
5
- import { CSSNAMESPACE } from './table.constants';
6
- import { cellRender, colheadFootRender, fetchStores, mergeCellProperties, mergeProperties, rowDataModel, } from './table.service';
7
- function baseClasses(type, vPinned, toString = false) {
8
- const classes = {
9
- [`${CSSNAMESPACE}__${type}`]: true,
10
- [`${CSSNAMESPACE}__pin`]: !!vPinned,
11
- [`${CSSNAMESPACE}__pin--top`]: vPinned === 'top',
12
- [`${CSSNAMESPACE}__pin--bottom`]: vPinned === 'bottom',
13
- };
14
- if (toString) {
15
- let classString = '';
16
- Object.entries(classes).forEach(([className, on]) => {
17
- if (on)
18
- classString += className + ' ';
19
- });
20
- return classString;
21
- }
22
- return classes;
23
- }
24
- const stickyHIOs = new WeakMap();
25
- const stickyVIOs = new WeakMap();
26
- function addHObserver(el, pos, cb) {
27
- if (stickyHIOs.get(el))
28
- return;
29
- const store = fetchStores();
30
- const root = store.general.state.scrollParent;
31
- const observer = new IntersectionObserver(([e]) => {
32
- const rootBounds = e.rootBounds || document.scrollingElement.getBoundingClientRect();
33
- const positions = {};
34
- if (pos === 'start') {
35
- positions.start =
36
- e.boundingClientRect.x - (rootBounds.x + root.scrollLeft) < 0 &&
37
- !e.isIntersecting;
38
- }
39
- if (pos === 'end') {
40
- // console.log('refe', store.general.state.host)
41
- // TODO - sort these out for RtL
42
- positions.end =
43
- e.boundingClientRect.right > e.boundingClientRect.width &&
44
- !e.isIntersecting;
45
- }
46
- cb(positions);
47
- }, {
48
- threshold: [1],
49
- rootMargin: '1px 0px 100px 0px',
50
- root: root === document.scrollingElement ? null : root,
51
- });
52
- stickyHIOs.set(el, observer);
53
- // dirty fix - wait a tick 'cos nano-size-observer isn't always ready in-time
54
- setTimeout(() => observer.observe(el), 300);
55
- }
56
- function addVObserver(el, pos, cb) {
57
- if (stickyVIOs.get(el))
58
- return;
59
- const store = fetchStores();
60
- const root = store.general.state.scrollParent;
61
- const observer = new IntersectionObserver(([e]) => {
62
- const rootBounds = e.rootBounds || document.scrollingElement.getBoundingClientRect();
63
- const positions = {};
64
- if (pos === 'top') {
65
- positions.top =
66
- e.boundingClientRect.y - (rootBounds.y + root.scrollTop) < 0 &&
67
- !e.isIntersecting;
68
- }
69
- if (pos === 'bottom')
70
- positions.bottom =
71
- e.boundingClientRect.height > e.intersectionRect.height &&
72
- !e.isIntersecting;
73
- cb(positions);
74
- }, {
75
- threshold: [1],
76
- rootMargin: '0px 100px 0px 100px',
77
- root: root === document.scrollingElement ? null : root,
78
- });
79
- stickyVIOs.set(el, observer);
80
- requestAnimationFrame(() => observer.observe(el));
81
- }
82
- export const TableRow = ({ rowRenderer, rowIndex, row }, children) => {
83
- let extraProps = {};
84
- if (!row) {
85
- const model = rowDataModel(rowIndex);
86
- row = model.row;
87
- }
88
- if (rowRenderer?.rowProperties) {
89
- extraProps =
90
- rowRenderer.rowProperties({ row: row, rowIndex }) || extraProps;
91
- }
92
- let pinned;
93
- if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {
94
- pinned = rowRenderer.pinned();
95
- }
96
- const baseProps = { class: baseClasses('tr', pinned) };
97
- const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
98
- return (h("tr", { ...props, key: row.__uuid }, children));
99
- };
100
- export const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
101
- let extraProps = {};
102
- if (rowRenderer.rowProperties) {
103
- extraProps = rowRenderer.rowProperties() || {};
104
- }
105
- const pinned = rowRenderer.pinned || null;
106
- const baseProps = { class: baseClasses('tr', null) };
107
- const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
108
- const tpl = rowRenderer?.template;
109
- if (tpl) {
110
- let toRender = tpl(h, {
111
- renderedRow: h("tr", { ...props }, children),
112
- });
113
- if (Array.isArray(toRender)) {
114
- toRender = utils.map(toRender, (node) => {
115
- if (node.vtag === 'tr') {
116
- node.vattrs = mergeProperties({ class: baseClasses('tr', null, true) }, node.vattrs);
117
- if (!!node.vchildren) {
118
- node.vchildren = utils.map(node.vchildren, (cNode) => {
119
- if (['td', 'th'].includes(cNode.vtag.toString())) {
120
- cNode.vattrs = mergeProperties({
121
- class: baseClasses(cNode.vtag.toString(), pinned, true),
122
- ref: (th) => {
123
- addVObserver(th, pinned, onColumnPinned);
124
- },
125
- }, cNode.vattrs);
126
- }
127
- return cNode;
128
- });
129
- }
130
- }
131
- return node;
132
- });
133
- }
134
- return toRender;
135
- }
136
- return h("tr", { ...props }, children);
137
- };
138
- export const TableColHead = ({ column, headRenderer, onColumnOrderClick, onColumnPinned, }) => {
139
- function handleColumnOrderClick(e) {
140
- let order;
141
- switch (column.order) {
142
- case 'asc':
143
- order = 'desc';
144
- break;
145
- case 'desc':
146
- order = null;
147
- break;
148
- default:
149
- order = 'asc';
150
- }
151
- onColumnOrderClick(order, column.prop, e.target.closest('th'));
152
- }
153
- let extraProps = {};
154
- if (column.columnProperties) {
155
- extraProps = column.columnProperties(column) || extraProps;
156
- }
157
- const baseProps = {
158
- class: {
159
- ...baseClasses('th', headRenderer?.pinned),
160
- [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',
161
- [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',
162
- [`${CSSNAMESPACE}__ordered`]: !!column.order,
163
- [`${CSSNAMESPACE}__filtered`]: !!column.filter,
164
- },
165
- };
166
- let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
167
- const content = colheadFootRender(column);
168
- if (!content)
169
- return h(Fragment, null);
170
- props =
171
- Number(props.colspan) > 1
172
- ? { ...props, scope: 'colgroup' }
173
- : { ...props, scope: 'col' };
174
- if (column.sortable !== false) {
175
- return (h("th", { ...props, "aria-sort": column.order
176
- ? column.order === 'asc'
177
- ? 'ascending'
178
- : 'descending'
179
- : 'none', ref: (th) => {
180
- if (['end', 'start'].includes(column.pinned))
181
- addHObserver(th, column.pinned, onColumnPinned);
182
- if (['top', 'bottom'].includes(headRenderer.pinned))
183
- addVObserver(th, headRenderer.pinned, onColumnPinned);
184
- } }, h("button", { class: {
185
- [`${CSSNAMESPACE}__order-btn`]: true,
186
- [`${CSSNAMESPACE}__cell-content`]: true,
187
- }, onClick: handleColumnOrderClick }, colheadFootRender(column), !!column.filter && h("nano-icon", { name: "light/filter" }), !!column.order &&
188
- (column.order === 'desc' ? (h("nano-icon", { name: "solid/long-arrow-down" })) : (h("nano-icon", { name: "solid/long-arrow-up" }))), h("div", { class: `${CSSNAMESPACE}__status-icons` }, h("nano-icon", { name: "light/chevron-down" })))));
189
- }
190
- return (h("th", { ...props, ref: (th) => {
191
- if (['end', 'start'].includes(column.pinned))
192
- addHObserver(th, column.pinned, onColumnPinned);
193
- if (['top', 'bottom'].includes(headRenderer.pinned))
194
- addVObserver(th, headRenderer.pinned, onColumnPinned);
195
- } }, h("div", { class: `${CSSNAMESPACE}__cell-content` }, colheadFootRender(column), !!column.filter && h("nano-icon", { name: "light/bars-filter" }))));
196
- };
197
- export const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
198
- const content = nestedContent || cellRender(rowIndex, colIndex);
199
- if (!content)
200
- return h(Fragment, null);
201
- const store = fetchStores();
202
- const column = store.config.state.columns[colIndex];
203
- let CellType = 'td';
204
- let props = mergeCellProperties(rowIndex, colIndex, {
205
- class: {
206
- [`${CSSNAMESPACE}__td`]: true,
207
- [`${CSSNAMESPACE}__ordered`]: !!column.order,
208
- [`${CSSNAMESPACE}__pin`]: !!column.pinned,
209
- [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',
210
- [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',
211
- },
212
- });
213
- if (column.rowHeader) {
214
- props =
215
- Number(props.rowspan) > 1
216
- ? { ...props, scope: 'rowgroup' }
217
- : { ...props, scope: 'row' };
218
- CellType = 'th';
219
- }
220
- return (h(CellType
221
- // role="gridcell"
222
- , { ...props }, h("div", { class: `${CSSNAMESPACE}__cell-content` }, content)));
223
- };
224
- //# sourceMappingURL=table.children.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"table.children.js","sourceRoot":"","sources":["../../../src/components/table/table.children.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAuB,CAAC,EAAS,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,YAAY,GACb,MAAM,iBAAiB,CAAC;AAiBzB,SAAS,WAAW,CAClB,IAAsB,EACtB,OAA6B,EAC7B,QAAQ,GAAG,KAAK;EAEhB,MAAM,OAAO,GAAG;IACd,CAAC,GAAG,YAAY,KAAK,IAAI,EAAE,CAAC,EAAE,IAAI;IAClC,CAAC,GAAG,YAAY,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO;IACnC,CAAC,GAAG,YAAY,YAAY,CAAC,EAAE,OAAO,KAAK,KAAK;IAChD,CAAC,GAAG,YAAY,eAAe,CAAC,EAAE,OAAO,KAAK,QAAQ;GACvD,CAAC;EAEF,IAAI,QAAQ,EAAE;IACZ,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;MAClD,IAAI,EAAE;QAAE,WAAW,IAAI,SAAS,GAAG,GAAG,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;GACpB;EACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,GACd,IAAI,OAAO,EAAE,CAAC;AAChB,MAAM,UAAU,GACd,IAAI,OAAO,EAAE,CAAC;AAEhB,SAAS,YAAY,CACnB,EAAwB,EACxB,GAAwB,EACxB,EAAY;EAEZ,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAAE,OAAO;EAE/B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;EAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;EAE9C,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CACvC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;IACN,MAAM,UAAU,GACd,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;IACpE,MAAM,SAAS,GAA+C,EAAE,CAAC;IACjE,IAAI,GAAG,KAAK,OAAO,EAAE;MACnB,SAAS,CAAC,KAAK;QACb,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;UAC7D,CAAC,CAAC,CAAC,cAAc,CAAC;KACrB;IACD,IAAI,GAAG,KAAK,KAAK,EAAE;MACjB,gDAAgD;MAChD,gCAAgC;MAChC,SAAS,CAAC,GAAG;QACX,CAAC,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC,kBAAkB,CAAC,KAAK;UACvD,CAAC,CAAC,CAAC,cAAc,CAAC;KACrB;IACD,EAAE,CAAC,SAAS,CAAC,CAAC;EAChB,CAAC,EACD;IACE,SAAS,EAAE,CAAC,CAAC,CAAC;IACd,UAAU,EAAE,mBAAmB;IAC/B,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;GACvD,CACF,CAAC;EACF,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;EAC7B,6EAA6E;EAC7E,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,YAAY,CACnB,EAAwB,EACxB,GAAwB,EACxB,EAAY;EAEZ,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAAE,OAAO;EAE/B,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;EAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;EAE9C,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CACvC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;IACN,MAAM,UAAU,GACd,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;IACpE,MAAM,SAAS,GAA+C,EAAE,CAAC;IACjE,IAAI,GAAG,KAAK,KAAK,EAAE;MACjB,SAAS,CAAC,GAAG;QACX,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;UAC5D,CAAC,CAAC,CAAC,cAAc,CAAC;KACrB;IACD,IAAI,GAAG,KAAK,QAAQ;MAClB,SAAS,CAAC,MAAM;QACd,CAAC,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,gBAAgB,CAAC,MAAM;UACvD,CAAC,CAAC,CAAC,cAAc,CAAC;IACtB,EAAE,CAAC,SAAS,CAAC,CAAC;EAChB,CAAC,EACD;IACE,SAAS,EAAE,CAAC,CAAC,CAAC;IACd,UAAU,EAAE,qBAAqB;IACjC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;GACvD,CACF,CAAC;EACF,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;EAC7B,qBAAqB,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC;AAQD,MAAM,CAAC,MAAM,QAAQ,GAAuC,CAC1D,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,EAC9B,QAAQ,EACR,EAAE;EACF,IAAI,UAAU,GAAG,EAAE,CAAC;EAEpB,IAAI,CAAC,GAAG,EAAE;IACR,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACrC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;GACjB;EAED,IAAI,WAAW,EAAE,aAAa,EAAE;IAC9B,UAAU;MACR,WAAW,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,IAAI,UAAU,CAAC;GACnE;EAED,IAAI,MAA2B,CAAC;EAChC,IAAI,WAAW,EAAE,MAAM,IAAI,OAAO,WAAW,CAAC,MAAM,KAAK,UAAU,EAAE;IACnE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;GAC/B;EAED,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;EACvD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;EAE9E,OAAO,CACL,aAAQ,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,IAC3B,QAAQ,CACN,CACN,CAAC;AACJ,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,gBAAgB,GAA4C,CACvE,EAAE,WAAW,EAAE,cAAc,EAAE,EAC/B,QAAQ,EACR,KAAK,EACL,EAAE;EACF,IAAI,UAAU,GAAG,EAAE,CAAC;EACpB,IAAI,WAAW,CAAC,aAAa,EAAE;IAC7B,UAAU,GAAG,WAAW,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;GAChD;EAED,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC;EAC1C,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;EACrD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;EAC9E,MAAM,GAAG,GAAG,WAAW,EAAE,QAAQ,CAAC;EAElC,IAAI,GAAG,EAAE;IACP,IAAI,QAAQ,GAAG,GAAG,CAAC,CAA4B,EAAE;MAC/C,WAAW,EAAE,aAAQ,KAAK,IAAG,QAAQ,CAAM;KAC5C,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;MAC3B,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;UACtB,IAAI,CAAC,MAAM,GAAG,eAAe,CAC3B,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EACxC,IAAI,CAAC,MAAM,CACZ,CAAC;UAEF,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE;YACpB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;cACnD,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;gBAChD,KAAK,CAAC,MAAM,GAAG,eAAe,CAC5B;kBACE,KAAK,EAAE,WAAW,CAChB,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAsB,EACzC,MAAM,EACN,IAAI,CACL;kBACD,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE;oBACV,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;kBAC3C,CAAC;iBACF,EACD,KAAK,CAAC,MAAM,CACb,CAAC;eACH;cACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;WACJ;SACF;QACD,OAAO,IAAI,CAAC;MACd,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,QAAQ,CAAC;GACjB;EAED,OAAO,aAAQ,KAAK,IAAG,QAAQ,CAAM,CAAC;AACxC,CAAC,CAAC;AAaF,MAAM,CAAC,MAAM,YAAY,GAA2C,CAAC,EACnE,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,cAAc,GACf,EAAE,EAAE;EACH,SAAS,sBAAsB,CAAC,CAAuC;IACrE,IAAI,KAAK,CAAC;IACV,QAAQ,MAAM,CAAC,KAAK,EAAE;MACpB,KAAK,KAAK;QACR,KAAK,GAAG,MAAM,CAAC;QACf,MAAM;MACR,KAAK,MAAM;QACT,KAAK,GAAG,IAAI,CAAC;QACb,MAAM;MACR;QACE,KAAK,GAAG,KAAK,CAAC;KACjB;IACD,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;EACjE,CAAC;EAED,IAAI,UAAU,GAAG,EAAE,CAAC;EACpB,IAAI,MAAM,CAAC,gBAAgB,EAAE;IAC3B,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;GAC5D;EAED,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE;MACL,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC;MAC1C,CAAC,GAAG,YAAY,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,KAAK,OAAO;MAC1D,CAAC,GAAG,YAAY,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,KAAK,KAAK;MACtD,CAAC,GAAG,YAAY,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;MAC5C,CAAC,GAAG,YAAY,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;KAC/C;GACF,CAAC;EACF,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;EAC5E,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;EAE1C,IAAI,CAAC,OAAO;IAAE,OAAO,EAAC,QAAQ,OAAY,CAAC;EAE3C,KAAK;IACH,MAAM,CAAE,KAA6B,CAAC,OAAO,CAAC,GAAG,CAAC;MAChD,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;MACjC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;EAEjC,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE;IAC7B,OAAO,CACL,aACM,KAAK,eAEP,MAAM,CAAC,KAAK;QACV,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK;UACtB,CAAC,CAAC,WAAW;UACb,CAAC,CAAC,YAAY;QAChB,CAAC,CAAC,MAAM,EAEZ,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE;QACV,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;UAC1C,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;UACjD,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;MAC1D,CAAC;MAED,cACE,KAAK,EAAE;UACL,CAAC,GAAG,YAAY,aAAa,CAAC,EAAE,IAAI;UACpC,CAAC,GAAG,YAAY,gBAAgB,CAAC,EAAE,IAAI;SACxC,EACD,OAAO,EAAE,sBAAsB;QAE9B,iBAAiB,CAAC,MAAM,CAAC;QACzB,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,iBAAW,IAAI,EAAC,cAAc,GAAG;QACpD,CAAC,CAAC,MAAM,CAAC,KAAK;UACb,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CACzB,iBAAW,IAAI,EAAC,uBAAuB,GAAG,CAC3C,CAAC,CAAC,CAAC,CACF,iBAAW,IAAI,EAAC,qBAAqB,GAAG,CACzC,CAAC;QACJ,WAAK,KAAK,EAAE,GAAG,YAAY,gBAAgB;UACzC,iBAAW,IAAI,EAAC,oBAAoB,GAAG,CACnC,CACC,CACN,CACN,CAAC;GACH;EAED,OAAO,CACL,aACM,KAAK,EACT,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE;MACV,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QAC1C,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;MAClD,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;QACjD,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED,WAAK,KAAK,EAAE,GAAG,YAAY,gBAAgB;MACxC,iBAAiB,CAAC,MAAM,CAAC;MACzB,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,iBAAW,IAAI,EAAC,mBAAmB,GAAG,CACtD,CACH,CACN,CAAC;AACJ,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,SAAS,GAAwC,CAAC,EAC7D,QAAQ,EACR,QAAQ,EACR,aAAa,GACd,EAAE,EAAE;EACH,MAAM,OAAO,GAAG,aAAa,IAAI,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;EAChE,IAAI,CAAC,OAAO;IAAE,OAAO,EAAC,QAAQ,OAAY,CAAC;EAE3C,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;EAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;EACpD,IAAI,QAAQ,GAAG,IAAI,CAAC;EACpB,IAAI,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE;IAClD,KAAK,EAAE;MACL,CAAC,GAAG,YAAY,MAAM,CAAC,EAAE,IAAI;MAC7B,CAAC,GAAG,YAAY,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;MAC5C,CAAC,GAAG,YAAY,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;MACzC,CAAC,GAAG,YAAY,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,KAAK,OAAO;MAC1D,CAAC,GAAG,YAAY,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,KAAK,KAAK;KACvD;GACF,CAAC,CAAC;EAEH,IAAI,MAAM,CAAC,SAAS,EAAE;IACpB,KAAK;MACH,MAAM,CAAE,KAA6B,CAAC,OAAO,CAAC,GAAG,CAAC;QAChD,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;QACjC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACjC,QAAQ,GAAG,IAAI,CAAC;GACjB;EAED,OAAO,CACL,EAAC,QAAQ;EACP,kBAAkB;SACd,KAAK;IAET,WAAK,KAAK,EAAE,GAAG,YAAY,gBAAgB,IAAG,OAAO,CAAO,CACnD,CACZ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { Fragment, FunctionalComponent, h, VNode } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n cellRender,\n colheadFootRender,\n fetchStores,\n mergeCellProperties,\n mergeProperties,\n rowDataModel,\n} from './table.service';\nimport type { TableTypes } from '../../interface';\n\ntype ValidRenderTypes = 'tr' | 'th' | 'td';\n\ntype PinnedCb = (positions: { [key in TableTypes.Position]?: boolean }) => void;\n\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: false\n): { [key: string]: boolean };\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: true\n): string;\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString = false\n): { [key: string]: boolean } | string {\n const classes = {\n [`${CSSNAMESPACE}__${type}`]: true,\n [`${CSSNAMESPACE}__pin`]: !!vPinned,\n [`${CSSNAMESPACE}__pin--top`]: vPinned === 'top',\n [`${CSSNAMESPACE}__pin--bottom`]: vPinned === 'bottom',\n };\n\n if (toString) {\n let classString = '';\n Object.entries(classes).forEach(([className, on]) => {\n if (on) classString += className + ' ';\n });\n return classString;\n }\n return classes;\n}\n\nconst stickyHIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\nconst stickyVIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\n\nfunction addHObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyHIOs.get(el)) return;\n\n const store = fetchStores();\n const root = store.general.state.scrollParent;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n const rootBounds =\n e.rootBounds || document.scrollingElement.getBoundingClientRect();\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'start') {\n positions.start =\n e.boundingClientRect.x - (rootBounds.x + root.scrollLeft) < 0 &&\n !e.isIntersecting;\n }\n if (pos === 'end') {\n // console.log('refe', store.general.state.host)\n // TODO - sort these out for RtL\n positions.end =\n e.boundingClientRect.right > e.boundingClientRect.width &&\n !e.isIntersecting;\n }\n cb(positions);\n },\n {\n threshold: [1],\n rootMargin: '1px 0px 100px 0px',\n root: root === document.scrollingElement ? null : root,\n }\n );\n stickyHIOs.set(el, observer);\n // dirty fix - wait a tick 'cos nano-size-observer isn't always ready in-time\n setTimeout(() => observer.observe(el), 300);\n}\n\nfunction addVObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyVIOs.get(el)) return;\n\n const store = fetchStores();\n const root = store.general.state.scrollParent;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n const rootBounds =\n e.rootBounds || document.scrollingElement.getBoundingClientRect();\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'top') {\n positions.top =\n e.boundingClientRect.y - (rootBounds.y + root.scrollTop) < 0 &&\n !e.isIntersecting;\n }\n if (pos === 'bottom')\n positions.bottom =\n e.boundingClientRect.height > e.intersectionRect.height &&\n !e.isIntersecting;\n cb(positions);\n },\n {\n threshold: [1],\n rootMargin: '0px 100px 0px 100px',\n root: root === document.scrollingElement ? null : root,\n }\n );\n stickyVIOs.set(el, observer);\n requestAnimationFrame(() => observer.observe(el));\n}\n\ntype TableRowProps = {\n rowRenderer: TableTypes.RowRenderer;\n rowIndex?: number;\n row?: TableTypes.RowData;\n};\n\nexport const TableRow: FunctionalComponent<TableRowProps> = (\n { rowRenderer, rowIndex, row },\n children\n) => {\n let extraProps = {};\n\n if (!row) {\n const model = rowDataModel(rowIndex);\n row = model.row;\n }\n\n if (rowRenderer?.rowProperties) {\n extraProps =\n rowRenderer.rowProperties({ row: row, 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: baseClasses('tr', pinned) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n\n return (\n <tr {...props} key={row.__uuid}>\n {children}\n </tr>\n );\n};\n\ntype TableHeadFootProps = {\n rowRenderer: TableTypes.HeadFootRenderer;\n onColumnPinned?: 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 pinned = rowRenderer.pinned || null;\n const baseProps = { class: baseClasses('tr', null) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const tpl = rowRenderer?.template;\n\n if (tpl) {\n let toRender = tpl(h as TableTypes.HFunc<VNode>, {\n renderedRow: <tr {...props}>{children}</tr>,\n });\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node) => {\n if (node.vtag === 'tr') {\n node.vattrs = mergeProperties(\n { class: baseClasses('tr', null, 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: baseClasses(\n cNode.vtag.toString() as ValidRenderTypes,\n pinned,\n true\n ),\n ref: (th) => {\n addVObserver(th, pinned, 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\ntype TableColHeadProps = {\n column: TableTypes.ColumnConfig;\n headRenderer: TableTypes.HeadFootRenderer;\n onColumnOrderClick?: (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n el: HTMLElement\n ) => void;\n onColumnPinned?: PinnedCb;\n};\n\nexport const TableColHead: FunctionalComponent<TableColHeadProps> = ({\n column,\n headRenderer,\n onColumnOrderClick,\n onColumnPinned,\n}) => {\n function handleColumnOrderClick(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 onColumnOrderClick(order, column.prop, e.target.closest('th'));\n }\n\n let extraProps = {};\n if (column.columnProperties) {\n extraProps = column.columnProperties(column) || extraProps;\n }\n\n const baseProps = {\n class: {\n ...baseClasses('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`]: !!column.filter,\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.EleProps).colspan) > 1\n ? { ...props, scope: 'colgroup' }\n : { ...props, scope: 'col' };\n\n if (column.sortable !== false) {\n return (\n <th\n {...props}\n aria-sort={\n column.order\n ? column.order === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n }\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 >\n <button\n class={{\n [`${CSSNAMESPACE}__order-btn`]: true,\n [`${CSSNAMESPACE}__cell-content`]: true,\n }}\n onClick={handleColumnOrderClick}\n >\n {colheadFootRender(column)}\n {!!column.filter && <nano-icon name=\"light/filter\" />}\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 </th>\n );\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 >\n <div class={`${CSSNAMESPACE}__cell-content`}>\n {colheadFootRender(column)}\n {!!column.filter && <nano-icon name=\"light/bars-filter\" />}\n </div>\n </th>\n );\n};\n\ntype TableCellProps = {\n rowIndex: number;\n colIndex: number;\n nestedContent?: VNode;\n};\n\nexport const TableCell: FunctionalComponent<TableCellProps> = ({\n rowIndex,\n colIndex,\n nestedContent,\n}) => {\n const content = nestedContent || cellRender(rowIndex, colIndex);\n if (!content) return <Fragment></Fragment>;\n\n const store = fetchStores();\n const column = store.config.state.columns[colIndex];\n let CellType = 'td';\n let props = mergeCellProperties(rowIndex, colIndex, {\n class: {\n [`${CSSNAMESPACE}__td`]: true,\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__pin`]: !!column.pinned,\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n },\n });\n\n if (column.rowHeader) {\n props =\n Number((props as TableTypes.EleProps).rowspan) > 1\n ? { ...props, scope: 'rowgroup' }\n : { ...props, scope: 'row' };\n CellType = 'th';\n }\n\n return (\n <CellType\n // role=\"gridcell\"\n {...props}\n >\n <div class={`${CSSNAMESPACE}__cell-content`}>{content}</div>\n </CellType>\n );\n};\n"]}
@@ -1,121 +0,0 @@
1
- /*!
2
- * Web Components for Nanopore digital Web Apps
3
- */
4
- import { getRenderingRef, getElement, h, Fragment } from '@stencil/core';
5
- import { getStore } from './table.store';
6
- /**
7
- * Get a model object for custom cell / property renderers.
8
- * @param rowIndex - the current row index being rendered
9
- * @param colIndex - the current column index being rendered
10
- * @returns a model object which will be passed to custom renderers
11
- */
12
- function colDataModel(rowIndex, colIndex) {
13
- const store = fetchStores();
14
- const columns = store.config.state.columns;
15
- const rows = store.data.state.rows;
16
- const column = columns[colIndex];
17
- const prop = column?.prop;
18
- const rowModel = rows[rowIndex];
19
- const cellModel = rowModel[columns[colIndex].prop];
20
- return {
21
- prop,
22
- cellModel,
23
- column,
24
- rowIndex,
25
- rowModel,
26
- };
27
- }
28
- /**
29
- * Get a model object for custom row renderers.
30
- * @param rowIndex
31
- * @returns a model object passed to custom row renderers
32
- */
33
- export function rowDataModel(rowIndex) {
34
- const store = fetchStores();
35
- const rows = store.data.state.rows;
36
- const row = rows[rowIndex];
37
- return {
38
- row,
39
- rowIndex,
40
- };
41
- }
42
- /**
43
- * Merges 2 objects of properties together
44
- * @param current - property object
45
- * @param extra - additional object property
46
- * @returns - merged properties that can be applied to a node
47
- */
48
- export function mergeProperties(current, extra) {
49
- if (!extra)
50
- return current;
51
- // top level merge
52
- const props = { ...extra, ...current };
53
- // deeper merge
54
- // merge classes maps or strings
55
- if (extra.class) {
56
- if (typeof extra.class === 'object' && typeof props.class === 'object') {
57
- props.class = { ...extra.class, ...props.class };
58
- }
59
- else if (typeof extra.class === 'string' &&
60
- typeof props.class === 'object') {
61
- props.class[extra.class] = true;
62
- }
63
- else if (typeof props.class === 'string') {
64
- props.class += ' ' + extra.class;
65
- }
66
- }
67
- // merge style
68
- if (extra.style) {
69
- props.style = { ...extra.style, ...props.style };
70
- }
71
- return props;
72
- }
73
- /**
74
- * Returns the current nano-table's stores.
75
- * @returns the current nano-table stores
76
- */
77
- export function fetchStores() {
78
- return getStore(getElement(getRenderingRef()));
79
- }
80
- /**
81
- * Merges any defined cell properties with properties
82
- * required by `nano-table` functionality
83
- * @param rowIndex - the current row index being rendered
84
- * @param colIndex = the current column index being rendered
85
- * @param defaultProps - default properties required by `nano-table`
86
- * @returns - the merged properties that will be applied to a node
87
- */
88
- export function mergeCellProperties(rowIndex, colIndex, defaultProps) {
89
- const props = { ...defaultProps };
90
- const extraPropsFunc = fetchStores().config.state.columns[colIndex]?.cellProperties;
91
- if (!extraPropsFunc)
92
- return props;
93
- const data = colDataModel(rowIndex, colIndex);
94
- const extra = extraPropsFunc(data);
95
- if (!extra)
96
- return props;
97
- return mergeProperties(props, extra);
98
- }
99
- /**
100
- * Renders a cell using a custom renderer if set.
101
- * @param rowIndex - the current row index being rendered
102
- * @param colIndex - the current column index being rendered
103
- * @returns - a JSX node
104
- */
105
- export function cellRender(rowIndex, colIndex) {
106
- const store = fetchStores();
107
- const columns = store.config.state.columns;
108
- const tpl = columns[colIndex]?.cellTemplate;
109
- const model = colDataModel(rowIndex, colIndex);
110
- return tpl ? (tpl(h, model)) : (h(Fragment, null, model.cellModel.toString()));
111
- }
112
- /**
113
- * Renders a table header (within a thead) using a custom template if set.
114
- * @param col - the current column config object
115
- * @returns - a JSX node
116
- */
117
- export function colheadFootRender(col) {
118
- const tpl = col?.colTemplate;
119
- return tpl ? (tpl(h, col)) : (h(Fragment, null, col.title));
120
- }
121
- //# sourceMappingURL=table.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"table.service.js","sourceRoot":"","sources":["../../../src/components/table/table.service.tsx"],"names":[],"mappings":"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","sourcesContent":["import { getRenderingRef, getElement, VNode, h, Fragment } from '@stencil/core';\nimport { getStore } from './table.store';\nimport type { TableTypes } from '../../interface';\n\n/**\n * Get a model object for custom cell / property renderers.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns a model object which will be passed to custom renderers\n */\nfunction colDataModel(\n rowIndex: number,\n colIndex: number\n): TableTypes.ColumnDataSchemaModel {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const rows = store.data.state.rows;\n\n const column = columns[colIndex];\n const prop: TableTypes.ColumnProp | undefined = column?.prop;\n const rowModel = rows[rowIndex];\n const cellModel = rowModel[columns[colIndex].prop];\n\n return {\n prop,\n cellModel,\n column,\n rowIndex,\n rowModel,\n };\n}\n\n/**\n * Get a model object for custom row renderers.\n * @param rowIndex\n * @returns a model object passed to custom row renderers\n */\nexport function rowDataModel(rowIndex: number): TableTypes.RowDataSchemaModel {\n const store = fetchStores();\n const rows = store.data.state.rows;\n const row = rows[rowIndex];\n\n return {\n row,\n rowIndex,\n };\n}\n\n/**\n * Merges 2 objects of properties together\n * @param current - property object\n * @param extra - additional object property\n * @returns - merged properties that can be applied to a node\n */\nexport function mergeProperties(\n current: TableTypes.EleProps,\n extra: TableTypes.EleProps\n) {\n if (!extra) return current;\n\n // top level merge\n const props: TableTypes.EleProps = { ...extra, ...current };\n\n // deeper merge\n // merge classes maps or strings\n if (extra.class) {\n if (typeof extra.class === 'object' && typeof props.class === 'object') {\n props.class = { ...extra.class, ...props.class };\n } else if (\n typeof extra.class === 'string' &&\n typeof props.class === 'object'\n ) {\n props.class[extra.class] = true;\n } else if (typeof props.class === 'string') {\n props.class += ' ' + extra.class;\n }\n }\n // merge style\n if (extra.style) {\n props.style = { ...extra.style, ...props.style };\n }\n return props;\n}\n\n/**\n * Returns the current nano-table's stores.\n * @returns the current nano-table stores\n */\nexport function fetchStores() {\n return getStore(getElement(getRenderingRef()));\n}\n\n/**\n * Merges any defined cell properties with properties\n * required by `nano-table` functionality\n * @param rowIndex - the current row index being rendered\n * @param colIndex = the current column index being rendered\n * @param defaultProps - default properties required by `nano-table`\n * @returns - the merged properties that will be applied to a node\n */\nexport function mergeCellProperties(\n rowIndex: number,\n colIndex: number,\n defaultProps: TableTypes.EleProps\n): TableTypes.EleProps {\n const props: TableTypes.EleProps = { ...defaultProps };\n const extraPropsFunc =\n fetchStores().config.state.columns[colIndex]?.cellProperties;\n if (!extraPropsFunc) return props;\n\n const data = colDataModel(rowIndex, colIndex);\n const extra = extraPropsFunc(data);\n if (!extra) return props;\n\n return mergeProperties(props, extra);\n}\n\n/**\n * Renders a cell using a custom renderer if set.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns - a JSX node\n */\nexport function cellRender(rowIndex: number, colIndex: number): VNode {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const tpl = columns[colIndex]?.cellTemplate;\n const model = colDataModel(rowIndex, colIndex);\n\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, model)\n ) : (\n <Fragment>{model.cellModel.toString()}</Fragment>\n );\n}\n\n/**\n * Renders a table header (within a thead) using a custom template if set.\n * @param col - the current column config object\n * @returns - a JSX node\n */\nexport function colheadFootRender(col: TableTypes.ColumnConfig): VNode {\n const tpl = col?.colTemplate;\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, col)\n ) : (\n <Fragment>{col.title}</Fragment>\n );\n}\n"]}