@ngneers/controls 0.0.1-pre3 → 0.0.1-pre4
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { contentChild, ChangeDetectionStrategy, Component, signal, input, model, computed, Directive, inject, Renderer2, ElementRef, effect, NgModule, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { contentChild, ChangeDetectionStrategy, Component, signal, input, model, computed, Directive, inject, Renderer2, ElementRef, afterNextRender, effect, NgModule, ViewContainerRef } from '@angular/core';
|
|
3
3
|
import { NgTemplateOutlet } from '@angular/common';
|
|
4
4
|
import { executeMultiFilter } from '@ngneers/controls/api';
|
|
5
5
|
import { templateTypesFn, NgnTemplate, injectThemeTemplate, setComponentInput } from '@ngneers/controls/api/ng';
|
|
@@ -163,9 +163,13 @@ class NgnTableTh extends NgnBase {
|
|
|
163
163
|
constructor() {
|
|
164
164
|
super();
|
|
165
165
|
this.prepareDom();
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
166
|
+
const renderer = inject(Renderer2);
|
|
167
|
+
const elRef = inject(ElementRef);
|
|
168
|
+
afterNextRender(() => {
|
|
169
|
+
const element = renderer.createElement('div');
|
|
170
|
+
element.classList.add(this.theme.class('spacer'));
|
|
171
|
+
elRef.nativeElement.appendChild(element);
|
|
172
|
+
});
|
|
169
173
|
}
|
|
170
174
|
ngOnInit() {
|
|
171
175
|
const table = getNearestNgnInstance(this.element.nativeElement, (NgnTable));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngneers-controls-table.mjs","sources":["../../src/table/table-templates.ts","../../src/table/table.ts","../../src/table/table.html","../../src/table/table-cell.ts","../../src/table/table-header-cell.ts","../../src/table/table-header-row.ts","../../src/table/table-row.ts","../../src/table/module.ts","../../src/table/table-filterable-column.ts","../../src/table/table-sortable-column.ts","../../src/table/ngneers-controls-table.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, contentChild, TemplateRef } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\nimport type { FormattedTableRow } from './types';\r\n\r\n@Component({\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport abstract class NgnTableTemplates<T extends object> extends NgnBase<'table'> {\r\n private readonly _headerTemplate = contentChild<TemplateRef<unknown>>('header');\r\n private readonly _bodyTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.body>>('body');\r\n\r\n protected readonly headerTemplate = this._headerTemplate;\r\n protected readonly bodyTemplate = this._bodyTemplate;\r\n\r\n /**\r\n * Types for the calendar templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n /**\r\n * Type of the template variable for the body template.\r\n */\r\n body: { $implicit: FormattedTableRow<T> };\r\n }>();\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, model, signal } from '@angular/core';\r\nimport { executeMultiFilter } from '@ngneers/controls/api';\r\nimport { NgnTemplate } from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnPaginator, type PaginationState } from '@ngneers/controls/paginator';\r\nimport { NgnScroller } from '@ngneers/controls/scroller';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\nimport { NgnTableTemplates } from './table-templates';\r\n\r\nimport type { NgnTableTh } from './table-header-cell';\r\nimport type { FormattedTableRow } from './types';\r\nimport type { NgnFilterConfig } from '@ngneers/controls/filter';\r\nimport type { AllKeysOfUnion } from '@ngneers/controls/utils';\r\n\r\n@Component({\r\n selector: 'ngn-table',\r\n templateUrl: './table.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [NgTemplateOutlet, NgnScroller, NgnPaginator, NgnTemplate, NgnPt],\r\n providers: [provideSelf(NgnTable)],\r\n host: {\r\n tabindex: '0',\r\n },\r\n})\r\nexport class NgnTable<T extends object, K extends keyof T> extends NgnTableTemplates<T> {\r\n protected readonly theme = this.injectThemeTemplate(tableControlTemplate, {\r\n root: true,\r\n virtual: () => this.virtual(),\r\n });\r\n private readonly _registeredHeaderCells = signal<NgnTableTh[]>([]);\r\n\r\n public readonly rows = input.required<readonly T[]>();\r\n public readonly rowHeight = input<number>();\r\n public readonly fieldId = input.required<K>();\r\n public readonly virtual = input<boolean>(false);\r\n public readonly virtualPadding = input<number>(2);\r\n public readonly striped = input<boolean>(false);\r\n public readonly paginator = input<boolean>(false);\r\n protected readonly trackById = (item: T): unknown => item[this.fieldId()];\r\n public readonly sort = model<{\r\n column: Extract<AllKeysOfUnion<T>, string>;\r\n direction: 'asc' | 'desc';\r\n } | null>(null);\r\n public readonly filters = model<\r\n | {\r\n [key in Extract<AllKeysOfUnion<T>, string>]?: NgnFilterConfig;\r\n }\r\n | null\r\n >(null);\r\n protected readonly pageState = signal<PaginationState | null>(null);\r\n\r\n protected readonly formattedRows = computed<FormattedTableRow<T>[]>(() => {\r\n const rows = this._sortedRows();\r\n return rows.map((data, index) => ({\r\n kind: 'data' as const,\r\n id: data[this.fieldId()] as T[keyof T] & (string | number),\r\n data,\r\n index,\r\n }));\r\n });\r\n\r\n protected readonly pagedRows = computed<FormattedTableRow<T>[]>(() => {\r\n const paginator = this.paginator();\r\n if (!paginator) {\r\n return this.formattedRows();\r\n }\r\n const pageState = this.pageState();\r\n if (!pageState) {\r\n return [];\r\n }\r\n return this.formattedRows().slice(\r\n pageState.slice.skip,\r\n pageState.slice.take + pageState.slice.skip\r\n );\r\n });\r\n\r\n private readonly _filteredRows = computed<readonly T[]>(() => {\r\n const filters = this.filters();\r\n const rows = this.rows();\r\n if (!filters) {\r\n return rows;\r\n }\r\n return executeMultiFilter(rows, filters);\r\n });\r\n\r\n private readonly _sortedRows = computed<readonly T[]>(() => {\r\n const rows = this._filteredRows();\r\n const sort = this.sort();\r\n if (!sort) {\r\n return rows;\r\n }\r\n const { column, direction } = sort;\r\n // @jasc @todo outsource sorting & allow custom sort functions\r\n return rows.toSorted((a, b) => {\r\n const aValue = a[column];\r\n const bValue = b[column];\r\n if (aValue == null && bValue != null) {\r\n return direction === 'asc' ? -1 : 1;\r\n }\r\n if (aValue != null && bValue == null) {\r\n return direction === 'asc' ? 1 : -1;\r\n }\r\n if (aValue == null && bValue == null) {\r\n return 0;\r\n }\r\n return typeof aValue === 'number' && typeof bValue === 'number'\r\n ? direction === 'asc'\r\n ? (aValue as number) - (bValue as number)\r\n : (bValue as number) - (aValue as number)\r\n : direction === 'asc'\r\n ? String(aValue).localeCompare(String(bValue))\r\n : String(bValue).localeCompare(String(aValue));\r\n });\r\n });\r\n\r\n protected readonly columnCount = computed(() => this._registeredHeaderCells().length);\r\n\r\n protected pageChanged(event: PaginationState) {\r\n this.pageState.set(event);\r\n }\r\n\r\n public column<V extends AllKeysOfUnion<T> & string>(column: V): V {\r\n return column;\r\n }\r\n\r\n public registerHeaderCell(cell: NgnTableTh): void {\r\n this._registeredHeaderCells.update(cells => [...cells, cell]);\r\n }\r\n\r\n public unregisterHeaderCell(cell: NgnTableTh): void {\r\n this._registeredHeaderCells.update(cells => cells.filter(c => c !== cell));\r\n }\r\n}\r\n","<table\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ table: true, striped: striped() }\"\r\n [attr.aria-rowcount]=\"rows().length\"\r\n [style.--ngn-table-column-count]=\"columnCount()\"\r\n [style.--ngn-table-row-height.px]=\"rowHeight()\"\r\n>\r\n <thead [ptInt]=\"this\" [ptClass]=\"'head'\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate()\"></ng-container>\r\n </thead>\r\n\r\n <tbody\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'body'\"\r\n ngn-scroller\r\n #scroller\r\n [virtual]=\"virtual()\"\r\n [items]=\"pagedRows()\"\r\n [fieldId]=\"'id'\"\r\n [itemHeight]=\"rowHeight() || 0\"\r\n [virtualPadding]=\"virtualPadding()\"\r\n [style.--ngn-table-item-start-index]=\"scroller.itemStartIndex()\"\r\n >\r\n <ng-template #item [ngnTemplate]=\"scroller.templateTypes.item\" let-item let-index=\"index\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"bodyTemplate()\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\r\n ></ng-container>\r\n </ng-template>\r\n </tbody>\r\n</table>\r\n@if (paginator()) {\r\n <ngn-paginator [totalItems]=\"rows().length\" (value)=\"pageChanged($event)\" />\r\n}\r\n","import { Directive, signal } from '@angular/core';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\nimport { toggleClass } from '@ngneers/controls/utils';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\n@Directive({\r\n selector: '[ngnTableTd]',\r\n host: { '[style.--ngn-table-column-index]': 'columnIndex()' },\r\n})\r\nexport class NgnTableTd extends NgnBase<'table'> {\r\n protected readonly theme = this.injectThemeTemplate(tableControlTemplate);\r\n\r\n protected readonly columnIndex = signal(0);\r\n\r\n constructor() {\r\n super();\r\n this.prepareDom();\r\n const parent = this.element.nativeElement.parentElement?.children;\r\n if (parent) {\r\n const index = Array.from(parent).findIndex(child => child === this.element.nativeElement);\r\n this.columnIndex.set(index + 1);\r\n }\r\n }\r\n\r\n private prepareDom() {\r\n toggleClass(this.element.nativeElement, this.theme.class('cell'), true);\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n inject,\r\n input,\r\n type OnDestroy,\r\n type OnInit,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { getNearestNgnInstance, NgnBase } from '@ngneers/controls/base';\r\nimport { NgnError, toggleClass } from '@ngneers/controls/utils';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\nimport { NgnTable } from './table';\r\n\r\n@Directive({ selector: '[ngnTableTh]' })\r\nexport class NgnTableTh extends NgnBase<'table'> implements OnDestroy, OnInit {\r\n protected readonly theme = this.injectThemeTemplate(tableControlTemplate);\r\n private _table?: NgnTable<any, any>;\r\n\r\n public readonly ngnTableTh = input.required<string>();\r\n\r\n constructor() {\r\n super();\r\n this.prepareDom();\r\n\r\n const element = inject(Renderer2).createElement('div');\r\n element.classList.add(this.theme.class('spacer'));\r\n inject<ElementRef<HTMLElement>>(ElementRef).nativeElement.appendChild(element);\r\n }\r\n\r\n public ngOnInit(): void {\r\n const table = getNearestNgnInstance(this.element.nativeElement, NgnTable<any, any>);\r\n if (!table) {\r\n throw new NgnError('ngnTableTh', 'ngnTableTh must be used within an NgnTable component');\r\n }\r\n this._table = table;\r\n this._table.registerHeaderCell(this);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._table?.unregisterHeaderCell(this);\r\n }\r\n\r\n private prepareDom() {\r\n toggleClass(this.element.nativeElement, this.theme.class('cell'), true);\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\nimport { toggleClass } from '@ngneers/controls/utils';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\n@Directive({ selector: '[ngnTableHeadTr]', host: { '[attr.aria-rowindex]': '1' } })\r\nexport class NgnTableHeadTr extends NgnBase<'table'> {\r\n protected readonly theme = this.injectThemeTemplate(tableControlTemplate);\r\n constructor() {\r\n super();\r\n this.prepareDom();\r\n }\r\n\r\n private prepareDom() {\r\n toggleClass(this.element.nativeElement, this.theme.class('row'), true);\r\n }\r\n}\r\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\r\nimport { injectThemeTemplate } from '@ngneers/controls/api/ng';\r\nimport { NgnScrollerItem } from '@ngneers/controls/scroller';\r\nimport { toggleClass } from '@ngneers/controls/utils';\r\nimport { setInputSignalValue } from '@ngneers/controls/utils-ng';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\nimport type { FormattedTableRow } from './types';\r\n\r\n@Directive({\r\n selector: '[ngnTableBodyTr]',\r\n host: {\r\n '[attr.aria-rowindex]': 'ngnTableBodyTr().index + 2',\r\n '[style.--ngn-table-row-index]': 'ngnTableBodyTr().index + 2',\r\n '[class]': `theme.classes({'even': ngnTableBodyTr().index % 2 === 0})`,\r\n },\r\n})\r\nexport class NgnTableBodyTr<T> extends NgnScrollerItem {\r\n public readonly ngnTableBodyTr = input.required<FormattedTableRow<T>>();\r\n public override readonly ngnScrollerItem = input<object>({});\r\n private readonly _element = inject(ElementRef<HTMLElement>);\r\n protected readonly theme = injectThemeTemplate(tableControlTemplate);\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const row = this.ngnTableBodyTr();\r\n setInputSignalValue(this.ngnScrollerItem, row);\r\n });\r\n this.prepareDom();\r\n }\r\n\r\n private prepareDom() {\r\n toggleClass(this._element.nativeElement, this.theme.class('row'), true);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { NgnTable } from './table';\r\nimport { NgnTableTd } from './table-cell';\r\nimport { NgnTableTh } from './table-header-cell';\r\nimport { NgnTableHeadTr } from './table-header-row';\r\nimport { NgnTableBodyTr } from './table-row';\r\n\r\n@NgModule({\r\n imports: [NgnTable, NgnTableBodyTr, NgnTableTd, NgnTableTh, NgnTableHeadTr],\r\n exports: [NgnTable, NgnTableBodyTr, NgnTableTd, NgnTableTh, NgnTableHeadTr],\r\n})\r\nexport class NgnTableModule {}\r\n","import {\r\n ComponentRef,\r\n computed,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n type OnDestroy,\r\n Type,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { injectThemeTemplate, setComponentInput } from '@ngneers/controls/api/ng';\r\nimport { getNearestNgnInstanceSig } from '@ngneers/controls/base';\r\nimport { NgnActionButton } from '@ngneers/controls/button';\r\nimport { NgnFilter, type NgnFilterDataType } from '@ngneers/controls/filter';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\nimport { NgnTable } from './table';\r\nimport { NgnTableTh } from './table-header-cell';\r\n\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\n@Directive({\r\n selector: '[ngnTableFilterableColumn]',\r\n host: {\r\n '[class]': `theme.classes({'filterable-column': true, 'filtered-column': !!filter() })`,\r\n },\r\n})\r\nexport class NgnTableFilterableColumn implements OnDestroy {\r\n protected readonly theme = injectThemeTemplate(tableControlTemplate);\r\n private readonly _element = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly _columnId = inject(NgnTableTh).ngnTableTh;\r\n\r\n public readonly ngnTableFilterableColumn = input();\r\n\r\n private readonly _ngnActionButton: ComponentRef<NgnActionButton<null>>;\r\n private readonly _ngnFilter: ComponentRef<NgnFilter>;\r\n\r\n private readonly _table = getNearestNgnInstanceSig<Type<NgnTable<any, any>>>(\r\n this._element.nativeElement,\r\n NgnTable\r\n );\r\n private readonly _rows = computed(() => {\r\n return this._table()?.rows() || [];\r\n });\r\n protected readonly filter = computed(() => {\r\n const tableFilter = this._table()?.filters()?.[this._columnId()];\r\n return tableFilter;\r\n });\r\n\r\n public readonly ngnTableFilterableColumnType = input.required<NgnFilterDataType>();\r\n public readonly ngnTableFilterableColumnItems = input<string[] | null | undefined>();\r\n\r\n constructor() {\r\n this._ngnActionButton = inject(ViewContainerRef).createComponent(NgnActionButton<null>);\r\n this._ngnFilter = inject(ViewContainerRef).createComponent(NgnFilter);\r\n this._element.nativeElement.appendChild(this._ngnActionButton.location.nativeElement);\r\n this._element.nativeElement.appendChild(this._ngnFilter.location.nativeElement);\r\n this._ngnActionButton.location.nativeElement.classList.add(this.theme.class('filter-control'));\r\n\r\n setComponentInput(this._ngnActionButton, 'kind', 'icon');\r\n setComponentInput(this._ngnFilter, 'anchor', this._ngnActionButton.location.nativeElement);\r\n setComponentInput(this._ngnFilter, 'mode', 'headless');\r\n setComponentInput(this._ngnFilter, 'allowMultiple', true);\r\n\r\n const cfg = computed(\r\n () =>\r\n <NgnActionButtonConfig<null>>{\r\n label: 'Filter',\r\n value: null,\r\n kind: 'icon',\r\n defaultIcon: this.filter() ? 'filter_solid' : 'filter',\r\n action: event => {\r\n event.stopPropagation();\r\n this._ngnFilter.instance.show();\r\n },\r\n }\r\n );\r\n\r\n effect(() => {\r\n setComponentInput(this._ngnActionButton, 'config', cfg());\r\n });\r\n effect(() => {\r\n setComponentInput(\r\n this._ngnFilter,\r\n 'data',\r\n this._rows().map(row => row[this._columnId()])\r\n );\r\n });\r\n effect(() => {\r\n setComponentInput(this._ngnFilter, 'dataType', this.ngnTableFilterableColumnType());\r\n });\r\n effect(() => {\r\n setComponentInput(this._ngnFilter, 'listOptions', this.ngnTableFilterableColumnItems());\r\n });\r\n this._ngnFilter.instance.filterChange.subscribe(cfg => {\r\n const table = this._table();\r\n const currentFilters = table?.filters() || {};\r\n table?.filters.set({ ...currentFilters, [this._columnId()]: cfg ?? undefined });\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._ngnActionButton.destroy();\r\n this._ngnFilter.destroy();\r\n }\r\n}\r\n","import {\r\n ComponentRef,\r\n computed,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n type OnDestroy,\r\n Type,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { injectThemeTemplate, setComponentInput } from '@ngneers/controls/api/ng';\r\nimport { getNearestNgnInstanceSig } from '@ngneers/controls/base';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\nimport { NgnTable } from './table';\r\nimport { NgnTableTh } from './table-header-cell';\r\n\r\n@Directive({\r\n selector: '[ngnTableSortableColumn]',\r\n host: {\r\n '[class]': `theme.classes({'sortable-column': true, 'sorted-column': !!sort() })`,\r\n '(click)': `toggleSort()`,\r\n },\r\n})\r\nexport class NgnTableSortableColumn implements OnDestroy {\r\n protected readonly theme = injectThemeTemplate(tableControlTemplate);\r\n private readonly _element = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n public readonly ngnTableSortableColumn = input();\r\n\r\n private readonly _table = getNearestNgnInstanceSig<Type<NgnTable<any, any>>>(\r\n this._element.nativeElement,\r\n NgnTable\r\n );\r\n protected readonly sort = computed(() => {\r\n const tableSort = this._table()?.sort();\r\n if (tableSort?.column === this.columnId()) {\r\n return tableSort.direction;\r\n }\r\n return null;\r\n });\r\n\r\n private readonly columnId = inject(NgnTableTh).ngnTableTh;\r\n\r\n private readonly _ngnIcon: ComponentRef<NgnIcon>;\r\n\r\n constructor() {\r\n this._ngnIcon = inject(ViewContainerRef).createComponent(NgnIcon);\r\n this._element.nativeElement.appendChild(this._ngnIcon.location.nativeElement);\r\n this._ngnIcon.location.nativeElement.classList.add(this.theme.class('sort-control'));\r\n\r\n effect(() => {\r\n const sort = this.sort();\r\n setComponentInput(\r\n this._ngnIcon,\r\n 'defaultIcon',\r\n sort === 'asc' ? 'sort_down' : sort === 'desc' ? 'sort_up' : 'sort'\r\n );\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._ngnIcon.destroy();\r\n }\r\n\r\n protected toggleSort(): void {\r\n const currentSort = this.sort();\r\n const table = this._table();\r\n table?.sort.set(\r\n currentSort === null\r\n ? { column: this.columnId(), direction: 'asc' }\r\n : currentSort === 'asc'\r\n ? { column: this.columnId(), direction: 'desc' }\r\n : null\r\n );\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngneers-controls-table.mjs","sources":["../../src/table/table-templates.ts","../../src/table/table.ts","../../src/table/table.html","../../src/table/table-cell.ts","../../src/table/table-header-cell.ts","../../src/table/table-header-row.ts","../../src/table/table-row.ts","../../src/table/module.ts","../../src/table/table-filterable-column.ts","../../src/table/table-sortable-column.ts","../../src/table/ngneers-controls-table.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, contentChild, TemplateRef } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\nimport type { FormattedTableRow } from './types';\r\n\r\n@Component({\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport abstract class NgnTableTemplates<T extends object> extends NgnBase<'table'> {\r\n private readonly _headerTemplate = contentChild<TemplateRef<unknown>>('header');\r\n private readonly _bodyTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.body>>('body');\r\n\r\n protected readonly headerTemplate = this._headerTemplate;\r\n protected readonly bodyTemplate = this._bodyTemplate;\r\n\r\n /**\r\n * Types for the calendar templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n /**\r\n * Type of the template variable for the body template.\r\n */\r\n body: { $implicit: FormattedTableRow<T> };\r\n }>();\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, model, signal } from '@angular/core';\r\nimport { executeMultiFilter } from '@ngneers/controls/api';\r\nimport { NgnTemplate } from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnPaginator, type PaginationState } from '@ngneers/controls/paginator';\r\nimport { NgnScroller } from '@ngneers/controls/scroller';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\nimport { NgnTableTemplates } from './table-templates';\r\n\r\nimport type { NgnTableTh } from './table-header-cell';\r\nimport type { FormattedTableRow } from './types';\r\nimport type { NgnFilterConfig } from '@ngneers/controls/filter';\r\nimport type { AllKeysOfUnion } from '@ngneers/controls/utils';\r\n\r\n@Component({\r\n selector: 'ngn-table',\r\n templateUrl: './table.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [NgTemplateOutlet, NgnScroller, NgnPaginator, NgnTemplate, NgnPt],\r\n providers: [provideSelf(NgnTable)],\r\n host: {\r\n tabindex: '0',\r\n },\r\n})\r\nexport class NgnTable<T extends object, K extends keyof T> extends NgnTableTemplates<T> {\r\n protected readonly theme = this.injectThemeTemplate(tableControlTemplate, {\r\n root: true,\r\n virtual: () => this.virtual(),\r\n });\r\n private readonly _registeredHeaderCells = signal<NgnTableTh[]>([]);\r\n\r\n public readonly rows = input.required<readonly T[]>();\r\n public readonly rowHeight = input<number>();\r\n public readonly fieldId = input.required<K>();\r\n public readonly virtual = input<boolean>(false);\r\n public readonly virtualPadding = input<number>(2);\r\n public readonly striped = input<boolean>(false);\r\n public readonly paginator = input<boolean>(false);\r\n protected readonly trackById = (item: T): unknown => item[this.fieldId()];\r\n public readonly sort = model<{\r\n column: Extract<AllKeysOfUnion<T>, string>;\r\n direction: 'asc' | 'desc';\r\n } | null>(null);\r\n public readonly filters = model<\r\n | {\r\n [key in Extract<AllKeysOfUnion<T>, string>]?: NgnFilterConfig;\r\n }\r\n | null\r\n >(null);\r\n protected readonly pageState = signal<PaginationState | null>(null);\r\n\r\n protected readonly formattedRows = computed<FormattedTableRow<T>[]>(() => {\r\n const rows = this._sortedRows();\r\n return rows.map((data, index) => ({\r\n kind: 'data' as const,\r\n id: data[this.fieldId()] as T[keyof T] & (string | number),\r\n data,\r\n index,\r\n }));\r\n });\r\n\r\n protected readonly pagedRows = computed<FormattedTableRow<T>[]>(() => {\r\n const paginator = this.paginator();\r\n if (!paginator) {\r\n return this.formattedRows();\r\n }\r\n const pageState = this.pageState();\r\n if (!pageState) {\r\n return [];\r\n }\r\n return this.formattedRows().slice(\r\n pageState.slice.skip,\r\n pageState.slice.take + pageState.slice.skip\r\n );\r\n });\r\n\r\n private readonly _filteredRows = computed<readonly T[]>(() => {\r\n const filters = this.filters();\r\n const rows = this.rows();\r\n if (!filters) {\r\n return rows;\r\n }\r\n return executeMultiFilter(rows, filters);\r\n });\r\n\r\n private readonly _sortedRows = computed<readonly T[]>(() => {\r\n const rows = this._filteredRows();\r\n const sort = this.sort();\r\n if (!sort) {\r\n return rows;\r\n }\r\n const { column, direction } = sort;\r\n // @jasc @todo outsource sorting & allow custom sort functions\r\n return rows.toSorted((a, b) => {\r\n const aValue = a[column];\r\n const bValue = b[column];\r\n if (aValue == null && bValue != null) {\r\n return direction === 'asc' ? -1 : 1;\r\n }\r\n if (aValue != null && bValue == null) {\r\n return direction === 'asc' ? 1 : -1;\r\n }\r\n if (aValue == null && bValue == null) {\r\n return 0;\r\n }\r\n return typeof aValue === 'number' && typeof bValue === 'number'\r\n ? direction === 'asc'\r\n ? (aValue as number) - (bValue as number)\r\n : (bValue as number) - (aValue as number)\r\n : direction === 'asc'\r\n ? String(aValue).localeCompare(String(bValue))\r\n : String(bValue).localeCompare(String(aValue));\r\n });\r\n });\r\n\r\n protected readonly columnCount = computed(() => this._registeredHeaderCells().length);\r\n\r\n protected pageChanged(event: PaginationState) {\r\n this.pageState.set(event);\r\n }\r\n\r\n public column<V extends AllKeysOfUnion<T> & string>(column: V): V {\r\n return column;\r\n }\r\n\r\n public registerHeaderCell(cell: NgnTableTh): void {\r\n this._registeredHeaderCells.update(cells => [...cells, cell]);\r\n }\r\n\r\n public unregisterHeaderCell(cell: NgnTableTh): void {\r\n this._registeredHeaderCells.update(cells => cells.filter(c => c !== cell));\r\n }\r\n}\r\n","<table\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ table: true, striped: striped() }\"\r\n [attr.aria-rowcount]=\"rows().length\"\r\n [style.--ngn-table-column-count]=\"columnCount()\"\r\n [style.--ngn-table-row-height.px]=\"rowHeight()\"\r\n>\r\n <thead [ptInt]=\"this\" [ptClass]=\"'head'\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate()\"></ng-container>\r\n </thead>\r\n\r\n <tbody\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'body'\"\r\n ngn-scroller\r\n #scroller\r\n [virtual]=\"virtual()\"\r\n [items]=\"pagedRows()\"\r\n [fieldId]=\"'id'\"\r\n [itemHeight]=\"rowHeight() || 0\"\r\n [virtualPadding]=\"virtualPadding()\"\r\n [style.--ngn-table-item-start-index]=\"scroller.itemStartIndex()\"\r\n >\r\n <ng-template #item [ngnTemplate]=\"scroller.templateTypes.item\" let-item let-index=\"index\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"bodyTemplate()\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\r\n ></ng-container>\r\n </ng-template>\r\n </tbody>\r\n</table>\r\n@if (paginator()) {\r\n <ngn-paginator [totalItems]=\"rows().length\" (value)=\"pageChanged($event)\" />\r\n}\r\n","import { Directive, signal } from '@angular/core';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\nimport { toggleClass } from '@ngneers/controls/utils';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\n@Directive({\r\n selector: '[ngnTableTd]',\r\n host: { '[style.--ngn-table-column-index]': 'columnIndex()' },\r\n})\r\nexport class NgnTableTd extends NgnBase<'table'> {\r\n protected readonly theme = this.injectThemeTemplate(tableControlTemplate);\r\n\r\n protected readonly columnIndex = signal(0);\r\n\r\n constructor() {\r\n super();\r\n this.prepareDom();\r\n const parent = this.element.nativeElement.parentElement?.children;\r\n if (parent) {\r\n const index = Array.from(parent).findIndex(child => child === this.element.nativeElement);\r\n this.columnIndex.set(index + 1);\r\n }\r\n }\r\n\r\n private prepareDom() {\r\n toggleClass(this.element.nativeElement, this.theme.class('cell'), true);\r\n }\r\n}\r\n","import {\r\n afterNextRender,\r\n Directive,\r\n ElementRef,\r\n inject,\r\n input,\r\n type OnDestroy,\r\n type OnInit,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { getNearestNgnInstance, NgnBase } from '@ngneers/controls/base';\r\nimport { NgnError, toggleClass } from '@ngneers/controls/utils';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\nimport { NgnTable } from './table';\r\n\r\n@Directive({ selector: '[ngnTableTh]' })\r\nexport class NgnTableTh extends NgnBase<'table'> implements OnDestroy, OnInit {\r\n protected readonly theme = this.injectThemeTemplate(tableControlTemplate);\r\n private _table?: NgnTable<any, any>;\r\n\r\n public readonly ngnTableTh = input.required<string>();\r\n\r\n constructor() {\r\n super();\r\n this.prepareDom();\r\n\r\n const renderer = inject(Renderer2);\r\n const elRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n afterNextRender(() => {\r\n const element = renderer.createElement('div');\r\n element.classList.add(this.theme.class('spacer'));\r\n elRef.nativeElement.appendChild(element);\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n const table = getNearestNgnInstance(this.element.nativeElement, NgnTable<any, any>);\r\n if (!table) {\r\n throw new NgnError('ngnTableTh', 'ngnTableTh must be used within an NgnTable component');\r\n }\r\n this._table = table;\r\n this._table.registerHeaderCell(this);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._table?.unregisterHeaderCell(this);\r\n }\r\n\r\n private prepareDom() {\r\n toggleClass(this.element.nativeElement, this.theme.class('cell'), true);\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\nimport { toggleClass } from '@ngneers/controls/utils';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\n@Directive({ selector: '[ngnTableHeadTr]', host: { '[attr.aria-rowindex]': '1' } })\r\nexport class NgnTableHeadTr extends NgnBase<'table'> {\r\n protected readonly theme = this.injectThemeTemplate(tableControlTemplate);\r\n constructor() {\r\n super();\r\n this.prepareDom();\r\n }\r\n\r\n private prepareDom() {\r\n toggleClass(this.element.nativeElement, this.theme.class('row'), true);\r\n }\r\n}\r\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\r\nimport { injectThemeTemplate } from '@ngneers/controls/api/ng';\r\nimport { NgnScrollerItem } from '@ngneers/controls/scroller';\r\nimport { toggleClass } from '@ngneers/controls/utils';\r\nimport { setInputSignalValue } from '@ngneers/controls/utils-ng';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\nimport type { FormattedTableRow } from './types';\r\n\r\n@Directive({\r\n selector: '[ngnTableBodyTr]',\r\n host: {\r\n '[attr.aria-rowindex]': 'ngnTableBodyTr().index + 2',\r\n '[style.--ngn-table-row-index]': 'ngnTableBodyTr().index + 2',\r\n '[class]': `theme.classes({'even': ngnTableBodyTr().index % 2 === 0})`,\r\n },\r\n})\r\nexport class NgnTableBodyTr<T> extends NgnScrollerItem {\r\n public readonly ngnTableBodyTr = input.required<FormattedTableRow<T>>();\r\n public override readonly ngnScrollerItem = input<object>({});\r\n private readonly _element = inject(ElementRef<HTMLElement>);\r\n protected readonly theme = injectThemeTemplate(tableControlTemplate);\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const row = this.ngnTableBodyTr();\r\n setInputSignalValue(this.ngnScrollerItem, row);\r\n });\r\n this.prepareDom();\r\n }\r\n\r\n private prepareDom() {\r\n toggleClass(this._element.nativeElement, this.theme.class('row'), true);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { NgnTable } from './table';\r\nimport { NgnTableTd } from './table-cell';\r\nimport { NgnTableTh } from './table-header-cell';\r\nimport { NgnTableHeadTr } from './table-header-row';\r\nimport { NgnTableBodyTr } from './table-row';\r\n\r\n@NgModule({\r\n imports: [NgnTable, NgnTableBodyTr, NgnTableTd, NgnTableTh, NgnTableHeadTr],\r\n exports: [NgnTable, NgnTableBodyTr, NgnTableTd, NgnTableTh, NgnTableHeadTr],\r\n})\r\nexport class NgnTableModule {}\r\n","import {\r\n ComponentRef,\r\n computed,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n type OnDestroy,\r\n Type,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { injectThemeTemplate, setComponentInput } from '@ngneers/controls/api/ng';\r\nimport { getNearestNgnInstanceSig } from '@ngneers/controls/base';\r\nimport { NgnActionButton } from '@ngneers/controls/button';\r\nimport { NgnFilter, type NgnFilterDataType } from '@ngneers/controls/filter';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\nimport { NgnTable } from './table';\r\nimport { NgnTableTh } from './table-header-cell';\r\n\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\n@Directive({\r\n selector: '[ngnTableFilterableColumn]',\r\n host: {\r\n '[class]': `theme.classes({'filterable-column': true, 'filtered-column': !!filter() })`,\r\n },\r\n})\r\nexport class NgnTableFilterableColumn implements OnDestroy {\r\n protected readonly theme = injectThemeTemplate(tableControlTemplate);\r\n private readonly _element = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly _columnId = inject(NgnTableTh).ngnTableTh;\r\n\r\n public readonly ngnTableFilterableColumn = input();\r\n\r\n private readonly _ngnActionButton: ComponentRef<NgnActionButton<null>>;\r\n private readonly _ngnFilter: ComponentRef<NgnFilter>;\r\n\r\n private readonly _table = getNearestNgnInstanceSig<Type<NgnTable<any, any>>>(\r\n this._element.nativeElement,\r\n NgnTable\r\n );\r\n private readonly _rows = computed(() => {\r\n return this._table()?.rows() || [];\r\n });\r\n protected readonly filter = computed(() => {\r\n const tableFilter = this._table()?.filters()?.[this._columnId()];\r\n return tableFilter;\r\n });\r\n\r\n public readonly ngnTableFilterableColumnType = input.required<NgnFilterDataType>();\r\n public readonly ngnTableFilterableColumnItems = input<string[] | null | undefined>();\r\n\r\n constructor() {\r\n this._ngnActionButton = inject(ViewContainerRef).createComponent(NgnActionButton<null>);\r\n this._ngnFilter = inject(ViewContainerRef).createComponent(NgnFilter);\r\n this._element.nativeElement.appendChild(this._ngnActionButton.location.nativeElement);\r\n this._element.nativeElement.appendChild(this._ngnFilter.location.nativeElement);\r\n this._ngnActionButton.location.nativeElement.classList.add(this.theme.class('filter-control'));\r\n\r\n setComponentInput(this._ngnActionButton, 'kind', 'icon');\r\n setComponentInput(this._ngnFilter, 'anchor', this._ngnActionButton.location.nativeElement);\r\n setComponentInput(this._ngnFilter, 'mode', 'headless');\r\n setComponentInput(this._ngnFilter, 'allowMultiple', true);\r\n\r\n const cfg = computed(\r\n () =>\r\n <NgnActionButtonConfig<null>>{\r\n label: 'Filter',\r\n value: null,\r\n kind: 'icon',\r\n defaultIcon: this.filter() ? 'filter_solid' : 'filter',\r\n action: event => {\r\n event.stopPropagation();\r\n this._ngnFilter.instance.show();\r\n },\r\n }\r\n );\r\n\r\n effect(() => {\r\n setComponentInput(this._ngnActionButton, 'config', cfg());\r\n });\r\n effect(() => {\r\n setComponentInput(\r\n this._ngnFilter,\r\n 'data',\r\n this._rows().map(row => row[this._columnId()])\r\n );\r\n });\r\n effect(() => {\r\n setComponentInput(this._ngnFilter, 'dataType', this.ngnTableFilterableColumnType());\r\n });\r\n effect(() => {\r\n setComponentInput(this._ngnFilter, 'listOptions', this.ngnTableFilterableColumnItems());\r\n });\r\n this._ngnFilter.instance.filterChange.subscribe(cfg => {\r\n const table = this._table();\r\n const currentFilters = table?.filters() || {};\r\n table?.filters.set({ ...currentFilters, [this._columnId()]: cfg ?? undefined });\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._ngnActionButton.destroy();\r\n this._ngnFilter.destroy();\r\n }\r\n}\r\n","import {\r\n ComponentRef,\r\n computed,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n type OnDestroy,\r\n Type,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport { injectThemeTemplate, setComponentInput } from '@ngneers/controls/api/ng';\r\nimport { getNearestNgnInstanceSig } from '@ngneers/controls/base';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { tableControlTemplate } from '@ngneers/controls-themes/templates/table';\r\n\r\nimport { NgnTable } from './table';\r\nimport { NgnTableTh } from './table-header-cell';\r\n\r\n@Directive({\r\n selector: '[ngnTableSortableColumn]',\r\n host: {\r\n '[class]': `theme.classes({'sortable-column': true, 'sorted-column': !!sort() })`,\r\n '(click)': `toggleSort()`,\r\n },\r\n})\r\nexport class NgnTableSortableColumn implements OnDestroy {\r\n protected readonly theme = injectThemeTemplate(tableControlTemplate);\r\n private readonly _element = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n public readonly ngnTableSortableColumn = input();\r\n\r\n private readonly _table = getNearestNgnInstanceSig<Type<NgnTable<any, any>>>(\r\n this._element.nativeElement,\r\n NgnTable\r\n );\r\n protected readonly sort = computed(() => {\r\n const tableSort = this._table()?.sort();\r\n if (tableSort?.column === this.columnId()) {\r\n return tableSort.direction;\r\n }\r\n return null;\r\n });\r\n\r\n private readonly columnId = inject(NgnTableTh).ngnTableTh;\r\n\r\n private readonly _ngnIcon: ComponentRef<NgnIcon>;\r\n\r\n constructor() {\r\n this._ngnIcon = inject(ViewContainerRef).createComponent(NgnIcon);\r\n this._element.nativeElement.appendChild(this._ngnIcon.location.nativeElement);\r\n this._ngnIcon.location.nativeElement.classList.add(this.theme.class('sort-control'));\r\n\r\n effect(() => {\r\n const sort = this.sort();\r\n setComponentInput(\r\n this._ngnIcon,\r\n 'defaultIcon',\r\n sort === 'asc' ? 'sort_down' : sort === 'desc' ? 'sort_up' : 'sort'\r\n );\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._ngnIcon.destroy();\r\n }\r\n\r\n protected toggleSort(): void {\r\n const currentSort = this.sort();\r\n const table = this._table();\r\n table?.sort.set(\r\n currentSort === null\r\n ? { column: this.columnId(), direction: 'asc' }\r\n : currentSort === 'asc'\r\n ? { column: this.columnId(), direction: 'desc' }\r\n : null\r\n );\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|