@beaconsoftware/b-report-table 1.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 (56) hide show
  1. package/dist/b-report-table-body.d.ts +16 -0
  2. package/dist/b-report-table-body.d.ts.map +1 -0
  3. package/dist/b-report-table-body.js +28 -0
  4. package/dist/b-report-table-body.js.map +1 -0
  5. package/dist/b-report-table-cell.d.ts +23 -0
  6. package/dist/b-report-table-cell.d.ts.map +1 -0
  7. package/dist/b-report-table-cell.js +103 -0
  8. package/dist/b-report-table-cell.js.map +1 -0
  9. package/dist/b-report-table-footer-cell.d.ts +25 -0
  10. package/dist/b-report-table-footer-cell.d.ts.map +1 -0
  11. package/dist/b-report-table-footer-cell.js +125 -0
  12. package/dist/b-report-table-footer-cell.js.map +1 -0
  13. package/dist/b-report-table-footer-row.d.ts +16 -0
  14. package/dist/b-report-table-footer-row.d.ts.map +1 -0
  15. package/dist/b-report-table-footer-row.js +28 -0
  16. package/dist/b-report-table-footer-row.js.map +1 -0
  17. package/dist/b-report-table-footer.d.ts +20 -0
  18. package/dist/b-report-table-footer.d.ts.map +1 -0
  19. package/dist/b-report-table-footer.js +38 -0
  20. package/dist/b-report-table-footer.js.map +1 -0
  21. package/dist/b-report-table-header-cell.d.ts +30 -0
  22. package/dist/b-report-table-header-cell.d.ts.map +1 -0
  23. package/dist/b-report-table-header-cell.js +121 -0
  24. package/dist/b-report-table-header-cell.js.map +1 -0
  25. package/dist/b-report-table-header-row.d.ts +16 -0
  26. package/dist/b-report-table-header-row.d.ts.map +1 -0
  27. package/dist/b-report-table-header-row.js +28 -0
  28. package/dist/b-report-table-header-row.js.map +1 -0
  29. package/dist/b-report-table-header.d.ts +25 -0
  30. package/dist/b-report-table-header.d.ts.map +1 -0
  31. package/dist/b-report-table-header.js +114 -0
  32. package/dist/b-report-table-header.js.map +1 -0
  33. package/dist/b-report-table-row.d.ts +16 -0
  34. package/dist/b-report-table-row.d.ts.map +1 -0
  35. package/dist/b-report-table-row.js +32 -0
  36. package/dist/b-report-table-row.js.map +1 -0
  37. package/dist/b-report-table.d.ts +32 -0
  38. package/dist/b-report-table.d.ts.map +1 -0
  39. package/dist/b-report-table.js +74 -0
  40. package/dist/b-report-table.js.map +1 -0
  41. package/dist/index.d.ts +12 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +11 -0
  44. package/dist/index.js.map +1 -0
  45. package/package.json +41 -0
  46. package/src/b-report-table-body.ts +26 -0
  47. package/src/b-report-table-cell.ts +109 -0
  48. package/src/b-report-table-footer-cell.ts +131 -0
  49. package/src/b-report-table-footer-row.ts +26 -0
  50. package/src/b-report-table-footer.ts +32 -0
  51. package/src/b-report-table-header-cell.ts +128 -0
  52. package/src/b-report-table-header-row.ts +26 -0
  53. package/src/b-report-table-header.ts +125 -0
  54. package/src/b-report-table-row.ts +30 -0
  55. package/src/b-report-table.ts +80 -0
  56. package/src/index.ts +12 -0
@@ -0,0 +1,28 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, css } from 'lit';
8
+ import { customElement } from 'lit/decorators.js';
9
+ /**
10
+ * A row within the table header.
11
+ *
12
+ * @slot - Default slot for header cells (b-report-table-header-cell)
13
+ */
14
+ let BReportTableHeaderRow = class BReportTableHeaderRow extends LitElement {
15
+ render() {
16
+ return html `<slot></slot>`;
17
+ }
18
+ };
19
+ BReportTableHeaderRow.styles = css `
20
+ :host {
21
+ display: table-row;
22
+ }
23
+ `;
24
+ BReportTableHeaderRow = __decorate([
25
+ customElement('b-report-table-header-row')
26
+ ], BReportTableHeaderRow);
27
+ export { BReportTableHeaderRow };
28
+ //# sourceMappingURL=b-report-table-header-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b-report-table-header-row.js","sourceRoot":"","sources":["../src/b-report-table-header-row.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;GAIG;AAEI,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,UAAU;IAOnD,MAAM;QACJ,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;;AARM,4BAAM,GAAG,GAAG,CAAA;;;;GAIlB,AAJY,CAIX;AALS,qBAAqB;IADjC,aAAa,CAAC,2BAA2B,CAAC;GAC9B,qBAAqB,CAUjC"}
@@ -0,0 +1,25 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * Table header component that wraps header rows.
4
+ *
5
+ * @slot - Default slot for header rows (b-report-table-header-row)
6
+ */
7
+ export declare class BReportTableHeader extends LitElement {
8
+ static styles: import("lit").CSSResult;
9
+ /**
10
+ * Whether the header should be sticky (fixed at the top when scrolling).
11
+ */
12
+ sticky: boolean;
13
+ private _resizeObserver?;
14
+ connectedCallback(): void;
15
+ disconnectedCallback(): void;
16
+ private _setupResizeObserver;
17
+ private _calculateColumnConfigs;
18
+ render(): import("lit-html").TemplateResult<1>;
19
+ }
20
+ declare global {
21
+ interface HTMLElementTagNameMap {
22
+ 'b-report-table-header': BReportTableHeader;
23
+ }
24
+ }
25
+ //# sourceMappingURL=b-report-table-header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b-report-table-header.d.ts","sourceRoot":"","sources":["../src/b-report-table-header.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAK5C;;;;GAIG;AACH,qBACa,kBAAmB,SAAQ,UAAU;IAChD,MAAM,CAAC,MAAM,0BAIX;IAEF;;OAEG;IAEH,MAAM,UAAS;IAEf,OAAO,CAAC,eAAe,CAAC,CAAiB;IAEzC,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAK5B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,uBAAuB;IAoE/B,MAAM;CAGP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,uBAAuB,EAAE,kBAAkB,CAAC;KAC7C;CACF"}
@@ -0,0 +1,114 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, css } from 'lit';
8
+ import { customElement, property } from 'lit/decorators.js';
9
+ /**
10
+ * Table header component that wraps header rows.
11
+ *
12
+ * @slot - Default slot for header rows (b-report-table-header-row)
13
+ */
14
+ let BReportTableHeader = class BReportTableHeader extends LitElement {
15
+ constructor() {
16
+ super(...arguments);
17
+ /**
18
+ * Whether the header should be sticky (fixed at the top when scrolling).
19
+ */
20
+ this.sticky = false;
21
+ }
22
+ connectedCallback() {
23
+ super.connectedCallback();
24
+ this._setupResizeObserver();
25
+ // Delay initial calculation to ensure all children are rendered
26
+ requestAnimationFrame(() => {
27
+ this._calculateColumnConfigs();
28
+ });
29
+ }
30
+ disconnectedCallback() {
31
+ super.disconnectedCallback();
32
+ this._resizeObserver?.disconnect();
33
+ }
34
+ _setupResizeObserver() {
35
+ this._resizeObserver = new ResizeObserver(() => {
36
+ this._calculateColumnConfigs();
37
+ });
38
+ this._resizeObserver.observe(this);
39
+ }
40
+ _calculateColumnConfigs() {
41
+ const table = this.closest('b-report-table');
42
+ if (!table)
43
+ return;
44
+ // Find the first header row to get column configurations
45
+ const firstRow = this.querySelector('b-report-table-header-row');
46
+ if (!firstRow)
47
+ return;
48
+ const cells = Array.from(firstRow.querySelectorAll('b-report-table-header-cell'));
49
+ const configs = [];
50
+ let leftOffset = 0;
51
+ let rightOffset = 0;
52
+ // First pass: collect all cells and their sticky values
53
+ const cellData = cells.map((cell, index) => ({
54
+ index,
55
+ sticky: cell.sticky,
56
+ width: cell.offsetWidth || 100,
57
+ }));
58
+ // Calculate left sticky offsets
59
+ for (const data of cellData) {
60
+ if (data.sticky === 'left') {
61
+ configs.push({
62
+ index: data.index,
63
+ sticky: 'left',
64
+ width: data.width,
65
+ offset: leftOffset,
66
+ });
67
+ leftOffset += data.width;
68
+ }
69
+ }
70
+ // Calculate right sticky offsets (from right to left)
71
+ for (let i = cellData.length - 1; i >= 0; i--) {
72
+ const data = cellData[i];
73
+ if (data.sticky === 'right') {
74
+ configs.push({
75
+ index: data.index,
76
+ sticky: 'right',
77
+ width: data.width,
78
+ offset: rightOffset,
79
+ });
80
+ rightOffset += data.width;
81
+ }
82
+ }
83
+ // Add non-sticky columns
84
+ for (const data of cellData) {
85
+ if (data.sticky !== 'left' && data.sticky !== 'right') {
86
+ configs.push({
87
+ index: data.index,
88
+ sticky: null,
89
+ width: data.width,
90
+ offset: 0,
91
+ });
92
+ }
93
+ }
94
+ // Sort by index
95
+ configs.sort((a, b) => a.index - b.index);
96
+ table.updateColumnConfigs(configs);
97
+ }
98
+ render() {
99
+ return html `<slot></slot>`;
100
+ }
101
+ };
102
+ BReportTableHeader.styles = css `
103
+ :host {
104
+ display: table-header-group;
105
+ }
106
+ `;
107
+ __decorate([
108
+ property({ type: Boolean, reflect: true })
109
+ ], BReportTableHeader.prototype, "sticky", void 0);
110
+ BReportTableHeader = __decorate([
111
+ customElement('b-report-table-header')
112
+ ], BReportTableHeader);
113
+ export { BReportTableHeader };
114
+ //# sourceMappingURL=b-report-table-header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b-report-table-header.js","sourceRoot":"","sources":["../src/b-report-table-header.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * A row within the table body.
4
+ *
5
+ * @slot - Default slot for cells (b-report-table-cell)
6
+ */
7
+ export declare class BReportTableRow extends LitElement {
8
+ static styles: import("lit").CSSResult;
9
+ render(): import("lit-html").TemplateResult<1>;
10
+ }
11
+ declare global {
12
+ interface HTMLElementTagNameMap {
13
+ 'b-report-table-row': BReportTableRow;
14
+ }
15
+ }
16
+ //# sourceMappingURL=b-report-table-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b-report-table-row.d.ts","sourceRoot":"","sources":["../src/b-report-table-row.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C;;;;GAIG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAC7C,MAAM,CAAC,MAAM,0BAQX;IAEF,MAAM;CAGP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,eAAe,CAAC;KACvC;CACF"}
@@ -0,0 +1,32 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, css } from 'lit';
8
+ import { customElement } from 'lit/decorators.js';
9
+ /**
10
+ * A row within the table body.
11
+ *
12
+ * @slot - Default slot for cells (b-report-table-cell)
13
+ */
14
+ let BReportTableRow = class BReportTableRow extends LitElement {
15
+ render() {
16
+ return html `<slot></slot>`;
17
+ }
18
+ };
19
+ BReportTableRow.styles = css `
20
+ :host {
21
+ display: table-row;
22
+ }
23
+
24
+ :host(:hover) {
25
+ background: #f8fafc;
26
+ }
27
+ `;
28
+ BReportTableRow = __decorate([
29
+ customElement('b-report-table-row')
30
+ ], BReportTableRow);
31
+ export { BReportTableRow };
32
+ //# sourceMappingURL=b-report-table-row.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b-report-table-row.js","sourceRoot":"","sources":["../src/b-report-table-row.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;GAIG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IAW7C,MAAM;QACJ,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;;AAZM,sBAAM,GAAG,GAAG,CAAA;;;;;;;;GAQlB,AARY,CAQX;AATS,eAAe;IAD3B,aAAa,CAAC,oBAAoB,CAAC;GACvB,eAAe,CAc3B"}
@@ -0,0 +1,32 @@
1
+ import { LitElement } from 'lit';
2
+ export interface ColumnStickyConfig {
3
+ index: number;
4
+ sticky: 'left' | 'right' | null;
5
+ width: number;
6
+ offset: number;
7
+ }
8
+ /**
9
+ * A report table component with support for sticky headers, footers, and columns.
10
+ *
11
+ * @slot header - The table header (b-report-table-header)
12
+ * @slot - Default slot for table body (b-report-table-body)
13
+ * @slot footer - The table footer (b-report-table-footer)
14
+ */
15
+ export declare class BReportTable extends LitElement {
16
+ static styles: import("lit").CSSResult;
17
+ private _columnConfigs;
18
+ get columnConfigs(): ColumnStickyConfig[];
19
+ /**
20
+ * Updates the sticky column configuration based on header cells.
21
+ * This is called by the header component when it's connected or updated.
22
+ */
23
+ updateColumnConfigs(configs: ColumnStickyConfig[]): void;
24
+ private _notifyChildren;
25
+ render(): import("lit-html").TemplateResult<1>;
26
+ }
27
+ declare global {
28
+ interface HTMLElementTagNameMap {
29
+ 'b-report-table': BReportTable;
30
+ }
31
+ }
32
+ //# sourceMappingURL=b-report-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b-report-table.d.ts","sourceRoot":"","sources":["../src/b-report-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,qBACa,YAAa,SAAQ,UAAU;IAC1C,MAAM,CAAC,MAAM,0BAgBX;IAGF,OAAO,CAAC,cAAc,CAA4B;IAElD,IAAI,aAAa,IAAI,kBAAkB,EAAE,CAExC;IAED;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,IAAI;IAKxD,OAAO,CAAC,eAAe;IAWvB,MAAM;CASP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
@@ -0,0 +1,74 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, html, css } from 'lit';
8
+ import { customElement, state } from 'lit/decorators.js';
9
+ /**
10
+ * A report table component with support for sticky headers, footers, and columns.
11
+ *
12
+ * @slot header - The table header (b-report-table-header)
13
+ * @slot - Default slot for table body (b-report-table-body)
14
+ * @slot footer - The table footer (b-report-table-footer)
15
+ */
16
+ let BReportTable = class BReportTable extends LitElement {
17
+ constructor() {
18
+ super(...arguments);
19
+ this._columnConfigs = [];
20
+ }
21
+ get columnConfigs() {
22
+ return this._columnConfigs;
23
+ }
24
+ /**
25
+ * Updates the sticky column configuration based on header cells.
26
+ * This is called by the header component when it's connected or updated.
27
+ */
28
+ updateColumnConfigs(configs) {
29
+ this._columnConfigs = configs;
30
+ this._notifyChildren();
31
+ }
32
+ _notifyChildren() {
33
+ // Dispatch event to notify all children of column config changes
34
+ this.dispatchEvent(new CustomEvent('column-config-change', {
35
+ detail: { configs: this._columnConfigs },
36
+ bubbles: true,
37
+ composed: true,
38
+ }));
39
+ }
40
+ render() {
41
+ return html `
42
+ <table role="table">
43
+ <slot name="header"></slot>
44
+ <slot></slot>
45
+ <slot name="footer"></slot>
46
+ </table>
47
+ `;
48
+ }
49
+ };
50
+ BReportTable.styles = css `
51
+ :host {
52
+ display: block;
53
+ }
54
+
55
+ table {
56
+ width: 100%;
57
+ border-collapse: separate;
58
+ border-spacing: 0;
59
+ font-family: system-ui, -apple-system, sans-serif;
60
+ font-size: 14px;
61
+ }
62
+
63
+ ::slotted(*) {
64
+ display: table-row-group;
65
+ }
66
+ `;
67
+ __decorate([
68
+ state()
69
+ ], BReportTable.prototype, "_columnConfigs", void 0);
70
+ BReportTable = __decorate([
71
+ customElement('b-report-table')
72
+ ], BReportTable);
73
+ export { BReportTable };
74
+ //# sourceMappingURL=b-report-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"b-report-table.js","sourceRoot":"","sources":["../src/b-report-table.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AASzD;;;;;;GAMG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAArC;;QAoBG,mBAAc,GAAyB,EAAE,CAAC;IAmCpD,CAAC;IAjCC,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,mBAAmB,CAAC,OAA6B;QAC/C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,eAAe;QACrB,iEAAiE;QACjE,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,sBAAsB,EAAE;YACtC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE;YACxC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;KAMV,CAAC;IACJ,CAAC;;AArDM,mBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;GAgBlB,AAhBY,CAgBX;AAGM;IADP,KAAK,EAAE;oDAC0C;AApBvC,YAAY;IADxB,aAAa,CAAC,gBAAgB,CAAC;GACnB,YAAY,CAuDxB"}
@@ -0,0 +1,12 @@
1
+ export { BReportTable } from './b-report-table.js';
2
+ export { BReportTableHeader } from './b-report-table-header.js';
3
+ export { BReportTableHeaderRow } from './b-report-table-header-row.js';
4
+ export { BReportTableHeaderCell } from './b-report-table-header-cell.js';
5
+ export { BReportTableBody } from './b-report-table-body.js';
6
+ export { BReportTableRow } from './b-report-table-row.js';
7
+ export { BReportTableCell } from './b-report-table-cell.js';
8
+ export { BReportTableFooter } from './b-report-table-footer.js';
9
+ export { BReportTableFooterRow } from './b-report-table-footer-row.js';
10
+ export { BReportTableFooterCell } from './b-report-table-footer-cell.js';
11
+ export type { ColumnStickyConfig } from './b-report-table.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export { BReportTable } from './b-report-table.js';
2
+ export { BReportTableHeader } from './b-report-table-header.js';
3
+ export { BReportTableHeaderRow } from './b-report-table-header-row.js';
4
+ export { BReportTableHeaderCell } from './b-report-table-header-cell.js';
5
+ export { BReportTableBody } from './b-report-table-body.js';
6
+ export { BReportTableRow } from './b-report-table-row.js';
7
+ export { BReportTableCell } from './b-report-table-cell.js';
8
+ export { BReportTableFooter } from './b-report-table-footer.js';
9
+ export { BReportTableFooterRow } from './b-report-table-footer-row.js';
10
+ export { BReportTableFooterCell } from './b-report-table-footer-cell.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@beaconsoftware/b-report-table",
3
+ "version": "1.0.0",
4
+ "description": "A report table web component with sticky headers, footers, and columns",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "src"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "build:watch": "tsc --watch",
22
+ "clean": "rm -rf dist"
23
+ },
24
+ "dependencies": {
25
+ "lit": "^3.1.0"
26
+ },
27
+ "devDependencies": {
28
+ "typescript": "^5.3.0"
29
+ },
30
+ "keywords": [
31
+ "web-components",
32
+ "lit",
33
+ "table",
34
+ "sticky",
35
+ "beacon"
36
+ ],
37
+ "license": "MIT",
38
+ "publishConfig": {
39
+ "access": "public"
40
+ }
41
+ }
@@ -0,0 +1,26 @@
1
+ import { LitElement, html, css } from 'lit';
2
+ import { customElement } from 'lit/decorators.js';
3
+
4
+ /**
5
+ * Table body component that wraps body rows.
6
+ *
7
+ * @slot - Default slot for body rows (b-report-table-row)
8
+ */
9
+ @customElement('b-report-table-body')
10
+ export class BReportTableBody extends LitElement {
11
+ static styles = css`
12
+ :host {
13
+ display: table-row-group;
14
+ }
15
+ `;
16
+
17
+ render() {
18
+ return html`<slot></slot>`;
19
+ }
20
+ }
21
+
22
+ declare global {
23
+ interface HTMLElementTagNameMap {
24
+ 'b-report-table-body': BReportTableBody;
25
+ }
26
+ }
@@ -0,0 +1,109 @@
1
+ import { LitElement, html, css } from 'lit';
2
+ import { customElement } from 'lit/decorators.js';
3
+ import type { ColumnStickyConfig } from './b-report-table.js';
4
+
5
+ /**
6
+ * A cell within a table body row.
7
+ *
8
+ * @slot - Default slot for cell content
9
+ */
10
+ @customElement('b-report-table-cell')
11
+ export class BReportTableCell extends LitElement {
12
+ static styles = css`
13
+ :host {
14
+ display: table-cell;
15
+ padding: 12px 16px;
16
+ border-bottom: 1px solid #e2e8f0;
17
+ background: inherit;
18
+ }
19
+
20
+ :host([data-sticky='left']),
21
+ :host([data-sticky='right']) {
22
+ position: sticky;
23
+ z-index: 1;
24
+ background: #fff;
25
+ }
26
+
27
+ :host([data-sticky='left']) {
28
+ left: var(--sticky-offset, 0px);
29
+ box-shadow: 2px 0 4px -2px rgba(0, 0, 0, 0.1);
30
+ }
31
+
32
+ :host([data-sticky='right']) {
33
+ right: var(--sticky-offset, 0px);
34
+ box-shadow: -2px 0 4px -2px rgba(0, 0, 0, 0.1);
35
+ }
36
+
37
+ :host-context(b-report-table-row:hover)[data-sticky='left'],
38
+ :host-context(b-report-table-row:hover)[data-sticky='right'] {
39
+ background: #f8fafc;
40
+ }
41
+ `;
42
+
43
+
44
+ connectedCallback(): void {
45
+ super.connectedCallback();
46
+ const table = this._findTable();
47
+ if (table) {
48
+ table.addEventListener('column-config-change', this._handleConfigChange);
49
+ // Check if configs are already available
50
+ this._applyInitialConfig();
51
+ }
52
+ }
53
+
54
+ disconnectedCallback(): void {
55
+ super.disconnectedCallback();
56
+ this._findTable()?.removeEventListener(
57
+ 'column-config-change',
58
+ this._handleConfigChange
59
+ );
60
+ }
61
+
62
+ private _findTable(): HTMLElement | null {
63
+ return this.closest('b-report-table');
64
+ }
65
+
66
+ private _applyInitialConfig(): void {
67
+ const table = this._findTable() as any;
68
+ if (table?.columnConfigs) {
69
+ this._applyConfig(table.columnConfigs);
70
+ }
71
+ }
72
+
73
+ private _handleConfigChange = (event: Event): void => {
74
+ const customEvent = event as CustomEvent<{ configs: ColumnStickyConfig[] }>;
75
+ this._applyConfig(customEvent.detail.configs);
76
+ };
77
+
78
+ private _applyConfig(configs: ColumnStickyConfig[]): void {
79
+ const index = this._getColumnIndex();
80
+ const config = configs.find((c) => c.index === index);
81
+
82
+ if (config) {
83
+ if (config.sticky) {
84
+ this.setAttribute('data-sticky', config.sticky);
85
+ this.style.setProperty('--sticky-offset', `${config.offset}px`);
86
+ } else {
87
+ this.removeAttribute('data-sticky');
88
+ this.style.removeProperty('--sticky-offset');
89
+ }
90
+ }
91
+ }
92
+
93
+ private _getColumnIndex(): number {
94
+ const row = this.parentElement;
95
+ if (!row) return -1;
96
+ const cells = Array.from(row.querySelectorAll('b-report-table-cell'));
97
+ return cells.indexOf(this);
98
+ }
99
+
100
+ render() {
101
+ return html`<slot></slot>`;
102
+ }
103
+ }
104
+
105
+ declare global {
106
+ interface HTMLElementTagNameMap {
107
+ 'b-report-table-cell': BReportTableCell;
108
+ }
109
+ }