@simple-table/angular 4.1.4 → 4.1.5
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,8 +1,54 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { createComponent, EventEmitter, inject, ElementRef, ApplicationRef, EnvironmentInjector, Output, Input, Component, makeEnvironmentProviders } from '@angular/core';
|
|
2
|
+
import { reflectComponentType, createComponent, EventEmitter, inject, ElementRef, ApplicationRef, EnvironmentInjector, Output, Input, Component, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { collectHeaderAccessors, asRows, SimpleTableVanilla, headersStructurallyEqual, rowsShallowUnchanged } from 'simple-table-core';
|
|
4
4
|
export { PIVOT_ACCESSOR_PREFIX, PIVOT_BLANK_LABEL, PIVOT_CHILDREN_KEY, PIVOT_IS_TOTAL_KEY, asRows, buildPivotAccessor, buildPivotRowTotalAccessor, pivotRows } from 'simple-table-core';
|
|
5
5
|
|
|
6
|
+
/** Declared `@Input` / `input()` names for a component type (template + prop). */
|
|
7
|
+
function declaredInputNames(component) {
|
|
8
|
+
const mirror = reflectComponentType(component);
|
|
9
|
+
const names = new Set();
|
|
10
|
+
if (!mirror)
|
|
11
|
+
return names;
|
|
12
|
+
for (const input of mirror.inputs) {
|
|
13
|
+
names.add(input.propName);
|
|
14
|
+
names.add(input.templateName);
|
|
15
|
+
}
|
|
16
|
+
return names;
|
|
17
|
+
}
|
|
18
|
+
/** Apply props to a dynamic ComponentRef and flush change detection. */
|
|
19
|
+
function applyComponentProps(componentRef, props) {
|
|
20
|
+
const ref = componentRef;
|
|
21
|
+
const inputs = declaredInputNames(componentRef.componentType);
|
|
22
|
+
if (typeof ref.setInput === "function" && inputs.size > 0) {
|
|
23
|
+
for (const [key, value] of Object.entries(props)) {
|
|
24
|
+
if (inputs.has(key)) {
|
|
25
|
+
ref.setInput(key, value);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
// Core may pass undeclared keys; keep prior Object.assign behavior.
|
|
29
|
+
componentRef.instance[key] = value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
Object.assign(componentRef.instance, props);
|
|
35
|
+
}
|
|
36
|
+
componentRef.changeDetectorRef.detectChanges();
|
|
37
|
+
}
|
|
38
|
+
function mountAngularComponent(component, props, appRef, injector, registry, host) {
|
|
39
|
+
const el = host ?? document.createElement("div");
|
|
40
|
+
const componentRef = createComponent(component, {
|
|
41
|
+
environmentInjector: injector,
|
|
42
|
+
hostElement: el,
|
|
43
|
+
});
|
|
44
|
+
applyComponentProps(componentRef, props);
|
|
45
|
+
appRef.attachView(componentRef.hostView);
|
|
46
|
+
registry?.register(el, () => {
|
|
47
|
+
appRef.detachView(componentRef.hostView);
|
|
48
|
+
componentRef.destroy();
|
|
49
|
+
});
|
|
50
|
+
return { host: el, componentRef };
|
|
51
|
+
}
|
|
6
52
|
/**
|
|
7
53
|
* Wraps an Angular standalone component into a function that returns an
|
|
8
54
|
* HTMLElement, matching the vanilla renderer contract expected by
|
|
@@ -23,28 +69,35 @@ export { PIVOT_ACCESSOR_PREFIX, PIVOT_BLANK_LABEL, PIVOT_CHILDREN_KEY, PIVOT_IS_
|
|
|
23
69
|
*/
|
|
24
70
|
function wrapAngularRenderer(component, appRef, injector, registry) {
|
|
25
71
|
return (props) => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
componentRef
|
|
41
|
-
|
|
42
|
-
|
|
72
|
+
return mountAngularComponent(component, props, appRef, injector, registry).host;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Header renderer wrapper that reuses one host element so sort/filter icon
|
|
77
|
+
* refreshes update props in place instead of remounting the Angular subtree
|
|
78
|
+
* and wiping local state. Mirrors Vue's {@link wrapVueHeaderRenderer} /
|
|
79
|
+
* React's wrapReactHeaderRenderer.
|
|
80
|
+
*/
|
|
81
|
+
function wrapAngularHeaderRenderer(component, appRef, injector, registry) {
|
|
82
|
+
let host = null;
|
|
83
|
+
let componentRef = null;
|
|
84
|
+
return (props) => {
|
|
85
|
+
if (host && componentRef && registry.isRegistered(host)) {
|
|
86
|
+
applyComponentProps(componentRef, props);
|
|
87
|
+
return host;
|
|
88
|
+
}
|
|
89
|
+
const mounted = mountAngularComponent(component, props, appRef, injector, registry);
|
|
90
|
+
host = mounted.host;
|
|
91
|
+
componentRef = mounted.componentRef;
|
|
92
|
+
return host;
|
|
43
93
|
};
|
|
44
94
|
}
|
|
45
95
|
/**
|
|
46
96
|
* Like {@link wrapAngularRenderer}, but reuses one wrapper per accessor so
|
|
47
97
|
* unstable column rebuilds keep a stable function identity on ColumnDef.
|
|
98
|
+
*
|
|
99
|
+
* For `kind: "header"`, also reuses a single mount host so sort/filter
|
|
100
|
+
* refreshes preserve Angular component state.
|
|
48
101
|
*/
|
|
49
102
|
function wrapCachedAngularRenderer(component, appRef, injector, registry, accessor, kind) {
|
|
50
103
|
const cache = kind === "cell" ? registry.cellRendererCache : registry.headerRendererCache;
|
|
@@ -57,25 +110,48 @@ function wrapCachedAngularRenderer(component, appRef, injector, registry, access
|
|
|
57
110
|
component,
|
|
58
111
|
wrapped: null,
|
|
59
112
|
};
|
|
113
|
+
if (kind === "header") {
|
|
114
|
+
let host = null;
|
|
115
|
+
let componentRef = null;
|
|
116
|
+
const wrapped = (props) => {
|
|
117
|
+
if (host && componentRef && registry.isRegistered(host)) {
|
|
118
|
+
applyComponentProps(componentRef, props);
|
|
119
|
+
return host;
|
|
120
|
+
}
|
|
121
|
+
const mounted = mountAngularComponent(slot.component, props, appRef, injector, registry);
|
|
122
|
+
host = mounted.host;
|
|
123
|
+
componentRef = mounted.componentRef;
|
|
124
|
+
return host;
|
|
125
|
+
};
|
|
126
|
+
slot.wrapped = wrapped;
|
|
127
|
+
cache.set(accessor, slot);
|
|
128
|
+
return wrapped;
|
|
129
|
+
}
|
|
60
130
|
const wrapped = (props) => {
|
|
61
|
-
|
|
62
|
-
const componentRef = createComponent(slot.component, {
|
|
63
|
-
environmentInjector: injector,
|
|
64
|
-
hostElement: el,
|
|
65
|
-
});
|
|
66
|
-
Object.assign(componentRef.instance, props);
|
|
67
|
-
appRef.attachView(componentRef.hostView);
|
|
68
|
-
componentRef.changeDetectorRef.detectChanges();
|
|
69
|
-
registry.register(el, () => {
|
|
70
|
-
appRef.detachView(componentRef.hostView);
|
|
71
|
-
componentRef.destroy();
|
|
72
|
-
});
|
|
73
|
-
return el;
|
|
131
|
+
return mountAngularComponent(slot.component, props, appRef, injector, registry).host;
|
|
74
132
|
};
|
|
75
133
|
slot.wrapped = wrapped;
|
|
76
134
|
cache.set(accessor, slot);
|
|
77
135
|
return wrapped;
|
|
78
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Column-editor row renderer: one host per `accessor` so popout list rebuilds
|
|
139
|
+
* update in place instead of remounting Angular state (mirrors Vue/React).
|
|
140
|
+
*/
|
|
141
|
+
function wrapAngularColumnEditorRowRenderer(component, appRef, injector, registry) {
|
|
142
|
+
const mounts = new Map();
|
|
143
|
+
return (props) => {
|
|
144
|
+
const key = String(props.accessor);
|
|
145
|
+
const existing = mounts.get(key);
|
|
146
|
+
if (existing && registry.isRegistered(existing.host)) {
|
|
147
|
+
applyComponentProps(existing.componentRef, props);
|
|
148
|
+
return existing.host;
|
|
149
|
+
}
|
|
150
|
+
const mounted = mountAngularComponent(component, props, appRef, injector, registry);
|
|
151
|
+
mounts.set(key, mounted);
|
|
152
|
+
return mounted.host;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
79
155
|
|
|
80
156
|
/** Resolve column definitions. */
|
|
81
157
|
function resolveAngularColumns(config) {
|
|
@@ -111,7 +187,11 @@ function buildVanillaConfig(config, registry, appRef, injector) {
|
|
|
111
187
|
const { rowRenderer, customRenderer, ...cfgRest } = cfg;
|
|
112
188
|
return {
|
|
113
189
|
...cfgRest,
|
|
114
|
-
...(rowRenderer
|
|
190
|
+
...(rowRenderer
|
|
191
|
+
? {
|
|
192
|
+
rowRenderer: wrapAngularColumnEditorRowRenderer(rowRenderer, appRef, injector, registry),
|
|
193
|
+
}
|
|
194
|
+
: {}),
|
|
115
195
|
...(customRenderer ? { customRenderer: wrap(customRenderer) } : {}),
|
|
116
196
|
};
|
|
117
197
|
}
|
|
@@ -264,6 +344,13 @@ class MountRegistry {
|
|
|
264
344
|
container.setAttribute(MOUNT_ID_ATTR, id);
|
|
265
345
|
this.entries.set(id, dispose);
|
|
266
346
|
}
|
|
347
|
+
/** True when `container` is a live registered mount host (not yet disposed). */
|
|
348
|
+
isRegistered(container) {
|
|
349
|
+
const id = container.getAttribute(MOUNT_ID_ATTR);
|
|
350
|
+
if (id === null)
|
|
351
|
+
return false;
|
|
352
|
+
return this.entries.has(id);
|
|
353
|
+
}
|
|
267
354
|
clear() {
|
|
268
355
|
this.cellRendererCache.clear();
|
|
269
356
|
this.headerRendererCache.clear();
|
|
@@ -303,10 +390,26 @@ class SimpleTableComponent {
|
|
|
303
390
|
this.tableReady = new EventEmitter();
|
|
304
391
|
this.instance = null;
|
|
305
392
|
this.registry = new MountRegistry();
|
|
393
|
+
this.wasLoading = false;
|
|
394
|
+
this.didInitialAutoSize = false;
|
|
306
395
|
this.hostEl = inject((ElementRef));
|
|
307
396
|
this.appRef = inject(ApplicationRef);
|
|
308
397
|
this.envInjector = inject(EnvironmentInjector);
|
|
309
398
|
}
|
|
399
|
+
maybeRefitAutoSizeColumns(leftLoading) {
|
|
400
|
+
if (!this.instance)
|
|
401
|
+
return;
|
|
402
|
+
if (leftLoading) {
|
|
403
|
+
this.instance.refitAutoSizeColumns?.();
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
// Angular mounts are synchronous, so custom renderer DOM is already present
|
|
407
|
+
// after the first paint that registered mounts (mirrors Vue/React).
|
|
408
|
+
if (!this.didInitialAutoSize && this.registry.size > 0) {
|
|
409
|
+
this.didInitialAutoSize = true;
|
|
410
|
+
this.instance.refitAutoSizeColumns?.();
|
|
411
|
+
}
|
|
412
|
+
}
|
|
310
413
|
ngOnInit() {
|
|
311
414
|
const container = this.hostEl.nativeElement.querySelector("div");
|
|
312
415
|
if (!container)
|
|
@@ -316,6 +419,8 @@ class SimpleTableComponent {
|
|
|
316
419
|
this.instance.mount();
|
|
317
420
|
this.syncedDefaultHeaders = resolveAngularColumns(props);
|
|
318
421
|
this.syncedRows = props.rows;
|
|
422
|
+
this.wasLoading = Boolean(props.isLoading);
|
|
423
|
+
this.maybeRefitAutoSizeColumns(false);
|
|
319
424
|
this.tableReady.emit(this.instance.getAPI());
|
|
320
425
|
}
|
|
321
426
|
ngOnChanges() {
|
|
@@ -335,7 +440,11 @@ class SimpleTableComponent {
|
|
|
335
440
|
if (rowsUnchanged) {
|
|
336
441
|
delete patch.rows;
|
|
337
442
|
}
|
|
443
|
+
const isLoading = Boolean(props.isLoading);
|
|
444
|
+
const leftLoading = this.wasLoading && !isLoading;
|
|
445
|
+
this.wasLoading = isLoading;
|
|
338
446
|
this.instance.update(patch);
|
|
447
|
+
this.maybeRefitAutoSizeColumns(leftLoading);
|
|
339
448
|
}
|
|
340
449
|
ngOnDestroy() {
|
|
341
450
|
this.instance?.destroy();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-table-angular.mjs","sources":["../../src/utils/wrapAngularRenderer.ts","../../src/buildVanillaConfig.ts","../../src/MountRegistry.ts","../../src/lib/SimpleTableComponent.ts","../../src/lib/provideSimpleTable.ts","../../src/index.ts","../../src/simple-table-angular.ts"],"sourcesContent":["import {\n ApplicationRef,\n createComponent,\n EnvironmentInjector,\n type Type,\n} from \"@angular/core\";\nimport type { MountRegistry } from \"../MountRegistry\";\n\n/**\n * Wraps an Angular standalone component into a function that returns an\n * HTMLElement, matching the vanilla renderer contract expected by\n * simple-table-core.\n *\n * Requires references to the running Angular ApplicationRef and\n * EnvironmentInjector so it can attach the dynamically-created component\n * to the change detection tree and trigger a synchronous flush before\n * returning the element to the vanilla rendering pipeline.\n *\n * Pass an optional {@link MountRegistry} so core's `onRendererHostDiscard` can\n * destroy the ComponentRef (including any CDK Overlay / floating UI) when the\n * host is discarded. The table adapter always supplies a registry; the public\n * helper used for one-shot static slots (e.g. `tableEmptyStateRenderer`) may omit it.\n *\n * These are injected automatically when the consumer uses\n * `provideSimpleTable()` in their application providers.\n */\nexport function wrapAngularRenderer<P extends object>(\n component: Type<P>,\n appRef: ApplicationRef,\n injector: EnvironmentInjector,\n registry?: MountRegistry,\n): (props: Partial<P>) => HTMLElement {\n return (props: Partial<P>): HTMLElement => {\n const el = document.createElement(\"div\");\n\n const componentRef = createComponent(component, {\n environmentInjector: injector,\n hostElement: el,\n });\n\n // Assign input props to the component instance.\n Object.assign(componentRef.instance as object, props);\n\n // Attach to the application's view tree so Angular tracks it.\n appRef.attachView(componentRef.hostView);\n\n // Synchronous change detection flush — ensures the rendered output is\n // in the DOM before we return the element to the vanilla pipeline.\n componentRef.changeDetectorRef.detectChanges();\n\n registry?.register(el, () => {\n appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n });\n\n return el;\n };\n}\n\n/**\n * Like {@link wrapAngularRenderer}, but reuses one wrapper per accessor so\n * unstable column rebuilds keep a stable function identity on ColumnDef.\n */\nexport function wrapCachedAngularRenderer<P extends object>(\n component: Type<P>,\n appRef: ApplicationRef,\n injector: EnvironmentInjector,\n registry: MountRegistry,\n accessor: string,\n kind: \"cell\" | \"header\",\n): (props: Partial<P>) => HTMLElement {\n const cache = kind === \"cell\" ? registry.cellRendererCache : registry.headerRendererCache;\n const existing = cache.get(accessor);\n if (existing) {\n existing.component = component;\n return existing.wrapped as (props: Partial<P>) => HTMLElement;\n }\n\n const slot: { component: Type<P>; wrapped: (props: Partial<P>) => HTMLElement } = {\n component,\n wrapped: null as unknown as (props: Partial<P>) => HTMLElement,\n };\n const wrapped = (props: Partial<P>): HTMLElement => {\n const el = document.createElement(\"div\");\n const componentRef = createComponent(slot.component, {\n environmentInjector: injector,\n hostElement: el,\n });\n Object.assign(componentRef.instance as object, props);\n appRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n registry.register(el, () => {\n appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n });\n return el;\n };\n slot.wrapped = wrapped;\n cache.set(accessor, slot);\n return wrapped;\n}\n","import type { ApplicationRef, EnvironmentInjector } from \"@angular/core\";\nimport type { SimpleTableConfig, ColumnDef, ColumnEditorConfig } from \"simple-table-core\";\nimport { asRows, collectHeaderAccessors } from \"simple-table-core\";\nimport type {\n SimpleTableAngularProps,\n AngularColumnDef,\n AngularColumnEditorConfig,\n AngularDefaultRowData,\n AngularIconsConfig,\n} from \"./types\";\nimport type { MountRegistry } from \"./MountRegistry\";\nimport { wrapAngularRenderer, wrapCachedAngularRenderer } from \"./utils/wrapAngularRenderer\";\n\n/** Resolve column definitions. */\nexport function resolveAngularColumns<\n TData extends AngularDefaultRowData = AngularDefaultRowData,\n>(\n config: Pick<SimpleTableAngularProps<TData>, \"columns\">,\n): ReadonlyArray<AngularColumnDef<TData, any>> {\n const headers = config.columns;\n if (!headers) {\n throw new Error(\"SimpleTable requires `columns`\");\n }\n return headers;\n}\n\nexport function buildVanillaConfig<TData extends AngularDefaultRowData = AngularDefaultRowData>(\n config: SimpleTableAngularProps<TData>,\n registry: MountRegistry,\n appRef: ApplicationRef,\n injector: EnvironmentInjector,\n): SimpleTableConfig {\n const {\n columns: _columns,\n rows,\n footerRenderer,\n emptyStateRenderer,\n errorStateRenderer,\n loadingStateRenderer,\n tableEmptyStateRenderer,\n headerDropdown,\n columnEditorConfig,\n icons,\n rowButtons,\n onColumnOrderChange,\n onColumnWidthChange,\n onHeaderEdit,\n onColumnSelect,\n enableColumnEditor,\n enableColumnEditorInitOpen,\n enablePagination,\n onTableReady,\n hoverRowBackground,\n oddColumnBackground,\n oddEvenRowBackground,\n ...rest\n } = config;\n\n const wrap = <P extends object>(component: any) =>\n wrapAngularRenderer<P>(component, appRef, injector, registry);\n\n function transformIcons(iconsConfig: AngularIconsConfig): NonNullable<SimpleTableConfig[\"icons\"]> {\n const result: NonNullable<SimpleTableConfig[\"icons\"]> = {};\n for (const [key, value] of Object.entries(iconsConfig)) {\n if (value == null) continue;\n if (\n typeof value === \"string\" ||\n value instanceof HTMLElement ||\n value instanceof SVGSVGElement\n ) {\n (result as any)[key] = value;\n } else if ((value as any).ɵcmp) {\n (result as any)[key] = wrap(value as any)({});\n } else {\n (result as any)[key] = value;\n }\n }\n return result;\n }\n\n function transformColumnEditorConfig(cfg: AngularColumnEditorConfig): ColumnEditorConfig {\n const { rowRenderer, customRenderer, ...cfgRest } = cfg;\n return {\n ...cfgRest,\n ...(rowRenderer ? { rowRenderer: wrap(rowRenderer) as any } : {}),\n ...(customRenderer ? { customRenderer: wrap(customRenderer) as any } : {}),\n };\n }\n\n function transformHeader(header: AngularColumnDef<TData, any>): ColumnDef {\n const { cellRenderer, headerRenderer, children, nestedTable, ...headerRest } = header;\n const accessor = String(header.accessor);\n const transformed: ColumnDef = { ...(headerRest as any) };\n\n if (cellRenderer) {\n if ((cellRenderer as any).ɵcmp) {\n transformed.cellRenderer = wrapCachedAngularRenderer(\n cellRenderer as any,\n appRef,\n injector,\n registry,\n accessor,\n \"cell\",\n ) as any;\n } else {\n transformed.cellRenderer = cellRenderer as any;\n }\n }\n if (headerRenderer) {\n if ((headerRenderer as any).ɵcmp) {\n transformed.headerRenderer = wrapCachedAngularRenderer(\n headerRenderer as any,\n appRef,\n injector,\n registry,\n accessor,\n \"header\",\n ) as any;\n } else {\n transformed.headerRenderer = headerRenderer as any;\n }\n }\n if (children) transformed.children = children.map(transformHeader);\n\n if (nestedTable) {\n const nestedFull = { ...nestedTable, rows: [] } as unknown as SimpleTableAngularProps;\n transformed.nestedTable = buildVanillaConfig(\n nestedFull,\n registry,\n appRef,\n injector,\n ) as any;\n }\n\n return transformed;\n }\n\n const columns = resolveAngularColumns(config);\n\n registry.pruneRendererCaches(collectHeaderAccessors(columns));\n\n // `rest` still carries TData-bound callbacks (getRowId, onCellEdit, …).\n // Widen once here — the vanilla runtime is Row-shaped.\n const shared = rest as SimpleTableConfig;\n\n const vanillaConfig: SimpleTableConfig = {\n ...shared,\n rows: asRows(rows),\n columns: columns.map(transformHeader),\n enableColumnEditor,\n enableColumnEditorInitOpen,\n enablePagination,\n onTableReady,\n hoverRowBackground,\n oddColumnBackground,\n oddEvenRowBackground,\n // Authoritative mount teardown: core calls this before it permanently\n // discards any host element, so the registry destroys exactly the affected\n // Angular ComponentRefs (including CDK Overlay / floating UI).\n onRendererHostDiscard: registry.disposeHost,\n };\n\n if (onColumnOrderChange) {\n vanillaConfig.onColumnOrderChange = (headers) =>\n onColumnOrderChange(headers as unknown as AngularColumnDef<TData, any>[]);\n }\n if (onColumnWidthChange) {\n vanillaConfig.onColumnWidthChange = (headers) =>\n onColumnWidthChange(headers as unknown as AngularColumnDef<TData, any>[]);\n }\n if (onHeaderEdit) {\n vanillaConfig.onHeaderEdit = (header, newLabel) =>\n onHeaderEdit(header as unknown as AngularColumnDef<TData, any>, newLabel);\n }\n if (onColumnSelect) {\n vanillaConfig.onColumnSelect = (header) =>\n onColumnSelect(header as unknown as AngularColumnDef<TData, any>);\n }\n\n if (footerRenderer !== undefined) {\n if ((footerRenderer as any).ɵcmp) {\n vanillaConfig.footerRenderer = wrap(footerRenderer) as any;\n } else {\n vanillaConfig.footerRenderer = footerRenderer as any;\n }\n }\n\n if (emptyStateRenderer !== undefined) {\n if ((emptyStateRenderer as any).ɵcmp) {\n vanillaConfig.emptyStateRenderer = wrap(emptyStateRenderer) as any;\n } else {\n vanillaConfig.emptyStateRenderer = emptyStateRenderer as any;\n }\n }\n\n if (errorStateRenderer !== undefined) {\n if ((errorStateRenderer as any).ɵcmp) {\n vanillaConfig.errorStateRenderer = wrap(errorStateRenderer) as any;\n } else {\n vanillaConfig.errorStateRenderer = errorStateRenderer as any;\n }\n }\n\n if (loadingStateRenderer !== undefined) {\n if ((loadingStateRenderer as any).ɵcmp) {\n vanillaConfig.loadingStateRenderer = wrap(loadingStateRenderer) as any;\n } else {\n vanillaConfig.loadingStateRenderer = loadingStateRenderer as any;\n }\n }\n\n if (tableEmptyStateRenderer !== undefined) {\n vanillaConfig.tableEmptyStateRenderer = tableEmptyStateRenderer;\n }\n\n if (headerDropdown !== undefined) {\n vanillaConfig.headerDropdown = wrap(headerDropdown) as any;\n }\n\n if (columnEditorConfig !== undefined) {\n vanillaConfig.columnEditorConfig = transformColumnEditorConfig(columnEditorConfig);\n }\n\n if (icons !== undefined) {\n vanillaConfig.icons = transformIcons(icons);\n }\n\n if (rowButtons !== undefined) {\n vanillaConfig.rowButtons = rowButtons.map((button) => wrap(button) as any);\n }\n\n return vanillaConfig;\n}\n","/**\n * Tracks imperative Angular mounts and caches wrapped cell/header renderers per\n * accessor so unstable column rebuilds keep stable wrapper identity.\n */\nconst MOUNT_ID_ATTR = \"data-st-mount-id\";\n\nexport type CachedRendererSlot<T = unknown> = {\n component: T;\n wrapped: unknown;\n};\n\nexport class MountRegistry {\n private entries = new Map<string, () => void>();\n private nextId = 0;\n\n readonly cellRendererCache = new Map<string, CachedRendererSlot>();\n readonly headerRendererCache = new Map<string, CachedRendererSlot>();\n\n register(container: HTMLElement, dispose: () => void): void {\n const id = `st-mount-${this.nextId++}`;\n container.setAttribute(MOUNT_ID_ATTR, id);\n this.entries.set(id, dispose);\n }\n\n disposeHost = (host: HTMLElement): void => {\n if (typeof host.getAttribute !== \"function\") return;\n const ids: string[] = [];\n const selfId = host.getAttribute(MOUNT_ID_ATTR);\n if (selfId !== null) ids.push(selfId);\n const tagged = host.querySelectorAll(`[${MOUNT_ID_ATTR}]`);\n tagged.forEach((el) => {\n const id = el.getAttribute(MOUNT_ID_ATTR);\n if (id !== null) ids.push(id);\n });\n for (const id of ids) {\n const dispose = this.entries.get(id);\n if (!dispose) continue;\n this.entries.delete(id);\n dispose();\n }\n };\n\n clear(): void {\n this.cellRendererCache.clear();\n this.headerRendererCache.clear();\n for (const dispose of this.entries.values()) {\n dispose();\n }\n this.entries.clear();\n }\n\n pruneRendererCaches(liveAccessors: ReadonlySet<string>): void {\n for (const key of this.cellRendererCache.keys()) {\n if (!liveAccessors.has(key)) this.cellRendererCache.delete(key);\n }\n for (const key of this.headerRendererCache.keys()) {\n if (!liveAccessors.has(key)) this.headerRendererCache.delete(key);\n }\n }\n\n get size(): number {\n return this.entries.size;\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n EventEmitter,\n ElementRef,\n ApplicationRef,\n EnvironmentInjector,\n inject,\n} from \"@angular/core\";\nimport { SimpleTableVanilla } from \"simple-table-core\";\nimport type { SimpleTableConfig, TableAPI } from \"simple-table-core\";\nimport {\n headersStructurallyEqual,\n rowsShallowUnchanged,\n} from \"simple-table-core\";\nimport { buildVanillaConfig, resolveAngularColumns } from \"../buildVanillaConfig\";\nimport { MountRegistry } from \"../MountRegistry\";\nimport type {\n AngularDefaultRowData,\n SimpleTableAngularProps,\n TableInstance,\n} from \"../types\";\n\n/**\n * SimpleTable — Angular adapter for simple-table-core.\n *\n * Accepts the same props as SimpleTableProps (the vanilla user-facing API) but\n * with Angular component types for all renderer props.\n *\n * Prefer typed `rows` / `columns` (`AngularColumnDef<MyRow>`). For a typed\n * imperative handle, use `@ViewChild(SimpleTableComponent) table!: SimpleTableComponent<MyRow>`\n * or listen to `(tableReady)`.\n */\n@Component({\n selector: \"simple-table\",\n standalone: true,\n template: `<div #host></div>`,\n styles: [\":host { display: block; }\"],\n})\nexport class SimpleTableComponent<\n TData extends AngularDefaultRowData = AngularDefaultRowData,\n> implements OnInit, OnChanges, OnDestroy {\n @Input({ required: true }) rows!: SimpleTableAngularProps<TData>[\"rows\"];\n @Input() columns?: SimpleTableAngularProps<TData>[\"columns\"];\n\n // All optional SimpleTableAngularProps inputs\n @Input() footerRenderer?: SimpleTableAngularProps<TData>[\"footerRenderer\"];\n @Input() loadingStateRenderer?: SimpleTableAngularProps<TData>[\"loadingStateRenderer\"];\n @Input() errorStateRenderer?: SimpleTableAngularProps<TData>[\"errorStateRenderer\"];\n @Input() emptyStateRenderer?: SimpleTableAngularProps<TData>[\"emptyStateRenderer\"];\n @Input() tableEmptyStateRenderer?: SimpleTableAngularProps<TData>[\"tableEmptyStateRenderer\"];\n @Input() headerDropdown?: SimpleTableAngularProps<TData>[\"headerDropdown\"];\n @Input() columnEditorConfig?: SimpleTableAngularProps<TData>[\"columnEditorConfig\"];\n @Input() onCellClick?: SimpleTableAngularProps<TData>[\"onCellClick\"];\n @Input() onCellEdit?: SimpleTableAngularProps<TData>[\"onCellEdit\"];\n @Input() onSortChange?: SimpleTableAngularProps<TData>[\"onSortChange\"];\n @Input() onFilterChange?: SimpleTableAngularProps<TData>[\"onFilterChange\"];\n @Input() onRowSelectionChange?: SimpleTableAngularProps<TData>[\"onRowSelectionChange\"];\n @Input() onRowGroupExpand?: SimpleTableAngularProps<TData>[\"onRowGroupExpand\"];\n @Input() onColumnOrderChange?: SimpleTableAngularProps<TData>[\"onColumnOrderChange\"];\n @Input() onColumnVisibilityChange?: SimpleTableAngularProps<TData>[\"onColumnVisibilityChange\"];\n @Input() onColumnWidthChange?: SimpleTableAngularProps<TData>[\"onColumnWidthChange\"];\n @Input() onPageChange?: SimpleTableAngularProps<TData>[\"onPageChange\"];\n @Input() onLoadMore?: SimpleTableAngularProps<TData>[\"onLoadMore\"];\n @Input() onTableReady?: SimpleTableAngularProps<TData>[\"onTableReady\"];\n @Input() rowGrouping?: SimpleTableAngularProps<TData>[\"rowGrouping\"];\n @Input() pivot?: SimpleTableAngularProps<TData>[\"pivot\"];\n @Input() onPivotChange?: SimpleTableAngularProps<TData>[\"onPivotChange\"];\n @Input() enableRowSelection?: SimpleTableAngularProps<TData>[\"enableRowSelection\"];\n @Input() theme?: SimpleTableAngularProps<TData>[\"theme\"];\n @Input() quickFilter?: SimpleTableAngularProps<TData>[\"quickFilter\"];\n @Input() isLoading?: SimpleTableAngularProps<TData>[\"isLoading\"];\n @Input() getRowId?: SimpleTableAngularProps<TData>[\"getRowId\"];\n @Input() enablePagination?: SimpleTableAngularProps<TData>[\"enablePagination\"];\n @Input() rowsPerPage?: SimpleTableAngularProps<TData>[\"rowsPerPage\"];\n @Input() serverSidePagination?: SimpleTableAngularProps<TData>[\"serverSidePagination\"];\n @Input() totalRowCount?: SimpleTableAngularProps<TData>[\"totalRowCount\"];\n @Input() height?: SimpleTableAngularProps<TData>[\"height\"];\n @Input() maxHeight?: SimpleTableAngularProps<TData>[\"maxHeight\"];\n @Input() scrollParent?: SimpleTableAngularProps<TData>[\"scrollParent\"];\n @Input() infiniteScrollThreshold?: SimpleTableAngularProps<TData>[\"infiniteScrollThreshold\"];\n @Input() columnResizing?: SimpleTableAngularProps<TData>[\"columnResizing\"];\n @Input() columnReordering?: SimpleTableAngularProps<TData>[\"columnReordering\"];\n @Input() enableColumnEditor?: SimpleTableAngularProps<TData>[\"enableColumnEditor\"];\n @Input() enableColumnEditorInitOpen?: SimpleTableAngularProps<TData>[\"enableColumnEditorInitOpen\"];\n @Input() selectableCells?: SimpleTableAngularProps<TData>[\"selectableCells\"];\n @Input() selectableColumns?: SimpleTableAngularProps<TData>[\"selectableColumns\"];\n @Input() enableHeaderEditing?: SimpleTableAngularProps<TData>[\"enableHeaderEditing\"];\n @Input() onHeaderEdit?: SimpleTableAngularProps<TData>[\"onHeaderEdit\"];\n @Input() customTheme?: SimpleTableAngularProps<TData>[\"customTheme\"];\n @Input() icons?: SimpleTableAngularProps<TData>[\"icons\"];\n @Input() externalFilterHandling?: SimpleTableAngularProps<TData>[\"externalFilterHandling\"];\n @Input() externalSortHandling?: SimpleTableAngularProps<TData>[\"externalSortHandling\"];\n @Input() columnBorders?: SimpleTableAngularProps<TData>[\"columnBorders\"];\n @Input() rowButtons?: SimpleTableAngularProps<TData>[\"rowButtons\"];\n @Input() hideFooter?: SimpleTableAngularProps<TData>[\"hideFooter\"];\n @Input() footerPosition?: SimpleTableAngularProps<TData>[\"footerPosition\"];\n @Input() initialSortColumn?: SimpleTableAngularProps<TData>[\"initialSortColumn\"];\n @Input() initialSortDirection?: SimpleTableAngularProps<TData>[\"initialSortDirection\"];\n @Input() expandAll?: SimpleTableAngularProps<TData>[\"expandAll\"];\n @Input() autoExpandColumns?: SimpleTableAngularProps<TData>[\"autoExpandColumns\"];\n @Input() animations?: SimpleTableAngularProps<TData>[\"animations\"];\n @Input() enableVirtualization?: SimpleTableAngularProps<TData>[\"enableVirtualization\"];\n @Input() hoverRowBackground?: SimpleTableAngularProps<TData>[\"hoverRowBackground\"];\n @Input() oddColumnBackground?: SimpleTableAngularProps<TData>[\"oddColumnBackground\"];\n @Input() oddEvenRowBackground?: SimpleTableAngularProps<TData>[\"oddEvenRowBackground\"];\n\n /** Emits the TableAPI once the table has mounted. */\n @Output() tableReady = new EventEmitter<TableAPI<TData>>();\n\n private instance: TableInstance | null = null;\n private registry = new MountRegistry();\n private syncedDefaultHeaders: ReadonlyArray<\n NonNullable<SimpleTableAngularProps<TData>[\"columns\"]>[number]\n > | undefined;\n private syncedRows: SimpleTableAngularProps<TData>[\"rows\"] | undefined;\n private hostEl = inject(ElementRef<HTMLElement>);\n private appRef = inject(ApplicationRef);\n private envInjector = inject(EnvironmentInjector);\n\n ngOnInit(): void {\n const container = this.hostEl.nativeElement.querySelector(\"div\") as HTMLElement;\n if (!container) return;\n\n const props = this.getProps();\n this.instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(props, this.registry, this.appRef, this.envInjector),\n ) as unknown as TableInstance;\n this.instance.mount();\n this.syncedDefaultHeaders = resolveAngularColumns(props);\n this.syncedRows = props.rows;\n\n this.tableReady.emit(this.instance.getAPI() as unknown as TableAPI<TData>);\n }\n\n ngOnChanges(): void {\n if (!this.instance) return;\n\n const props = this.getProps();\n const fullConfig = buildVanillaConfig(props, this.registry, this.appRef, this.envInjector);\n const patch: Partial<SimpleTableConfig> = { ...fullConfig };\n const resolvedColumns = resolveAngularColumns(props);\n\n const headersUnchanged = headersStructurallyEqual(\n this.syncedDefaultHeaders,\n resolvedColumns,\n );\n this.syncedDefaultHeaders = resolvedColumns;\n if (headersUnchanged) {\n delete patch.columns;\n }\n\n const rowsUnchanged = rowsShallowUnchanged(\n this.syncedRows as ReadonlyArray<object> | undefined,\n props.rows as ReadonlyArray<object>,\n props.getRowId as Parameters<typeof rowsShallowUnchanged>[2],\n );\n this.syncedRows = props.rows;\n if (rowsUnchanged) {\n delete patch.rows;\n }\n\n this.instance.update(patch);\n }\n\n ngOnDestroy(): void {\n this.instance?.destroy();\n this.instance = null;\n this.syncedDefaultHeaders = undefined;\n this.syncedRows = undefined;\n this.registry.clear();\n }\n\n /** Returns the full imperative TableAPI. Use via @ViewChild or (tableReady) output. */\n getAPI(): TableAPI<TData> | null {\n return (this.instance?.getAPI() as TableAPI<TData> | undefined) ?? null;\n }\n\n private getProps(): SimpleTableAngularProps<TData> {\n const props: SimpleTableAngularProps<TData> = {\n rows: this.rows,\n };\n\n if (this.columns !== undefined) props.columns = this.columns;\n if (this.footerRenderer !== undefined) props.footerRenderer = this.footerRenderer;\n if (this.loadingStateRenderer !== undefined)\n props.loadingStateRenderer = this.loadingStateRenderer;\n if (this.errorStateRenderer !== undefined) props.errorStateRenderer = this.errorStateRenderer;\n if (this.emptyStateRenderer !== undefined) props.emptyStateRenderer = this.emptyStateRenderer;\n if (this.tableEmptyStateRenderer !== undefined)\n props.tableEmptyStateRenderer = this.tableEmptyStateRenderer;\n if (this.headerDropdown !== undefined) props.headerDropdown = this.headerDropdown;\n if (this.columnEditorConfig !== undefined) props.columnEditorConfig = this.columnEditorConfig;\n if (this.onCellClick !== undefined) props.onCellClick = this.onCellClick;\n if (this.onCellEdit !== undefined) props.onCellEdit = this.onCellEdit;\n if (this.onSortChange !== undefined) props.onSortChange = this.onSortChange;\n if (this.onFilterChange !== undefined) props.onFilterChange = this.onFilterChange;\n if (this.onRowSelectionChange !== undefined)\n props.onRowSelectionChange = this.onRowSelectionChange;\n if (this.onRowGroupExpand !== undefined) props.onRowGroupExpand = this.onRowGroupExpand;\n if (this.onColumnOrderChange !== undefined)\n props.onColumnOrderChange = this.onColumnOrderChange;\n if (this.onColumnVisibilityChange !== undefined)\n props.onColumnVisibilityChange = this.onColumnVisibilityChange;\n if (this.onColumnWidthChange !== undefined)\n props.onColumnWidthChange = this.onColumnWidthChange;\n if (this.onPageChange !== undefined) props.onPageChange = this.onPageChange;\n if (this.onLoadMore !== undefined) props.onLoadMore = this.onLoadMore;\n if (this.onTableReady !== undefined) props.onTableReady = this.onTableReady;\n if (this.rowGrouping !== undefined) props.rowGrouping = this.rowGrouping;\n if (this.pivot !== undefined) props.pivot = this.pivot;\n if (this.onPivotChange !== undefined) props.onPivotChange = this.onPivotChange;\n if (this.enableRowSelection !== undefined) props.enableRowSelection = this.enableRowSelection;\n if (this.theme !== undefined) props.theme = this.theme;\n if (this.quickFilter !== undefined) props.quickFilter = this.quickFilter;\n if (this.isLoading !== undefined) props.isLoading = this.isLoading;\n if (this.getRowId !== undefined) props.getRowId = this.getRowId;\n if (this.enablePagination !== undefined) props.enablePagination = this.enablePagination;\n if (this.rowsPerPage !== undefined) props.rowsPerPage = this.rowsPerPage;\n if (this.serverSidePagination !== undefined)\n props.serverSidePagination = this.serverSidePagination;\n if (this.totalRowCount !== undefined) props.totalRowCount = this.totalRowCount;\n if (this.height !== undefined) props.height = this.height;\n if (this.maxHeight !== undefined) props.maxHeight = this.maxHeight;\n if (this.scrollParent !== undefined) props.scrollParent = this.scrollParent;\n if (this.infiniteScrollThreshold !== undefined)\n props.infiniteScrollThreshold = this.infiniteScrollThreshold;\n if (this.columnResizing !== undefined) props.columnResizing = this.columnResizing;\n if (this.columnReordering !== undefined) props.columnReordering = this.columnReordering;\n if (this.enableColumnEditor !== undefined) props.enableColumnEditor = this.enableColumnEditor;\n if (this.enableColumnEditorInitOpen !== undefined)\n props.enableColumnEditorInitOpen = this.enableColumnEditorInitOpen;\n if (this.enableColumnEditorInitOpen !== undefined)\n props.enableColumnEditorInitOpen = this.enableColumnEditorInitOpen;\n if (this.selectableCells !== undefined) props.selectableCells = this.selectableCells;\n if (this.selectableColumns !== undefined) props.selectableColumns = this.selectableColumns;\n if (this.enableHeaderEditing !== undefined)\n props.enableHeaderEditing = this.enableHeaderEditing;\n if (this.onHeaderEdit !== undefined) props.onHeaderEdit = this.onHeaderEdit;\n if (this.customTheme !== undefined) props.customTheme = this.customTheme;\n if (this.icons !== undefined) props.icons = this.icons;\n if (this.externalFilterHandling !== undefined)\n props.externalFilterHandling = this.externalFilterHandling;\n if (this.externalSortHandling !== undefined)\n props.externalSortHandling = this.externalSortHandling;\n if (this.columnBorders !== undefined) props.columnBorders = this.columnBorders;\n if (this.rowButtons !== undefined) props.rowButtons = this.rowButtons;\n if (this.hideFooter !== undefined) props.hideFooter = this.hideFooter;\n if (this.footerPosition !== undefined) props.footerPosition = this.footerPosition;\n if (this.initialSortColumn !== undefined) props.initialSortColumn = this.initialSortColumn;\n if (this.initialSortDirection !== undefined)\n props.initialSortDirection = this.initialSortDirection;\n if (this.expandAll !== undefined) props.expandAll = this.expandAll;\n if (this.autoExpandColumns !== undefined) props.autoExpandColumns = this.autoExpandColumns;\n if (this.animations !== undefined) props.animations = this.animations;\n if (this.enableVirtualization !== undefined)\n props.enableVirtualization = this.enableVirtualization;\n if (this.hoverRowBackground !== undefined) props.hoverRowBackground = this.hoverRowBackground;\n if (this.hoverRowBackground !== undefined)\n props.hoverRowBackground = this.hoverRowBackground;\n if (this.oddColumnBackground !== undefined)\n props.oddColumnBackground = this.oddColumnBackground;\n if (this.oddColumnBackground !== undefined)\n props.oddColumnBackground = this.oddColumnBackground;\n if (this.oddEvenRowBackground !== undefined)\n props.oddEvenRowBackground = this.oddEvenRowBackground;\n if (this.oddEvenRowBackground !== undefined)\n props.oddEvenRowBackground = this.oddEvenRowBackground;\n\n return props;\n }\n}\n","import type { EnvironmentProviders } from \"@angular/core\";\nimport { makeEnvironmentProviders } from \"@angular/core\";\n\n/**\n * Call this in your application's `providers` array (or `bootstrapApplication`\n * providers) to register the dependencies that simple-table-angular's renderer\n * bridge needs — specifically `ApplicationRef` and `EnvironmentInjector`.\n *\n * These are already provided by Angular's platform by default, so in practice\n * this function is a no-op placeholder that serves as a clear signal to\n * consumers that the adapter has been correctly wired up. If future versions\n * need custom providers they will be added here without breaking the call site.\n *\n * @example\n * // main.ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideSimpleTable()],\n * });\n *\n * @example\n * // app.module.ts\n * @NgModule({ providers: [provideSimpleTable()] })\n * export class AppModule {}\n */\nexport function provideSimpleTable(): EnvironmentProviders {\n return makeEnvironmentProviders([\n // ApplicationRef and EnvironmentInjector are part of Angular's core platform\n // and are available without any additional registration.\n // This factory is intentionally empty — it exists for API symmetry with\n // other Angular ecosystem libraries and to allow non-breaking additions later.\n ]);\n}\n","// Component\nexport { SimpleTableComponent } from \"./lib/SimpleTableComponent\";\nexport { asRows } from \"simple-table-core\";\n\n// Provider helper\nexport { provideSimpleTable } from \"./lib/provideSimpleTable\";\n\n/** Wrap a standalone component as an HTMLElement (e.g. for `tableEmptyStateRenderer`). */\nexport { wrapAngularRenderer } from \"./utils/wrapAngularRenderer\";\n\n// Angular-specific props and type overrides\nexport type {\n SimpleTableAngularProps,\n TableInstance,\n AngularColumnDef,\n NestedAngularColumnDef,\n NestedTableAngularConfig,\n AngularIconsConfig,\n AngularIconSlot,\n AngularColumnEditorConfig,\n AngularCellRenderer,\n AngularHeaderRenderer,\n AngularFooterRenderer,\n AngularHeaderDropdown,\n AngularColumnEditorRowRenderer,\n AngularColumnEditorCustomRenderer,\n AngularLoadingStateRenderer,\n AngularErrorStateRenderer,\n AngularEmptyStateRenderer,\n AngularRowButton,\n AngularDefaultRowData,\n} from \"./types\";\n\n// Re-export vanilla types for callbacks and the imperative API via @ViewChild /\n// (tableReady). For column definitions on `SimpleTable`, use `AngularColumnDef`.\nexport type {\n Accessor,\n AggregationConfig,\n AggregationType,\n AnimationsConfig,\n AutoSizeMode,\n ColumnDef,\n Cell,\n CellChangeProps,\n CellClickProps,\n CellRenderer,\n CellRendererProps,\n CellValue,\n ChartOptions,\n ColumnEditorConfig,\n ColumnEditorRowRenderer,\n ColumnEditorRowRendererComponents,\n ColumnEditorCustomRenderer,\n ColumnEditorCustomRendererProps,\n ColumnEditorRowRendererProps,\n ColumnEditorSearchFunction,\n ColumnType,\n ColumnVisibilityState,\n Comparator,\n ComparatorProps,\n CustomTheme,\n CustomThemeProps,\n EmptyStateRenderer,\n EmptyStateRendererProps,\n EnumOption,\n ErrorStateRenderer,\n ErrorStateRendererProps,\n ExportToCSVProps,\n ExportValueGetter,\n ExportValueProps,\n FilterCondition,\n FilterOperator,\n StringFilterOperator,\n NumberFilterOperator,\n BooleanFilterOperator,\n DateFilterOperator,\n EnumFilterOperator,\n FooterRendererProps,\n FooterPosition,\n GetRowId,\n GetRowIdParams,\n GetRowClass,\n GetRowClassParams,\n HeaderDropdown,\n HeaderDropdownProps,\n HeaderRenderer,\n HeaderRendererComponents,\n HeaderRendererProps,\n IconsConfig,\n LoadingStateRenderer,\n LoadingStateRendererProps,\n OnRowGroupExpandProps,\n Pinned,\n PinnedSectionsState,\n PivotConfig,\n PivotValueConfig,\n PivotResult,\n QuickFilterConfig,\n QuickFilterGetter,\n QuickFilterGetterProps,\n QuickFilterMode,\n Row,\n RowButtonProps,\n RowId,\n RowSelectionChangeProps,\n RowSelectionMode,\n RowState,\n SetHeaderRenameProps,\n ShowWhen,\n SimpleTableConfig,\n SimpleTableProps,\n SortColumn,\n TableAPI,\n TableFilterState,\n TableRow,\n Theme,\n UpdateDataProps,\n ValueFormatter,\n ValueFormatterProps,\n ValueGetter,\n ValueGetterProps,\n} from \"simple-table-core\";\n\nexport {\n pivotRows,\n buildPivotAccessor,\n buildPivotRowTotalAccessor,\n PIVOT_CHILDREN_KEY,\n PIVOT_IS_TOTAL_KEY,\n PIVOT_ACCESSOR_PREFIX,\n PIVOT_BLANK_LABEL,\n} from \"simple-table-core\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"simple-table-angular.mjs","sources":["../../src/utils/wrapAngularRenderer.ts","../../src/buildVanillaConfig.ts","../../src/MountRegistry.ts","../../src/lib/SimpleTableComponent.ts","../../src/lib/provideSimpleTable.ts","../../src/index.ts","../../src/simple-table-angular.ts"],"sourcesContent":["import {\n ApplicationRef,\n createComponent,\n EnvironmentInjector,\n reflectComponentType,\n type ComponentRef,\n type Type,\n} from \"@angular/core\";\nimport type {\n ColumnEditorRowRendererProps as VanillaColumnEditorRowRendererProps,\n HeaderRendererProps as VanillaHeaderRendererProps,\n} from \"simple-table-core\";\nimport type { MountRegistry } from \"../MountRegistry\";\n\n/** Declared `@Input` / `input()` names for a component type (template + prop). */\nfunction declaredInputNames(component: Type<unknown>): Set<string> {\n const mirror = reflectComponentType(component);\n const names = new Set<string>();\n if (!mirror) return names;\n for (const input of mirror.inputs) {\n names.add(input.propName);\n names.add(input.templateName);\n }\n return names;\n}\n\n/** Apply props to a dynamic ComponentRef and flush change detection. */\nfunction applyComponentProps<P extends object>(\n componentRef: ComponentRef<P>,\n props: Partial<P>,\n): void {\n const ref = componentRef as ComponentRef<P> & {\n setInput?: (name: string, value: unknown) => void;\n };\n const inputs = declaredInputNames(componentRef.componentType as Type<unknown>);\n if (typeof ref.setInput === \"function\" && inputs.size > 0) {\n for (const [key, value] of Object.entries(props)) {\n if (inputs.has(key)) {\n ref.setInput(key, value);\n } else {\n // Core may pass undeclared keys; keep prior Object.assign behavior.\n (componentRef.instance as Record<string, unknown>)[key] = value;\n }\n }\n } else {\n Object.assign(componentRef.instance as object, props);\n }\n componentRef.changeDetectorRef.detectChanges();\n}\n\nfunction mountAngularComponent<P extends object>(\n component: Type<P>,\n props: Partial<P>,\n appRef: ApplicationRef,\n injector: EnvironmentInjector,\n registry: MountRegistry | undefined,\n host?: HTMLElement,\n): { host: HTMLElement; componentRef: ComponentRef<P> } {\n const el = host ?? document.createElement(\"div\");\n const componentRef = createComponent(component, {\n environmentInjector: injector,\n hostElement: el,\n });\n applyComponentProps(componentRef, props);\n appRef.attachView(componentRef.hostView);\n registry?.register(el, () => {\n appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n });\n return { host: el, componentRef };\n}\n\n/**\n * Wraps an Angular standalone component into a function that returns an\n * HTMLElement, matching the vanilla renderer contract expected by\n * simple-table-core.\n *\n * Requires references to the running Angular ApplicationRef and\n * EnvironmentInjector so it can attach the dynamically-created component\n * to the change detection tree and trigger a synchronous flush before\n * returning the element to the vanilla rendering pipeline.\n *\n * Pass an optional {@link MountRegistry} so core's `onRendererHostDiscard` can\n * destroy the ComponentRef (including any CDK Overlay / floating UI) when the\n * host is discarded. The table adapter always supplies a registry; the public\n * helper used for one-shot static slots (e.g. `tableEmptyStateRenderer`) may omit it.\n *\n * These are injected automatically when the consumer uses\n * `provideSimpleTable()` in their application providers.\n */\nexport function wrapAngularRenderer<P extends object>(\n component: Type<P>,\n appRef: ApplicationRef,\n injector: EnvironmentInjector,\n registry?: MountRegistry,\n): (props: Partial<P>) => HTMLElement {\n return (props: Partial<P>): HTMLElement => {\n return mountAngularComponent(component, props, appRef, injector, registry).host;\n };\n}\n\n/**\n * Header renderer wrapper that reuses one host element so sort/filter icon\n * refreshes update props in place instead of remounting the Angular subtree\n * and wiping local state. Mirrors Vue's {@link wrapVueHeaderRenderer} /\n * React's wrapReactHeaderRenderer.\n */\nexport function wrapAngularHeaderRenderer(\n component: Type<object>,\n appRef: ApplicationRef,\n injector: EnvironmentInjector,\n registry: MountRegistry,\n): (props: VanillaHeaderRendererProps) => HTMLElement {\n let host: HTMLElement | null = null;\n let componentRef: ComponentRef<object> | null = null;\n return (props: VanillaHeaderRendererProps): HTMLElement => {\n if (host && componentRef && registry.isRegistered(host)) {\n applyComponentProps(componentRef, props as object);\n return host;\n }\n const mounted = mountAngularComponent(\n component,\n props as object,\n appRef,\n injector,\n registry,\n );\n host = mounted.host;\n componentRef = mounted.componentRef;\n return host;\n };\n}\n\n/**\n * Like {@link wrapAngularRenderer}, but reuses one wrapper per accessor so\n * unstable column rebuilds keep a stable function identity on ColumnDef.\n *\n * For `kind: \"header\"`, also reuses a single mount host so sort/filter\n * refreshes preserve Angular component state.\n */\nexport function wrapCachedAngularRenderer<P extends object>(\n component: Type<P>,\n appRef: ApplicationRef,\n injector: EnvironmentInjector,\n registry: MountRegistry,\n accessor: string,\n kind: \"cell\" | \"header\",\n): (props: Partial<P>) => HTMLElement {\n const cache = kind === \"cell\" ? registry.cellRendererCache : registry.headerRendererCache;\n const existing = cache.get(accessor);\n if (existing) {\n existing.component = component;\n return existing.wrapped as (props: Partial<P>) => HTMLElement;\n }\n\n const slot: { component: Type<P>; wrapped: (props: Partial<P>) => HTMLElement } = {\n component,\n wrapped: null as unknown as (props: Partial<P>) => HTMLElement,\n };\n\n if (kind === \"header\") {\n let host: HTMLElement | null = null;\n let componentRef: ComponentRef<P> | null = null;\n const wrapped = (props: Partial<P>): HTMLElement => {\n if (host && componentRef && registry.isRegistered(host)) {\n applyComponentProps(componentRef, props);\n return host;\n }\n const mounted = mountAngularComponent(\n slot.component,\n props,\n appRef,\n injector,\n registry,\n );\n host = mounted.host;\n componentRef = mounted.componentRef;\n return host;\n };\n slot.wrapped = wrapped;\n cache.set(accessor, slot);\n return wrapped;\n }\n\n const wrapped = (props: Partial<P>): HTMLElement => {\n return mountAngularComponent(slot.component, props, appRef, injector, registry).host;\n };\n slot.wrapped = wrapped;\n cache.set(accessor, slot);\n return wrapped;\n}\n\n/**\n * Column-editor row renderer: one host per `accessor` so popout list rebuilds\n * update in place instead of remounting Angular state (mirrors Vue/React).\n */\nexport function wrapAngularColumnEditorRowRenderer(\n component: Type<object>,\n appRef: ApplicationRef,\n injector: EnvironmentInjector,\n registry: MountRegistry,\n): (props: VanillaColumnEditorRowRendererProps) => HTMLElement {\n const mounts = new Map<\n string,\n { host: HTMLElement; componentRef: ComponentRef<object> }\n >();\n return (props: VanillaColumnEditorRowRendererProps): HTMLElement => {\n const key = String(props.accessor);\n const existing = mounts.get(key);\n if (existing && registry.isRegistered(existing.host)) {\n applyComponentProps(existing.componentRef, props as object);\n return existing.host;\n }\n const mounted = mountAngularComponent(\n component,\n props as object,\n appRef,\n injector,\n registry,\n );\n mounts.set(key, mounted);\n return mounted.host;\n };\n}\n","import type { ApplicationRef, EnvironmentInjector } from \"@angular/core\";\nimport type { SimpleTableConfig, ColumnDef, ColumnEditorConfig } from \"simple-table-core\";\nimport { asRows, collectHeaderAccessors } from \"simple-table-core\";\nimport type {\n SimpleTableAngularProps,\n AngularColumnDef,\n AngularColumnEditorConfig,\n AngularDefaultRowData,\n AngularIconsConfig,\n} from \"./types\";\nimport type { MountRegistry } from \"./MountRegistry\";\nimport {\n wrapAngularRenderer,\n wrapCachedAngularRenderer,\n wrapAngularColumnEditorRowRenderer,\n} from \"./utils/wrapAngularRenderer\";\n\n/** Resolve column definitions. */\nexport function resolveAngularColumns<\n TData extends AngularDefaultRowData = AngularDefaultRowData,\n>(\n config: Pick<SimpleTableAngularProps<TData>, \"columns\">,\n): ReadonlyArray<AngularColumnDef<TData, any>> {\n const headers = config.columns;\n if (!headers) {\n throw new Error(\"SimpleTable requires `columns`\");\n }\n return headers;\n}\n\nexport function buildVanillaConfig<TData extends AngularDefaultRowData = AngularDefaultRowData>(\n config: SimpleTableAngularProps<TData>,\n registry: MountRegistry,\n appRef: ApplicationRef,\n injector: EnvironmentInjector,\n): SimpleTableConfig {\n const {\n columns: _columns,\n rows,\n footerRenderer,\n emptyStateRenderer,\n errorStateRenderer,\n loadingStateRenderer,\n tableEmptyStateRenderer,\n headerDropdown,\n columnEditorConfig,\n icons,\n rowButtons,\n onColumnOrderChange,\n onColumnWidthChange,\n onHeaderEdit,\n onColumnSelect,\n enableColumnEditor,\n enableColumnEditorInitOpen,\n enablePagination,\n onTableReady,\n hoverRowBackground,\n oddColumnBackground,\n oddEvenRowBackground,\n ...rest\n } = config;\n\n const wrap = <P extends object>(component: any) =>\n wrapAngularRenderer<P>(component, appRef, injector, registry);\n\n function transformIcons(iconsConfig: AngularIconsConfig): NonNullable<SimpleTableConfig[\"icons\"]> {\n const result: NonNullable<SimpleTableConfig[\"icons\"]> = {};\n for (const [key, value] of Object.entries(iconsConfig)) {\n if (value == null) continue;\n if (\n typeof value === \"string\" ||\n value instanceof HTMLElement ||\n value instanceof SVGSVGElement\n ) {\n (result as any)[key] = value;\n } else if ((value as any).ɵcmp) {\n (result as any)[key] = wrap(value as any)({});\n } else {\n (result as any)[key] = value;\n }\n }\n return result;\n }\n\n function transformColumnEditorConfig(cfg: AngularColumnEditorConfig): ColumnEditorConfig {\n const { rowRenderer, customRenderer, ...cfgRest } = cfg;\n return {\n ...cfgRest,\n ...(rowRenderer\n ? {\n rowRenderer: wrapAngularColumnEditorRowRenderer(\n rowRenderer as any,\n appRef,\n injector,\n registry,\n ) as any,\n }\n : {}),\n ...(customRenderer ? { customRenderer: wrap(customRenderer) as any } : {}),\n };\n }\n\n function transformHeader(header: AngularColumnDef<TData, any>): ColumnDef {\n const { cellRenderer, headerRenderer, children, nestedTable, ...headerRest } = header;\n const accessor = String(header.accessor);\n const transformed: ColumnDef = { ...(headerRest as any) };\n\n if (cellRenderer) {\n if ((cellRenderer as any).ɵcmp) {\n transformed.cellRenderer = wrapCachedAngularRenderer(\n cellRenderer as any,\n appRef,\n injector,\n registry,\n accessor,\n \"cell\",\n ) as any;\n } else {\n transformed.cellRenderer = cellRenderer as any;\n }\n }\n if (headerRenderer) {\n if ((headerRenderer as any).ɵcmp) {\n transformed.headerRenderer = wrapCachedAngularRenderer(\n headerRenderer as any,\n appRef,\n injector,\n registry,\n accessor,\n \"header\",\n ) as any;\n } else {\n transformed.headerRenderer = headerRenderer as any;\n }\n }\n if (children) transformed.children = children.map(transformHeader);\n\n if (nestedTable) {\n const nestedFull = { ...nestedTable, rows: [] } as unknown as SimpleTableAngularProps;\n transformed.nestedTable = buildVanillaConfig(\n nestedFull,\n registry,\n appRef,\n injector,\n ) as any;\n }\n\n return transformed;\n }\n\n const columns = resolveAngularColumns(config);\n\n registry.pruneRendererCaches(collectHeaderAccessors(columns));\n\n // `rest` still carries TData-bound callbacks (getRowId, onCellEdit, …).\n // Widen once here — the vanilla runtime is Row-shaped.\n const shared = rest as SimpleTableConfig;\n\n const vanillaConfig: SimpleTableConfig = {\n ...shared,\n rows: asRows(rows),\n columns: columns.map(transformHeader),\n enableColumnEditor,\n enableColumnEditorInitOpen,\n enablePagination,\n onTableReady,\n hoverRowBackground,\n oddColumnBackground,\n oddEvenRowBackground,\n // Authoritative mount teardown: core calls this before it permanently\n // discards any host element, so the registry destroys exactly the affected\n // Angular ComponentRefs (including CDK Overlay / floating UI).\n onRendererHostDiscard: registry.disposeHost,\n };\n\n if (onColumnOrderChange) {\n vanillaConfig.onColumnOrderChange = (headers) =>\n onColumnOrderChange(headers as unknown as AngularColumnDef<TData, any>[]);\n }\n if (onColumnWidthChange) {\n vanillaConfig.onColumnWidthChange = (headers) =>\n onColumnWidthChange(headers as unknown as AngularColumnDef<TData, any>[]);\n }\n if (onHeaderEdit) {\n vanillaConfig.onHeaderEdit = (header, newLabel) =>\n onHeaderEdit(header as unknown as AngularColumnDef<TData, any>, newLabel);\n }\n if (onColumnSelect) {\n vanillaConfig.onColumnSelect = (header) =>\n onColumnSelect(header as unknown as AngularColumnDef<TData, any>);\n }\n\n if (footerRenderer !== undefined) {\n if ((footerRenderer as any).ɵcmp) {\n vanillaConfig.footerRenderer = wrap(footerRenderer) as any;\n } else {\n vanillaConfig.footerRenderer = footerRenderer as any;\n }\n }\n\n if (emptyStateRenderer !== undefined) {\n if ((emptyStateRenderer as any).ɵcmp) {\n vanillaConfig.emptyStateRenderer = wrap(emptyStateRenderer) as any;\n } else {\n vanillaConfig.emptyStateRenderer = emptyStateRenderer as any;\n }\n }\n\n if (errorStateRenderer !== undefined) {\n if ((errorStateRenderer as any).ɵcmp) {\n vanillaConfig.errorStateRenderer = wrap(errorStateRenderer) as any;\n } else {\n vanillaConfig.errorStateRenderer = errorStateRenderer as any;\n }\n }\n\n if (loadingStateRenderer !== undefined) {\n if ((loadingStateRenderer as any).ɵcmp) {\n vanillaConfig.loadingStateRenderer = wrap(loadingStateRenderer) as any;\n } else {\n vanillaConfig.loadingStateRenderer = loadingStateRenderer as any;\n }\n }\n\n if (tableEmptyStateRenderer !== undefined) {\n vanillaConfig.tableEmptyStateRenderer = tableEmptyStateRenderer;\n }\n\n if (headerDropdown !== undefined) {\n vanillaConfig.headerDropdown = wrap(headerDropdown) as any;\n }\n\n if (columnEditorConfig !== undefined) {\n vanillaConfig.columnEditorConfig = transformColumnEditorConfig(columnEditorConfig);\n }\n\n if (icons !== undefined) {\n vanillaConfig.icons = transformIcons(icons);\n }\n\n if (rowButtons !== undefined) {\n vanillaConfig.rowButtons = rowButtons.map((button) => wrap(button) as any);\n }\n\n return vanillaConfig;\n}\n","/**\n * Tracks imperative Angular mounts and caches wrapped cell/header renderers per\n * accessor so unstable column rebuilds keep stable wrapper identity.\n */\nconst MOUNT_ID_ATTR = \"data-st-mount-id\";\n\nexport type CachedRendererSlot<T = unknown> = {\n component: T;\n wrapped: unknown;\n};\n\nexport class MountRegistry {\n private entries = new Map<string, () => void>();\n private nextId = 0;\n\n readonly cellRendererCache = new Map<string, CachedRendererSlot>();\n readonly headerRendererCache = new Map<string, CachedRendererSlot>();\n\n register(container: HTMLElement, dispose: () => void): void {\n const id = `st-mount-${this.nextId++}`;\n container.setAttribute(MOUNT_ID_ATTR, id);\n this.entries.set(id, dispose);\n }\n\n /** True when `container` is a live registered mount host (not yet disposed). */\n isRegistered(container: HTMLElement): boolean {\n const id = container.getAttribute(MOUNT_ID_ATTR);\n if (id === null) return false;\n return this.entries.has(id);\n }\n\n disposeHost = (host: HTMLElement): void => {\n if (typeof host.getAttribute !== \"function\") return;\n const ids: string[] = [];\n const selfId = host.getAttribute(MOUNT_ID_ATTR);\n if (selfId !== null) ids.push(selfId);\n const tagged = host.querySelectorAll(`[${MOUNT_ID_ATTR}]`);\n tagged.forEach((el) => {\n const id = el.getAttribute(MOUNT_ID_ATTR);\n if (id !== null) ids.push(id);\n });\n for (const id of ids) {\n const dispose = this.entries.get(id);\n if (!dispose) continue;\n this.entries.delete(id);\n dispose();\n }\n };\n\n clear(): void {\n this.cellRendererCache.clear();\n this.headerRendererCache.clear();\n for (const dispose of this.entries.values()) {\n dispose();\n }\n this.entries.clear();\n }\n\n pruneRendererCaches(liveAccessors: ReadonlySet<string>): void {\n for (const key of this.cellRendererCache.keys()) {\n if (!liveAccessors.has(key)) this.cellRendererCache.delete(key);\n }\n for (const key of this.headerRendererCache.keys()) {\n if (!liveAccessors.has(key)) this.headerRendererCache.delete(key);\n }\n }\n\n get size(): number {\n return this.entries.size;\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n EventEmitter,\n ElementRef,\n ApplicationRef,\n EnvironmentInjector,\n inject,\n} from \"@angular/core\";\nimport { SimpleTableVanilla } from \"simple-table-core\";\nimport type { SimpleTableConfig, TableAPI } from \"simple-table-core\";\nimport {\n headersStructurallyEqual,\n rowsShallowUnchanged,\n} from \"simple-table-core\";\nimport { buildVanillaConfig, resolveAngularColumns } from \"../buildVanillaConfig\";\nimport { MountRegistry } from \"../MountRegistry\";\nimport type {\n AngularDefaultRowData,\n SimpleTableAngularProps,\n TableInstance,\n} from \"../types\";\n\n/**\n * SimpleTable — Angular adapter for simple-table-core.\n *\n * Accepts the same props as SimpleTableProps (the vanilla user-facing API) but\n * with Angular component types for all renderer props.\n *\n * Prefer typed `rows` / `columns` (`AngularColumnDef<MyRow>`). For a typed\n * imperative handle, use `@ViewChild(SimpleTableComponent) table!: SimpleTableComponent<MyRow>`\n * or listen to `(tableReady)`.\n */\n@Component({\n selector: \"simple-table\",\n standalone: true,\n template: `<div #host></div>`,\n styles: [\":host { display: block; }\"],\n})\nexport class SimpleTableComponent<\n TData extends AngularDefaultRowData = AngularDefaultRowData,\n> implements OnInit, OnChanges, OnDestroy {\n @Input({ required: true }) rows!: SimpleTableAngularProps<TData>[\"rows\"];\n @Input() columns?: SimpleTableAngularProps<TData>[\"columns\"];\n\n // All optional SimpleTableAngularProps inputs\n @Input() footerRenderer?: SimpleTableAngularProps<TData>[\"footerRenderer\"];\n @Input() loadingStateRenderer?: SimpleTableAngularProps<TData>[\"loadingStateRenderer\"];\n @Input() errorStateRenderer?: SimpleTableAngularProps<TData>[\"errorStateRenderer\"];\n @Input() emptyStateRenderer?: SimpleTableAngularProps<TData>[\"emptyStateRenderer\"];\n @Input() tableEmptyStateRenderer?: SimpleTableAngularProps<TData>[\"tableEmptyStateRenderer\"];\n @Input() headerDropdown?: SimpleTableAngularProps<TData>[\"headerDropdown\"];\n @Input() columnEditorConfig?: SimpleTableAngularProps<TData>[\"columnEditorConfig\"];\n @Input() onCellClick?: SimpleTableAngularProps<TData>[\"onCellClick\"];\n @Input() onCellEdit?: SimpleTableAngularProps<TData>[\"onCellEdit\"];\n @Input() onSortChange?: SimpleTableAngularProps<TData>[\"onSortChange\"];\n @Input() onFilterChange?: SimpleTableAngularProps<TData>[\"onFilterChange\"];\n @Input() onRowSelectionChange?: SimpleTableAngularProps<TData>[\"onRowSelectionChange\"];\n @Input() onRowGroupExpand?: SimpleTableAngularProps<TData>[\"onRowGroupExpand\"];\n @Input() onColumnOrderChange?: SimpleTableAngularProps<TData>[\"onColumnOrderChange\"];\n @Input() onColumnVisibilityChange?: SimpleTableAngularProps<TData>[\"onColumnVisibilityChange\"];\n @Input() onColumnWidthChange?: SimpleTableAngularProps<TData>[\"onColumnWidthChange\"];\n @Input() onPageChange?: SimpleTableAngularProps<TData>[\"onPageChange\"];\n @Input() onLoadMore?: SimpleTableAngularProps<TData>[\"onLoadMore\"];\n @Input() onTableReady?: SimpleTableAngularProps<TData>[\"onTableReady\"];\n @Input() rowGrouping?: SimpleTableAngularProps<TData>[\"rowGrouping\"];\n @Input() pivot?: SimpleTableAngularProps<TData>[\"pivot\"];\n @Input() onPivotChange?: SimpleTableAngularProps<TData>[\"onPivotChange\"];\n @Input() enableRowSelection?: SimpleTableAngularProps<TData>[\"enableRowSelection\"];\n @Input() theme?: SimpleTableAngularProps<TData>[\"theme\"];\n @Input() quickFilter?: SimpleTableAngularProps<TData>[\"quickFilter\"];\n @Input() isLoading?: SimpleTableAngularProps<TData>[\"isLoading\"];\n @Input() getRowId?: SimpleTableAngularProps<TData>[\"getRowId\"];\n @Input() enablePagination?: SimpleTableAngularProps<TData>[\"enablePagination\"];\n @Input() rowsPerPage?: SimpleTableAngularProps<TData>[\"rowsPerPage\"];\n @Input() serverSidePagination?: SimpleTableAngularProps<TData>[\"serverSidePagination\"];\n @Input() totalRowCount?: SimpleTableAngularProps<TData>[\"totalRowCount\"];\n @Input() height?: SimpleTableAngularProps<TData>[\"height\"];\n @Input() maxHeight?: SimpleTableAngularProps<TData>[\"maxHeight\"];\n @Input() scrollParent?: SimpleTableAngularProps<TData>[\"scrollParent\"];\n @Input() infiniteScrollThreshold?: SimpleTableAngularProps<TData>[\"infiniteScrollThreshold\"];\n @Input() columnResizing?: SimpleTableAngularProps<TData>[\"columnResizing\"];\n @Input() columnReordering?: SimpleTableAngularProps<TData>[\"columnReordering\"];\n @Input() enableColumnEditor?: SimpleTableAngularProps<TData>[\"enableColumnEditor\"];\n @Input() enableColumnEditorInitOpen?: SimpleTableAngularProps<TData>[\"enableColumnEditorInitOpen\"];\n @Input() selectableCells?: SimpleTableAngularProps<TData>[\"selectableCells\"];\n @Input() selectableColumns?: SimpleTableAngularProps<TData>[\"selectableColumns\"];\n @Input() enableHeaderEditing?: SimpleTableAngularProps<TData>[\"enableHeaderEditing\"];\n @Input() onHeaderEdit?: SimpleTableAngularProps<TData>[\"onHeaderEdit\"];\n @Input() customTheme?: SimpleTableAngularProps<TData>[\"customTheme\"];\n @Input() icons?: SimpleTableAngularProps<TData>[\"icons\"];\n @Input() externalFilterHandling?: SimpleTableAngularProps<TData>[\"externalFilterHandling\"];\n @Input() externalSortHandling?: SimpleTableAngularProps<TData>[\"externalSortHandling\"];\n @Input() columnBorders?: SimpleTableAngularProps<TData>[\"columnBorders\"];\n @Input() rowButtons?: SimpleTableAngularProps<TData>[\"rowButtons\"];\n @Input() hideFooter?: SimpleTableAngularProps<TData>[\"hideFooter\"];\n @Input() footerPosition?: SimpleTableAngularProps<TData>[\"footerPosition\"];\n @Input() initialSortColumn?: SimpleTableAngularProps<TData>[\"initialSortColumn\"];\n @Input() initialSortDirection?: SimpleTableAngularProps<TData>[\"initialSortDirection\"];\n @Input() expandAll?: SimpleTableAngularProps<TData>[\"expandAll\"];\n @Input() autoExpandColumns?: SimpleTableAngularProps<TData>[\"autoExpandColumns\"];\n @Input() animations?: SimpleTableAngularProps<TData>[\"animations\"];\n @Input() enableVirtualization?: SimpleTableAngularProps<TData>[\"enableVirtualization\"];\n @Input() hoverRowBackground?: SimpleTableAngularProps<TData>[\"hoverRowBackground\"];\n @Input() oddColumnBackground?: SimpleTableAngularProps<TData>[\"oddColumnBackground\"];\n @Input() oddEvenRowBackground?: SimpleTableAngularProps<TData>[\"oddEvenRowBackground\"];\n\n /** Emits the TableAPI once the table has mounted. */\n @Output() tableReady = new EventEmitter<TableAPI<TData>>();\n\n private instance: TableInstance | null = null;\n private registry = new MountRegistry();\n private syncedDefaultHeaders: ReadonlyArray<\n NonNullable<SimpleTableAngularProps<TData>[\"columns\"]>[number]\n > | undefined;\n private syncedRows: SimpleTableAngularProps<TData>[\"rows\"] | undefined;\n private wasLoading = false;\n private didInitialAutoSize = false;\n private hostEl = inject(ElementRef<HTMLElement>);\n private appRef = inject(ApplicationRef);\n private envInjector = inject(EnvironmentInjector);\n\n private maybeRefitAutoSizeColumns(leftLoading: boolean): void {\n if (!this.instance) return;\n if (leftLoading) {\n this.instance.refitAutoSizeColumns?.();\n return;\n }\n // Angular mounts are synchronous, so custom renderer DOM is already present\n // after the first paint that registered mounts (mirrors Vue/React).\n if (!this.didInitialAutoSize && this.registry.size > 0) {\n this.didInitialAutoSize = true;\n this.instance.refitAutoSizeColumns?.();\n }\n }\n\n ngOnInit(): void {\n const container = this.hostEl.nativeElement.querySelector(\"div\") as HTMLElement;\n if (!container) return;\n\n const props = this.getProps();\n this.instance = new SimpleTableVanilla(\n container,\n buildVanillaConfig(props, this.registry, this.appRef, this.envInjector),\n ) as unknown as TableInstance;\n this.instance.mount();\n this.syncedDefaultHeaders = resolveAngularColumns(props);\n this.syncedRows = props.rows;\n this.wasLoading = Boolean(props.isLoading);\n this.maybeRefitAutoSizeColumns(false);\n\n this.tableReady.emit(this.instance.getAPI() as unknown as TableAPI<TData>);\n }\n\n ngOnChanges(): void {\n if (!this.instance) return;\n\n const props = this.getProps();\n const fullConfig = buildVanillaConfig(props, this.registry, this.appRef, this.envInjector);\n const patch: Partial<SimpleTableConfig> = { ...fullConfig };\n const resolvedColumns = resolveAngularColumns(props);\n\n const headersUnchanged = headersStructurallyEqual(\n this.syncedDefaultHeaders,\n resolvedColumns,\n );\n this.syncedDefaultHeaders = resolvedColumns;\n if (headersUnchanged) {\n delete patch.columns;\n }\n\n const rowsUnchanged = rowsShallowUnchanged(\n this.syncedRows as ReadonlyArray<object> | undefined,\n props.rows as ReadonlyArray<object>,\n props.getRowId as Parameters<typeof rowsShallowUnchanged>[2],\n );\n this.syncedRows = props.rows;\n if (rowsUnchanged) {\n delete patch.rows;\n }\n\n const isLoading = Boolean(props.isLoading);\n const leftLoading = this.wasLoading && !isLoading;\n this.wasLoading = isLoading;\n\n this.instance.update(patch);\n this.maybeRefitAutoSizeColumns(leftLoading);\n }\n\n ngOnDestroy(): void {\n this.instance?.destroy();\n this.instance = null;\n this.syncedDefaultHeaders = undefined;\n this.syncedRows = undefined;\n this.registry.clear();\n }\n\n /** Returns the full imperative TableAPI. Use via @ViewChild or (tableReady) output. */\n getAPI(): TableAPI<TData> | null {\n return (this.instance?.getAPI() as TableAPI<TData> | undefined) ?? null;\n }\n\n private getProps(): SimpleTableAngularProps<TData> {\n const props: SimpleTableAngularProps<TData> = {\n rows: this.rows,\n };\n\n if (this.columns !== undefined) props.columns = this.columns;\n if (this.footerRenderer !== undefined) props.footerRenderer = this.footerRenderer;\n if (this.loadingStateRenderer !== undefined)\n props.loadingStateRenderer = this.loadingStateRenderer;\n if (this.errorStateRenderer !== undefined) props.errorStateRenderer = this.errorStateRenderer;\n if (this.emptyStateRenderer !== undefined) props.emptyStateRenderer = this.emptyStateRenderer;\n if (this.tableEmptyStateRenderer !== undefined)\n props.tableEmptyStateRenderer = this.tableEmptyStateRenderer;\n if (this.headerDropdown !== undefined) props.headerDropdown = this.headerDropdown;\n if (this.columnEditorConfig !== undefined) props.columnEditorConfig = this.columnEditorConfig;\n if (this.onCellClick !== undefined) props.onCellClick = this.onCellClick;\n if (this.onCellEdit !== undefined) props.onCellEdit = this.onCellEdit;\n if (this.onSortChange !== undefined) props.onSortChange = this.onSortChange;\n if (this.onFilterChange !== undefined) props.onFilterChange = this.onFilterChange;\n if (this.onRowSelectionChange !== undefined)\n props.onRowSelectionChange = this.onRowSelectionChange;\n if (this.onRowGroupExpand !== undefined) props.onRowGroupExpand = this.onRowGroupExpand;\n if (this.onColumnOrderChange !== undefined)\n props.onColumnOrderChange = this.onColumnOrderChange;\n if (this.onColumnVisibilityChange !== undefined)\n props.onColumnVisibilityChange = this.onColumnVisibilityChange;\n if (this.onColumnWidthChange !== undefined)\n props.onColumnWidthChange = this.onColumnWidthChange;\n if (this.onPageChange !== undefined) props.onPageChange = this.onPageChange;\n if (this.onLoadMore !== undefined) props.onLoadMore = this.onLoadMore;\n if (this.onTableReady !== undefined) props.onTableReady = this.onTableReady;\n if (this.rowGrouping !== undefined) props.rowGrouping = this.rowGrouping;\n if (this.pivot !== undefined) props.pivot = this.pivot;\n if (this.onPivotChange !== undefined) props.onPivotChange = this.onPivotChange;\n if (this.enableRowSelection !== undefined) props.enableRowSelection = this.enableRowSelection;\n if (this.theme !== undefined) props.theme = this.theme;\n if (this.quickFilter !== undefined) props.quickFilter = this.quickFilter;\n if (this.isLoading !== undefined) props.isLoading = this.isLoading;\n if (this.getRowId !== undefined) props.getRowId = this.getRowId;\n if (this.enablePagination !== undefined) props.enablePagination = this.enablePagination;\n if (this.rowsPerPage !== undefined) props.rowsPerPage = this.rowsPerPage;\n if (this.serverSidePagination !== undefined)\n props.serverSidePagination = this.serverSidePagination;\n if (this.totalRowCount !== undefined) props.totalRowCount = this.totalRowCount;\n if (this.height !== undefined) props.height = this.height;\n if (this.maxHeight !== undefined) props.maxHeight = this.maxHeight;\n if (this.scrollParent !== undefined) props.scrollParent = this.scrollParent;\n if (this.infiniteScrollThreshold !== undefined)\n props.infiniteScrollThreshold = this.infiniteScrollThreshold;\n if (this.columnResizing !== undefined) props.columnResizing = this.columnResizing;\n if (this.columnReordering !== undefined) props.columnReordering = this.columnReordering;\n if (this.enableColumnEditor !== undefined) props.enableColumnEditor = this.enableColumnEditor;\n if (this.enableColumnEditorInitOpen !== undefined)\n props.enableColumnEditorInitOpen = this.enableColumnEditorInitOpen;\n if (this.enableColumnEditorInitOpen !== undefined)\n props.enableColumnEditorInitOpen = this.enableColumnEditorInitOpen;\n if (this.selectableCells !== undefined) props.selectableCells = this.selectableCells;\n if (this.selectableColumns !== undefined) props.selectableColumns = this.selectableColumns;\n if (this.enableHeaderEditing !== undefined)\n props.enableHeaderEditing = this.enableHeaderEditing;\n if (this.onHeaderEdit !== undefined) props.onHeaderEdit = this.onHeaderEdit;\n if (this.customTheme !== undefined) props.customTheme = this.customTheme;\n if (this.icons !== undefined) props.icons = this.icons;\n if (this.externalFilterHandling !== undefined)\n props.externalFilterHandling = this.externalFilterHandling;\n if (this.externalSortHandling !== undefined)\n props.externalSortHandling = this.externalSortHandling;\n if (this.columnBorders !== undefined) props.columnBorders = this.columnBorders;\n if (this.rowButtons !== undefined) props.rowButtons = this.rowButtons;\n if (this.hideFooter !== undefined) props.hideFooter = this.hideFooter;\n if (this.footerPosition !== undefined) props.footerPosition = this.footerPosition;\n if (this.initialSortColumn !== undefined) props.initialSortColumn = this.initialSortColumn;\n if (this.initialSortDirection !== undefined)\n props.initialSortDirection = this.initialSortDirection;\n if (this.expandAll !== undefined) props.expandAll = this.expandAll;\n if (this.autoExpandColumns !== undefined) props.autoExpandColumns = this.autoExpandColumns;\n if (this.animations !== undefined) props.animations = this.animations;\n if (this.enableVirtualization !== undefined)\n props.enableVirtualization = this.enableVirtualization;\n if (this.hoverRowBackground !== undefined) props.hoverRowBackground = this.hoverRowBackground;\n if (this.hoverRowBackground !== undefined)\n props.hoverRowBackground = this.hoverRowBackground;\n if (this.oddColumnBackground !== undefined)\n props.oddColumnBackground = this.oddColumnBackground;\n if (this.oddColumnBackground !== undefined)\n props.oddColumnBackground = this.oddColumnBackground;\n if (this.oddEvenRowBackground !== undefined)\n props.oddEvenRowBackground = this.oddEvenRowBackground;\n if (this.oddEvenRowBackground !== undefined)\n props.oddEvenRowBackground = this.oddEvenRowBackground;\n\n return props;\n }\n}\n","import type { EnvironmentProviders } from \"@angular/core\";\nimport { makeEnvironmentProviders } from \"@angular/core\";\n\n/**\n * Call this in your application's `providers` array (or `bootstrapApplication`\n * providers) to register the dependencies that simple-table-angular's renderer\n * bridge needs — specifically `ApplicationRef` and `EnvironmentInjector`.\n *\n * These are already provided by Angular's platform by default, so in practice\n * this function is a no-op placeholder that serves as a clear signal to\n * consumers that the adapter has been correctly wired up. If future versions\n * need custom providers they will be added here without breaking the call site.\n *\n * @example\n * // main.ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideSimpleTable()],\n * });\n *\n * @example\n * // app.module.ts\n * @NgModule({ providers: [provideSimpleTable()] })\n * export class AppModule {}\n */\nexport function provideSimpleTable(): EnvironmentProviders {\n return makeEnvironmentProviders([\n // ApplicationRef and EnvironmentInjector are part of Angular's core platform\n // and are available without any additional registration.\n // This factory is intentionally empty — it exists for API symmetry with\n // other Angular ecosystem libraries and to allow non-breaking additions later.\n ]);\n}\n","// Component\nexport { SimpleTableComponent } from \"./lib/SimpleTableComponent\";\nexport { asRows } from \"simple-table-core\";\n\n// Provider helper\nexport { provideSimpleTable } from \"./lib/provideSimpleTable\";\n\n/** Wrap a standalone component as an HTMLElement (e.g. for `tableEmptyStateRenderer`). */\nexport { wrapAngularRenderer } from \"./utils/wrapAngularRenderer\";\n\n// Angular-specific props and type overrides\nexport type {\n SimpleTableAngularProps,\n TableInstance,\n AngularColumnDef,\n NestedAngularColumnDef,\n NestedTableAngularConfig,\n AngularIconsConfig,\n AngularIconSlot,\n AngularColumnEditorConfig,\n AngularCellRenderer,\n AngularHeaderRenderer,\n AngularFooterRenderer,\n AngularHeaderDropdown,\n AngularColumnEditorRowRenderer,\n AngularColumnEditorCustomRenderer,\n AngularLoadingStateRenderer,\n AngularErrorStateRenderer,\n AngularEmptyStateRenderer,\n AngularRowButton,\n AngularDefaultRowData,\n} from \"./types\";\n\n// Re-export vanilla types for callbacks and the imperative API via @ViewChild /\n// (tableReady). For column definitions on `SimpleTable`, use `AngularColumnDef`.\nexport type {\n Accessor,\n AggregationConfig,\n AggregationType,\n AnimationsConfig,\n AutoSizeMode,\n ColumnDef,\n Cell,\n CellChangeProps,\n CellClickProps,\n CellRenderer,\n CellRendererProps,\n CellValue,\n ChartOptions,\n ColumnEditorConfig,\n ColumnEditorRowRenderer,\n ColumnEditorRowRendererComponents,\n ColumnEditorCustomRenderer,\n ColumnEditorCustomRendererProps,\n ColumnEditorRowRendererProps,\n ColumnEditorSearchFunction,\n ColumnType,\n ColumnVisibilityState,\n Comparator,\n ComparatorProps,\n CustomTheme,\n CustomThemeProps,\n EmptyStateRenderer,\n EmptyStateRendererProps,\n EnumOption,\n ErrorStateRenderer,\n ErrorStateRendererProps,\n ExportToCSVProps,\n ExportValueGetter,\n ExportValueProps,\n FilterCondition,\n FilterOperator,\n StringFilterOperator,\n NumberFilterOperator,\n BooleanFilterOperator,\n DateFilterOperator,\n EnumFilterOperator,\n FooterRendererProps,\n FooterPosition,\n GetRowId,\n GetRowIdParams,\n GetRowClass,\n GetRowClassParams,\n HeaderDropdown,\n HeaderDropdownProps,\n HeaderRenderer,\n HeaderRendererComponents,\n HeaderRendererProps,\n IconsConfig,\n LoadingStateRenderer,\n LoadingStateRendererProps,\n OnRowGroupExpandProps,\n Pinned,\n PinnedSectionsState,\n PivotConfig,\n PivotValueConfig,\n PivotResult,\n QuickFilterConfig,\n QuickFilterGetter,\n QuickFilterGetterProps,\n QuickFilterMode,\n Row,\n RowButtonProps,\n RowId,\n RowSelectionChangeProps,\n RowSelectionMode,\n RowState,\n SetHeaderRenameProps,\n ShowWhen,\n SimpleTableConfig,\n SimpleTableProps,\n SortColumn,\n TableAPI,\n TableFilterState,\n TableRow,\n Theme,\n UpdateDataProps,\n ValueFormatter,\n ValueFormatterProps,\n ValueGetter,\n ValueGetterProps,\n} from \"simple-table-core\";\n\nexport {\n pivotRows,\n buildPivotAccessor,\n buildPivotRowTotalAccessor,\n PIVOT_CHILDREN_KEY,\n PIVOT_IS_TOTAL_KEY,\n PIVOT_ACCESSOR_PREFIX,\n PIVOT_BLANK_LABEL,\n} from \"simple-table-core\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ interface TableInstance {
|
|
|
18
18
|
update(config: Partial<SimpleTableConfig>): void;
|
|
19
19
|
destroy(): void;
|
|
20
20
|
getAPI(): TableAPI;
|
|
21
|
+
/** Re-measure `width: "auto"` columns after custom renderer DOM settles. */
|
|
22
|
+
refitAutoSizeColumns?(): void;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* Angular table slots are component class refs (`Type<unknown>`), not `Type<SomeProps>`.
|
|
@@ -186,9 +188,12 @@ declare class SimpleTableComponent<TData extends AngularDefaultRowData = Angular
|
|
|
186
188
|
private registry;
|
|
187
189
|
private syncedDefaultHeaders;
|
|
188
190
|
private syncedRows;
|
|
191
|
+
private wasLoading;
|
|
192
|
+
private didInitialAutoSize;
|
|
189
193
|
private hostEl;
|
|
190
194
|
private appRef;
|
|
191
195
|
private envInjector;
|
|
196
|
+
private maybeRefitAutoSizeColumns;
|
|
192
197
|
ngOnInit(): void;
|
|
193
198
|
ngOnChanges(): void;
|
|
194
199
|
ngOnDestroy(): void;
|
|
@@ -232,6 +237,8 @@ declare class MountRegistry {
|
|
|
232
237
|
readonly cellRendererCache: Map<string, CachedRendererSlot<unknown>>;
|
|
233
238
|
readonly headerRendererCache: Map<string, CachedRendererSlot<unknown>>;
|
|
234
239
|
register(container: HTMLElement, dispose: () => void): void;
|
|
240
|
+
/** True when `container` is a live registered mount host (not yet disposed). */
|
|
241
|
+
isRegistered(container: HTMLElement): boolean;
|
|
235
242
|
disposeHost: (host: HTMLElement) => void;
|
|
236
243
|
clear(): void;
|
|
237
244
|
pruneRendererCaches(liveAccessors: ReadonlySet<string>): void;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sources":["../src/types.ts","../src/lib/SimpleTableComponent.ts","../src/lib/provideSimpleTable.ts","../src/MountRegistry.ts","../src/utils/wrapAngularRenderer.ts"],"mappings":";;;;;AAqBA;;;;;;;;AAQG;AACH,KAAA,8BAAiC;AAGjC,uBAAiB;;mBAEA,OAAO,CAAC,iBAAiB;;cAE9B,QAAQ;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../src/types.ts","../src/lib/SimpleTableComponent.ts","../src/lib/provideSimpleTable.ts","../src/MountRegistry.ts","../src/utils/wrapAngularRenderer.ts"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simple-table/angular",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/fesm2022/simple-table-angular.mjs",
|
|
6
6
|
"module": "./dist/fesm2022/simple-table-angular.mjs",
|
|
@@ -39,13 +39,14 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"tslib": "^2.8.1",
|
|
42
|
-
"simple-table-core": "4.1.
|
|
42
|
+
"simple-table-core": "4.1.5"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@angular/common": "^20.3.27",
|
|
46
46
|
"@angular/compiler": "^20.3.27",
|
|
47
47
|
"@angular/compiler-cli": "^20.3.27",
|
|
48
48
|
"@angular/core": "^20.3.27",
|
|
49
|
+
"@angular/platform-browser": "^20.3.27",
|
|
49
50
|
"@types/node": "^16.18.126",
|
|
50
51
|
"jsdom": "^24.1.3",
|
|
51
52
|
"ng-packagr": "^20.3.2",
|