@toclocoinc/lattice-grid 1.64.0 → 1.66.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.
- package/README.md +6 -3
- package/angular/LICENSE +111 -0
- package/angular/README.md +78 -0
- package/angular/fesm2022/toclocoinc-lattice-grid-angular.mjs +2843 -0
- package/angular/package.json +16 -0
- package/angular/types/toclocoinc-lattice-grid-angular.d.ts +1366 -0
- package/docs/API.html +791 -8
- package/docs/api-detail.html +172 -4
- package/lattice-grid.d.ts +241 -205
- package/lattice-grid.esm.min.js +19 -7
- package/lattice-grid.min.cjs +19 -7
- package/lattice-grid.min.css +1 -1
- package/lattice-grid.min.js +19 -7
- package/modules/ai.d.ts +10 -13
- package/modules/ai.esm.min.js +3 -3
- package/modules/ai.min.cjs +3 -3
- package/modules/ai.min.js +3 -3
- package/modules/angular.d.ts +2 -2
- package/modules/angular.esm.min.js +433 -7
- package/modules/angular.min.cjs +433 -7
- package/modules/angular.min.js +433 -7
- package/modules/chart-alluvial.d.ts +2 -2
- package/modules/chart-alluvial.esm.min.js +1 -1
- package/modules/chart-alluvial.min.cjs +1 -1
- package/modules/chart-alluvial.min.js +1 -1
- package/modules/chart-arc.d.ts +2 -2
- package/modules/chart-arc.esm.min.js +1 -1
- package/modules/chart-arc.min.cjs +1 -1
- package/modules/chart-arc.min.js +1 -1
- package/modules/chart-bubblemap.d.ts +2 -2
- package/modules/chart-bubblemap.esm.min.js +1 -1
- package/modules/chart-bubblemap.min.cjs +1 -1
- package/modules/chart-bubblemap.min.js +1 -1
- package/modules/chart-bump.d.ts +2 -2
- package/modules/chart-bump.esm.min.js +1 -1
- package/modules/chart-bump.min.cjs +1 -1
- package/modules/chart-bump.min.js +1 -1
- package/modules/chart-calendar.d.ts +2 -2
- package/modules/chart-calendar.esm.min.js +1 -1
- package/modules/chart-calendar.min.cjs +1 -1
- package/modules/chart-calendar.min.js +1 -1
- package/modules/chart-decomposition.d.ts +2 -2
- package/modules/chart-decomposition.esm.min.js +1 -1
- package/modules/chart-decomposition.min.cjs +1 -1
- package/modules/chart-decomposition.min.js +1 -1
- package/modules/chart-diverging.d.ts +2 -2
- package/modules/chart-diverging.esm.min.js +1 -1
- package/modules/chart-diverging.min.cjs +1 -1
- package/modules/chart-diverging.min.js +1 -1
- package/modules/chart-dumbbell.d.ts +2 -2
- package/modules/chart-dumbbell.esm.min.js +1 -1
- package/modules/chart-dumbbell.min.cjs +1 -1
- package/modules/chart-dumbbell.min.js +1 -1
- package/modules/chart-fan.d.ts +2 -2
- package/modules/chart-fan.esm.min.js +1 -1
- package/modules/chart-fan.min.cjs +1 -1
- package/modules/chart-fan.min.js +1 -1
- package/modules/chart-hexbin.d.ts +2 -2
- package/modules/chart-hexbin.esm.min.js +1 -1
- package/modules/chart-hexbin.min.cjs +1 -1
- package/modules/chart-hexbin.min.js +1 -1
- package/modules/chart-hexmap.d.ts +2 -2
- package/modules/chart-hexmap.esm.min.js +1 -1
- package/modules/chart-hexmap.min.cjs +1 -1
- package/modules/chart-hexmap.min.js +1 -1
- package/modules/chart-icicle.d.ts +2 -2
- package/modules/chart-icicle.esm.min.js +1 -1
- package/modules/chart-icicle.min.cjs +1 -1
- package/modules/chart-icicle.min.js +1 -1
- package/modules/chart-markermap.d.ts +1 -1
- package/modules/chart-markermap.esm.min.js +1 -1
- package/modules/chart-markermap.min.cjs +1 -1
- package/modules/chart-markermap.min.js +1 -1
- package/modules/chart-parallel.d.ts +2 -2
- package/modules/chart-parallel.esm.min.js +1 -1
- package/modules/chart-parallel.min.cjs +1 -1
- package/modules/chart-parallel.min.js +1 -1
- package/modules/chart-ridgeline.d.ts +2 -2
- package/modules/chart-ridgeline.esm.min.js +1 -1
- package/modules/chart-ridgeline.min.cjs +1 -1
- package/modules/chart-ridgeline.min.js +1 -1
- package/modules/chart-roc.d.ts +2 -2
- package/modules/chart-roc.esm.min.js +1 -1
- package/modules/chart-roc.min.cjs +1 -1
- package/modules/chart-roc.min.js +1 -1
- package/modules/chart-slope.d.ts +2 -2
- package/modules/chart-slope.esm.min.js +1 -1
- package/modules/chart-slope.min.cjs +1 -1
- package/modules/chart-slope.min.js +1 -1
- package/modules/chart-splom.d.ts +2 -2
- package/modules/chart-splom.esm.min.js +1 -1
- package/modules/chart-splom.min.cjs +1 -1
- package/modules/chart-splom.min.js +1 -1
- package/modules/chart-waffle.d.ts +2 -2
- package/modules/chart-waffle.esm.min.js +1 -1
- package/modules/chart-waffle.min.cjs +1 -1
- package/modules/chart-waffle.min.js +1 -1
- package/modules/charts.d.ts +4 -5
- package/modules/charts.esm.min.js +261 -48
- package/modules/charts.min.cjs +261 -48
- package/modules/charts.min.js +261 -48
- package/modules/data-router.d.ts +5 -6
- package/modules/data-router.esm.min.js +3 -3
- package/modules/data-router.min.cjs +3 -3
- package/modules/data-router.min.js +3 -3
- package/modules/devtools.d.ts +1 -1
- package/modules/devtools.esm.min.js +1 -1
- package/modules/devtools.min.cjs +1 -1
- package/modules/devtools.min.js +1 -1
- package/modules/dhtmlx-compat.d.ts +1 -1
- package/modules/dhtmlx-compat.esm.min.js +3 -3
- package/modules/dhtmlx-compat.min.cjs +3 -3
- package/modules/dhtmlx-compat.min.js +3 -3
- package/modules/gantt.d.ts +37 -43
- package/modules/gantt.esm.min.js +3 -3
- package/modules/gantt.min.cjs +3 -3
- package/modules/gantt.min.js +3 -3
- package/modules/geo-europe-nuts.d.ts +2 -2
- package/modules/geo-europe-nuts.esm.min.js +1 -1
- package/modules/geo-uk.d.ts +2 -2
- package/modules/geo-uk.esm.min.js +1 -1
- package/modules/geo-us-states.d.ts +2 -2
- package/modules/geo-us-states.esm.min.js +1 -1
- package/modules/geo-world-110m.d.ts +2 -2
- package/modules/geo-world-110m.esm.min.js +1 -1
- package/modules/geo-world-50m.d.ts +2 -2
- package/modules/geo-world-50m.esm.min.js +1 -1
- package/modules/htmx.d.ts +2 -2
- package/modules/htmx.esm.min.js +19 -7
- package/modules/htmx.min.cjs +19 -7
- package/modules/htmx.min.js +19 -7
- package/modules/kanban.d.ts +14 -14
- package/modules/kanban.esm.min.js +3 -3
- package/modules/kanban.min.cjs +3 -3
- package/modules/kanban.min.js +3 -3
- package/modules/kpi.d.ts +5 -5
- package/modules/kpi.esm.min.js +3 -3
- package/modules/kpi.min.cjs +3 -3
- package/modules/kpi.min.js +3 -3
- package/modules/layout.d.ts +2 -2
- package/modules/layout.esm.min.js +3 -3
- package/modules/layout.min.cjs +3 -3
- package/modules/layout.min.js +3 -3
- package/modules/mock-socket.d.ts +1 -1
- package/modules/mock-socket.esm.min.js +1 -1
- package/modules/mock-socket.min.cjs +1 -1
- package/modules/mock-socket.min.js +1 -1
- package/modules/react.d.ts +4 -5
- package/modules/react.esm.min.js +3 -3
- package/modules/react.min.cjs +3 -3
- package/modules/react.min.js +3 -3
- package/modules/svelte.d.ts +252 -4
- package/modules/svelte.esm.min.js +960 -6
- package/modules/svelte.min.cjs +942 -5
- package/modules/svelte.min.js +942 -5
- package/modules/tabs.d.ts +2 -3
- package/modules/tabs.esm.min.js +3 -3
- package/modules/tabs.min.cjs +3 -3
- package/modules/tabs.min.js +3 -3
- package/modules/vue.d.ts +398 -9
- package/modules/vue.esm.min.js +1163 -31
- package/modules/vue.min.cjs +1147 -30
- package/modules/vue.min.js +1147 -30
- package/modules/webcomponent.d.ts +234 -2
- package/modules/webcomponent.esm.min.js +1267 -38
- package/modules/webcomponent.min.cjs +1249 -38
- package/modules/webcomponent.min.js +1249 -38
- package/package.json +27 -2
- package/svelte/Chart.svelte +34 -0
- package/svelte/Gantt.svelte +34 -0
- package/svelte/Grid.svelte +30 -0
- package/svelte/GridProvider.svelte +13 -0
- package/svelte/KPI.svelte +34 -0
- package/svelte/Kanban.svelte +34 -0
- package/svelte/Layout.svelte +34 -0
- package/svelte/Router.svelte +16 -0
- 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 };
|