@toclocoinc/lattice-grid 1.65.0 → 1.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/README.md +6 -4
  2. package/angular/LICENSE +111 -0
  3. package/angular/README.md +78 -0
  4. package/angular/fesm2022/toclocoinc-lattice-grid-angular.mjs +2843 -0
  5. package/angular/package.json +16 -0
  6. package/angular/types/toclocoinc-lattice-grid-angular.d.ts +1366 -0
  7. package/docs/API.html +741 -27
  8. package/docs/api-detail.html +137 -4
  9. package/lattice-grid.d.ts +9 -6
  10. package/lattice-grid.esm.min.js +26 -10
  11. package/lattice-grid.min.cjs +26 -10
  12. package/lattice-grid.min.css +1 -1
  13. package/lattice-grid.min.js +26 -10
  14. package/modules/ai.d.ts +1 -1
  15. package/modules/ai.esm.min.js +3 -3
  16. package/modules/ai.min.cjs +3 -3
  17. package/modules/ai.min.js +3 -3
  18. package/modules/angular.d.ts +1 -1
  19. package/modules/angular.esm.min.js +7 -7
  20. package/modules/angular.min.cjs +7 -7
  21. package/modules/angular.min.js +7 -7
  22. package/modules/chart-alluvial.d.ts +1 -1
  23. package/modules/chart-alluvial.esm.min.js +1 -1
  24. package/modules/chart-alluvial.min.cjs +1 -1
  25. package/modules/chart-alluvial.min.js +1 -1
  26. package/modules/chart-arc.d.ts +1 -1
  27. package/modules/chart-arc.esm.min.js +1 -1
  28. package/modules/chart-arc.min.cjs +1 -1
  29. package/modules/chart-arc.min.js +1 -1
  30. package/modules/chart-bubblemap.d.ts +1 -1
  31. package/modules/chart-bubblemap.esm.min.js +1 -1
  32. package/modules/chart-bubblemap.min.cjs +1 -1
  33. package/modules/chart-bubblemap.min.js +1 -1
  34. package/modules/chart-bump.d.ts +1 -1
  35. package/modules/chart-bump.esm.min.js +1 -1
  36. package/modules/chart-bump.min.cjs +1 -1
  37. package/modules/chart-bump.min.js +1 -1
  38. package/modules/chart-calendar.d.ts +1 -1
  39. package/modules/chart-calendar.esm.min.js +1 -1
  40. package/modules/chart-calendar.min.cjs +1 -1
  41. package/modules/chart-calendar.min.js +1 -1
  42. package/modules/chart-decomposition.d.ts +1 -1
  43. package/modules/chart-decomposition.esm.min.js +1 -1
  44. package/modules/chart-decomposition.min.cjs +1 -1
  45. package/modules/chart-decomposition.min.js +1 -1
  46. package/modules/chart-diverging.d.ts +1 -1
  47. package/modules/chart-diverging.esm.min.js +1 -1
  48. package/modules/chart-diverging.min.cjs +1 -1
  49. package/modules/chart-diverging.min.js +1 -1
  50. package/modules/chart-dumbbell.d.ts +1 -1
  51. package/modules/chart-dumbbell.esm.min.js +1 -1
  52. package/modules/chart-dumbbell.min.cjs +1 -1
  53. package/modules/chart-dumbbell.min.js +1 -1
  54. package/modules/chart-fan.d.ts +1 -1
  55. package/modules/chart-fan.esm.min.js +1 -1
  56. package/modules/chart-fan.min.cjs +1 -1
  57. package/modules/chart-fan.min.js +1 -1
  58. package/modules/chart-hexbin.d.ts +1 -1
  59. package/modules/chart-hexbin.esm.min.js +1 -1
  60. package/modules/chart-hexbin.min.cjs +1 -1
  61. package/modules/chart-hexbin.min.js +1 -1
  62. package/modules/chart-hexmap.d.ts +1 -1
  63. package/modules/chart-hexmap.esm.min.js +1 -1
  64. package/modules/chart-hexmap.min.cjs +1 -1
  65. package/modules/chart-hexmap.min.js +1 -1
  66. package/modules/chart-icicle.d.ts +1 -1
  67. package/modules/chart-icicle.esm.min.js +1 -1
  68. package/modules/chart-icicle.min.cjs +1 -1
  69. package/modules/chart-icicle.min.js +1 -1
  70. package/modules/chart-markermap.d.ts +1 -1
  71. package/modules/chart-markermap.esm.min.js +1 -1
  72. package/modules/chart-markermap.min.cjs +1 -1
  73. package/modules/chart-markermap.min.js +1 -1
  74. package/modules/chart-parallel.d.ts +1 -1
  75. package/modules/chart-parallel.esm.min.js +1 -1
  76. package/modules/chart-parallel.min.cjs +1 -1
  77. package/modules/chart-parallel.min.js +1 -1
  78. package/modules/chart-ridgeline.d.ts +1 -1
  79. package/modules/chart-ridgeline.esm.min.js +1 -1
  80. package/modules/chart-ridgeline.min.cjs +1 -1
  81. package/modules/chart-ridgeline.min.js +1 -1
  82. package/modules/chart-roc.d.ts +1 -1
  83. package/modules/chart-roc.esm.min.js +1 -1
  84. package/modules/chart-roc.min.cjs +1 -1
  85. package/modules/chart-roc.min.js +1 -1
  86. package/modules/chart-slope.d.ts +1 -1
  87. package/modules/chart-slope.esm.min.js +1 -1
  88. package/modules/chart-slope.min.cjs +1 -1
  89. package/modules/chart-slope.min.js +1 -1
  90. package/modules/chart-splom.d.ts +1 -1
  91. package/modules/chart-splom.esm.min.js +1 -1
  92. package/modules/chart-splom.min.cjs +1 -1
  93. package/modules/chart-splom.min.js +1 -1
  94. package/modules/chart-waffle.d.ts +1 -1
  95. package/modules/chart-waffle.esm.min.js +1 -1
  96. package/modules/chart-waffle.min.cjs +1 -1
  97. package/modules/chart-waffle.min.js +1 -1
  98. package/modules/charts.d.ts +1 -1
  99. package/modules/charts.esm.min.js +261 -48
  100. package/modules/charts.min.cjs +261 -48
  101. package/modules/charts.min.js +261 -48
  102. package/modules/data-router.d.ts +8 -3
  103. package/modules/data-router.esm.min.js +28 -6
  104. package/modules/data-router.min.cjs +28 -6
  105. package/modules/data-router.min.js +28 -6
  106. package/modules/devtools.d.ts +1 -1
  107. package/modules/devtools.esm.min.js +1 -1
  108. package/modules/devtools.min.cjs +1 -1
  109. package/modules/devtools.min.js +1 -1
  110. package/modules/dhtmlx-compat.d.ts +1 -1
  111. package/modules/dhtmlx-compat.esm.min.js +3 -3
  112. package/modules/dhtmlx-compat.min.cjs +3 -3
  113. package/modules/dhtmlx-compat.min.js +3 -3
  114. package/modules/gantt.d.ts +8 -3
  115. package/modules/gantt.esm.min.js +27 -4
  116. package/modules/gantt.min.cjs +27 -4
  117. package/modules/gantt.min.js +27 -4
  118. package/modules/geo-europe-nuts.d.ts +1 -1
  119. package/modules/geo-europe-nuts.esm.min.js +1 -1
  120. package/modules/geo-uk.d.ts +1 -1
  121. package/modules/geo-uk.esm.min.js +1 -1
  122. package/modules/geo-us-states.d.ts +1 -1
  123. package/modules/geo-us-states.esm.min.js +1 -1
  124. package/modules/geo-world-110m.d.ts +1 -1
  125. package/modules/geo-world-110m.esm.min.js +1 -1
  126. package/modules/geo-world-50m.d.ts +1 -1
  127. package/modules/geo-world-50m.esm.min.js +1 -1
  128. package/modules/htmx.d.ts +1 -1
  129. package/modules/htmx.esm.min.js +26 -10
  130. package/modules/htmx.min.cjs +26 -10
  131. package/modules/htmx.min.js +26 -10
  132. package/modules/kanban.d.ts +10 -3
  133. package/modules/kanban.esm.min.js +24 -4
  134. package/modules/kanban.min.cjs +24 -4
  135. package/modules/kanban.min.js +24 -4
  136. package/modules/kpi.d.ts +10 -3
  137. package/modules/kpi.esm.min.js +27 -4
  138. package/modules/kpi.min.cjs +27 -4
  139. package/modules/kpi.min.js +27 -4
  140. package/modules/layout.d.ts +1 -1
  141. package/modules/layout.esm.min.js +3 -3
  142. package/modules/layout.min.cjs +3 -3
  143. package/modules/layout.min.js +3 -3
  144. package/modules/mock-socket.d.ts +1 -1
  145. package/modules/mock-socket.esm.min.js +1 -1
  146. package/modules/mock-socket.min.cjs +1 -1
  147. package/modules/mock-socket.min.js +1 -1
  148. package/modules/react.d.ts +1 -1
  149. package/modules/react.esm.min.js +3 -3
  150. package/modules/react.min.cjs +3 -3
  151. package/modules/react.min.js +3 -3
  152. package/modules/svelte.d.ts +251 -2
  153. package/modules/svelte.esm.min.js +960 -6
  154. package/modules/svelte.min.cjs +942 -5
  155. package/modules/svelte.min.js +942 -5
  156. package/modules/tabs.d.ts +1 -1
  157. package/modules/tabs.esm.min.js +3 -3
  158. package/modules/tabs.min.cjs +3 -3
  159. package/modules/tabs.min.js +3 -3
  160. package/modules/vue.d.ts +398 -9
  161. package/modules/vue.esm.min.js +1163 -31
  162. package/modules/vue.min.cjs +1147 -30
  163. package/modules/vue.min.js +1147 -30
  164. package/modules/webcomponent.d.ts +233 -1
  165. package/modules/webcomponent.esm.min.js +1274 -41
  166. package/modules/webcomponent.min.cjs +1256 -41
  167. package/modules/webcomponent.min.js +1256 -41
  168. package/package.json +27 -2
  169. package/svelte/Chart.svelte +34 -0
  170. package/svelte/Gantt.svelte +34 -0
  171. package/svelte/Grid.svelte +30 -0
  172. package/svelte/GridProvider.svelte +13 -0
  173. package/svelte/KPI.svelte +34 -0
  174. package/svelte/Kanban.svelte +34 -0
  175. package/svelte/Layout.svelte +34 -0
  176. package/svelte/Router.svelte +16 -0
  177. package/svelte/Tabs.svelte +53 -0
@@ -0,0 +1,1366 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, EnvironmentProviders, Signal, OnChanges, OnDestroy, ElementRef, EventEmitter, NgZone, TemplateRef, QueryList, Provider } from '@angular/core';
3
+ import { createGrid, Grid, GridConfig, SortEntry, FilterSet, RowChange, GridEvent } from '@toclocoinc/lattice-grid';
4
+ import { createChart } from '@toclocoinc/lattice-grid/modules/charts';
5
+ import { createDataRouter } from '@toclocoinc/lattice-grid/modules/data-router';
6
+ import { createGantt } from '@toclocoinc/lattice-grid/modules/gantt';
7
+ import { createKanban } from '@toclocoinc/lattice-grid/modules/kanban';
8
+ import { createKPI } from '@toclocoinc/lattice-grid/modules/kpi';
9
+ import { createLayout } from '@toclocoinc/lattice-grid/modules/layout';
10
+ import { createTabs } from '@toclocoinc/lattice-grid/modules/tabs';
11
+
12
+ /**
13
+ * The Lattice factories, handed to Angular through dependency injection.
14
+ *
15
+ * Every component in this package is built against a factory it does not
16
+ * import: `createGrid`, `createKPI`, `createChart` and the rest arrive in one
17
+ * provider call at bootstrap. That is not ceremony, it is the module rule this
18
+ * product ships under — each optional viewer is its own bundle, and a page that
19
+ * only shows a grid must not download the board, the plan and eighteen chart
20
+ * types because one component in a library mentioned them. An `import` inside
21
+ * `<lattice-kpi>` would do exactly that, since this package is one fesm bundle.
22
+ *
23
+ * So the host imports what it uses, once:
24
+ *
25
+ * import { createGrid } from '@toclocoinc/lattice-grid';
26
+ * import { createKPI } from '@toclocoinc/lattice-grid/modules/kpi';
27
+ * import { provideLattice } from '@toclocoinc/lattice-grid/angular';
28
+ *
29
+ * bootstrapApplication(App, {
30
+ * providers: [provideLattice({ createGrid, createKPI })],
31
+ * });
32
+ *
33
+ * It is the same injection the React, Vue and Svelte adapters make; Angular
34
+ * simply has a place to put it.
35
+ */
36
+
37
+ /** The grid factory, exactly as `@toclocoinc/lattice-grid` exports it. */
38
+ type GridFactory = typeof createGrid;
39
+ /** The KPI panel factory, from `@toclocoinc/lattice-grid/modules/kpi`. */
40
+ type KPIFactory = typeof createKPI;
41
+ /** The chart factory, from `@toclocoinc/lattice-grid/modules/charts`. */
42
+ type ChartFactory = typeof createChart;
43
+ /** The board factory, from `@toclocoinc/lattice-grid/modules/kanban`. */
44
+ type KanbanFactory = typeof createKanban;
45
+ /** The plan factory, from `@toclocoinc/lattice-grid/modules/gantt`. */
46
+ type GanttFactory = typeof createGantt;
47
+ /** The layout factory, from `@toclocoinc/lattice-grid/modules/layout`. */
48
+ type LayoutFactory = typeof createLayout;
49
+ /** The tab-strip factory, from `@toclocoinc/lattice-grid/modules/tabs`. */
50
+ type TabsFactory = typeof createTabs;
51
+ /** The Data Router factory, from `@toclocoinc/lattice-grid/modules/data-router`. */
52
+ type DataRouterFactory = typeof createDataRouter;
53
+ /**
54
+ * The live viewers and their configuration objects.
55
+ *
56
+ * Each is an interface that *extends* the type the grid's own declarations give
57
+ * the factory, rather than an alias for it. The two say the same thing, but an
58
+ * alias cannot be written into this package's `.d.ts`: the module declarations
59
+ * do not export the interfaces behind `createKPI` and friends, so TypeScript
60
+ * has no name to emit for them. Extending gives the shape a name of its own,
61
+ * here, without restating a single member.
62
+ */
63
+ /** The live KPI panel. */
64
+ interface KPI extends ReturnType<KPIFactory> {
65
+ }
66
+ /** The live chart. */
67
+ interface Chart extends ReturnType<ChartFactory> {
68
+ }
69
+ /** The live board. */
70
+ interface Kanban extends ReturnType<KanbanFactory> {
71
+ }
72
+ /** The live plan. */
73
+ interface Gantt extends ReturnType<GanttFactory> {
74
+ }
75
+ /** The live layout. */
76
+ interface Layout extends ReturnType<LayoutFactory> {
77
+ }
78
+ /** The live tab strip. */
79
+ interface Tabs extends ReturnType<TabsFactory> {
80
+ }
81
+ /** The live Data Router. */
82
+ interface DataRouter extends ReturnType<DataRouterFactory> {
83
+ }
84
+ /** The KPI panel's configuration object. */
85
+ interface KPIConfig extends NonNullable<Parameters<KPIFactory>[1]> {
86
+ }
87
+ /** What `createChart` takes, less the two keys this package supplies. */
88
+ type ChartFactorySpec = Omit<Parameters<ChartFactory>[0], 'container' | 'grid'>;
89
+ /**
90
+ * A chart specification, less `container` and `grid`: the component supplies
91
+ * the first from its own element and the second from `[grid]` or the registry.
92
+ */
93
+ interface ChartConfig extends ChartFactorySpec {
94
+ }
95
+ /** The board's configuration object. */
96
+ interface KanbanConfig extends NonNullable<Parameters<KanbanFactory>[1]> {
97
+ }
98
+ /** What `createGantt` takes, less the keys this package supplies. */
99
+ type GanttFactoryOptions = Omit<NonNullable<Parameters<GanttFactory>[0]>, 'element' | 'grid'>;
100
+ /** The plan's options, less the `element` this package supplies. */
101
+ interface GanttConfig extends GanttFactoryOptions {
102
+ }
103
+ /** The layout's configuration object. */
104
+ interface LayoutConfig extends NonNullable<Parameters<LayoutFactory>[1]> {
105
+ }
106
+ /** What `createTabs` takes, named so an interface can extend it. */
107
+ type TabsFactoryConfig = Parameters<TabsFactory>[1];
108
+ /** The tab strip's configuration object. */
109
+ interface TabsConfig extends TabsFactoryConfig {
110
+ }
111
+ /** The Data Router's options object. */
112
+ interface DataRouterOptions extends NonNullable<Parameters<DataRouterFactory>[0]> {
113
+ }
114
+ /**
115
+ * Every factory this package can build a component from.
116
+ *
117
+ * All optional: provide the ones the application uses. A component whose
118
+ * factory was not provided throws a `[lattice]` message naming the import and
119
+ * the provider call that fixes it, rather than failing somewhere inside
120
+ * Angular.
121
+ */
122
+ interface LatticeFactories {
123
+ /** `createGrid`, for `<lattice-grid>` and `[latticeGrid]`. */
124
+ createGrid?: GridFactory;
125
+ /** `createKPI`, for `<lattice-kpi>`. */
126
+ createKPI?: KPIFactory;
127
+ /** `createChart`, for `<lattice-chart>`. */
128
+ createChart?: ChartFactory;
129
+ /** `createKanban`, for `<lattice-kanban>`. */
130
+ createKanban?: KanbanFactory;
131
+ /** `createGantt`, for `<lattice-gantt>`. */
132
+ createGantt?: GanttFactory;
133
+ /** `createLayout`, for `<lattice-layout>`. */
134
+ createLayout?: LayoutFactory;
135
+ /** `createTabs`, for `<lattice-tabs>`. */
136
+ createTabs?: TabsFactory;
137
+ /** `createDataRouter`, for `provideLatticeRouter()`. */
138
+ createDataRouter?: DataRouterFactory;
139
+ }
140
+ /** The factories every Lattice component resolves through. */
141
+ declare const LATTICE_FACTORIES: InjectionToken<LatticeFactories>;
142
+ /**
143
+ * Provide the Lattice factories to an application or a route.
144
+ *
145
+ * @param factories the factories this application uses
146
+ * @returns providers for `bootstrapApplication` or a route's `providers`
147
+ */
148
+ declare function provideLattice(factories: LatticeFactories): EnvironmentProviders;
149
+ /**
150
+ * The factory a component needs, or a message naming the two lines that fix it.
151
+ *
152
+ * @param factories whatever was provided, possibly nothing at all
153
+ * @param key which factory this component needs
154
+ * @param specifier the import path that factory comes from
155
+ * @param element the element the message should name
156
+ * @returns the factory
157
+ * @throws TypeError when the factory was not provided
158
+ */
159
+ declare function requireFactory<K extends keyof LatticeFactories>(factories: LatticeFactories | null, key: K, specifier: string, element: string): NonNullable<LatticeFactories[K]>;
160
+
161
+ /**
162
+ * Where a grid publishes itself so the viewers around it can find it.
163
+ *
164
+ * A KPI panel and a chart are built *against a grid instance*, and that
165
+ * instance does not exist until the grid component has rendered. A template
166
+ * reference cannot bridge that: `#grid` is resolved after the view that uses it
167
+ * is created, so a sibling `<lattice-kpi [grid]="grid.grid">` reads `null` on
168
+ * the pass that matters and nothing tells it when the grid arrives.
169
+ *
170
+ * So the grid publishes itself into this service, which holds a signal per
171
+ * name. A viewer reads the signal, and the moment the grid appears the viewer
172
+ * mounts itself against it. This is the Angular equivalent of React's
173
+ * `<LatticeGridProvider>` and Vue's `provide`/`inject` — the same registry, by
174
+ * the framework's own means.
175
+ *
176
+ * It is `providedIn: 'root'`, so a page with one grid configures nothing. Put
177
+ * `LatticeGridRegistry` in a component's own `providers` to scope a registry to
178
+ * that component's subtree, which is what a page that shows the same grid name
179
+ * twice (a dialog over a page, a split view) needs.
180
+ */
181
+
182
+ /** The name a grid publishes itself under when the host does not choose one. */
183
+ declare const DEFAULT_GRID_NAME = "default";
184
+ declare class LatticeGridRegistry {
185
+ /** Every published grid, by name. Replaced rather than mutated, so readers see one change. */
186
+ private readonly published;
187
+ /** One memoised signal per name, so two readers of `'default'` share a computation. */
188
+ private readonly byName;
189
+ /** Every grid published into this registry, by name. */
190
+ readonly grids: Signal<Readonly<Record<string, Grid | null>>>;
191
+ /**
192
+ * Publish a grid, or withdraw it.
193
+ *
194
+ * Called by `<lattice-grid>` when it mounts and again — with `null` — when it
195
+ * is destroyed, so a viewer bound to a grid that has gone is told rather than
196
+ * left holding a destroyed instance.
197
+ *
198
+ * @param name the name the grid is published under
199
+ * @param grid the live grid, or null to withdraw
200
+ * @returns nothing
201
+ */
202
+ publish(name: string, grid: Grid | null): void;
203
+ /**
204
+ * The grid published under a name, as a signal that updates when it arrives
205
+ * or goes.
206
+ *
207
+ * @param name which grid; the default name when omitted
208
+ * @returns a signal of the grid, or of null while there is none
209
+ */
210
+ grid(name?: string): Signal<Grid | null>;
211
+ /**
212
+ * The grid published under a name, read once without subscribing.
213
+ * @param name which grid; the default name when omitted
214
+ * @returns the grid, or null
215
+ */
216
+ snapshot(name?: string): Grid | null;
217
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeGridRegistry, never>;
218
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
219
+ }
220
+
221
+ /**
222
+ * The grid's configuration, with the row type carried through.
223
+ *
224
+ * The grid's own `GridConfig` predates this package and types its rows as
225
+ * `any[]`; this narrows that one key so an application's row interface reaches
226
+ * the template, the predicates and the keyed diff.
227
+ */
228
+ type LatticeGridConfig<TRow> = Omit<GridConfig, 'rows'> & {
229
+ /** The rows the grid holds. */
230
+ rows?: readonly TRow[];
231
+ };
232
+ /** A keyed change handed to `grid.rows.apply()`. */
233
+ type LatticeRowChange<TRow> = Omit<RowChange, 'add' | 'update'> & {
234
+ /** Rows to add. */
235
+ add?: readonly TRow[];
236
+ /** Rows to update, matched by the grid's `rowKey`. */
237
+ update?: readonly TRow[];
238
+ };
239
+ /** Named predicates, composed with whatever filter the reader has set. */
240
+ type LatticePredicates<TRow> = Record<string, ((row: TRow) => boolean) | null>;
241
+ /** The quick filter: the text, or the text with a matching mode. */
242
+ type LatticeQuickFilter = string | {
243
+ text: string;
244
+ mode?: string;
245
+ };
246
+ /**
247
+ * Everything both the component and the directive do; neither adds behaviour
248
+ * of its own, only a selector.
249
+ */
250
+ declare abstract class LatticeGridBase<TRow = unknown> implements OnChanges, OnDestroy {
251
+ /** The host element the grid is built into. */
252
+ protected readonly elementRef: ElementRef<HTMLElement>;
253
+ /** Angular's zone, or its no-op under zoneless change detection. */
254
+ private readonly zone;
255
+ /** Whether this is a browser; nothing is built on the server. */
256
+ private readonly isBrowser;
257
+ /** The factories the application provided. */
258
+ private readonly factories;
259
+ /** Where this grid publishes itself for the viewers around it. */
260
+ private readonly registry;
261
+ /** The Data Router this grid attaches to, when the host provided one. */
262
+ private readonly router;
263
+ /** The injector, so `afterNextRender` can be re-armed after a destroy. */
264
+ private readonly injector;
265
+ /** The live controller, or null before the first render and after destroy. */
266
+ private controller;
267
+ /** Set in `ngOnDestroy`, so a pending render callback does not build a grid. */
268
+ private torn;
269
+ /** The name this grid published itself under, so it withdraws under the same one. */
270
+ private publishedAs;
271
+ /** The `rowUpdates` object already applied, compared by identity. */
272
+ private appliedRowUpdates;
273
+ /** The `predicates` object already applied, compared by identity. */
274
+ private appliedPredicates;
275
+ /** One forwarder per grid event, built once and read by the controller. */
276
+ private readonly handlers;
277
+ /** The grid's configuration. Every key the vanilla `createGrid` takes. */
278
+ config?: LatticeGridConfig<TRow>;
279
+ /** The sort model. Applied through `grid.sort.set`. */
280
+ sort?: SortEntry[];
281
+ /** The filter tree. Applied through `grid.filters.set`, replacing what is there. */
282
+ filters?: FilterSet | null;
283
+ /** The quick filter text, or `{ text, mode }`. */
284
+ quickFilter?: LatticeQuickFilter;
285
+ /** The selected row keys. Applied through `grid.selection.set`. */
286
+ selectedKeys?: string[];
287
+ /**
288
+ * A keyed diff, applied through `grid.rows.apply()` when the *object* changes.
289
+ *
290
+ * A feed hands over a new change object per batch, so identity is the right
291
+ * trigger; re-applying the same object would re-land rows the grid has.
292
+ */
293
+ rowUpdates?: LatticeRowChange<TRow>;
294
+ /**
295
+ * Named predicates, applied through `grid.filters.where()` and diffed by name.
296
+ *
297
+ * These *compose* with whatever filter the reader set in the tool panel,
298
+ * which is exactly what `filters` cannot do. A name that has gone from the
299
+ * object is removed rather than left registered, so a "notable only" toggle
300
+ * turns off.
301
+ */
302
+ predicates?: LatticePredicates<TRow>;
303
+ /** The name this grid publishes itself under for grid-bound viewers. */
304
+ name?: string;
305
+ /** The Data Router route to attach to, when a router is provided. */
306
+ route?: string;
307
+ /** Options for `router.attach()`. */
308
+ routeOptions?: Record<string, unknown>;
309
+ /** The live grid, the moment it exists. The instance, not a copy. */
310
+ readonly gridReady: EventEmitter<Grid>;
311
+ /** Fired as the grid is torn down, before it is destroyed. */
312
+ readonly gridDestroyed: EventEmitter<void>;
313
+ /** The grid's `ready` event. */
314
+ readonly ready: EventEmitter<GridEvent>;
315
+ /** The grid's `destroy` event. */
316
+ readonly destroy: EventEmitter<GridEvent>;
317
+ /** The grid's `render:first` event. */
318
+ readonly renderFirst: EventEmitter<GridEvent>;
319
+ /** The grid's `render:done` event. */
320
+ readonly renderDone: EventEmitter<GridEvent>;
321
+ /** The grid's `config:changed` event. */
322
+ readonly configChanged: EventEmitter<GridEvent>;
323
+ /** The grid's `licence:changed` event. */
324
+ readonly licenceChanged: EventEmitter<GridEvent>;
325
+ /** The grid's `model:changed` event. */
326
+ readonly modelChanged: EventEmitter<GridEvent>;
327
+ /** The grid's `rows:changed` event. */
328
+ readonly rowsChanged: EventEmitter<GridEvent>;
329
+ /** The grid's `rows:queued` event. */
330
+ readonly rowsQueued: EventEmitter<GridEvent>;
331
+ /** The grid's `rows:deferred` event. */
332
+ readonly rowsDeferred: EventEmitter<GridEvent>;
333
+ /** The grid's `rows:paused` event. */
334
+ readonly rowsPaused: EventEmitter<GridEvent>;
335
+ /** The grid's `rows:resumed` event. */
336
+ readonly rowsResumed: EventEmitter<GridEvent>;
337
+ /** The grid's `row:received` event. */
338
+ readonly rowReceived: EventEmitter<GridEvent>;
339
+ /** The grid's `row:sent` event. */
340
+ readonly rowSent: EventEmitter<GridEvent>;
341
+ /** The grid's `row:copied` event. */
342
+ readonly rowCopied: EventEmitter<GridEvent>;
343
+ /** The grid's `row:moved` event. */
344
+ readonly rowMoved: EventEmitter<GridEvent>;
345
+ /** The grid's `source:error` event. */
346
+ readonly sourceError: EventEmitter<GridEvent>;
347
+ /** The grid's `stream:chunk` event. */
348
+ readonly streamChunk: EventEmitter<GridEvent>;
349
+ /** The grid's `stream:end` event. */
350
+ readonly streamEnd: EventEmitter<GridEvent>;
351
+ /** The grid's `stream:evicted` event. */
352
+ readonly streamEvicted: EventEmitter<GridEvent>;
353
+ /** The grid's `rowDrag:started` event. */
354
+ readonly rowDragStarted: EventEmitter<GridEvent>;
355
+ /** The grid's `rowDrag:moved` event. */
356
+ readonly rowDragMoved: EventEmitter<GridEvent>;
357
+ /** The grid's `rowDrag:left` event. */
358
+ readonly rowDragLeft: EventEmitter<GridEvent>;
359
+ /** The grid's `rowDrag:ended` event. */
360
+ readonly rowDragEnded: EventEmitter<GridEvent>;
361
+ /** The grid's `cell:changed` event. */
362
+ readonly cellChanged: EventEmitter<GridEvent>;
363
+ /** The grid's `cell:pending` event. */
364
+ readonly cellPending: EventEmitter<GridEvent>;
365
+ /** The grid's `cell:confirmed` event. */
366
+ readonly cellConfirmed: EventEmitter<GridEvent>;
367
+ /** The grid's `cell:reverted` event. */
368
+ readonly cellReverted: EventEmitter<GridEvent>;
369
+ /** The grid's `cell:conflict` event. */
370
+ readonly cellConflict: EventEmitter<GridEvent>;
371
+ /** The grid's `cell:clicked` event. */
372
+ readonly cellClicked: EventEmitter<GridEvent>;
373
+ /** The grid's `cell:dblclicked` event. */
374
+ readonly cellDblclicked: EventEmitter<GridEvent>;
375
+ /** The grid's `cell:contextmenu` event. */
376
+ readonly cellContextmenu: EventEmitter<GridEvent>;
377
+ /** The grid's `cell:mouseover` event. */
378
+ readonly cellMouseover: EventEmitter<GridEvent>;
379
+ /** The grid's `cell:mouseout` event. */
380
+ readonly cellMouseout: EventEmitter<GridEvent>;
381
+ /** The grid's `cell:mousedown` event. */
382
+ readonly cellMousedown: EventEmitter<GridEvent>;
383
+ /** The grid's `cell:mouseup` event. */
384
+ readonly cellMouseup: EventEmitter<GridEvent>;
385
+ /** The grid's `cell:edit:start` event. */
386
+ readonly cellEditStart: EventEmitter<GridEvent>;
387
+ /** The grid's `cell:edit:end` event. */
388
+ readonly cellEditEnd: EventEmitter<GridEvent>;
389
+ /** The grid's `row:edit:start` event. */
390
+ readonly rowEditStart: EventEmitter<GridEvent>;
391
+ /** The grid's `row:edit:end` event. */
392
+ readonly rowEditEnd: EventEmitter<GridEvent>;
393
+ /** The grid's `row:clicked` event. */
394
+ readonly rowClicked: EventEmitter<GridEvent>;
395
+ /** The grid's `row:dblclicked` event. */
396
+ readonly rowDblclicked: EventEmitter<GridEvent>;
397
+ /** The grid's `row:pending` event. */
398
+ readonly rowPending: EventEmitter<GridEvent>;
399
+ /** The grid's `row:confirmed` event. */
400
+ readonly rowConfirmed: EventEmitter<GridEvent>;
401
+ /** The grid's `row:reverted` event. */
402
+ readonly rowReverted: EventEmitter<GridEvent>;
403
+ /** The grid's `row:conflict` event. */
404
+ readonly rowConflict: EventEmitter<GridEvent>;
405
+ /** The grid's `form:opened` event. */
406
+ readonly formOpened: EventEmitter<GridEvent>;
407
+ /** The grid's `form:closed` event. */
408
+ readonly formClosed: EventEmitter<GridEvent>;
409
+ /** The grid's `form:saved` event. */
410
+ readonly formSaved: EventEmitter<GridEvent>;
411
+ /** The grid's `form:error` event. */
412
+ readonly formError: EventEmitter<GridEvent>;
413
+ /** The grid's `sort:changed` event. */
414
+ readonly sortChanged: EventEmitter<GridEvent>;
415
+ /** The grid's `filter:changed` event. */
416
+ readonly filterChanged: EventEmitter<GridEvent>;
417
+ /** The grid's `group:toggled` event. */
418
+ readonly groupToggled: EventEmitter<GridEvent>;
419
+ /** The grid's `facet:computed` event. */
420
+ readonly facetComputed: EventEmitter<GridEvent>;
421
+ /** The grid's `facet:filtered` event. */
422
+ readonly facetFiltered: EventEmitter<GridEvent>;
423
+ /** The grid's `facet:expanded` event. */
424
+ readonly facetExpanded: EventEmitter<GridEvent>;
425
+ /** The grid's `facet:failed` event. */
426
+ readonly facetFailed: EventEmitter<GridEvent>;
427
+ /** The grid's `column:moved` event. */
428
+ readonly columnMoved: EventEmitter<GridEvent>;
429
+ /** The grid's `column:resized` event. */
430
+ readonly columnResized: EventEmitter<GridEvent>;
431
+ /** The grid's `column:visible` event. */
432
+ readonly columnVisible: EventEmitter<GridEvent>;
433
+ /** The grid's `column:pinned` event. */
434
+ readonly columnPinned: EventEmitter<GridEvent>;
435
+ /** The grid's `column:grouped` event. */
436
+ readonly columnGrouped: EventEmitter<GridEvent>;
437
+ /** The grid's `column:pivoted` event. */
438
+ readonly columnPivoted: EventEmitter<GridEvent>;
439
+ /** The grid's `column:filter:open` event. */
440
+ readonly columnFilterOpen: EventEmitter<GridEvent>;
441
+ /** The grid's `column:profile:open` event. */
442
+ readonly columnProfileOpen: EventEmitter<GridEvent>;
443
+ /** The grid's `column:menu:open` event. */
444
+ readonly columnMenuOpen: EventEmitter<GridEvent>;
445
+ /** The grid's `columns:changed` event. */
446
+ readonly columnsChanged: EventEmitter<GridEvent>;
447
+ /** The grid's `columns:tagged` event. */
448
+ readonly columnsTagged: EventEmitter<GridEvent>;
449
+ /** The grid's `columngroup:changed` event. */
450
+ readonly columngroupChanged: EventEmitter<GridEvent>;
451
+ /** The grid's `header:contextmenu` event. */
452
+ readonly headerContextmenu: EventEmitter<GridEvent>;
453
+ /** The grid's `pivot:drill` event. */
454
+ readonly pivotDrill: EventEmitter<GridEvent>;
455
+ /** The grid's `selection:changed` event. */
456
+ readonly selectionChanged: EventEmitter<GridEvent>;
457
+ /** The grid's `range:changed` event. */
458
+ readonly rangeChanged: EventEmitter<GridEvent>;
459
+ /** The grid's `clipboard:copy` event. */
460
+ readonly clipboardCopy: EventEmitter<GridEvent>;
461
+ /** The grid's `page:changed` event. */
462
+ readonly pageChanged: EventEmitter<GridEvent>;
463
+ /** The grid's `scroll` event. */
464
+ readonly scroll: EventEmitter<GridEvent>;
465
+ /** The grid's `scroll:end` event. */
466
+ readonly scrollEnd: EventEmitter<GridEvent>;
467
+ /** The grid's `size:changed` event. */
468
+ readonly sizeChanged: EventEmitter<GridEvent>;
469
+ /** The grid's `detail:toggled` event. */
470
+ readonly detailToggled: EventEmitter<GridEvent>;
471
+ /** The grid's `toolpanel:focus` event. */
472
+ readonly toolpanelFocus: EventEmitter<GridEvent>;
473
+ /** The grid's `highlight:changed` event. */
474
+ readonly highlightChanged: EventEmitter<GridEvent>;
475
+ /** The grid's `find:changed` event. */
476
+ readonly findChanged: EventEmitter<GridEvent>;
477
+ /** The grid's `tree:loading` event. */
478
+ readonly treeLoading: EventEmitter<GridEvent>;
479
+ /** The grid's `tree:loaded` event. */
480
+ readonly treeLoaded: EventEmitter<GridEvent>;
481
+ /** The grid's `tree:loadFailed` event. */
482
+ readonly treeLoadFailed: EventEmitter<GridEvent>;
483
+ /** The grid's `tree:loadAborted` event. */
484
+ readonly treeLoadAborted: EventEmitter<GridEvent>;
485
+ /** The grid's `state:changed` event. */
486
+ readonly stateChanged: EventEmitter<GridEvent>;
487
+ /** The grid's `state:reset` event. */
488
+ readonly stateReset: EventEmitter<GridEvent>;
489
+ /** The grid's `history:changed` event. */
490
+ readonly historyChanged: EventEmitter<GridEvent>;
491
+ /** The grid's `history:applied` event. */
492
+ readonly historyApplied: EventEmitter<GridEvent>;
493
+ /** The grid's `views:changed` event. */
494
+ readonly viewsChanged: EventEmitter<GridEvent>;
495
+ /** The grid's `view:applied` event. */
496
+ readonly viewApplied: EventEmitter<GridEvent>;
497
+ /** The grid's `view:saved` event. */
498
+ readonly viewSaved: EventEmitter<GridEvent>;
499
+ /** The grid's `view:removed` event. */
500
+ readonly viewRemoved: EventEmitter<GridEvent>;
501
+ /** The grid's `view:renamed` event. */
502
+ readonly viewRenamed: EventEmitter<GridEvent>;
503
+ /** The grid's `view:default` event. */
504
+ readonly viewDefault: EventEmitter<GridEvent>;
505
+ /** The grid's `formatting:changed` event. */
506
+ readonly formattingChanged: EventEmitter<GridEvent>;
507
+ /** The grid's `redaction:changed` event. */
508
+ readonly redactionChanged: EventEmitter<GridEvent>;
509
+ /** The grid's `permissions:changed` event. */
510
+ readonly permissionsChanged: EventEmitter<GridEvent>;
511
+ /** The grid's `presentation:changed` event. */
512
+ readonly presentationChanged: EventEmitter<GridEvent>;
513
+ /** The grid's `presentation:started` event. */
514
+ readonly presentationStarted: EventEmitter<GridEvent>;
515
+ /** The grid's `presentation:ended` event. */
516
+ readonly presentationEnded: EventEmitter<GridEvent>;
517
+ /** The grid's `presentation:view` event. */
518
+ readonly presentationView: EventEmitter<GridEvent>;
519
+ /** The grid's `presentation:scale` event. */
520
+ readonly presentationScale: EventEmitter<GridEvent>;
521
+ /** The grid's `presentation:spotlight` event. */
522
+ readonly presentationSpotlight: EventEmitter<GridEvent>;
523
+ /** The grid's `presentation:captured` event. */
524
+ readonly presentationCaptured: EventEmitter<GridEvent>;
525
+ /** The grid's `comment:added` event. */
526
+ readonly commentAdded: EventEmitter<GridEvent>;
527
+ /** The grid's `comment:edited` event. */
528
+ readonly commentEdited: EventEmitter<GridEvent>;
529
+ /** The grid's `comment:deleted` event. */
530
+ readonly commentDeleted: EventEmitter<GridEvent>;
531
+ /** The grid's `comment:failed` event. */
532
+ readonly commentFailed: EventEmitter<GridEvent>;
533
+ /** The grid's `comment:resolved` event. */
534
+ readonly commentResolved: EventEmitter<GridEvent>;
535
+ /** The grid's `comment:unresolved` event. */
536
+ readonly commentUnresolved: EventEmitter<GridEvent>;
537
+ /** The grid's `comment:threadOpened` event. */
538
+ readonly commentThreadOpened: EventEmitter<GridEvent>;
539
+ /** The grid's `comment:threadClosed` event. */
540
+ readonly commentThreadClosed: EventEmitter<GridEvent>;
541
+ /** The grid's `comment:indexLoaded` event. */
542
+ readonly commentIndexLoaded: EventEmitter<GridEvent>;
543
+ /** The grid's `presence:published` event. */
544
+ readonly presencePublished: EventEmitter<GridEvent>;
545
+ /** The grid's `presence:joined` event. */
546
+ readonly presenceJoined: EventEmitter<GridEvent>;
547
+ /** The grid's `presence:updated` event. */
548
+ readonly presenceUpdated: EventEmitter<GridEvent>;
549
+ /** The grid's `presence:left` event. */
550
+ readonly presenceLeft: EventEmitter<GridEvent>;
551
+ /** The grid's `presence:failed` event. */
552
+ readonly presenceFailed: EventEmitter<GridEvent>;
553
+ /** The grid's `presence:lockRefused` event. */
554
+ readonly presenceLockRefused: EventEmitter<GridEvent>;
555
+ /** The grid's `diff:changed` event. */
556
+ readonly diffChanged: EventEmitter<GridEvent>;
557
+ /** The grid's `diff:swapped` event. */
558
+ readonly diffSwapped: EventEmitter<GridEvent>;
559
+ /** The grid's `timeline:attached` event. */
560
+ readonly timelineAttached: EventEmitter<GridEvent>;
561
+ /** The grid's `timeline:detached` event. */
562
+ readonly timelineDetached: EventEmitter<GridEvent>;
563
+ /** The grid's `timeline:seek` event. */
564
+ readonly timelineSeek: EventEmitter<GridEvent>;
565
+ /** The grid's `timeline:seeking` event. */
566
+ readonly timelineSeeking: EventEmitter<GridEvent>;
567
+ /** The grid's `annotation:changed` event. */
568
+ readonly annotationChanged: EventEmitter<GridEvent>;
569
+ /** The grid's `validation:failed` event. */
570
+ readonly validationFailed: EventEmitter<GridEvent>;
571
+ /** The grid's `validation:cleared` event. */
572
+ readonly validationCleared: EventEmitter<GridEvent>;
573
+ /** The grid's `export:progress` event. */
574
+ readonly exportProgress: EventEmitter<GridEvent>;
575
+ /** The grid's `export:request` event. */
576
+ readonly exportRequest: EventEmitter<GridEvent>;
577
+ /** The grid's `export:done` event. */
578
+ readonly exportDone: EventEmitter<GridEvent>;
579
+ /** The grid's `shortcuts:opened` event. */
580
+ readonly shortcutsOpened: EventEmitter<GridEvent>;
581
+ /** The grid's `shortcuts:closed` event. */
582
+ readonly shortcutsClosed: EventEmitter<GridEvent>;
583
+ /** The grid's `print:before` event. */
584
+ readonly printBefore: EventEmitter<GridEvent>;
585
+ /** The grid's `print:after` event. */
586
+ readonly printAfter: EventEmitter<GridEvent>;
587
+ /** The grid's `beforeEdit` event. */
588
+ readonly beforeEdit: EventEmitter<GridEvent>;
589
+ /** The grid's `beforeSort` event. */
590
+ readonly beforeSort: EventEmitter<GridEvent>;
591
+ /** The grid's `beforeFilter` event. */
592
+ readonly beforeFilter: EventEmitter<GridEvent>;
593
+ /** The grid's `beforeColumnMove` event. */
594
+ readonly beforeColumnMove: EventEmitter<GridEvent>;
595
+ /** The grid's `beforeColumnResize` event. */
596
+ readonly beforeColumnResize: EventEmitter<GridEvent>;
597
+ /** The grid's `beforeColumnHide` event. */
598
+ readonly beforeColumnHide: EventEmitter<GridEvent>;
599
+ /** The grid's `beforeSelect` event. */
600
+ readonly beforeSelect: EventEmitter<GridEvent>;
601
+ /** The grid's `beforeRowAdd` event. */
602
+ readonly beforeRowAdd: EventEmitter<GridEvent>;
603
+ /** The grid's `beforeDelete` event. */
604
+ readonly beforeDelete: EventEmitter<GridEvent>;
605
+ /** The grid's `beforeRowMove` event. */
606
+ readonly beforeRowMove: EventEmitter<GridEvent>;
607
+ /** The grid's `beforeGroup` event. */
608
+ readonly beforeGroup: EventEmitter<GridEvent>;
609
+ /** The grid's `beforeRowReceive` event. */
610
+ readonly beforeRowReceive: EventEmitter<GridEvent>;
611
+ /** The grid's `edit:cancelled` event. */
612
+ readonly editCancelled: EventEmitter<GridEvent>;
613
+ /** The grid's `sort:cancelled` event. */
614
+ readonly sortCancelled: EventEmitter<GridEvent>;
615
+ /** The grid's `filter:cancelled` event. */
616
+ readonly filterCancelled: EventEmitter<GridEvent>;
617
+ /** The grid's `columnMove:cancelled` event. */
618
+ readonly columnMoveCancelled: EventEmitter<GridEvent>;
619
+ /** The grid's `columnResize:cancelled` event. */
620
+ readonly columnResizeCancelled: EventEmitter<GridEvent>;
621
+ /** The grid's `columnHide:cancelled` event. */
622
+ readonly columnHideCancelled: EventEmitter<GridEvent>;
623
+ /** The grid's `selection:cancelled` event. */
624
+ readonly selectionCancelled: EventEmitter<GridEvent>;
625
+ /** The grid's `rowAdd:cancelled` event. */
626
+ readonly rowAddCancelled: EventEmitter<GridEvent>;
627
+ /** The grid's `delete:cancelled` event. */
628
+ readonly deleteCancelled: EventEmitter<GridEvent>;
629
+ /** The grid's `rowMove:cancelled` event. */
630
+ readonly rowMoveCancelled: EventEmitter<GridEvent>;
631
+ /** The grid's `group:cancelled` event. */
632
+ readonly groupCancelled: EventEmitter<GridEvent>;
633
+ /** The grid's `rowReceive:cancelled` event. */
634
+ readonly rowReceiveCancelled: EventEmitter<GridEvent>;
635
+ /** Wire one forwarder per grid event and arm the build for the next render. */
636
+ constructor();
637
+ /** The live grid, or null before the first render and after destroy. */
638
+ get grid(): Grid | null;
639
+ /**
640
+ * The props the shared controller is driven with: the configuration object,
641
+ * whichever imperative inputs are set, and the event forwarders.
642
+ * @returns the props bag
643
+ */
644
+ private props;
645
+ /**
646
+ * Build the grid, publish it, attach it to the router and announce it.
647
+ *
648
+ * Runs once, after the first render, and never again: the guard is the
649
+ * controller itself rather than a module-level flag, so a genuine remount
650
+ * (an `@if` that closes and opens again builds a *new component*) still
651
+ * builds a new grid.
652
+ *
653
+ * @returns nothing
654
+ */
655
+ private build;
656
+ /**
657
+ * Push changed inputs into the live grid.
658
+ *
659
+ * Fires before the first render too, when there is no grid yet; the initial
660
+ * values are read by {@link build} instead, so nothing is applied twice and
661
+ * nothing is lost.
662
+ *
663
+ * @returns nothing
664
+ */
665
+ ngOnChanges(): void;
666
+ /**
667
+ * Register what is new, and remove by name whatever has gone.
668
+ * @param grid the grid to apply them to
669
+ * @param next the predicates now
670
+ * @param previous the predicates before
671
+ * @returns nothing
672
+ */
673
+ private applyPredicates;
674
+ /**
675
+ * Withdraw the grid, detach it from the router and destroy it — in that
676
+ * order, so the router never holds a dead grid.
677
+ * @returns nothing
678
+ */
679
+ ngOnDestroy(): void;
680
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeGridBase<any>, never>;
681
+ static ɵdir: i0.ɵɵDirectiveDeclaration<LatticeGridBase<any>, never, never, { "config": { "alias": "config"; "required": false; }; "sort": { "alias": "sort"; "required": false; }; "filters": { "alias": "filters"; "required": false; }; "quickFilter": { "alias": "quickFilter"; "required": false; }; "selectedKeys": { "alias": "selectedKeys"; "required": false; }; "rowUpdates": { "alias": "rowUpdates"; "required": false; }; "predicates": { "alias": "predicates"; "required": false; }; "name": { "alias": "name"; "required": false; }; "route": { "alias": "route"; "required": false; }; "routeOptions": { "alias": "routeOptions"; "required": false; }; }, { "gridReady": "grid-ready"; "gridDestroyed": "grid-destroyed"; "ready": "ready"; "destroy": "destroy"; "renderFirst": "render-first"; "renderDone": "render-done"; "configChanged": "config-changed"; "licenceChanged": "licence-changed"; "modelChanged": "model-changed"; "rowsChanged": "rows-changed"; "rowsQueued": "rows-queued"; "rowsDeferred": "rows-deferred"; "rowsPaused": "rows-paused"; "rowsResumed": "rows-resumed"; "rowReceived": "row-received"; "rowSent": "row-sent"; "rowCopied": "row-copied"; "rowMoved": "row-moved"; "sourceError": "source-error"; "streamChunk": "stream-chunk"; "streamEnd": "stream-end"; "streamEvicted": "stream-evicted"; "rowDragStarted": "rowDrag-started"; "rowDragMoved": "rowDrag-moved"; "rowDragLeft": "rowDrag-left"; "rowDragEnded": "rowDrag-ended"; "cellChanged": "cell-changed"; "cellPending": "cell-pending"; "cellConfirmed": "cell-confirmed"; "cellReverted": "cell-reverted"; "cellConflict": "cell-conflict"; "cellClicked": "cell-clicked"; "cellDblclicked": "cell-dblclicked"; "cellContextmenu": "cell-contextmenu"; "cellMouseover": "cell-mouseover"; "cellMouseout": "cell-mouseout"; "cellMousedown": "cell-mousedown"; "cellMouseup": "cell-mouseup"; "cellEditStart": "cell-edit-start"; "cellEditEnd": "cell-edit-end"; "rowEditStart": "row-edit-start"; "rowEditEnd": "row-edit-end"; "rowClicked": "row-clicked"; "rowDblclicked": "row-dblclicked"; "rowPending": "row-pending"; "rowConfirmed": "row-confirmed"; "rowReverted": "row-reverted"; "rowConflict": "row-conflict"; "formOpened": "form-opened"; "formClosed": "form-closed"; "formSaved": "form-saved"; "formError": "form-error"; "sortChanged": "sort-changed"; "filterChanged": "filter-changed"; "groupToggled": "group-toggled"; "facetComputed": "facet-computed"; "facetFiltered": "facet-filtered"; "facetExpanded": "facet-expanded"; "facetFailed": "facet-failed"; "columnMoved": "column-moved"; "columnResized": "column-resized"; "columnVisible": "column-visible"; "columnPinned": "column-pinned"; "columnGrouped": "column-grouped"; "columnPivoted": "column-pivoted"; "columnFilterOpen": "column-filter-open"; "columnProfileOpen": "column-profile-open"; "columnMenuOpen": "column-menu-open"; "columnsChanged": "columns-changed"; "columnsTagged": "columns-tagged"; "columngroupChanged": "columngroup-changed"; "headerContextmenu": "header-contextmenu"; "pivotDrill": "pivot-drill"; "selectionChanged": "selection-changed"; "rangeChanged": "range-changed"; "clipboardCopy": "clipboard-copy"; "pageChanged": "page-changed"; "scroll": "scroll"; "scrollEnd": "scroll-end"; "sizeChanged": "size-changed"; "detailToggled": "detail-toggled"; "toolpanelFocus": "toolpanel-focus"; "highlightChanged": "highlight-changed"; "findChanged": "find-changed"; "treeLoading": "tree-loading"; "treeLoaded": "tree-loaded"; "treeLoadFailed": "tree-loadFailed"; "treeLoadAborted": "tree-loadAborted"; "stateChanged": "state-changed"; "stateReset": "state-reset"; "historyChanged": "history-changed"; "historyApplied": "history-applied"; "viewsChanged": "views-changed"; "viewApplied": "view-applied"; "viewSaved": "view-saved"; "viewRemoved": "view-removed"; "viewRenamed": "view-renamed"; "viewDefault": "view-default"; "formattingChanged": "formatting-changed"; "redactionChanged": "redaction-changed"; "permissionsChanged": "permissions-changed"; "presentationChanged": "presentation-changed"; "presentationStarted": "presentation-started"; "presentationEnded": "presentation-ended"; "presentationView": "presentation-view"; "presentationScale": "presentation-scale"; "presentationSpotlight": "presentation-spotlight"; "presentationCaptured": "presentation-captured"; "commentAdded": "comment-added"; "commentEdited": "comment-edited"; "commentDeleted": "comment-deleted"; "commentFailed": "comment-failed"; "commentResolved": "comment-resolved"; "commentUnresolved": "comment-unresolved"; "commentThreadOpened": "comment-threadOpened"; "commentThreadClosed": "comment-threadClosed"; "commentIndexLoaded": "comment-indexLoaded"; "presencePublished": "presence-published"; "presenceJoined": "presence-joined"; "presenceUpdated": "presence-updated"; "presenceLeft": "presence-left"; "presenceFailed": "presence-failed"; "presenceLockRefused": "presence-lockRefused"; "diffChanged": "diff-changed"; "diffSwapped": "diff-swapped"; "timelineAttached": "timeline-attached"; "timelineDetached": "timeline-detached"; "timelineSeek": "timeline-seek"; "timelineSeeking": "timeline-seeking"; "annotationChanged": "annotation-changed"; "validationFailed": "validation-failed"; "validationCleared": "validation-cleared"; "exportProgress": "export-progress"; "exportRequest": "export-request"; "exportDone": "export-done"; "shortcutsOpened": "shortcuts-opened"; "shortcutsClosed": "shortcuts-closed"; "printBefore": "print-before"; "printAfter": "print-after"; "beforeEdit": "beforeEdit"; "beforeSort": "beforeSort"; "beforeFilter": "beforeFilter"; "beforeColumnMove": "beforeColumnMove"; "beforeColumnResize": "beforeColumnResize"; "beforeColumnHide": "beforeColumnHide"; "beforeSelect": "beforeSelect"; "beforeRowAdd": "beforeRowAdd"; "beforeDelete": "beforeDelete"; "beforeRowMove": "beforeRowMove"; "beforeGroup": "beforeGroup"; "beforeRowReceive": "beforeRowReceive"; "editCancelled": "edit-cancelled"; "sortCancelled": "sort-cancelled"; "filterCancelled": "filter-cancelled"; "columnMoveCancelled": "columnMove-cancelled"; "columnResizeCancelled": "columnResize-cancelled"; "columnHideCancelled": "columnHide-cancelled"; "selectionCancelled": "selection-cancelled"; "rowAddCancelled": "rowAdd-cancelled"; "deleteCancelled": "delete-cancelled"; "rowMoveCancelled": "rowMove-cancelled"; "groupCancelled": "group-cancelled"; "rowReceiveCancelled": "rowReceive-cancelled"; }, never, never, true, never>;
682
+ }
683
+ /**
684
+ * The grid as a standalone component: `<lattice-grid [config]="config" />`.
685
+ *
686
+ * The host element *is* the grid's container, so give it a height — a grid in
687
+ * a box with no height renders no rows, in every framework.
688
+ */
689
+ declare class LatticeGridComponent<TRow = unknown> extends LatticeGridBase<TRow> {
690
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeGridComponent<any>, never>;
691
+ static ɵcmp: i0.ɵɵComponentDeclaration<LatticeGridComponent<any>, "lattice-grid", never, {}, {}, never, never, true, never>;
692
+ }
693
+ /**
694
+ * The grid as a directive on an element the template already owns:
695
+ * `<div [latticeGrid]="config" class="tall"></div>`.
696
+ *
697
+ * The configuration binds through the selector itself, which is what a reader
698
+ * writing that line expects; `[config]` works too, and every other input,
699
+ * output and the `grid` reference are the component's.
700
+ */
701
+ declare class LatticeGridDirective<TRow = unknown> extends LatticeGridBase<TRow> {
702
+ /**
703
+ * The grid configuration, bound through the directive's own selector.
704
+ * @param config the configuration
705
+ */
706
+ set latticeGrid(config: LatticeGridConfig<TRow> | '');
707
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeGridDirective<any>, never>;
708
+ static ɵdir: i0.ɵɵDirectiveDeclaration<LatticeGridDirective<any>, "[latticeGrid]", never, { "latticeGrid": { "alias": "latticeGrid"; "required": false; }; }, {}, never, never, true, never>;
709
+ }
710
+
711
+ /**
712
+ * The typed seam over the framework-free adapter sources.
713
+ *
714
+ * `packages/modules/shared/adapter.js` (the grid lifecycle) and
715
+ * `packages/modules/react/viewers.js` (the viewer lifecycle and its tables) are
716
+ * the contract every Lattice adapter implements, and `DESIGN.md` beside the
717
+ * second one says each new adapter consumes them **unchanged** rather than
718
+ * transcribing them. `scripts/prepare-vendor.mjs` copies both — byte for byte —
719
+ * into `src/vendor/` at build time, because ng-packagr compiles this package
720
+ * from its own `src/` tree and cannot reach out of it.
721
+ *
722
+ * They are JavaScript with JSDoc, so everything they export arrives here
723
+ * loosely typed. This file is the one place that asserts a shape onto them, so
724
+ * the components above it are ordinary strict TypeScript and no `any` from a
725
+ * `.js` file ever reaches the public declarations.
726
+ */
727
+
728
+ /** Every event the grid declares, in declaration order. */
729
+ declare const EVENT_NAMES: readonly string[];
730
+ /** Every event each viewer emits, keyed by the viewer name this adapter uses. */
731
+ declare const VIEWER_EVENTS: Readonly<Record<string, readonly string[]>>;
732
+ /**
733
+ * The kebab-case name a template binds: `cell:edit:start` → `cell-edit-start`.
734
+ * @param event the grid or viewer event name
735
+ * @returns the dashed name an Angular template listens for
736
+ */
737
+ declare function dashedName(event: string): string;
738
+ /** A bag of bound values on their way into a viewer or the grid. */
739
+ type Props = Record<string, unknown>;
740
+
741
+ /**
742
+ * The payload of a viewer event.
743
+ *
744
+ * The grid declares `GridEvent`; the viewer modules do not declare their event
745
+ * payloads at all yet, so this is the honest type rather than a shape invented
746
+ * here that a template would then be type-checked against. One alias, so there
747
+ * is one place to narrow when the modules declare theirs.
748
+ */
749
+ type LatticeViewerEvent = any;
750
+ declare abstract class LatticeViewerBase<TInstance> implements OnChanges, OnDestroy {
751
+ /** Which viewer's tables in `viewers.js` drive this component. */
752
+ protected abstract readonly viewer: string;
753
+ /** The element name, for warnings and errors that name what to fix. */
754
+ protected abstract readonly label: string;
755
+ /** Whether this viewer cannot exist without a grid (a chart cannot). */
756
+ protected readonly requiresGrid: boolean;
757
+ /** Whether this viewer takes a grid at all (the layout does not). */
758
+ protected readonly takesGrid: boolean;
759
+ /**
760
+ * Whether this viewer adopts a grid published into the registry when the
761
+ * host binds none. The panel, the chart and the board do; the plan takes an
762
+ * explicit grid only, because a plan and a grid on one page are usually two
763
+ * different datasets.
764
+ */
765
+ protected readonly fromRegistry: boolean;
766
+ /** The host element the viewer is built into. */
767
+ protected readonly elementRef: ElementRef<HTMLElement>;
768
+ /** Angular's zone, or its no-op under zoneless change detection. */
769
+ protected readonly zone: NgZone;
770
+ /** Whether this is a browser; nothing is built on the server. */
771
+ private readonly isBrowser;
772
+ /** Where `<lattice-grid>` publishes itself. */
773
+ private readonly registry;
774
+ /** This component's injector, for the render hook. */
775
+ private readonly injector;
776
+ /** The explicit `[grid]` input, as a signal so the resolution is reactive. */
777
+ private readonly explicitGrid;
778
+ /** The `[gridName]` input, as a signal for the same reason. */
779
+ private readonly gridNameInput;
780
+ /** The live controller, or null while there is nothing mounted. */
781
+ private controller;
782
+ /** The grid the live viewer was built against, so a new one rebuilds it. */
783
+ private builtAgainst;
784
+ /** True once the first render has happened and the host element is in the page. */
785
+ private rendered;
786
+ /** Set by `ngOnDestroy`; nothing mounts after it. */
787
+ private torn;
788
+ /** One forwarder per viewer event, built at mount. */
789
+ private handlers;
790
+ /**
791
+ * The viewer's configuration object: every key its factory takes.
792
+ *
793
+ * Declared as `unknown` here and narrowed by each component to that module's
794
+ * own configuration type, which is what a template is checked against.
795
+ */
796
+ config?: unknown;
797
+ /** The grid this viewer reads, when it is not taken from the registry. */
798
+ grid?: Grid | null;
799
+ /** Which published grid to read, on a page with more than one. */
800
+ gridName?: string;
801
+ /** The live viewer, the moment it exists. */
802
+ readonly ready: EventEmitter<TInstance>;
803
+ /** Fired as the viewer is torn down, before it is destroyed. */
804
+ readonly destroyed: EventEmitter<void>;
805
+ /**
806
+ * The grid this viewer is bound to: the explicit input first, then whatever
807
+ * the registry has published under `gridName`.
808
+ */
809
+ protected readonly boundGrid: Signal<Grid | null>;
810
+ /** Watch the bound grid, and build once the host element is in the page. */
811
+ constructor();
812
+ /** The live viewer, or null before it is built and after it is destroyed. */
813
+ get instance(): TInstance | null;
814
+ /**
815
+ * Build the viewer. Each subclass resolves its own factory from the
816
+ * provided {@link LatticeFactories} and adapts the factory's call shape.
817
+ *
818
+ * @param element the host element
819
+ * @param config the configuration the controller assembled
820
+ * @returns the viewer instance
821
+ */
822
+ protected abstract mount(element: HTMLElement, config: Props): TInstance;
823
+ /**
824
+ * The inputs this viewer can take *live*, by the names `VIEWER_APPLY` uses.
825
+ * Everything else a subclass declares belongs in `config`.
826
+ * @returns the live props that are set
827
+ */
828
+ protected liveProps(): Props;
829
+ /**
830
+ * The whole props bag: configuration, live inputs, the bound grid and the
831
+ * event forwarders.
832
+ * @returns the props the controller is driven with
833
+ */
834
+ private props;
835
+ /**
836
+ * Build, rebuild or leave alone, whichever the current bindings call for.
837
+ * @returns nothing
838
+ */
839
+ private reconcile;
840
+ /**
841
+ * Push changed inputs into the live viewer, and re-resolve the bound grid.
842
+ * @returns nothing
843
+ */
844
+ ngOnChanges(): void;
845
+ /** Destroy the viewer with the component. */
846
+ ngOnDestroy(): void;
847
+ /**
848
+ * Announce and destroy whatever is mounted.
849
+ * @returns nothing
850
+ */
851
+ private teardown;
852
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeViewerBase<any>, never>;
853
+ static ɵdir: i0.ɵɵDirectiveDeclaration<LatticeViewerBase<any>, never, never, { "config": { "alias": "config"; "required": false; }; "grid": { "alias": "grid"; "required": false; }; "gridName": { "alias": "gridName"; "required": false; }; }, { "ready": "ready"; "destroyed": "destroyed"; }, never, never, true, never>;
854
+ }
855
+
856
+ /**
857
+ * The KPI panel, as an Angular component.
858
+ *
859
+ * Grid-bound by default: leave `[grid]` off and the panel takes whichever grid
860
+ * a `<lattice-grid>` published (`[gridName]` picks one on a page with several),
861
+ * the moment it appears. A panel with no grid holds rows instead — `[rows]` is
862
+ * a live input and the panel re-reads it on every change.
863
+ *
864
+ * <lattice-grid name="quakes" [config]="config" />
865
+ * <lattice-kpi gridName="quakes" [config]="{ tiles: TILES }" />
866
+ */
867
+
868
+ declare class LatticeKpiComponent<TRow = unknown> extends LatticeViewerBase<KPI> {
869
+ /** Which viewer's tables drive this component. */
870
+ protected readonly viewer = "kpi";
871
+ /** The element name, for anything this component has to report. */
872
+ protected readonly label = "lattice-kpi";
873
+ /** The factories the application provided. */
874
+ private readonly factories;
875
+ /** The panel's configuration: its tiles, formats and options. */
876
+ config?: KPIConfig;
877
+ /** The rows a panel that is not grid-bound aggregates. A live input. */
878
+ rows?: readonly TRow[];
879
+ /** The viewer's `tile:click` event. */
880
+ readonly tileClick: EventEmitter<any>;
881
+ /** The viewer's `tile:dblclick` event. */
882
+ readonly tileDblclick: EventEmitter<any>;
883
+ /** The viewer's `tile:contextmenu` event. */
884
+ readonly tileContextmenu: EventEmitter<any>;
885
+ /** The viewer's `node:toggle` event. */
886
+ readonly nodeToggle: EventEmitter<any>;
887
+ /** The viewer's `change` event. */
888
+ readonly change: EventEmitter<any>;
889
+ /**
890
+ * The live inputs, by the names the viewer tables use.
891
+ * @returns the live props that are set
892
+ */
893
+ protected liveProps(): Props;
894
+ /**
895
+ * Build the panel.
896
+ * @param element the host element
897
+ * @param config the assembled configuration
898
+ * @returns the panel
899
+ */
900
+ protected mount(element: HTMLElement, config: Props): KPI;
901
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeKpiComponent<any>, never>;
902
+ static ɵcmp: i0.ɵɵComponentDeclaration<LatticeKpiComponent<any>, "lattice-kpi", never, { "config": { "alias": "config"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; }, { "tileClick": "tile-click"; "tileDblclick": "tile-dblclick"; "tileContextmenu": "tile-contextmenu"; "nodeToggle": "node-toggle"; "change": "change"; }, never, never, true, never>;
903
+ }
904
+
905
+ /**
906
+ * A chart, as an Angular component.
907
+ *
908
+ * A chart is always built against a grid — it reads the grid's *current* rows,
909
+ * filtered and sorted as the reader left them — so nothing is mounted until a
910
+ * grid exists, and a different grid builds a new chart. Every other input is
911
+ * the chart spec, and a changed spec key goes straight into `chart.update()`:
912
+ * the chart redraws, it is not rebuilt.
913
+ *
914
+ * <lattice-grid name="quakes" [config]="config" />
915
+ * <lattice-chart gridName="quakes" [config]="{ type: 'bar', x: 'region', y: 'count' }" />
916
+ *
917
+ * `(click)`, `(hover)` and `(leave)` on this element are the *chart's* events,
918
+ * carrying the datum under the pointer — not the DOM events of the same name.
919
+ */
920
+
921
+ declare class LatticeChartComponent extends LatticeViewerBase<Chart> {
922
+ /** Which viewer's tables drive this component. */
923
+ protected readonly viewer = "chart";
924
+ /** The element name, for anything this component has to report. */
925
+ protected readonly label = "lattice-chart";
926
+ /** A chart cannot exist without a grid. */
927
+ protected readonly requiresGrid = true;
928
+ /** The factories the application provided. */
929
+ private readonly factories;
930
+ /** The chart specification, less the container this component supplies. */
931
+ config?: ChartConfig;
932
+ /** The viewer's `click` event. */
933
+ readonly click: EventEmitter<any>;
934
+ /** The viewer's `hover` event. */
935
+ readonly hover: EventEmitter<any>;
936
+ /** The viewer's `leave` event. */
937
+ readonly leave: EventEmitter<any>;
938
+ /** The viewer's `draw` event. */
939
+ readonly draw: EventEmitter<any>;
940
+ /** The viewer's `legend` event. */
941
+ readonly legend: EventEmitter<any>;
942
+ /**
943
+ * Build the chart. `createChart` takes one options bag with the container in
944
+ * it rather than `(element, config)`, so it is adapted here.
945
+ * @param element the host element
946
+ * @param config the assembled specification
947
+ * @returns the chart
948
+ */
949
+ protected mount(element: HTMLElement, config: Props): Chart;
950
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeChartComponent, never>;
951
+ static ɵcmp: i0.ɵɵComponentDeclaration<LatticeChartComponent, "lattice-chart", never, { "config": { "alias": "config"; "required": false; }; }, { "click": "click"; "hover": "hover"; "leave": "leave"; "draw": "draw"; "legend": "legend"; }, never, never, true, never>;
952
+ }
953
+
954
+ /**
955
+ * The board, as an Angular component.
956
+ *
957
+ * Grid-bound like the KPI panel: with no `[grid]` it takes the published one.
958
+ * Its rows, quick filter, sprint, epic, loading placeholder and error message
959
+ * are all live inputs — a changed value reaches the board that is already on
960
+ * screen, with its scroll position and its open cards intact.
961
+ */
962
+
963
+ declare class LatticeKanbanComponent<TRow = unknown> extends LatticeViewerBase<Kanban> {
964
+ /** Which viewer's tables drive this component. */
965
+ protected readonly viewer = "kanban";
966
+ /** The element name, for anything this component has to report. */
967
+ protected readonly label = "lattice-kanban";
968
+ /** The factories the application provided. */
969
+ private readonly factories;
970
+ /** The board's configuration: its columns, swimlanes, card renderer and rules. */
971
+ config?: KanbanConfig;
972
+ /** The cards. A live input. */
973
+ rows?: readonly TRow[];
974
+ /** The quick-filter text. A live input. */
975
+ quickFilter?: string;
976
+ /** The sprint in view; `undefined` clears the restriction. A live input. */
977
+ sprint?: unknown;
978
+ /** The epic in view. A live input. */
979
+ epic?: unknown;
980
+ /** Whether the board shows its loading placeholder. A live input. */
981
+ loading?: boolean;
982
+ /** An error message shown in place of the cards. A live input. */
983
+ error?: string | null;
984
+ /** The viewer's `card:click` event. */
985
+ readonly cardClick: EventEmitter<any>;
986
+ /** The viewer's `card:dblclick` event. */
987
+ readonly cardDblclick: EventEmitter<any>;
988
+ /** The viewer's `card:contextmenu` event. */
989
+ readonly cardContextmenu: EventEmitter<any>;
990
+ /** The viewer's `card:move` event. */
991
+ readonly cardMove: EventEmitter<any>;
992
+ /** The viewer's `card:reverted` event. */
993
+ readonly cardReverted: EventEmitter<any>;
994
+ /** The viewer's `card:confirmed` event. */
995
+ readonly cardConfirmed: EventEmitter<any>;
996
+ /** The viewer's `selection:changed` event. */
997
+ readonly selectionChanged: EventEmitter<any>;
998
+ /** The viewer's `column:collapse` event. */
999
+ readonly columnCollapse: EventEmitter<any>;
1000
+ /** The viewer's `card:add` event. */
1001
+ readonly cardAdd: EventEmitter<any>;
1002
+ /** The viewer's `drag:start` event. */
1003
+ readonly dragStart: EventEmitter<any>;
1004
+ /** The viewer's `drag:end` event. */
1005
+ readonly dragEnd: EventEmitter<any>;
1006
+ /** The viewer's `swimlane:collapse` event. */
1007
+ readonly swimlaneCollapse: EventEmitter<any>;
1008
+ /** The viewer's `swimlane:reorder` event. */
1009
+ readonly swimlaneReorder: EventEmitter<any>;
1010
+ /** The viewer's `column:reorder` event. */
1011
+ readonly columnReorder: EventEmitter<any>;
1012
+ /** The viewer's `filter:changed` event. */
1013
+ readonly filterChanged: EventEmitter<any>;
1014
+ /** The viewer's `sprint:changed` event. */
1015
+ readonly sprintChanged: EventEmitter<any>;
1016
+ /** The viewer's `epic:changed` event. */
1017
+ readonly epicChanged: EventEmitter<any>;
1018
+ /** The viewer's `card:expand` event. */
1019
+ readonly cardExpand: EventEmitter<any>;
1020
+ /** The viewer's `card:drill` event. */
1021
+ readonly cardDrill: EventEmitter<any>;
1022
+ /** The viewer's `card:edit` event. */
1023
+ readonly cardEdit: EventEmitter<any>;
1024
+ /** The viewer's `card:sla` event. */
1025
+ readonly cardSla: EventEmitter<any>;
1026
+ /** The viewer's `beforeMove` event. */
1027
+ readonly beforeMove: EventEmitter<any>;
1028
+ /** The viewer's `beforeAdd` event. */
1029
+ readonly beforeAdd: EventEmitter<any>;
1030
+ /** The viewer's `beforeEdit` event. */
1031
+ readonly beforeEdit: EventEmitter<any>;
1032
+ /** The viewer's `beforeLaneReorder` event. */
1033
+ readonly beforeLaneReorder: EventEmitter<any>;
1034
+ /** The viewer's `beforeColumnReorder` event. */
1035
+ readonly beforeColumnReorder: EventEmitter<any>;
1036
+ /** The viewer's `beforeColumnChange` event. */
1037
+ readonly beforeColumnChange: EventEmitter<any>;
1038
+ /** The viewer's `move:cancelled` event. */
1039
+ readonly moveCancelled: EventEmitter<any>;
1040
+ /** The viewer's `add:cancelled` event. */
1041
+ readonly addCancelled: EventEmitter<any>;
1042
+ /** The viewer's `edit:cancelled` event. */
1043
+ readonly editCancelled: EventEmitter<any>;
1044
+ /** The viewer's `laneReorder:cancelled` event. */
1045
+ readonly laneReorderCancelled: EventEmitter<any>;
1046
+ /** The viewer's `columnReorder:cancelled` event. */
1047
+ readonly columnReorderCancelled: EventEmitter<any>;
1048
+ /** The viewer's `columnChange:cancelled` event. */
1049
+ readonly columnChangeCancelled: EventEmitter<any>;
1050
+ /**
1051
+ * The live inputs, by the names the viewer tables use.
1052
+ * @returns the live props that are set
1053
+ */
1054
+ protected liveProps(): Props;
1055
+ /**
1056
+ * Build the board.
1057
+ * @param element the host element
1058
+ * @param config the assembled configuration
1059
+ * @returns the board
1060
+ */
1061
+ protected mount(element: HTMLElement, config: Props): Kanban;
1062
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeKanbanComponent<any>, never>;
1063
+ static ɵcmp: i0.ɵɵComponentDeclaration<LatticeKanbanComponent<any>, "lattice-kanban", never, { "config": { "alias": "config"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "quickFilter": { "alias": "quickFilter"; "required": false; }; "sprint": { "alias": "sprint"; "required": false; }; "epic": { "alias": "epic"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "error": { "alias": "error"; "required": false; }; }, { "cardClick": "card-click"; "cardDblclick": "card-dblclick"; "cardContextmenu": "card-contextmenu"; "cardMove": "card-move"; "cardReverted": "card-reverted"; "cardConfirmed": "card-confirmed"; "selectionChanged": "selection-changed"; "columnCollapse": "column-collapse"; "cardAdd": "card-add"; "dragStart": "drag-start"; "dragEnd": "drag-end"; "swimlaneCollapse": "swimlane-collapse"; "swimlaneReorder": "swimlane-reorder"; "columnReorder": "column-reorder"; "filterChanged": "filter-changed"; "sprintChanged": "sprint-changed"; "epicChanged": "epic-changed"; "cardExpand": "card-expand"; "cardDrill": "card-drill"; "cardEdit": "card-edit"; "cardSla": "card-sla"; "beforeMove": "beforeMove"; "beforeAdd": "beforeAdd"; "beforeEdit": "beforeEdit"; "beforeLaneReorder": "beforeLaneReorder"; "beforeColumnReorder": "beforeColumnReorder"; "beforeColumnChange": "beforeColumnChange"; "moveCancelled": "move-cancelled"; "addCancelled": "add-cancelled"; "editCancelled": "edit-cancelled"; "laneReorderCancelled": "laneReorder-cancelled"; "columnReorderCancelled": "columnReorder-cancelled"; "columnChangeCancelled": "columnChange-cancelled"; }, never, never, true, never>;
1064
+ }
1065
+
1066
+ /**
1067
+ * The plan, as an Angular component.
1068
+ *
1069
+ * `[tasks]` and `[dependencies]` are live inputs: a new array reaches the plan
1070
+ * on screen and it re-schedules, rather than being rebuilt. A plan that writes
1071
+ * back into a grid takes that grid through `[grid]` (or `config.grid`); unlike
1072
+ * the KPI panel and the board it does **not** adopt a published grid on its
1073
+ * own, because a plan and a grid on one page are usually two different datasets.
1074
+ */
1075
+
1076
+ declare class LatticeGanttComponent extends LatticeViewerBase<Gantt> {
1077
+ /** Which viewer's tables drive this component. */
1078
+ protected readonly viewer = "gantt";
1079
+ /** The element name, for anything this component has to report. */
1080
+ protected readonly label = "lattice-gantt";
1081
+ /** A plan takes an explicit grid, but never adopts a published one. */
1082
+ protected readonly fromRegistry = false;
1083
+ /** The factories the application provided. */
1084
+ private readonly factories;
1085
+ /** The plan's options: its calendar, resources, scheduling and columns. */
1086
+ config?: GanttConfig;
1087
+ /** The tasks. A live input. */
1088
+ tasks?: readonly unknown[];
1089
+ /** The dependencies between tasks. A live input. */
1090
+ dependencies?: readonly unknown[];
1091
+ /** The viewer's `schedule` event. */
1092
+ readonly schedule: EventEmitter<any>;
1093
+ /** The viewer's `error` event. */
1094
+ readonly error: EventEmitter<any>;
1095
+ /**
1096
+ * The live inputs, by the names the viewer tables use.
1097
+ * @returns the live props that are set
1098
+ */
1099
+ protected liveProps(): Props;
1100
+ /**
1101
+ * Build the plan. `createGantt` takes one options bag and mounts itself when
1102
+ * handed an `element`, so the host element is folded into the options.
1103
+ * @param element the host element
1104
+ * @param config the assembled options
1105
+ * @returns the plan
1106
+ */
1107
+ protected mount(element: HTMLElement, config: Props): Gantt;
1108
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeGanttComponent, never>;
1109
+ static ɵcmp: i0.ɵɵComponentDeclaration<LatticeGanttComponent, "lattice-gantt", never, { "config": { "alias": "config"; "required": false; }; "tasks": { "alias": "tasks"; "required": false; }; "dependencies": { "alias": "dependencies"; "required": false; }; }, { "schedule": "schedule"; "error": "error"; }, never, never, true, never>;
1110
+ }
1111
+
1112
+ /**
1113
+ * The layout, as an Angular component.
1114
+ *
1115
+ * The layout owns the windows inside it — it is the thing a grid, a chart and a
1116
+ * board are arranged *in* — so it takes no grid of its own, and everything but
1117
+ * its events is mount-time configuration.
1118
+ */
1119
+
1120
+ declare class LatticeLayoutComponent extends LatticeViewerBase<Layout> {
1121
+ /** Which viewer's tables drive this component. */
1122
+ protected readonly viewer = "layout";
1123
+ /** The element name, for anything this component has to report. */
1124
+ protected readonly label = "lattice-layout";
1125
+ /** The layout arranges viewers; it is not built against a grid. */
1126
+ protected readonly takesGrid = false;
1127
+ /** The factories the application provided. */
1128
+ private readonly factories;
1129
+ /** The layout's configuration: its windows and their arrangement. */
1130
+ config?: LayoutConfig;
1131
+ /** The viewer's `layout:changed` event. */
1132
+ readonly layoutChanged: EventEmitter<any>;
1133
+ /** The viewer's `window:moved` event. */
1134
+ readonly windowMoved: EventEmitter<any>;
1135
+ /** The viewer's `window:resized` event. */
1136
+ readonly windowResized: EventEmitter<any>;
1137
+ /** The viewer's `window:closed` event. */
1138
+ readonly windowClosed: EventEmitter<any>;
1139
+ /** The viewer's `beforeWindowClose` event. */
1140
+ readonly beforeWindowClose: EventEmitter<any>;
1141
+ /** The viewer's `windowClose:cancelled` event. */
1142
+ readonly windowCloseCancelled: EventEmitter<any>;
1143
+ /**
1144
+ * Build the layout.
1145
+ * @param element the host element
1146
+ * @param config the assembled configuration
1147
+ * @returns the layout
1148
+ */
1149
+ protected mount(element: HTMLElement, config: Props): Layout;
1150
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeLayoutComponent, never>;
1151
+ static ɵcmp: i0.ɵɵComponentDeclaration<LatticeLayoutComponent, "lattice-layout", never, { "config": { "alias": "config"; "required": false; }; }, { "layoutChanged": "layout-changed"; "windowMoved": "window-moved"; "windowResized": "window-resized"; "windowClosed": "window-closed"; "beforeWindowClose": "beforeWindowClose"; "windowCloseCancelled": "windowClose-cancelled"; }, never, never, true, never>;
1152
+ }
1153
+
1154
+ /**
1155
+ * One tab's content: `<ng-template latticeTab="all">…</ng-template>`.
1156
+ *
1157
+ * The id matches the `id` of a descriptor in the strip's `[tabs]` array.
1158
+ */
1159
+ declare class LatticeTabDirective {
1160
+ /** The template this directive is on. */
1161
+ readonly template: TemplateRef<unknown>;
1162
+ /** The id of the tab this template fills. */
1163
+ tabId: string;
1164
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeTabDirective, never>;
1165
+ static ɵdir: i0.ɵɵDirectiveDeclaration<LatticeTabDirective, "ng-template[latticeTab]", never, { "tabId": { "alias": "latticeTab"; "required": false; }; }, {}, never, never, true, never>;
1166
+ }
1167
+ declare class LatticeTabsComponent implements OnChanges, OnDestroy {
1168
+ /** The host element; the strip is built into the div inside it. */
1169
+ private readonly elementRef;
1170
+ /** Angular's zone, or its no-op under zoneless change detection. */
1171
+ private readonly zone;
1172
+ /** Whether this is a browser; nothing is built on the server. */
1173
+ private readonly isBrowser;
1174
+ /** The factories the application provided. */
1175
+ private readonly factories;
1176
+ /** Where the tab content's views are created, so they stay in the Angular tree. */
1177
+ private readonly viewContainer;
1178
+ /** This component's injector, for the render hook. */
1179
+ private readonly injector;
1180
+ /** The live strip, or null before the first render and after destroy. */
1181
+ private strip;
1182
+ /** Set by `ngOnDestroy`; nothing mounts after it. */
1183
+ private torn;
1184
+ /** The `tabs` array the strip was built from, compared by identity. */
1185
+ private builtFrom;
1186
+ /** The unsubscribe functions for the strip's events. */
1187
+ private off;
1188
+ /** The view rendered for each content tab, by tab id. */
1189
+ private readonly views;
1190
+ /** The content templates the host declared, one per tab id. */
1191
+ templates?: QueryList<LatticeTabDirective>;
1192
+ /** The strip's configuration, less its tabs. */
1193
+ config?: TabsConfig;
1194
+ /** The tab descriptors: id, label, badge and whatever else the module takes. */
1195
+ tabs?: readonly Record<string, unknown>[];
1196
+ /** The open tab. The one live input. */
1197
+ active?: string;
1198
+ /** The live strip, the moment it exists. */
1199
+ readonly ready: EventEmitter<Tabs>;
1200
+ /** Fired as the strip is torn down, before it is destroyed. */
1201
+ readonly destroyed: EventEmitter<void>;
1202
+ /** The strip's `beforeTabChange` event, which a host may cancel. */
1203
+ readonly beforeTabChange: EventEmitter<any>;
1204
+ /** The strip's `tab:changed` event. */
1205
+ readonly tabChanged: EventEmitter<any>;
1206
+ /** The strip's `tabChange:cancelled` event. */
1207
+ readonly tabChangeCancelled: EventEmitter<any>;
1208
+ /** Build the strip once the host element is in the page. */
1209
+ constructor();
1210
+ /** The live strip, or null before it is built and after it is destroyed. */
1211
+ get instance(): Tabs | null;
1212
+ /**
1213
+ * The template a tab's content comes from, if the host declared one.
1214
+ * @param id the tab id
1215
+ * @returns the directive, or undefined
1216
+ */
1217
+ private templateFor;
1218
+ /**
1219
+ * Render one tab's content into the panel element the module created.
1220
+ *
1221
+ * The view is created in this component's view container — so it belongs to
1222
+ * the Angular tree, with this component's injector above it — and its root
1223
+ * nodes are then moved into the module's element.
1224
+ *
1225
+ * @param id the tab id
1226
+ * @param template the content template
1227
+ * @param body the element the module made for this tab's content
1228
+ * @returns the module's handle for what lives in that element
1229
+ */
1230
+ private renderInto;
1231
+ /**
1232
+ * Build the strip: the descriptors, the module, its events.
1233
+ * @returns nothing
1234
+ */
1235
+ private build;
1236
+ /**
1237
+ * Apply the open tab, and name a `tabs` array the module cannot take.
1238
+ * @returns nothing
1239
+ */
1240
+ ngOnChanges(): void;
1241
+ /** Destroy the strip, and every view rendered into it, with the component. */
1242
+ ngOnDestroy(): void;
1243
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeTabsComponent, never>;
1244
+ static ɵcmp: i0.ɵɵComponentDeclaration<LatticeTabsComponent, "lattice-tabs", never, { "config": { "alias": "config"; "required": false; }; "tabs": { "alias": "tabs"; "required": false; }; "active": { "alias": "active"; "required": false; }; }, { "ready": "ready"; "destroyed": "destroyed"; "beforeTabChange": "beforeTabChange"; "tabChanged": "tab-changed"; "tabChangeCancelled": "tabChange-cancelled"; }, ["templates"], never, true, never>;
1245
+ }
1246
+
1247
+ /**
1248
+ * The Data Router, as an Angular service scoped to whatever provides it.
1249
+ *
1250
+ * One stream in, many decoupled viewers out: the router holds the rows, and
1251
+ * each grid attached to a route sees the slice that route selects. In Angular
1252
+ * that is a service, and the two things a host must get right are both the
1253
+ * injector's job rather than the host's:
1254
+ *
1255
+ * - **Created once.** A router rebuilt on a re-render would drop every attached
1256
+ * grid and every row it holds, so the configuration is read once, when the
1257
+ * first grid asks for it.
1258
+ * - **Destroyed with its scope.** `ngOnDestroy` on a service runs when the
1259
+ * injector that provided it is destroyed — the application at shutdown, or
1260
+ * the component whose `providers` array carried it, which is why
1261
+ * {@link provideLatticeRouter} returns plain providers rather than
1262
+ * environment ones.
1263
+ *
1264
+ * @Component({
1265
+ * selector: 'live-page',
1266
+ * providers: [provideLatticeRouter({ key: (row) => row.venue })],
1267
+ * template: `
1268
+ * <lattice-grid route="LSE" [config]="config" />
1269
+ * <lattice-grid route="NYSE" [config]="config" />
1270
+ * `,
1271
+ * })
1272
+ * export class LivePage {}
1273
+ *
1274
+ * Both grids attach on mount and detach before they are destroyed, so the
1275
+ * router never holds a dead grid.
1276
+ */
1277
+
1278
+ /** The value a grid's `route` input carries: whatever the router's `key` produces. */
1279
+ type LatticeRoute = Parameters<DataRouter['attach']>[1];
1280
+ /** Per-route options, as `router.attach()` takes them. */
1281
+ type LatticeRouteOptions = NonNullable<Parameters<DataRouter['attach']>[2]>;
1282
+ /** The configuration {@link LatticeRouter} builds its router from, read once. */
1283
+ declare const LATTICE_ROUTER_OPTIONS: InjectionToken<DataRouterOptions>;
1284
+ declare class LatticeRouter implements OnDestroy {
1285
+ /** The live router, built on first use. */
1286
+ private instance;
1287
+ /** Set by `ngOnDestroy`, so nothing rebuilds a router on the way out. */
1288
+ private torn;
1289
+ /** The provided Lattice factories, for `createDataRouter`. */
1290
+ private readonly factories;
1291
+ /** The router configuration, read once when the router is built. */
1292
+ private readonly options;
1293
+ /**
1294
+ * The live router, built the first time anything asks for it.
1295
+ * @returns the router
1296
+ * @throws TypeError when `createDataRouter` was not provided
1297
+ */
1298
+ get router(): DataRouter;
1299
+ /**
1300
+ * Attach a grid to a route.
1301
+ * @param grid the grid
1302
+ * @param route the route value
1303
+ * @param opts per-route options
1304
+ * @returns nothing
1305
+ */
1306
+ attach(grid: Grid, route: LatticeRoute, opts?: LatticeRouteOptions): void;
1307
+ /**
1308
+ * Detach a grid, before it is destroyed.
1309
+ * @param grid the grid
1310
+ * @returns nothing
1311
+ */
1312
+ detach(grid: Grid): void;
1313
+ /** Destroy the router with the injector that provided it. */
1314
+ ngOnDestroy(): void;
1315
+ static ɵfac: i0.ɵɵFactoryDeclaration<LatticeRouter, never>;
1316
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
1317
+ }
1318
+ /**
1319
+ * Provide a Data Router to an application, a route or one component's subtree.
1320
+ *
1321
+ * @param options the router configuration, read once when the router is built
1322
+ * @returns providers for `bootstrapApplication`, a route, or a component's
1323
+ * `providers` array — the last of which is what scopes a router to a page
1324
+ * and destroys it with that page
1325
+ */
1326
+ declare function provideLatticeRouter(options?: DataRouterOptions): Provider[];
1327
+
1328
+ /**
1329
+ * Turning Lattice's event names into Angular outputs, and dispatching them
1330
+ * without waking change detection for an event nobody listens to.
1331
+ *
1332
+ * ## The names
1333
+ *
1334
+ * A Lattice event is colon-separated (`cell:edit:start`). A colon is not legal
1335
+ * in an Angular binding, so each output is aliased to the same kebab-case name
1336
+ * the Vue and Svelte adapters use — `(cell-edit-start)` — while the class
1337
+ * property stays camelCase (`cellEditStart`) for anyone holding a component
1338
+ * reference. `dashedName` in the shared adapter owns the first half of that
1339
+ * mapping; `eventProp` here owns the second, and the package's test re-derives
1340
+ * both from `EVENT_NAMES` so neither can drift.
1341
+ *
1342
+ * ## The zone
1343
+ *
1344
+ * The grid is created outside Angular's zone (see `LatticeGridBase`), because
1345
+ * it installs its own scroll, wheel and pointer listeners and running change
1346
+ * detection on every scroll frame of a million-row grid is the difference
1347
+ * between smooth and unusable. An event that reaches a *bound* output has to
1348
+ * re-enter, or a host writing `(cell-changed)="count = count + 1"` would update
1349
+ * a field the view never re-reads. An event with no listener re-enters nothing,
1350
+ * which is what keeps `scroll` free.
1351
+ *
1352
+ * Under zoneless change detection `NgZone` is Angular's own no-op, `run` calls
1353
+ * the function directly, and a host that reacts to an output by setting a
1354
+ * signal is repainted by the signal. Both modes work; neither is configured.
1355
+ */
1356
+
1357
+ /**
1358
+ * The camelCase property name an event becomes: `cell:edit:start` →
1359
+ * `cellEditStart`.
1360
+ * @param event the Lattice event name
1361
+ * @returns the class property name its emitter is declared under
1362
+ */
1363
+ declare function eventProp(event: string): string;
1364
+
1365
+ export { DEFAULT_GRID_NAME, EVENT_NAMES, LATTICE_FACTORIES, LATTICE_ROUTER_OPTIONS, LatticeChartComponent, LatticeGanttComponent, LatticeGridBase, LatticeGridComponent, LatticeGridDirective, LatticeGridRegistry, LatticeKanbanComponent, LatticeKpiComponent, LatticeLayoutComponent, LatticeRouter, LatticeTabDirective, LatticeTabsComponent, LatticeViewerBase, VIEWER_EVENTS, dashedName, eventProp, provideLattice, provideLatticeRouter, requireFactory };
1366
+ export type { Chart, ChartConfig, ChartFactory, DataRouter, DataRouterFactory, DataRouterOptions, Gantt, GanttConfig, GanttFactory, GridFactory, KPI, KPIConfig, KPIFactory, Kanban, KanbanConfig, KanbanFactory, LatticeFactories, LatticeGridConfig, LatticePredicates, LatticeQuickFilter, LatticeRoute, LatticeRouteOptions, LatticeRowChange, LatticeViewerEvent, Layout, LayoutConfig, LayoutFactory, Tabs, TabsConfig, TabsFactory };