@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
- const el = document.createElement("div");
27
- const componentRef = createComponent(component, {
28
- environmentInjector: injector,
29
- hostElement: el,
30
- });
31
- // Assign input props to the component instance.
32
- Object.assign(componentRef.instance, props);
33
- // Attach to the application's view tree so Angular tracks it.
34
- appRef.attachView(componentRef.hostView);
35
- // Synchronous change detection flush — ensures the rendered output is
36
- // in the DOM before we return the element to the vanilla pipeline.
37
- componentRef.changeDetectorRef.detectChanges();
38
- registry?.register(el, () => {
39
- appRef.detachView(componentRef.hostView);
40
- componentRef.destroy();
41
- });
42
- return el;
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
- const el = document.createElement("div");
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 ? { rowRenderer: wrap(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":";;;;;AAQA;;;;;;;;;;;;;;;;;AAiBG;AACG,SAAU,mBAAmB,CACjC,SAAkB,EAClB,MAAsB,EACtB,QAA6B,EAC7B,QAAwB,EAAA;IAExB,OAAO,CAAC,KAAiB,KAAiB;QACxC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAExC,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,EAAE;AAC9C,YAAA,mBAAmB,EAAE,QAAQ;AAC7B,YAAA,WAAW,EAAE,EAAE;AAChB,SAAA,CAAC;;QAGF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,QAAkB,EAAE,KAAK,CAAC;;AAGrD,QAAA,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;;;AAIxC,QAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;AAE9C,QAAA,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAK;AAC1B,YAAA,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;YACxC,YAAY,CAAC,OAAO,EAAE;AACxB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACH;AAEA;;;AAGG;AACG,SAAU,yBAAyB,CACvC,SAAkB,EAClB,MAAsB,EACtB,QAA6B,EAC7B,QAAuB,EACvB,QAAgB,EAChB,IAAuB,EAAA;AAEvB,IAAA,MAAM,KAAK,GAAG,IAAI,KAAK,MAAM,GAAG,QAAQ,CAAC,iBAAiB,GAAG,QAAQ,CAAC,mBAAmB;IACzF,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpC,IAAI,QAAQ,EAAE;AACZ,QAAA,QAAQ,CAAC,SAAS,GAAG,SAAS;QAC9B,OAAO,QAAQ,CAAC,OAA6C;IAC/D;AAEA,IAAA,MAAM,IAAI,GAAwE;QAChF,SAAS;AACT,QAAA,OAAO,EAAE,IAAqD;KAC/D;AACD,IAAA,MAAM,OAAO,GAAG,CAAC,KAAiB,KAAiB;QACjD,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACxC,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE;AACnD,YAAA,mBAAmB,EAAE,QAAQ;AAC7B,YAAA,WAAW,EAAE,EAAE;AAChB,SAAA,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,QAAkB,EAAE,KAAK,CAAC;AACrD,QAAA,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;AACxC,QAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;AAC9C,QAAA,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAK;AACzB,YAAA,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;YACxC,YAAY,CAAC,OAAO,EAAE;AACxB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,EAAE;AACX,IAAA,CAAC;AACD,IAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,IAAA,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AACzB,IAAA,OAAO,OAAO;AAChB;;ACvFA;AACM,SAAU,qBAAqB,CAGnC,MAAuD,EAAA;AAEvD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;IAC9B,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;IACnD;AACA,IAAA,OAAO,OAAO;AAChB;AAEM,SAAU,kBAAkB,CAChC,MAAsC,EACtC,QAAuB,EACvB,MAAsB,EACtB,QAA6B,EAAA;IAE7B,MAAM,EACJ,OAAO,EAAE,QAAQ,EACjB,IAAI,EACJ,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,KAAK,EACL,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,GAAG,IAAI,EACR,GAAG,MAAM;AAEV,IAAA,MAAM,IAAI,GAAG,CAAmB,SAAc,KAC5C,mBAAmB,CAAI,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAE/D,SAAS,cAAc,CAAC,WAA+B,EAAA;QACrD,MAAM,MAAM,GAA4C,EAAE;AAC1D,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACtD,IAAI,KAAK,IAAI,IAAI;gBAAE;YACnB,IACE,OAAO,KAAK,KAAK,QAAQ;AACzB,gBAAA,KAAK,YAAY,WAAW;gBAC5B,KAAK,YAAY,aAAa,EAC9B;AACC,gBAAA,MAAc,CAAC,GAAG,CAAC,GAAG,KAAK;YAC9B;AAAO,iBAAA,IAAK,KAAa,CAAC,IAAI,EAAE;gBAC7B,MAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAY,CAAC,CAAC,EAAE,CAAC;YAC/C;iBAAO;AACJ,gBAAA,MAAc,CAAC,GAAG,CAAC,GAAG,KAAK;YAC9B;QACF;AACA,QAAA,OAAO,MAAM;IACf;IAEA,SAAS,2BAA2B,CAAC,GAA8B,EAAA;QACjE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG;QACvD,OAAO;AACL,YAAA,GAAG,OAAO;AACV,YAAA,IAAI,WAAW,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAQ,EAAE,GAAG,EAAE,CAAC;AACjE,YAAA,IAAI,cAAc,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,CAAQ,EAAE,GAAG,EAAE,CAAC;SAC3E;IACH;IAEA,SAAS,eAAe,CAAC,MAAoC,EAAA;AAC3D,QAAA,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM;QACrF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAA,MAAM,WAAW,GAAc,EAAE,GAAI,UAAkB,EAAE;QAEzD,IAAI,YAAY,EAAE;AAChB,YAAA,IAAK,YAAoB,CAAC,IAAI,EAAE;AAC9B,gBAAA,WAAW,CAAC,YAAY,GAAG,yBAAyB,CAClD,YAAmB,EACnB,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,CACA;YACV;iBAAO;AACL,gBAAA,WAAW,CAAC,YAAY,GAAG,YAAmB;YAChD;QACF;QACA,IAAI,cAAc,EAAE;AAClB,YAAA,IAAK,cAAsB,CAAC,IAAI,EAAE;AAChC,gBAAA,WAAW,CAAC,cAAc,GAAG,yBAAyB,CACpD,cAAqB,EACrB,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,CACF;YACV;iBAAO;AACL,gBAAA,WAAW,CAAC,cAAc,GAAG,cAAqB;YACpD;QACF;AACA,QAAA,IAAI,QAAQ;YAAE,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;QAElE,IAAI,WAAW,EAAE;YACf,MAAM,UAAU,GAAG,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,EAAE,EAAwC;AACrF,YAAA,WAAW,CAAC,WAAW,GAAG,kBAAkB,CAC1C,UAAU,EACV,QAAQ,EACR,MAAM,EACN,QAAQ,CACF;QACV;AAEA,QAAA,OAAO,WAAW;IACpB;AAEA,IAAA,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC;IAE7C,QAAQ,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;;;IAI7D,MAAM,MAAM,GAAG,IAAyB;AAExC,IAAA,MAAM,aAAa,GAAsB;AACvC,QAAA,GAAG,MAAM;AACT,QAAA,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;AAClB,QAAA,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QACrC,kBAAkB;QAClB,0BAA0B;QAC1B,gBAAgB;QAChB,YAAY;QACZ,kBAAkB;QAClB,mBAAmB;QACnB,oBAAoB;;;;QAIpB,qBAAqB,EAAE,QAAQ,CAAC,WAAW;KAC5C;IAED,IAAI,mBAAmB,EAAE;AACvB,QAAA,aAAa,CAAC,mBAAmB,GAAG,CAAC,OAAO,KAC1C,mBAAmB,CAAC,OAAoD,CAAC;IAC7E;IACA,IAAI,mBAAmB,EAAE;AACvB,QAAA,aAAa,CAAC,mBAAmB,GAAG,CAAC,OAAO,KAC1C,mBAAmB,CAAC,OAAoD,CAAC;IAC7E;IACA,IAAI,YAAY,EAAE;AAChB,QAAA,aAAa,CAAC,YAAY,GAAG,CAAC,MAAM,EAAE,QAAQ,KAC5C,YAAY,CAAC,MAAiD,EAAE,QAAQ,CAAC;IAC7E;IACA,IAAI,cAAc,EAAE;AAClB,QAAA,aAAa,CAAC,cAAc,GAAG,CAAC,MAAM,KACpC,cAAc,CAAC,MAAiD,CAAC;IACrE;AAEA,IAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AAChC,QAAA,IAAK,cAAsB,CAAC,IAAI,EAAE;AAChC,YAAA,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAQ;QAC5D;aAAO;AACL,YAAA,aAAa,CAAC,cAAc,GAAG,cAAqB;QACtD;IACF;AAEA,IAAA,IAAI,kBAAkB,KAAK,SAAS,EAAE;AACpC,QAAA,IAAK,kBAA0B,CAAC,IAAI,EAAE;AACpC,YAAA,aAAa,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAQ;QACpE;aAAO;AACL,YAAA,aAAa,CAAC,kBAAkB,GAAG,kBAAyB;QAC9D;IACF;AAEA,IAAA,IAAI,kBAAkB,KAAK,SAAS,EAAE;AACpC,QAAA,IAAK,kBAA0B,CAAC,IAAI,EAAE;AACpC,YAAA,aAAa,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAQ;QACpE;aAAO;AACL,YAAA,aAAa,CAAC,kBAAkB,GAAG,kBAAyB;QAC9D;IACF;AAEA,IAAA,IAAI,oBAAoB,KAAK,SAAS,EAAE;AACtC,QAAA,IAAK,oBAA4B,CAAC,IAAI,EAAE;AACtC,YAAA,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAQ;QACxE;aAAO;AACL,YAAA,aAAa,CAAC,oBAAoB,GAAG,oBAA2B;QAClE;IACF;AAEA,IAAA,IAAI,uBAAuB,KAAK,SAAS,EAAE;AACzC,QAAA,aAAa,CAAC,uBAAuB,GAAG,uBAAuB;IACjE;AAEA,IAAA,IAAI,cAAc,KAAK,SAAS,EAAE;AAChC,QAAA,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAQ;IAC5D;AAEA,IAAA,IAAI,kBAAkB,KAAK,SAAS,EAAE;AACpC,QAAA,aAAa,CAAC,kBAAkB,GAAG,2BAA2B,CAAC,kBAAkB,CAAC;IACpF;AAEA,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,QAAA,aAAa,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;IAC7C;AAEA,IAAA,IAAI,UAAU,KAAK,SAAS,EAAE;AAC5B,QAAA,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAQ,CAAC;IAC5E;AAEA,IAAA,OAAO,aAAa;AACtB;;ACxOA;;;AAGG;AACH,MAAM,aAAa,GAAG,kBAAkB;MAO3B,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAsB;QACvC,IAAA,CAAA,MAAM,GAAG,CAAC;AAET,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAA8B;AACzD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,GAAG,EAA8B;AAQpE,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,IAAiB,KAAU;AACxC,YAAA,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,UAAU;gBAAE;YAC7C,MAAM,GAAG,GAAa,EAAE;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;YAC/C,IAAI,MAAM,KAAK,IAAI;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA,CAAG,CAAC;AAC1D,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;gBACpB,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC;gBACzC,IAAI,EAAE,KAAK,IAAI;AAAE,oBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/B,YAAA,CAAC,CAAC;AACF,YAAA,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;gBACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACpC,gBAAA,IAAI,CAAC,OAAO;oBAAE;AACd,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACvB,gBAAA,OAAO,EAAE;YACX;AACF,QAAA,CAAC;IAuBH;IA7CE,QAAQ,CAAC,SAAsB,EAAE,OAAmB,EAAA;QAClD,MAAM,EAAE,GAAG,CAAA,SAAA,EAAY,IAAI,CAAC,MAAM,EAAE,EAAE;AACtC,QAAA,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC;IAC/B;IAoBA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAC9B,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE;QAChC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AAC3C,YAAA,OAAO,EAAE;QACX;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACtB;AAEA,IAAA,mBAAmB,CAAC,aAAkC,EAAA;QACpD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE;AAC/C,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC;QACjE;QACA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE;AACjD,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,gBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC;QACnE;IACF;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI;IAC1B;AACD;;ACpCD;;;;;;;;;AASG;MAOU,oBAAoB,CAAA;AANjC,IAAA,WAAA,GAAA;;AA2EY,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAmB;QAElD,IAAA,CAAA,QAAQ,GAAyB,IAAI;AACrC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,aAAa,EAAE;AAK9B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,EAAC,UAAuB,EAAC;AACxC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC;AA0JlD,IAAA;IAxJC,QAAQ,GAAA;AACN,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAgB;AAC/E,QAAA,IAAI,CAAC,SAAS;YAAE;AAEhB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CACpC,SAAS,EACT,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAC5C;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACrB,QAAA,IAAI,CAAC,oBAAoB,GAAG,qBAAqB,CAAC,KAAK,CAAC;AACxD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI;AAE5B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAgC,CAAC;IAC5E;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,QAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC;AAC1F,QAAA,MAAM,KAAK,GAA+B,EAAE,GAAG,UAAU,EAAE;AAC3D,QAAA,MAAM,eAAe,GAAG,qBAAqB,CAAC,KAAK,CAAC;QAEpD,MAAM,gBAAgB,GAAG,wBAAwB,CAC/C,IAAI,CAAC,oBAAoB,EACzB,eAAe,CAChB;AACD,QAAA,IAAI,CAAC,oBAAoB,GAAG,eAAe;QAC3C,IAAI,gBAAgB,EAAE;YACpB,OAAO,KAAK,CAAC,OAAO;QACtB;AAEA,QAAA,MAAM,aAAa,GAAG,oBAAoB,CACxC,IAAI,CAAC,UAA+C,EACpD,KAAK,CAAC,IAA6B,EACnC,KAAK,CAAC,QAAsD,CAC7D;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI;QAC5B,IAAI,aAAa,EAAE;YACjB,OAAO,KAAK,CAAC,IAAI;QACnB;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS;AACrC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACvB;;IAGA,MAAM,GAAA;QACJ,OAAQ,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAkC,IAAI,IAAI;IACzE;IAEQ,QAAQ,GAAA;AACd,QAAA,MAAM,KAAK,GAAmC;YAC5C,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5D,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;AACjF,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS;AACzC,YAAA,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;AACxD,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;AAC7F,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;AAC7F,QAAA,IAAI,IAAI,CAAC,uBAAuB,KAAK,SAAS;AAC5C,YAAA,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB;AAC9D,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;AACjF,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;AAC7F,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACxE,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACrE,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AAC3E,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;AACjF,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS;AACzC,YAAA,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;AACxD,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB;AACvF,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS;AACxC,YAAA,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;AACtD,QAAA,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS;AAC7C,YAAA,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB;AAChE,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS;AACxC,YAAA,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;AACtD,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AAC3E,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACrE,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AAC3E,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACxE,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACtD,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;AAC9E,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;AAC7F,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACtD,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACxE,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAClE,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC/D,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB;AACvF,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACxE,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS;AACzC,YAAA,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;AACxD,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;AAC9E,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACzD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAClE,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AAC3E,QAAA,IAAI,IAAI,CAAC,uBAAuB,KAAK,SAAS;AAC5C,YAAA,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB;AAC9D,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;AACjF,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB;AACvF,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;AAC7F,QAAA,IAAI,IAAI,CAAC,0BAA0B,KAAK,SAAS;AAC/C,YAAA,KAAK,CAAC,0BAA0B,GAAG,IAAI,CAAC,0BAA0B;AACpE,QAAA,IAAI,IAAI,CAAC,0BAA0B,KAAK,SAAS;AAC/C,YAAA,KAAK,CAAC,0BAA0B,GAAG,IAAI,CAAC,0BAA0B;AACpE,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;AACpF,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;AAC1F,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS;AACxC,YAAA,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;AACtD,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;AAC3E,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AACxE,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACtD,QAAA,IAAI,IAAI,CAAC,sBAAsB,KAAK,SAAS;AAC3C,YAAA,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB;AAC5D,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS;AACzC,YAAA,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;AACxD,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;AAC9E,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACrE,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACrE,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;AACjF,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;AAC1F,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS;AACzC,YAAA,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;AACxD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAClE,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;AAC1F,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACrE,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS;AACzC,YAAA,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;AACxD,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS;AAAE,YAAA,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;AAC7F,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS;AACvC,YAAA,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;AACpD,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS;AACxC,YAAA,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;AACtD,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS;AACxC,YAAA,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB;AACtD,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS;AACzC,YAAA,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;AACxD,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS;AACzC,YAAA,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB;AAExD,QAAA,OAAO,KAAK;IACd;+GAxOW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,swEAHrB,CAAA,iBAAA,CAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,CAAA;;4FAGlB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,QAAA,EACN,CAAA,iBAAA,CAAmB,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;sBAM5B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAGA;;;AC7GH;;;;;;;;;;;;;;;;;;;;AAoBG;SACa,kBAAkB,GAAA;AAChC,IAAA,OAAO,wBAAwB,CAAC;;;;;AAK/B,KAAA,CAAC;AACJ;;AC/BA;;ACAA;;AAEG;;;;"}
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;
@@ -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;AACnB;AAGD;;;;;;;AAOG;AACH;AACA,KAAA,mBAAY,eACL,6CAAiC,WACtC,SAAS,IAAA,gBACF,YAAW;AACpB,KAAA,qBAAY,eAA2B,qBAAS,GAAA,qBAAwB,IAAA,IAAqB;AAG7F,KAAA,qBAAY,GAAA,IAAqB;AACjC,KAAA,qBAAY,GAAA,IAAqB;AACjC,KAAA,8BAAY,GAAA,IAA8B;AAC1C,KAAA,iCAAY,GAAA,IAAiC;AAC7C,KAAA,2BAAY,GAAA,IAA2B;AACvC,KAAA,yBAAY,GAAA,IAAyB;AACrC,KAAA,yBAAY,GAAA,IAAyB;AAGrC,KAAA,gBAAY,GAAA,IAAgB;AAE5B;AACA,KAAA,eAAY,GAAA,IAAe,YAAQ,aAAW,GAAA,WAAgB;AAE9D,4BAAiB;WACR,eAAe;aACb,eAAe;aACf,eAAe;qBACP,eAAe;mBACjB,eAAe;WACvB,eAAe;WACf,eAAe;eACX,eAAe;aACjB,eAAe;qBACP,eAAe;sBACd,eAAe;AAClC;AAGD,UAAM,yBAAW,SAA0B,IAAA,CAAA;kBAI3B,8BAA8B;qBAC3B,iCAAiC;AACnD;AAGD;;;AAGG;AACH,UAAM,gBAAW,eACV,qBAAS,GAAA,qBAAwB,WACtC,SAAS,UACT,IAAA,CAAA,SACA;mBAGe,mBAAmB;AAClC,qBAAiB,qBAAqB;eAC3B,aAAa,CAAC,gBAAgB;;kBAE3B,wBAAwB;AACvC;AAQD,UAAM,2DACU,GAAA,+BACd,IAAA,CAAA,gBACA;;cAkBU,aAAa,CAAC,gBAAgB;AACxC,uCAAmC,gBAAgB;AACnD,oCAAgC,gBAAgB;AAChD,4BAAwB,gBAAgB;AACxC,8BAA0B,gBAAgB;;AAE1C;qBACiB,qBAAqB;2BACf,2BAA2B;yBAC7B,yBAAyB;yBACzB,yBAAyB;AAC9C,8BAA0B,WAAW;qBACpB,qBAAqB;yBACjB,yBAAyB;YACtC,kBAAkB;;AAE1B,iBAAa,gBAAgB;AAC9B;AAGD;;;;AAIG;AACH,KAAK,yBAAyB;AAW9B;AACA,KAAA,sBAAY,GAAA,IAAsB,CAAA,gBAChC,CAAA,qBAAiB,GAAA,yBACjB;AAEA,eAAW,aAAa,CAAC,sBAAsB;kBACjC,wBAAwB;;AAGxC;;;AAGG;AACH,KAAA,wBAAY,GAAA,IAAwB,CAAA,uBAClC;AAQA,cAAU,aAAa,CAAC,sBAAsB;;;AC3KhD;;;;;;;;;AASG;AACH,cAAA,oBAMa,eACN,qBAAS,GAAA,qBAAwB,aACtC,MAAA,EAAW,SAAQ,EAAA,SAAW;UACI,uBAAuB;cACtC,uBAAuB;qBAGhB,uBAAuB;2BACjB,uBAAuB;yBACzB,uBAAuB;yBACvB,uBAAuB;8BAClB,uBAAuB;qBAChC,uBAAuB;yBACnB,uBAAuB;kBAC9B,uBAAuB;iBACxB,uBAAuB;mBACrB,uBAAuB;qBACrB,uBAAuB;2BACjB,uBAAuB;uBAC3B,uBAAuB;0BACpB,uBAAuB;+BAClB,uBAAuB;0BAC5B,uBAAuB;mBAC9B,uBAAuB;iBACzB,uBAAuB;mBACrB,uBAAuB;kBACxB,uBAAuB;YAC7B,uBAAuB;oBACf,uBAAuB;yBAClB,uBAAuB;YACpC,uBAAuB;kBACjB,uBAAuB;gBACzB,uBAAuB;eACxB,uBAAuB;uBACf,uBAAuB;kBAC5B,uBAAuB;2BACd,uBAAuB;oBAC9B,uBAAuB;aAC9B,uBAAuB;gBACpB,uBAAuB;mBACpB,uBAAuB;8BACZ,uBAAuB;qBAChC,uBAAuB;uBACrB,uBAAuB;yBACrB,uBAAuB;iCACf,uBAAuB;sBAClC,uBAAuB;wBACrB,uBAAuB;0BACrB,uBAAuB;mBAC9B,uBAAuB;kBACxB,uBAAuB;YAC7B,uBAAuB;6BACN,uBAAuB;2BACzB,uBAAuB;oBAC9B,uBAAuB;iBAC1B,uBAAuB;iBACvB,uBAAuB;qBACnB,uBAAuB;wBACpB,uBAAuB;2BACpB,uBAAuB;gBAClC,uBAAuB;wBACf,uBAAuB;iBAC9B,uBAAuB;2BACb,uBAAuB;yBACzB,uBAAuB;0BACtB,uBAAuB;2BACtB,uBAAuB;;AAG7C,gBAAU,YAAA,CAAA,QAAA;;;;;;;;AAYpB;AAgBA;AA8BA;;AASA,cAAU,QAAQ;AAIlB;yCA5IW,oBAAoB;2CAApB,oBAAoB;AAyOhC;;ACjRD;;;;;;;;;;;;;;;;;;;;AAoBG;AACH,iBAAA,kBAAgB,IAAA,oBAAsB;;AClBtC,KAAA,kBAAY;;;;AAKZ,cAAA,aAAa;;;gCAIe,GAAA,SAAA,kBAAA;kCACE,GAAA,SAAA,kBAAA;wBAER,WAAW;AAM/B,wBAAqB,WAAW;AAkBhC;uCASmC,WAAW;;AAY/C;;ACvDD;;;;;;;;;;;;;;;;;AAiBG;AACH,iBAAA,mBAAgB,8BACd,IAAA,aACA,cAAQ,YACR,gCACA,wBACE,OAAO,QAAQ;;;;","names":[]}
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.4",
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.4"
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",