@nuralyui/table 0.0.6 → 0.0.7

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuralyui/table",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "type": "module",
package/react.js CHANGED
@@ -8,7 +8,7 @@ export const HyTableComponent = createComponent({
8
8
  events: {
9
9
  rowClick: 'row-click',
10
10
  sortChange: 'sort-change',
11
- selectionChange: 'selection-change',
11
+ selectionChange: 'nr-select',
12
12
  },
13
13
  });
14
14
  //# sourceMappingURL=react.js.map
package/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../../../src/components/table/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;IAC9C,OAAO,EAAE,UAAU;IACnB,YAAY,EAAE,OAAO;IACrB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE;QACN,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,aAAa;QACzB,eAAe,EAAE,kBAAkB;KACpC;CACF,CAAC,CAAC","sourcesContent":["import { createComponent } from '@lit-labs/react';\nimport * as React from 'react';\nimport { HyTable } from './table.component.js';\n\nexport const HyTableComponent = createComponent({\n tagName: 'nr-table',\n elementClass: HyTable,\n react: React,\n events: {\n rowClick: 'row-click',\n sortChange: 'sort-change',\n selectionChange: 'selection-change',\n },\n});\n"]}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../../../src/components/table/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;IAC9C,OAAO,EAAE,UAAU;IACnB,YAAY,EAAE,OAAO;IACrB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE;QACN,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,aAAa;QACzB,eAAe,EAAE,WAAW;KAC7B;CACF,CAAC,CAAC","sourcesContent":["import { createComponent } from '@lit-labs/react';\nimport * as React from 'react';\nimport { HyTable } from './table.component.js';\n\nexport const HyTableComponent = createComponent({\n tagName: 'nr-table',\n elementClass: HyTable,\n react: React,\n events: {\n rowClick: 'row-click',\n sortChange: 'sort-change',\n selectionChange: 'nr-select',\n },\n});\n"]}
@@ -7,23 +7,39 @@ import { LitElement, PropertyValueMap } from 'lit';
7
7
  import { IHeader, SelectionMode, Sizes, SortAttribute } from './table.types.js';
8
8
  import '../select/select.component.js';
9
9
  import '../icon/icon.component.js';
10
+ import '../radio/radio.component.js';
10
11
  import { TableHost } from './interfaces/index.js';
11
- declare const HyTable_base: (new (...args: any[]) => import("../../shared/dependency-mixin.js").DependencyAware) & (new (...args: any[]) => import("../../shared/theme-mixin.js").ThemeAware) & (new (...args: any[]) => import("../../shared/event-handler-mixin.js").EventHandlerCapable) & typeof LitElement;
12
+ declare const HyTable_base: (new (...args: any[]) => import("@nuralyui/common/mixins").DependencyAware) & (new (...args: any[]) => import("@nuralyui/common/mixins").ThemeAware) & (new (...args: any[]) => import("@nuralyui/common/mixins").EventHandlerCapable) & typeof LitElement;
12
13
  /**
13
- * Advanced table component with sorting, filtering, pagination, and selection capabilities.
14
+ * Advanced table component with sorting, filtering, pagination, selection, and fixed columns.
14
15
  *
15
16
  * @example
16
17
  * ```html
18
+ * <!-- Basic table with fixed header -->
17
19
  * <nr-table
18
20
  * .headers=${headers}
19
21
  * .rows=${data}
20
22
  * size="normal"
21
- * selectionMode="multiple">
23
+ * selectionMode="multiple"
24
+ * fixedHeader
25
+ * .scrollConfig=${{ y: 400 }}>
26
+ * </nr-table>
27
+ *
28
+ * <!-- Table with fixed columns -->
29
+ * <nr-table
30
+ * .headers=${[
31
+ * { name: 'ID', key: 'id', fixed: 'left', width: 80 },
32
+ * { name: 'Name', key: 'name', fixed: 'left', width: 150 },
33
+ * { name: 'Email', key: 'email' },
34
+ * { name: 'Status', key: 'status' }
35
+ * ]}
36
+ * .rows=${data}
37
+ * .scrollConfig=${{ x: 800 }}>
22
38
  * </nr-table>
23
39
  * ```
24
40
  *
25
41
  * @fires onPaginate - Fired when pagination changes
26
- * @fires onSelect - Fired when row selection changes
42
+ * @fires nr-select - Fired when row selection changes
27
43
  * @fires onSearch - Fired when search/filter is applied
28
44
  * @fires onSort - Fired when sorting is applied
29
45
  */
@@ -34,7 +50,16 @@ export declare class HyTable extends HyTable_base implements TableHost {
34
50
  size: Sizes;
35
51
  withFilter: boolean;
36
52
  expandable: string | undefined;
53
+ expansionRenderer: ((row: any, index: number) => any) | undefined;
37
54
  selectionMode: SelectionMode | undefined;
55
+ fixedHeader: boolean;
56
+ scrollConfig: {
57
+ x?: number | string;
58
+ y?: number | string;
59
+ } | undefined;
60
+ loading: boolean;
61
+ emptyText: string;
62
+ emptyIcon: string | undefined;
38
63
  itemPerPage: number[];
39
64
  selectedItemPerPage: number;
40
65
  displayedRows: any[];
@@ -46,6 +71,8 @@ export declare class HyTable extends HyTable_base implements TableHost {
46
71
  expand: boolean[];
47
72
  showFilterInput: boolean;
48
73
  filterValue: string;
74
+ columnFilters: Map<string, string | number>;
75
+ activeFilterColumn: string | null;
49
76
  globalCheck?: HTMLElement;
50
77
  requiredComponents: string[];
51
78
  private selectionController;
@@ -11,31 +11,47 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
11
11
  };
12
12
  import { LitElement, html, nothing } from 'lit';
13
13
  import { customElement, property, state, query } from 'lit/decorators.js';
14
- import { NuralyUIBaseMixin } from '../../shared/base-mixin.js';
14
+ import { NuralyUIBaseMixin } from '@nuralyui/common/mixins';
15
15
  import styles from './table.style.js';
16
16
  import { EMPTY_STRING } from './table.types.js';
17
17
  // Import required components
18
18
  import '../select/select.component.js';
19
19
  import '../icon/icon.component.js';
20
+ import '../radio/radio.component.js';
20
21
  // Import controllers
21
22
  import { TableSelectionController, TablePaginationController, TableSortController, TableFilterController } from './controllers/index.js';
22
23
  // Import templates
23
24
  import { renderPaginationTemplate, renderContentTemplate, renderActionsTemplate, renderFilterTemplate } from './templates/index.js';
24
25
  /**
25
- * Advanced table component with sorting, filtering, pagination, and selection capabilities.
26
+ * Advanced table component with sorting, filtering, pagination, selection, and fixed columns.
26
27
  *
27
28
  * @example
28
29
  * ```html
30
+ * <!-- Basic table with fixed header -->
29
31
  * <nr-table
30
32
  * .headers=${headers}
31
33
  * .rows=${data}
32
34
  * size="normal"
33
- * selectionMode="multiple">
35
+ * selectionMode="multiple"
36
+ * fixedHeader
37
+ * .scrollConfig=${{ y: 400 }}>
38
+ * </nr-table>
39
+ *
40
+ * <!-- Table with fixed columns -->
41
+ * <nr-table
42
+ * .headers=${[
43
+ * { name: 'ID', key: 'id', fixed: 'left', width: 80 },
44
+ * { name: 'Name', key: 'name', fixed: 'left', width: 150 },
45
+ * { name: 'Email', key: 'email' },
46
+ * { name: 'Status', key: 'status' }
47
+ * ]}
48
+ * .rows=${data}
49
+ * .scrollConfig=${{ x: 800 }}>
34
50
  * </nr-table>
35
51
  * ```
36
52
  *
37
53
  * @fires onPaginate - Fired when pagination changes
38
- * @fires onSelect - Fired when row selection changes
54
+ * @fires nr-select - Fired when row selection changes
39
55
  * @fires onSearch - Fired when search/filter is applied
40
56
  * @fires onSort - Fired when sorting is applied
41
57
  */
@@ -45,6 +61,9 @@ let HyTable = class HyTable extends NuralyUIBaseMixin(LitElement) {
45
61
  this.rows = [];
46
62
  this.size = "normal" /* Sizes.Normal */;
47
63
  this.withFilter = false;
64
+ this.fixedHeader = false;
65
+ this.loading = false;
66
+ this.emptyText = 'No data available';
48
67
  this.itemPerPage = [5, 10, 15, 20];
49
68
  this.selectedItemPerPage = this.itemPerPage[0];
50
69
  this.displayedRows = [];
@@ -55,7 +74,9 @@ let HyTable = class HyTable extends NuralyUIBaseMixin(LitElement) {
55
74
  this.expand = [];
56
75
  this.showFilterInput = false;
57
76
  this.filterValue = EMPTY_STRING;
58
- this.requiredComponents = ['hy-select', 'nr-icon', 'nr-checkbox'];
77
+ this.columnFilters = new Map();
78
+ this.activeFilterColumn = null;
79
+ this.requiredComponents = ['nr-select', 'nr-icon', 'nr-checkbox', 'nr-radio'];
59
80
  // Controllers
60
81
  this.selectionController = new TableSelectionController(this);
61
82
  this.paginationController = new TablePaginationController(this);
@@ -198,6 +219,7 @@ let HyTable = class HyTable extends NuralyUIBaseMixin(LitElement) {
198
219
  * Render the table component with all templates
199
220
  */
200
221
  render() {
222
+ var _a, _b;
201
223
  const numberOfPages = Math.ceil(this.rowsCopy.length / this.selectedItemPerPage);
202
224
  const fromItem = this.currentPage > 0
203
225
  ? this.currentPage * this.selectedItemPerPage - this.selectedItemPerPage + 1
@@ -227,17 +249,24 @@ let HyTable = class HyTable extends NuralyUIBaseMixin(LitElement) {
227
249
  `
228
250
  : nothing}
229
251
 
230
- <div class="table-content-wrapper">
252
+ <div class="table-content-wrapper ${this.fixedHeader ? 'fixed-header' : ''}"
253
+ style="${((_a = this.scrollConfig) === null || _a === void 0 ? void 0 : _a.y) ? `${this.fixedHeader ? 'height' : 'max-height'}: ${typeof this.scrollConfig.y === 'number' ? this.scrollConfig.y + 'px' : this.scrollConfig.y};` : ''}
254
+ ${((_b = this.scrollConfig) === null || _b === void 0 ? void 0 : _b.x) ? `${this.fixedHeader ? 'width' : 'max-width'}: ${typeof this.scrollConfig.x === 'number' ? this.scrollConfig.x + 'px' : this.scrollConfig.x};` : ''}">
231
255
  ${renderContentTemplate({
232
256
  headers: this.headers,
233
257
  rows: this.displayedRows,
234
258
  expandable: this.expandable && !this.selectionMode ? this.expandable : undefined,
259
+ expansionRenderer: !this.selectionMode ? this.expansionRenderer : undefined,
235
260
  selectionMode: this.selectionMode && !this.withFilter ? this.selectionMode : undefined,
236
261
  selectedItems: this.selectedItems,
237
262
  currentPage: this.currentPage,
238
263
  itemPerPage: this.selectedItemPerPage,
239
264
  sortAttribute: this.sortAttribute,
240
265
  expand: this.expand,
266
+ columnFilters: this.columnFilters,
267
+ activeFilterColumn: this.activeFilterColumn,
268
+ loading: this.loading,
269
+ host: this,
241
270
  onCheckAll: () => {
242
271
  const startIndex = (this.currentPage - 1) * this.selectedItemPerPage;
243
272
  const endIndex = Math.min(startIndex + this.selectedItemPerPage, this.selectedItems.length);
@@ -248,7 +277,10 @@ let HyTable = class HyTable extends NuralyUIBaseMixin(LitElement) {
248
277
  onCheckOne: (e, index) => this._handleCheckOne({ detail: { index, value: e.detail.checked } }),
249
278
  onSelectOne: (index) => this._handleSelectOne({ detail: { index } }),
250
279
  onUpdateSort: (index) => this._handleSortOrder({ detail: { index } }),
251
- onShowExpandedContent: (index) => this._showExpandedContent(index)
280
+ onShowExpandedContent: (index) => this._showExpandedContent(index),
281
+ onToggleColumnFilter: (columnKey) => this.filterController.toggleColumnFilterDropdown(columnKey),
282
+ onApplyColumnFilter: (columnKey, value) => this.filterController.applyColumnFilter(columnKey, value),
283
+ onClearColumnFilter: (columnKey) => this.filterController.clearColumnFilter(columnKey)
252
284
  })}
253
285
  </div>
254
286
 
@@ -292,9 +324,27 @@ __decorate([
292
324
  __decorate([
293
325
  property({ type: String })
294
326
  ], HyTable.prototype, "expandable", void 0);
327
+ __decorate([
328
+ property({ attribute: false })
329
+ ], HyTable.prototype, "expansionRenderer", void 0);
295
330
  __decorate([
296
331
  property({ type: String })
297
332
  ], HyTable.prototype, "selectionMode", void 0);
333
+ __decorate([
334
+ property({ type: Boolean })
335
+ ], HyTable.prototype, "fixedHeader", void 0);
336
+ __decorate([
337
+ property({ type: Object })
338
+ ], HyTable.prototype, "scrollConfig", void 0);
339
+ __decorate([
340
+ property({ type: Boolean })
341
+ ], HyTable.prototype, "loading", void 0);
342
+ __decorate([
343
+ property({ type: String })
344
+ ], HyTable.prototype, "emptyText", void 0);
345
+ __decorate([
346
+ property({ type: String })
347
+ ], HyTable.prototype, "emptyIcon", void 0);
298
348
  __decorate([
299
349
  state()
300
350
  ], HyTable.prototype, "itemPerPage", void 0);
@@ -328,6 +378,12 @@ __decorate([
328
378
  __decorate([
329
379
  state()
330
380
  ], HyTable.prototype, "filterValue", void 0);
381
+ __decorate([
382
+ state()
383
+ ], HyTable.prototype, "columnFilters", void 0);
384
+ __decorate([
385
+ state()
386
+ ], HyTable.prototype, "activeFilterColumn", void 0);
331
387
  __decorate([
332
388
  query('#global-check')
333
389
  ], HyTable.prototype, "globalCheck", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"table.component.js","sourceRoot":"","sources":["../../../src/components/table/table.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { LitElement, PropertyValueMap, html, nothing } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { NuralyUIBaseMixin } from '../../shared/base-mixin.js';\nimport styles from './table.style.js';\nimport { IHeader, SelectionMode, Sizes, SortAttribute, SortOrder, EMPTY_STRING } from './table.types.js';\n\n// Import required components\nimport '../select/select.component.js';\nimport '../icon/icon.component.js';\n\n// Import controllers\nimport {\n TableSelectionController,\n TablePaginationController,\n TableSortController,\n TableFilterController\n} from './controllers/index.js';\n\n// Import interfaces\nimport { TableHost } from './interfaces/index.js';\n\n// Import templates\nimport {\n renderPaginationTemplate,\n renderContentTemplate,\n renderActionsTemplate,\n renderFilterTemplate\n} from './templates/index.js';\n\n/**\n * Advanced table component with sorting, filtering, pagination, and selection capabilities.\n * \n * @example\n * ```html\n * <nr-table\n * .headers=${headers}\n * .rows=${data}\n * size=\"normal\"\n * selectionMode=\"multiple\">\n * </nr-table>\n * ```\n * \n * @fires onPaginate - Fired when pagination changes\n * @fires onSelect - Fired when row selection changes\n * @fires onSearch - Fired when search/filter is applied\n * @fires onSort - Fired when sorting is applied\n */\n@customElement('nr-table')\nexport class HyTable extends NuralyUIBaseMixin(LitElement) implements TableHost {\n static override styles = styles;\n\n @property({ type: Array }) headers!: IHeader[];\n @property({ type: Array }) rows: any[] = [];\n @property({ type: String }) size: Sizes = Sizes.Normal;\n @property({ type: Boolean }) withFilter = false;\n @property({ type: String }) expandable: string | undefined;\n @property({ type: String }) selectionMode: SelectionMode | undefined;\n\n @state() itemPerPage = [5, 10, 15, 20];\n @state() selectedItemPerPage = this.itemPerPage[0];\n @state() displayedRows: any[] = [];\n @state() selectedItems: boolean[] = [];\n @state() currentPage!: number;\n @state() rowsCopy: any[] = [];\n @state() activeSearch = false;\n @state() sortAttribute: SortAttribute = {index: -1, order: SortOrder.Default};\n @state() expand: boolean[] = [];\n @state() showFilterInput = false;\n @state() filterValue = EMPTY_STRING;\n\n @query('#global-check')\n globalCheck?: HTMLElement;\n\n override requiredComponents = ['hy-select', 'nr-icon', 'nr-checkbox'];\n\n // Controllers\n private selectionController = new TableSelectionController(this);\n private paginationController = new TablePaginationController(this);\n private sortController = new TableSortController(this);\n private filterController = new TableFilterController(this);\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.selectionController.initSelection();\n }\n\n override updated(_changedProperties: PropertyValueMap<this> | Map<PropertyKey, unknown>): void {\n if (this.globalCheck && (_changedProperties.has('selectedItems') || _changedProperties.has('currentPage') || _changedProperties.has('displayedRows'))) {\n const checkbox = this.globalCheck as any;\n \n // Get the selection state for the current page only\n const startIndex = (this.currentPage - 1) * this.selectedItemPerPage;\n const endIndex = Math.min(startIndex + this.displayedRows.length, this.selectedItems.length);\n const currentPageSelections = this.selectedItems.slice(startIndex, endIndex);\n \n if (currentPageSelections.length > 0 && currentPageSelections.every((isSelected) => isSelected)) {\n checkbox.checked = true;\n checkbox.indeterminate = false;\n } else if (currentPageSelections.some((isSelected) => isSelected)) {\n checkbox.checked = false;\n checkbox.indeterminate = true;\n } else {\n checkbox.checked = false;\n checkbox.indeterminate = false;\n }\n }\n if (this.showFilterInput && _changedProperties.has('showFilterInput')) {\n this.shadowRoot?.querySelector('input')?.focus();\n }\n }\n\n override willUpdate(_changedProperties: PropertyValueMap<this>) {\n if (_changedProperties.has('rows')) {\n this.expand = Array(this.rows.length).fill(false);\n }\n if (_changedProperties.has('sortAttribute') && this.sortController.isSortActive()) {\n this._initPagination();\n this.selectionController.initSelection();\n }\n if (_changedProperties.has('rowsCopy')) {\n if (this.filterController.isSearchActive()) {\n this._initPagination();\n }\n }\n if (_changedProperties.has('activeSearch') || _changedProperties.has('rows')) {\n if (!this.filterController.isSearchActive()) {\n this.rowsCopy = [...this.rows];\n this._initPagination();\n }\n }\n }\n\n /**\n * Initialize or reset pagination state\n */\n private _initPagination() {\n if (this.sortController.isSortActive()) {\n if (!this.sortController.isSortDefault()) {\n this.sortController.sort();\n } else {\n this.sortController.resetSort();\n }\n }\n this.paginationController.initPagination();\n }\n\n /**\n * Handle items per page change event\n */\n _handleItemPerPage(itemPerPageEvent: CustomEvent) {\n const value = itemPerPageEvent.detail.value || itemPerPageEvent.detail.selectedItemPerPage;\n this.paginationController.handleItemPerPageChange(Number(value));\n }\n\n /**\n * Handle page navigation event\n */\n _handleUpdatePage(updatePageEvent: CustomEvent) {\n this.paginationController.handlePageChange(updatePageEvent.detail.page);\n }\n\n /**\n * Handle check all rows event\n */\n _handleCheckAll(checkAllEvent: CustomEvent) {\n this.selectionController.handleCheckAll(checkAllEvent.detail.isEveryItemChecked);\n }\n\n /**\n * Handle check single row event\n */\n _handleCheckOne(checkOneEvent: CustomEvent) {\n this.selectionController.handleCheckOne(checkOneEvent.detail.index, checkOneEvent.detail.value);\n }\n\n /**\n * Handle select single row event (radio button mode)\n */\n _handleSelectOne(selectOneEvent: CustomEvent) {\n this.selectionController.handleSelectOne(selectOneEvent.detail.index);\n }\n\n /**\n * Handle cancel selection action\n */\n _handleCancelSelection() {\n this.selectionController.cancelSelection();\n }\n\n /**\n * Handle search/filter input\n */\n _handleSearch(searchEvent: CustomEvent) {\n this.filterController.handleSearch(searchEvent.detail.value);\n }\n\n /**\n * Handle column sort order change\n */\n _handleSortOrder(sortOrderEvent: CustomEvent) {\n this.sortController.handleSortOrderChange(sortOrderEvent.detail.index);\n }\n\n /**\n * Toggle expanded content for a row\n */\n private _showExpandedContent(index: number) {\n this.expand[index] = !this.expand[index];\n this.requestUpdate();\n }\n\n /**\n * Toggle filter input visibility\n */\n private _toggleFilterInput() {\n this.showFilterInput = !this.showFilterInput;\n }\n\n /**\n * Handle filter input change\n */\n private _handleFilterInputChange(event: Event) {\n this.filterValue = (event.target as HTMLInputElement).value;\n this.filterController.handleSearch(this.filterValue);\n }\n\n /**\n * Render the table component with all templates\n */\n override render() {\n const numberOfPages = Math.ceil(this.rowsCopy.length / this.selectedItemPerPage);\n const fromItem = this.currentPage > 0 \n ? this.currentPage * this.selectedItemPerPage - this.selectedItemPerPage + 1 \n : 0;\n const toItem = this.currentPage * this.selectedItemPerPage <= this.rowsCopy.length\n ? this.currentPage * this.selectedItemPerPage\n : this.rowsCopy.length;\n const enableNext = toItem < this.rowsCopy.length;\n const enablePrevious = fromItem > 1;\n\n return html`\n ${this.selectionMode && !this.withFilter && this.selectionController.hasSelection()\n ? renderActionsTemplate({\n selectedItems: this.selectionController.getSelectedCount(),\n size: this.size,\n onCancelSelection: () => this._handleCancelSelection()\n })\n : this.withFilter\n ? html`\n <div class=\"filter-container\">\n ${renderFilterTemplate({\n showInput: this.showFilterInput,\n value: this.filterValue,\n onToggleInput: () => this._toggleFilterInput(),\n onChange: (e) => this._handleFilterInputChange(e)\n })}\n </div>\n `\n : nothing}\n\n <div class=\"table-content-wrapper\">\n ${renderContentTemplate({\n headers: this.headers,\n rows: this.displayedRows,\n expandable: this.expandable && !this.selectionMode ? this.expandable : undefined,\n selectionMode: this.selectionMode && !this.withFilter ? this.selectionMode : undefined,\n selectedItems: this.selectedItems,\n currentPage: this.currentPage,\n itemPerPage: this.selectedItemPerPage,\n sortAttribute: this.sortAttribute,\n expand: this.expand,\n onCheckAll: () => {\n const startIndex = (this.currentPage - 1) * this.selectedItemPerPage;\n const endIndex = Math.min(startIndex + this.selectedItemPerPage, this.selectedItems.length);\n const currentPageItems = this.selectedItems.slice(startIndex, endIndex);\n const isEveryItemChecked = currentPageItems.every(i => i) && currentPageItems.length > 0;\n this._handleCheckAll({ detail: { isEveryItemChecked } } as CustomEvent);\n },\n onCheckOne: (e, index) => this._handleCheckOne({ detail: { index, value: (e as CustomEvent).detail.checked } } as CustomEvent),\n onSelectOne: (index) => this._handleSelectOne({ detail: { index } } as CustomEvent),\n onUpdateSort: (index) => this._handleSortOrder({ detail: { index } } as CustomEvent),\n onShowExpandedContent: (index) => this._showExpandedContent(index)\n })}\n </div>\n\n ${renderPaginationTemplate({\n numberOfItems: this.rowsCopy.length,\n itemPerPage: this.itemPerPage,\n selectedItemPerPage: this.selectedItemPerPage,\n currentPage: this.currentPage,\n size: this.size,\n numberOfPages,\n fromItem,\n toItem,\n enableNext,\n enablePrevious,\n onItemPerPageChange: (e) => this._handleItemPerPage(e),\n onNextPage: () => {\n this.currentPage++;\n this._handleUpdatePage({ detail: { page: this.currentPage } } as CustomEvent);\n },\n onPreviousPage: () => {\n this.currentPage--;\n this._handleUpdatePage({ detail: { page: this.currentPage } } as CustomEvent);\n }\n })}\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"table.component.js","sourceRoot":"","sources":["../../../src/components/table/table.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { LitElement, PropertyValueMap, html, nothing } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { NuralyUIBaseMixin } from '@nuralyui/common/mixins';\nimport styles from './table.style.js';\nimport { IHeader, SelectionMode, Sizes, SortAttribute, SortOrder, EMPTY_STRING } from './table.types.js';\n\n// Import required components\nimport '../select/select.component.js';\nimport '../icon/icon.component.js';\nimport '../radio/radio.component.js';\n\n// Import controllers\nimport {\n TableSelectionController,\n TablePaginationController,\n TableSortController,\n TableFilterController\n} from './controllers/index.js';\n\n// Import interfaces\nimport { TableHost } from './interfaces/index.js';\n\n// Import templates\nimport {\n renderPaginationTemplate,\n renderContentTemplate,\n renderActionsTemplate,\n renderFilterTemplate\n} from './templates/index.js';\n\n/**\n * Advanced table component with sorting, filtering, pagination, selection, and fixed columns.\n * \n * @example\n * ```html\n * <!-- Basic table with fixed header -->\n * <nr-table\n * .headers=${headers}\n * .rows=${data}\n * size=\"normal\"\n * selectionMode=\"multiple\"\n * fixedHeader\n * .scrollConfig=${{ y: 400 }}>\n * </nr-table>\n * \n * <!-- Table with fixed columns -->\n * <nr-table\n * .headers=${[\n * { name: 'ID', key: 'id', fixed: 'left', width: 80 },\n * { name: 'Name', key: 'name', fixed: 'left', width: 150 },\n * { name: 'Email', key: 'email' },\n * { name: 'Status', key: 'status' }\n * ]}\n * .rows=${data}\n * .scrollConfig=${{ x: 800 }}>\n * </nr-table>\n * ```\n * \n * @fires onPaginate - Fired when pagination changes\n * @fires nr-select - Fired when row selection changes\n * @fires onSearch - Fired when search/filter is applied\n * @fires onSort - Fired when sorting is applied\n */\n@customElement('nr-table')\nexport class HyTable extends NuralyUIBaseMixin(LitElement) implements TableHost {\n static override styles = styles;\n\n @property({ type: Array }) headers!: IHeader[];\n @property({ type: Array }) rows: any[] = [];\n @property({ type: String }) size: Sizes = Sizes.Normal;\n @property({ type: Boolean }) withFilter = false;\n @property({ type: String }) expandable: string | undefined;\n @property({ attribute: false }) expansionRenderer: ((row: any, index: number) => any) | undefined;\n @property({ type: String }) selectionMode: SelectionMode | undefined;\n @property({ type: Boolean }) fixedHeader = false;\n @property({ type: Object }) scrollConfig: { x?: number | string; y?: number | string } | undefined;\n @property({ type: Boolean }) loading = false;\n @property({ type: String }) emptyText = 'No data available';\n @property({ type: String }) emptyIcon: string | undefined;\n\n @state() itemPerPage = [5, 10, 15, 20];\n @state() selectedItemPerPage = this.itemPerPage[0];\n @state() displayedRows: any[] = [];\n @state() selectedItems: boolean[] = [];\n @state() currentPage!: number;\n @state() rowsCopy: any[] = [];\n @state() activeSearch = false;\n @state() sortAttribute: SortAttribute = {index: -1, order: SortOrder.Default};\n @state() expand: boolean[] = [];\n @state() showFilterInput = false;\n @state() filterValue = EMPTY_STRING;\n @state() columnFilters: Map<string, string | number> = new Map();\n @state() activeFilterColumn: string | null = null;\n\n @query('#global-check')\n globalCheck?: HTMLElement;\n\n override requiredComponents = ['nr-select', 'nr-icon', 'nr-checkbox', 'nr-radio'];\n\n // Controllers\n private selectionController = new TableSelectionController(this);\n private paginationController = new TablePaginationController(this);\n private sortController = new TableSortController(this);\n private filterController = new TableFilterController(this);\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.selectionController.initSelection();\n }\n\n override updated(_changedProperties: PropertyValueMap<this> | Map<PropertyKey, unknown>): void {\n if (this.globalCheck && (_changedProperties.has('selectedItems') || _changedProperties.has('currentPage') || _changedProperties.has('displayedRows'))) {\n const checkbox = this.globalCheck as any;\n \n // Get the selection state for the current page only\n const startIndex = (this.currentPage - 1) * this.selectedItemPerPage;\n const endIndex = Math.min(startIndex + this.displayedRows.length, this.selectedItems.length);\n const currentPageSelections = this.selectedItems.slice(startIndex, endIndex);\n \n if (currentPageSelections.length > 0 && currentPageSelections.every((isSelected) => isSelected)) {\n checkbox.checked = true;\n checkbox.indeterminate = false;\n } else if (currentPageSelections.some((isSelected) => isSelected)) {\n checkbox.checked = false;\n checkbox.indeterminate = true;\n } else {\n checkbox.checked = false;\n checkbox.indeterminate = false;\n }\n }\n if (this.showFilterInput && _changedProperties.has('showFilterInput')) {\n this.shadowRoot?.querySelector('input')?.focus();\n }\n }\n\n override willUpdate(_changedProperties: PropertyValueMap<this>) {\n if (_changedProperties.has('rows')) {\n this.expand = Array(this.rows.length).fill(false);\n }\n if (_changedProperties.has('sortAttribute') && this.sortController.isSortActive()) {\n this._initPagination();\n this.selectionController.initSelection();\n }\n if (_changedProperties.has('rowsCopy')) {\n if (this.filterController.isSearchActive()) {\n this._initPagination();\n }\n }\n if (_changedProperties.has('activeSearch') || _changedProperties.has('rows')) {\n if (!this.filterController.isSearchActive()) {\n this.rowsCopy = [...this.rows];\n this._initPagination();\n }\n }\n }\n\n /**\n * Initialize or reset pagination state\n */\n private _initPagination() {\n if (this.sortController.isSortActive()) {\n if (!this.sortController.isSortDefault()) {\n this.sortController.sort();\n } else {\n this.sortController.resetSort();\n }\n }\n this.paginationController.initPagination();\n }\n\n /**\n * Handle items per page change event\n */\n _handleItemPerPage(itemPerPageEvent: CustomEvent) {\n const value = itemPerPageEvent.detail.value || itemPerPageEvent.detail.selectedItemPerPage;\n this.paginationController.handleItemPerPageChange(Number(value));\n }\n\n /**\n * Handle page navigation event\n */\n _handleUpdatePage(updatePageEvent: CustomEvent) {\n this.paginationController.handlePageChange(updatePageEvent.detail.page);\n }\n\n /**\n * Handle check all rows event\n */\n _handleCheckAll(checkAllEvent: CustomEvent) {\n this.selectionController.handleCheckAll(checkAllEvent.detail.isEveryItemChecked);\n }\n\n /**\n * Handle check single row event\n */\n _handleCheckOne(checkOneEvent: CustomEvent) {\n this.selectionController.handleCheckOne(checkOneEvent.detail.index, checkOneEvent.detail.value);\n }\n\n /**\n * Handle select single row event (radio button mode)\n */\n _handleSelectOne(selectOneEvent: CustomEvent) {\n this.selectionController.handleSelectOne(selectOneEvent.detail.index);\n }\n\n /**\n * Handle cancel selection action\n */\n _handleCancelSelection() {\n this.selectionController.cancelSelection();\n }\n\n /**\n * Handle search/filter input\n */\n _handleSearch(searchEvent: CustomEvent) {\n this.filterController.handleSearch(searchEvent.detail.value);\n }\n\n /**\n * Handle column sort order change\n */\n _handleSortOrder(sortOrderEvent: CustomEvent) {\n this.sortController.handleSortOrderChange(sortOrderEvent.detail.index);\n }\n\n /**\n * Toggle expanded content for a row\n */\n private _showExpandedContent(index: number) {\n this.expand[index] = !this.expand[index];\n this.requestUpdate();\n }\n\n /**\n * Toggle filter input visibility\n */\n private _toggleFilterInput() {\n this.showFilterInput = !this.showFilterInput;\n }\n\n /**\n * Handle filter input change\n */\n private _handleFilterInputChange(event: Event) {\n this.filterValue = (event.target as HTMLInputElement).value;\n this.filterController.handleSearch(this.filterValue);\n }\n\n /**\n * Render the table component with all templates\n */\n override render() {\n const numberOfPages = Math.ceil(this.rowsCopy.length / this.selectedItemPerPage);\n const fromItem = this.currentPage > 0 \n ? this.currentPage * this.selectedItemPerPage - this.selectedItemPerPage + 1 \n : 0;\n const toItem = this.currentPage * this.selectedItemPerPage <= this.rowsCopy.length\n ? this.currentPage * this.selectedItemPerPage\n : this.rowsCopy.length;\n const enableNext = toItem < this.rowsCopy.length;\n const enablePrevious = fromItem > 1;\n\n return html`\n ${this.selectionMode && !this.withFilter && this.selectionController.hasSelection()\n ? renderActionsTemplate({\n selectedItems: this.selectionController.getSelectedCount(),\n size: this.size,\n onCancelSelection: () => this._handleCancelSelection()\n })\n : this.withFilter\n ? html`\n <div class=\"filter-container\">\n ${renderFilterTemplate({\n showInput: this.showFilterInput,\n value: this.filterValue,\n onToggleInput: () => this._toggleFilterInput(),\n onChange: (e) => this._handleFilterInputChange(e)\n })}\n </div>\n `\n : nothing}\n\n <div class=\"table-content-wrapper ${this.fixedHeader ? 'fixed-header' : ''}\" \n style=\"${this.scrollConfig?.y ? `${this.fixedHeader ? 'height' : 'max-height'}: ${typeof this.scrollConfig.y === 'number' ? this.scrollConfig.y + 'px' : this.scrollConfig.y};` : ''}\n ${this.scrollConfig?.x ? `${this.fixedHeader ? 'width' : 'max-width'}: ${typeof this.scrollConfig.x === 'number' ? this.scrollConfig.x + 'px' : this.scrollConfig.x};` : ''}\">\n ${renderContentTemplate({\n headers: this.headers,\n rows: this.displayedRows,\n expandable: this.expandable && !this.selectionMode ? this.expandable : undefined,\n expansionRenderer: !this.selectionMode ? this.expansionRenderer : undefined,\n selectionMode: this.selectionMode && !this.withFilter ? this.selectionMode : undefined,\n selectedItems: this.selectedItems,\n currentPage: this.currentPage,\n itemPerPage: this.selectedItemPerPage,\n sortAttribute: this.sortAttribute,\n expand: this.expand,\n columnFilters: this.columnFilters,\n activeFilterColumn: this.activeFilterColumn,\n loading: this.loading,\n host: this,\n onCheckAll: () => {\n const startIndex = (this.currentPage - 1) * this.selectedItemPerPage;\n const endIndex = Math.min(startIndex + this.selectedItemPerPage, this.selectedItems.length);\n const currentPageItems = this.selectedItems.slice(startIndex, endIndex);\n const isEveryItemChecked = currentPageItems.every(i => i) && currentPageItems.length > 0;\n this._handleCheckAll({ detail: { isEveryItemChecked } } as CustomEvent);\n },\n onCheckOne: (e, index) => this._handleCheckOne({ detail: { index, value: (e as CustomEvent).detail.checked } } as CustomEvent),\n onSelectOne: (index) => this._handleSelectOne({ detail: { index } } as CustomEvent),\n onUpdateSort: (index) => this._handleSortOrder({ detail: { index } } as CustomEvent),\n onShowExpandedContent: (index) => this._showExpandedContent(index),\n onToggleColumnFilter: (columnKey) => this.filterController.toggleColumnFilterDropdown(columnKey),\n onApplyColumnFilter: (columnKey, value) => this.filterController.applyColumnFilter(columnKey, value),\n onClearColumnFilter: (columnKey) => this.filterController.clearColumnFilter(columnKey)\n })}\n </div>\n\n ${renderPaginationTemplate({\n numberOfItems: this.rowsCopy.length,\n itemPerPage: this.itemPerPage,\n selectedItemPerPage: this.selectedItemPerPage,\n currentPage: this.currentPage,\n size: this.size,\n numberOfPages,\n fromItem,\n toItem,\n enableNext,\n enablePrevious,\n onItemPerPageChange: (e) => this._handleItemPerPage(e),\n onNextPage: () => {\n this.currentPage++;\n this._handleUpdatePage({ detail: { page: this.currentPage } } as CustomEvent);\n },\n onPreviousPage: () => {\n this.currentPage--;\n this._handleUpdatePage({ detail: { page: this.currentPage } } as CustomEvent);\n }\n })}\n `;\n }\n}\n"]}