@ulm/core 1.0.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 +163 -0
- package/dist/core.cjs +1 -0
- package/dist/core.d.ts +1293 -0
- package/dist/core.js +908 -0
- package/package.json +54 -0
package/dist/core.d.ts
ADDED
|
@@ -0,0 +1,1293 @@
|
|
|
1
|
+
import { ActorRef } from 'xstate';
|
|
2
|
+
import { ActorRefFrom } from 'xstate';
|
|
3
|
+
import { ActorRefFromLogic } from 'xstate';
|
|
4
|
+
import { DateValue } from '@internationalized/date';
|
|
5
|
+
import { EventObject } from 'xstate';
|
|
6
|
+
import { MachineSnapshot } from 'xstate';
|
|
7
|
+
import { MetaObject } from 'xstate';
|
|
8
|
+
import { NonReducibleUnknown } from 'xstate';
|
|
9
|
+
import { Snapshot } from 'xstate';
|
|
10
|
+
import { StateMachine } from 'xstate';
|
|
11
|
+
|
|
12
|
+
export declare interface AddGroupLayerParams<TGroup> extends BaseAddLayerParams {
|
|
13
|
+
layerConfig: LayerGroupConfig<TGroup>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export declare interface AddLayerParams<TLayer> extends BaseAddLayerParams {
|
|
17
|
+
layerConfig: LayerConfig<TLayer>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export declare type AddManagedLayerParams<TLayer, TGroup = TLayer> = AddLayerParams<TLayer> | AddGroupLayerParams<TGroup>;
|
|
21
|
+
|
|
22
|
+
declare interface BaseAddLayerParams {
|
|
23
|
+
visible?: boolean;
|
|
24
|
+
enabled?: boolean;
|
|
25
|
+
index?: number;
|
|
26
|
+
position?: 'top' | 'bottom';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export declare interface BaseLayerConfig<T> {
|
|
30
|
+
layerId: string;
|
|
31
|
+
layerName: string;
|
|
32
|
+
parentId: string | null;
|
|
33
|
+
layerData: T;
|
|
34
|
+
timeInfo?: LayerTimeInfo;
|
|
35
|
+
opacity?: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export declare interface BaseTimeInfo {
|
|
39
|
+
precision: 'date' | 'datetime';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Calculates the computed opacity for a layer by multiplying its own opacity
|
|
44
|
+
* with the parent's computed opacity (if a parent exists).
|
|
45
|
+
*
|
|
46
|
+
* @param parentRef - The parent layer actor reference, or null if no parent.
|
|
47
|
+
* @param ownOpacity - The layer's own opacity value (0-1).
|
|
48
|
+
* @returns The computed opacity value (0-1).
|
|
49
|
+
*/
|
|
50
|
+
export declare function calculateComputedOpacity(parentRef: ParentLayerActor | null, ownOpacity: number): number;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Checks if a layer can be safely removed.
|
|
54
|
+
* Prevents removal of Groups that still contain children.
|
|
55
|
+
*
|
|
56
|
+
* @param layer - The layer to check.
|
|
57
|
+
* @returns True if removable.
|
|
58
|
+
*/
|
|
59
|
+
export declare function canRemoveLayer<TLayer, TGroup = TLayer>(layer: ManagedItem<TLayer, TGroup>): boolean;
|
|
60
|
+
|
|
61
|
+
export declare type ChildEvent = {
|
|
62
|
+
type: 'LAYER.ENABLED';
|
|
63
|
+
} | {
|
|
64
|
+
type: 'LAYER.DISABLED';
|
|
65
|
+
} | {
|
|
66
|
+
type: 'PARENT.VISIBLE';
|
|
67
|
+
} | {
|
|
68
|
+
type: 'PARENT.HIDDEN';
|
|
69
|
+
} | {
|
|
70
|
+
type: 'PARENT.OPACITY_CHANGED';
|
|
71
|
+
opacity: number;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export declare type ChildLayerActor = ActorRef<MachineSnapshot<LayerContext<any, any> | LayerGroupContext<any, any>, any, any, any, any, any, any, any>, ChildEvent>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Handles cleanup when a layer is removed.
|
|
78
|
+
* Sends a removal event to the parent actor if one exists.
|
|
79
|
+
*/
|
|
80
|
+
export declare function cleanupLayerReferences<TLayer, TGroup = TLayer>(layer: ManagedItem<TLayer, TGroup>): void;
|
|
81
|
+
|
|
82
|
+
export declare function createLayerManagerMachine<TLayer, TGroup = TLayer>(): StateMachine<LayerManagerContext<TLayer, TGroup>, {
|
|
83
|
+
type: "LAYER.REMOVE";
|
|
84
|
+
layerId: string;
|
|
85
|
+
} | {
|
|
86
|
+
type: "LAYER.UPDATE_VISIBILITY";
|
|
87
|
+
layerId: string;
|
|
88
|
+
visible: boolean;
|
|
89
|
+
} | {
|
|
90
|
+
type: "LAYER.UPDATE_OPACITY";
|
|
91
|
+
layerId: string;
|
|
92
|
+
opacity: number;
|
|
93
|
+
computedOpacity: number;
|
|
94
|
+
} | {
|
|
95
|
+
type: "LAYER.UPDATE_TIME_INFO";
|
|
96
|
+
layerId: string;
|
|
97
|
+
timeInfo: LayerTimeInfo;
|
|
98
|
+
} | {
|
|
99
|
+
type: "RESET";
|
|
100
|
+
} | {
|
|
101
|
+
type: "LAYER.ADD";
|
|
102
|
+
params: AddManagedLayerParams<TLayer, TGroup>;
|
|
103
|
+
} | {
|
|
104
|
+
type: "LAYER.UPDATE_LAYER_DATA";
|
|
105
|
+
layerId: string;
|
|
106
|
+
layerData: TLayer | TGroup;
|
|
107
|
+
}, {
|
|
108
|
+
[x: string]: ActorRefFromLogic<StateMachine<LayerContext<TLayer, TGroup>, {
|
|
109
|
+
type: "LAYER.ENABLED";
|
|
110
|
+
} | {
|
|
111
|
+
type: "LAYER.DISABLED";
|
|
112
|
+
} | {
|
|
113
|
+
type: "PARENT.VISIBLE";
|
|
114
|
+
} | {
|
|
115
|
+
type: "PARENT.HIDDEN";
|
|
116
|
+
} | {
|
|
117
|
+
type: "PARENT.OPACITY_CHANGED";
|
|
118
|
+
opacity: number;
|
|
119
|
+
} | {
|
|
120
|
+
type: "LAYER.SET_OPACITY";
|
|
121
|
+
opacity: number;
|
|
122
|
+
} | {
|
|
123
|
+
type: "LAYER.SET_TIME_INFO";
|
|
124
|
+
timeInfo: LayerTimeInfo;
|
|
125
|
+
} | {
|
|
126
|
+
type: "LAYER.SET_LAYER_DATA";
|
|
127
|
+
layerData: TLayer;
|
|
128
|
+
}, {}, never, {
|
|
129
|
+
type: "Notify Parent that layer is visible";
|
|
130
|
+
params: NonReducibleUnknown;
|
|
131
|
+
} | {
|
|
132
|
+
type: "Notify Manager of visibility change";
|
|
133
|
+
params: {
|
|
134
|
+
visible: boolean;
|
|
135
|
+
};
|
|
136
|
+
} | {
|
|
137
|
+
type: "Update Computed Opacity";
|
|
138
|
+
params: {
|
|
139
|
+
opacity: number;
|
|
140
|
+
};
|
|
141
|
+
} | {
|
|
142
|
+
type: "Change Layer Opacity";
|
|
143
|
+
params: {
|
|
144
|
+
opacity: number;
|
|
145
|
+
};
|
|
146
|
+
} | {
|
|
147
|
+
type: "Change Layer Time Info";
|
|
148
|
+
params: {
|
|
149
|
+
timeInfo: LayerTimeInfo;
|
|
150
|
+
};
|
|
151
|
+
} | {
|
|
152
|
+
type: "Change Layer Data";
|
|
153
|
+
params: {
|
|
154
|
+
layerData: TLayer;
|
|
155
|
+
};
|
|
156
|
+
}, never, never, {
|
|
157
|
+
enabled: "visible" | "hidden";
|
|
158
|
+
} | {
|
|
159
|
+
disabled: "hidden";
|
|
160
|
+
}, string, {
|
|
161
|
+
layerManagerRef: LayerManagerRef<TLayer, TGroup>;
|
|
162
|
+
layerId: string;
|
|
163
|
+
parentRef: ParentLayerActor | null;
|
|
164
|
+
layerName: string;
|
|
165
|
+
listMode?: "show" | "hide";
|
|
166
|
+
opacity?: number;
|
|
167
|
+
timeInfo?: LayerTimeInfo;
|
|
168
|
+
layerData: TLayer;
|
|
169
|
+
}, NonReducibleUnknown, EventObject, MetaObject, {
|
|
170
|
+
id: "layer";
|
|
171
|
+
states: {
|
|
172
|
+
readonly enabled: {
|
|
173
|
+
states: {
|
|
174
|
+
readonly visible: {};
|
|
175
|
+
readonly hidden: {};
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
readonly disabled: {
|
|
179
|
+
states: {
|
|
180
|
+
readonly hidden: {};
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
}>> | ActorRefFromLogic<StateMachine<LayerGroupContext<TLayer, TGroup>, {
|
|
185
|
+
type: "LAYER.ENABLED";
|
|
186
|
+
} | {
|
|
187
|
+
type: "LAYER.DISABLED";
|
|
188
|
+
} | {
|
|
189
|
+
type: "PARENT.VISIBLE";
|
|
190
|
+
} | {
|
|
191
|
+
type: "PARENT.HIDDEN";
|
|
192
|
+
} | {
|
|
193
|
+
type: "PARENT.OPACITY_CHANGED";
|
|
194
|
+
opacity: number;
|
|
195
|
+
} | {
|
|
196
|
+
type: "LAYER.SET_OPACITY";
|
|
197
|
+
opacity: number;
|
|
198
|
+
} | {
|
|
199
|
+
type: "LAYER.SET_TIME_INFO";
|
|
200
|
+
timeInfo: LayerTimeInfo;
|
|
201
|
+
} | {
|
|
202
|
+
type: "CHILD.VISIBLE";
|
|
203
|
+
layerId: string;
|
|
204
|
+
} | {
|
|
205
|
+
type: "LAYERS.ADD_CHILD";
|
|
206
|
+
child: ChildLayerActor;
|
|
207
|
+
index?: number;
|
|
208
|
+
position?: "top" | "bottom";
|
|
209
|
+
} | {
|
|
210
|
+
type: "LAYERS.REMOVE_CHILD";
|
|
211
|
+
id: string;
|
|
212
|
+
} | {
|
|
213
|
+
type: "LAYER.SET_LAYER_DATA";
|
|
214
|
+
layerData: TGroup;
|
|
215
|
+
}, {}, never, {
|
|
216
|
+
type: "Notify Manager of visibility change";
|
|
217
|
+
params: {
|
|
218
|
+
visible: boolean;
|
|
219
|
+
};
|
|
220
|
+
} | {
|
|
221
|
+
type: "Update Computed Opacity";
|
|
222
|
+
params: NonReducibleUnknown;
|
|
223
|
+
} | {
|
|
224
|
+
type: "Change Layer Opacity";
|
|
225
|
+
params: {
|
|
226
|
+
opacity: number;
|
|
227
|
+
};
|
|
228
|
+
} | {
|
|
229
|
+
type: "Change Layer Time Info";
|
|
230
|
+
params: {
|
|
231
|
+
timeInfo: LayerTimeInfo;
|
|
232
|
+
};
|
|
233
|
+
} | {
|
|
234
|
+
type: "Change Layer Data";
|
|
235
|
+
params: {
|
|
236
|
+
layerData: TGroup;
|
|
237
|
+
};
|
|
238
|
+
} | {
|
|
239
|
+
type: "Notify children of visibility change";
|
|
240
|
+
params: {
|
|
241
|
+
visible: boolean;
|
|
242
|
+
};
|
|
243
|
+
} | {
|
|
244
|
+
type: "Notify children of opacity change";
|
|
245
|
+
params: NonReducibleUnknown;
|
|
246
|
+
} | {
|
|
247
|
+
type: "Notify Parent of visibility change";
|
|
248
|
+
params: NonReducibleUnknown;
|
|
249
|
+
} | {
|
|
250
|
+
type: "Update Children";
|
|
251
|
+
params: {
|
|
252
|
+
child: ChildLayerActor;
|
|
253
|
+
index?: number;
|
|
254
|
+
position?: "top" | "bottom";
|
|
255
|
+
};
|
|
256
|
+
} | {
|
|
257
|
+
type: "Remove Child";
|
|
258
|
+
params: {
|
|
259
|
+
id: string;
|
|
260
|
+
};
|
|
261
|
+
}, never, never, {
|
|
262
|
+
enabled: "visible" | "hidden";
|
|
263
|
+
} | {
|
|
264
|
+
disabled: "hidden";
|
|
265
|
+
}, string, {
|
|
266
|
+
layerId: string;
|
|
267
|
+
parentRef: ParentLayerActor | null;
|
|
268
|
+
layerName: string;
|
|
269
|
+
layerManagerRef: LayerManagerRef<TLayer, TGroup>;
|
|
270
|
+
listMode?: "show" | "hide" | "hide-children";
|
|
271
|
+
timeInfo?: LayerTimeInfo;
|
|
272
|
+
opacity?: number;
|
|
273
|
+
layerData: TGroup;
|
|
274
|
+
}, NonReducibleUnknown, EventObject, MetaObject, {
|
|
275
|
+
id: "layerGroup";
|
|
276
|
+
states: {
|
|
277
|
+
readonly enabled: {
|
|
278
|
+
states: {
|
|
279
|
+
readonly visible: {};
|
|
280
|
+
readonly hidden: {};
|
|
281
|
+
};
|
|
282
|
+
};
|
|
283
|
+
readonly disabled: {
|
|
284
|
+
states: {
|
|
285
|
+
readonly hidden: {};
|
|
286
|
+
};
|
|
287
|
+
};
|
|
288
|
+
};
|
|
289
|
+
}>> | undefined;
|
|
290
|
+
}, {
|
|
291
|
+
src: "layerMachineEnabledVisible";
|
|
292
|
+
logic: StateMachine<LayerContext<TLayer, TGroup>, {
|
|
293
|
+
type: "LAYER.ENABLED";
|
|
294
|
+
} | {
|
|
295
|
+
type: "LAYER.DISABLED";
|
|
296
|
+
} | {
|
|
297
|
+
type: "PARENT.VISIBLE";
|
|
298
|
+
} | {
|
|
299
|
+
type: "PARENT.HIDDEN";
|
|
300
|
+
} | {
|
|
301
|
+
type: "PARENT.OPACITY_CHANGED";
|
|
302
|
+
opacity: number;
|
|
303
|
+
} | {
|
|
304
|
+
type: "LAYER.SET_OPACITY";
|
|
305
|
+
opacity: number;
|
|
306
|
+
} | {
|
|
307
|
+
type: "LAYER.SET_TIME_INFO";
|
|
308
|
+
timeInfo: LayerTimeInfo;
|
|
309
|
+
} | {
|
|
310
|
+
type: "LAYER.SET_LAYER_DATA";
|
|
311
|
+
layerData: TLayer;
|
|
312
|
+
}, {}, never, {
|
|
313
|
+
type: "Notify Parent that layer is visible";
|
|
314
|
+
params: NonReducibleUnknown;
|
|
315
|
+
} | {
|
|
316
|
+
type: "Notify Manager of visibility change";
|
|
317
|
+
params: {
|
|
318
|
+
visible: boolean;
|
|
319
|
+
};
|
|
320
|
+
} | {
|
|
321
|
+
type: "Update Computed Opacity";
|
|
322
|
+
params: {
|
|
323
|
+
opacity: number;
|
|
324
|
+
};
|
|
325
|
+
} | {
|
|
326
|
+
type: "Change Layer Opacity";
|
|
327
|
+
params: {
|
|
328
|
+
opacity: number;
|
|
329
|
+
};
|
|
330
|
+
} | {
|
|
331
|
+
type: "Change Layer Time Info";
|
|
332
|
+
params: {
|
|
333
|
+
timeInfo: LayerTimeInfo;
|
|
334
|
+
};
|
|
335
|
+
} | {
|
|
336
|
+
type: "Change Layer Data";
|
|
337
|
+
params: {
|
|
338
|
+
layerData: TLayer;
|
|
339
|
+
};
|
|
340
|
+
}, never, never, {
|
|
341
|
+
enabled: "visible" | "hidden";
|
|
342
|
+
} | {
|
|
343
|
+
disabled: "hidden";
|
|
344
|
+
}, string, {
|
|
345
|
+
layerManagerRef: LayerManagerRef<TLayer, TGroup>;
|
|
346
|
+
layerId: string;
|
|
347
|
+
parentRef: ParentLayerActor | null;
|
|
348
|
+
layerName: string;
|
|
349
|
+
listMode?: "show" | "hide";
|
|
350
|
+
opacity?: number;
|
|
351
|
+
timeInfo?: LayerTimeInfo;
|
|
352
|
+
layerData: TLayer;
|
|
353
|
+
}, NonReducibleUnknown, EventObject, MetaObject, {
|
|
354
|
+
id: "layer";
|
|
355
|
+
states: {
|
|
356
|
+
readonly enabled: {
|
|
357
|
+
states: {
|
|
358
|
+
readonly visible: {};
|
|
359
|
+
readonly hidden: {};
|
|
360
|
+
};
|
|
361
|
+
};
|
|
362
|
+
readonly disabled: {
|
|
363
|
+
states: {
|
|
364
|
+
readonly hidden: {};
|
|
365
|
+
};
|
|
366
|
+
};
|
|
367
|
+
};
|
|
368
|
+
}>;
|
|
369
|
+
id: string | undefined;
|
|
370
|
+
} | {
|
|
371
|
+
src: "layerMachineEnabledHidden";
|
|
372
|
+
logic: StateMachine<LayerContext<TLayer, TGroup>, {
|
|
373
|
+
type: "LAYER.ENABLED";
|
|
374
|
+
} | {
|
|
375
|
+
type: "LAYER.DISABLED";
|
|
376
|
+
} | {
|
|
377
|
+
type: "PARENT.VISIBLE";
|
|
378
|
+
} | {
|
|
379
|
+
type: "PARENT.HIDDEN";
|
|
380
|
+
} | {
|
|
381
|
+
type: "PARENT.OPACITY_CHANGED";
|
|
382
|
+
opacity: number;
|
|
383
|
+
} | {
|
|
384
|
+
type: "LAYER.SET_OPACITY";
|
|
385
|
+
opacity: number;
|
|
386
|
+
} | {
|
|
387
|
+
type: "LAYER.SET_TIME_INFO";
|
|
388
|
+
timeInfo: LayerTimeInfo;
|
|
389
|
+
} | {
|
|
390
|
+
type: "LAYER.SET_LAYER_DATA";
|
|
391
|
+
layerData: TLayer;
|
|
392
|
+
}, {}, never, {
|
|
393
|
+
type: "Notify Parent that layer is visible";
|
|
394
|
+
params: NonReducibleUnknown;
|
|
395
|
+
} | {
|
|
396
|
+
type: "Notify Manager of visibility change";
|
|
397
|
+
params: {
|
|
398
|
+
visible: boolean;
|
|
399
|
+
};
|
|
400
|
+
} | {
|
|
401
|
+
type: "Update Computed Opacity";
|
|
402
|
+
params: {
|
|
403
|
+
opacity: number;
|
|
404
|
+
};
|
|
405
|
+
} | {
|
|
406
|
+
type: "Change Layer Opacity";
|
|
407
|
+
params: {
|
|
408
|
+
opacity: number;
|
|
409
|
+
};
|
|
410
|
+
} | {
|
|
411
|
+
type: "Change Layer Time Info";
|
|
412
|
+
params: {
|
|
413
|
+
timeInfo: LayerTimeInfo;
|
|
414
|
+
};
|
|
415
|
+
} | {
|
|
416
|
+
type: "Change Layer Data";
|
|
417
|
+
params: {
|
|
418
|
+
layerData: TLayer;
|
|
419
|
+
};
|
|
420
|
+
}, never, never, {
|
|
421
|
+
enabled: "visible" | "hidden";
|
|
422
|
+
} | {
|
|
423
|
+
disabled: "hidden";
|
|
424
|
+
}, string, {
|
|
425
|
+
layerManagerRef: LayerManagerRef<TLayer, TGroup>;
|
|
426
|
+
layerId: string;
|
|
427
|
+
parentRef: ParentLayerActor | null;
|
|
428
|
+
layerName: string;
|
|
429
|
+
listMode?: "show" | "hide";
|
|
430
|
+
opacity?: number;
|
|
431
|
+
timeInfo?: LayerTimeInfo;
|
|
432
|
+
layerData: TLayer;
|
|
433
|
+
}, NonReducibleUnknown, EventObject, MetaObject, {
|
|
434
|
+
id: "layer";
|
|
435
|
+
states: {
|
|
436
|
+
readonly enabled: {
|
|
437
|
+
states: {
|
|
438
|
+
readonly visible: {};
|
|
439
|
+
readonly hidden: {};
|
|
440
|
+
};
|
|
441
|
+
};
|
|
442
|
+
readonly disabled: {
|
|
443
|
+
states: {
|
|
444
|
+
readonly hidden: {};
|
|
445
|
+
};
|
|
446
|
+
};
|
|
447
|
+
};
|
|
448
|
+
}>;
|
|
449
|
+
id: string | undefined;
|
|
450
|
+
} | {
|
|
451
|
+
src: "layerMachineDisabled";
|
|
452
|
+
logic: StateMachine<LayerContext<TLayer, TGroup>, {
|
|
453
|
+
type: "LAYER.ENABLED";
|
|
454
|
+
} | {
|
|
455
|
+
type: "LAYER.DISABLED";
|
|
456
|
+
} | {
|
|
457
|
+
type: "PARENT.VISIBLE";
|
|
458
|
+
} | {
|
|
459
|
+
type: "PARENT.HIDDEN";
|
|
460
|
+
} | {
|
|
461
|
+
type: "PARENT.OPACITY_CHANGED";
|
|
462
|
+
opacity: number;
|
|
463
|
+
} | {
|
|
464
|
+
type: "LAYER.SET_OPACITY";
|
|
465
|
+
opacity: number;
|
|
466
|
+
} | {
|
|
467
|
+
type: "LAYER.SET_TIME_INFO";
|
|
468
|
+
timeInfo: LayerTimeInfo;
|
|
469
|
+
} | {
|
|
470
|
+
type: "LAYER.SET_LAYER_DATA";
|
|
471
|
+
layerData: TLayer;
|
|
472
|
+
}, {}, never, {
|
|
473
|
+
type: "Notify Parent that layer is visible";
|
|
474
|
+
params: NonReducibleUnknown;
|
|
475
|
+
} | {
|
|
476
|
+
type: "Notify Manager of visibility change";
|
|
477
|
+
params: {
|
|
478
|
+
visible: boolean;
|
|
479
|
+
};
|
|
480
|
+
} | {
|
|
481
|
+
type: "Update Computed Opacity";
|
|
482
|
+
params: {
|
|
483
|
+
opacity: number;
|
|
484
|
+
};
|
|
485
|
+
} | {
|
|
486
|
+
type: "Change Layer Opacity";
|
|
487
|
+
params: {
|
|
488
|
+
opacity: number;
|
|
489
|
+
};
|
|
490
|
+
} | {
|
|
491
|
+
type: "Change Layer Time Info";
|
|
492
|
+
params: {
|
|
493
|
+
timeInfo: LayerTimeInfo;
|
|
494
|
+
};
|
|
495
|
+
} | {
|
|
496
|
+
type: "Change Layer Data";
|
|
497
|
+
params: {
|
|
498
|
+
layerData: TLayer;
|
|
499
|
+
};
|
|
500
|
+
}, never, never, {
|
|
501
|
+
enabled: "visible" | "hidden";
|
|
502
|
+
} | {
|
|
503
|
+
disabled: "hidden";
|
|
504
|
+
}, string, {
|
|
505
|
+
layerManagerRef: LayerManagerRef<TLayer, TGroup>;
|
|
506
|
+
layerId: string;
|
|
507
|
+
parentRef: ParentLayerActor | null;
|
|
508
|
+
layerName: string;
|
|
509
|
+
listMode?: "show" | "hide";
|
|
510
|
+
opacity?: number;
|
|
511
|
+
timeInfo?: LayerTimeInfo;
|
|
512
|
+
layerData: TLayer;
|
|
513
|
+
}, NonReducibleUnknown, EventObject, MetaObject, {
|
|
514
|
+
id: "layer";
|
|
515
|
+
states: {
|
|
516
|
+
readonly enabled: {
|
|
517
|
+
states: {
|
|
518
|
+
readonly visible: {};
|
|
519
|
+
readonly hidden: {};
|
|
520
|
+
};
|
|
521
|
+
};
|
|
522
|
+
readonly disabled: {
|
|
523
|
+
states: {
|
|
524
|
+
readonly hidden: {};
|
|
525
|
+
};
|
|
526
|
+
};
|
|
527
|
+
};
|
|
528
|
+
}>;
|
|
529
|
+
id: string | undefined;
|
|
530
|
+
} | {
|
|
531
|
+
src: "layerGroupMachine";
|
|
532
|
+
logic: StateMachine<LayerGroupContext<TLayer, TGroup>, {
|
|
533
|
+
type: "LAYER.ENABLED";
|
|
534
|
+
} | {
|
|
535
|
+
type: "LAYER.DISABLED";
|
|
536
|
+
} | {
|
|
537
|
+
type: "PARENT.VISIBLE";
|
|
538
|
+
} | {
|
|
539
|
+
type: "PARENT.HIDDEN";
|
|
540
|
+
} | {
|
|
541
|
+
type: "PARENT.OPACITY_CHANGED";
|
|
542
|
+
opacity: number;
|
|
543
|
+
} | {
|
|
544
|
+
type: "LAYER.SET_OPACITY";
|
|
545
|
+
opacity: number;
|
|
546
|
+
} | {
|
|
547
|
+
type: "LAYER.SET_TIME_INFO";
|
|
548
|
+
timeInfo: LayerTimeInfo;
|
|
549
|
+
} | {
|
|
550
|
+
type: "CHILD.VISIBLE";
|
|
551
|
+
layerId: string;
|
|
552
|
+
} | {
|
|
553
|
+
type: "LAYERS.ADD_CHILD";
|
|
554
|
+
child: ChildLayerActor;
|
|
555
|
+
index?: number;
|
|
556
|
+
position?: "top" | "bottom";
|
|
557
|
+
} | {
|
|
558
|
+
type: "LAYERS.REMOVE_CHILD";
|
|
559
|
+
id: string;
|
|
560
|
+
} | {
|
|
561
|
+
type: "LAYER.SET_LAYER_DATA";
|
|
562
|
+
layerData: TGroup;
|
|
563
|
+
}, {}, never, {
|
|
564
|
+
type: "Notify Manager of visibility change";
|
|
565
|
+
params: {
|
|
566
|
+
visible: boolean;
|
|
567
|
+
};
|
|
568
|
+
} | {
|
|
569
|
+
type: "Update Computed Opacity";
|
|
570
|
+
params: NonReducibleUnknown;
|
|
571
|
+
} | {
|
|
572
|
+
type: "Change Layer Opacity";
|
|
573
|
+
params: {
|
|
574
|
+
opacity: number;
|
|
575
|
+
};
|
|
576
|
+
} | {
|
|
577
|
+
type: "Change Layer Time Info";
|
|
578
|
+
params: {
|
|
579
|
+
timeInfo: LayerTimeInfo;
|
|
580
|
+
};
|
|
581
|
+
} | {
|
|
582
|
+
type: "Change Layer Data";
|
|
583
|
+
params: {
|
|
584
|
+
layerData: TGroup;
|
|
585
|
+
};
|
|
586
|
+
} | {
|
|
587
|
+
type: "Notify children of visibility change";
|
|
588
|
+
params: {
|
|
589
|
+
visible: boolean;
|
|
590
|
+
};
|
|
591
|
+
} | {
|
|
592
|
+
type: "Notify children of opacity change";
|
|
593
|
+
params: NonReducibleUnknown;
|
|
594
|
+
} | {
|
|
595
|
+
type: "Notify Parent of visibility change";
|
|
596
|
+
params: NonReducibleUnknown;
|
|
597
|
+
} | {
|
|
598
|
+
type: "Update Children";
|
|
599
|
+
params: {
|
|
600
|
+
child: ChildLayerActor;
|
|
601
|
+
index?: number;
|
|
602
|
+
position?: "top" | "bottom";
|
|
603
|
+
};
|
|
604
|
+
} | {
|
|
605
|
+
type: "Remove Child";
|
|
606
|
+
params: {
|
|
607
|
+
id: string;
|
|
608
|
+
};
|
|
609
|
+
}, never, never, {
|
|
610
|
+
enabled: "visible" | "hidden";
|
|
611
|
+
} | {
|
|
612
|
+
disabled: "hidden";
|
|
613
|
+
}, string, {
|
|
614
|
+
layerId: string;
|
|
615
|
+
parentRef: ParentLayerActor | null;
|
|
616
|
+
layerName: string;
|
|
617
|
+
layerManagerRef: LayerManagerRef<TLayer, TGroup>;
|
|
618
|
+
listMode?: "show" | "hide" | "hide-children";
|
|
619
|
+
timeInfo?: LayerTimeInfo;
|
|
620
|
+
opacity?: number;
|
|
621
|
+
layerData: TGroup;
|
|
622
|
+
}, NonReducibleUnknown, EventObject, MetaObject, {
|
|
623
|
+
id: "layerGroup";
|
|
624
|
+
states: {
|
|
625
|
+
readonly enabled: {
|
|
626
|
+
states: {
|
|
627
|
+
readonly visible: {};
|
|
628
|
+
readonly hidden: {};
|
|
629
|
+
};
|
|
630
|
+
};
|
|
631
|
+
readonly disabled: {
|
|
632
|
+
states: {
|
|
633
|
+
readonly hidden: {};
|
|
634
|
+
};
|
|
635
|
+
};
|
|
636
|
+
};
|
|
637
|
+
}>;
|
|
638
|
+
id: string | undefined;
|
|
639
|
+
}, {
|
|
640
|
+
type: "Add new layer";
|
|
641
|
+
params: AddManagedLayerParams<TLayer, TGroup>;
|
|
642
|
+
} | {
|
|
643
|
+
type: "Remove layer";
|
|
644
|
+
params: {
|
|
645
|
+
layerId: string;
|
|
646
|
+
};
|
|
647
|
+
} | {
|
|
648
|
+
type: "Emit update layer order";
|
|
649
|
+
params: NonReducibleUnknown;
|
|
650
|
+
} | {
|
|
651
|
+
type: "Reset layer manager";
|
|
652
|
+
params: NonReducibleUnknown;
|
|
653
|
+
}, {
|
|
654
|
+
type: "isValidLayerConfig";
|
|
655
|
+
params: AddManagedLayerParams<TLayer, TGroup>;
|
|
656
|
+
}, never, {}, string, {
|
|
657
|
+
allowNestedGroupLayers: boolean;
|
|
658
|
+
}, NonReducibleUnknown, {
|
|
659
|
+
type: "LAYER.ADDED";
|
|
660
|
+
layerId: string;
|
|
661
|
+
visible: boolean;
|
|
662
|
+
} | {
|
|
663
|
+
type: "LAYER.REMOVED";
|
|
664
|
+
layerId: string;
|
|
665
|
+
} | {
|
|
666
|
+
type: "LAYER.ORDER_CHANGED";
|
|
667
|
+
layerOrder: string[];
|
|
668
|
+
} | {
|
|
669
|
+
type: "LAYER.VISIBILITY_CHANGED";
|
|
670
|
+
layerId: string;
|
|
671
|
+
visible: boolean;
|
|
672
|
+
} | {
|
|
673
|
+
type: "LAYER.OPACITY_CHANGED";
|
|
674
|
+
layerId: string;
|
|
675
|
+
opacity: number;
|
|
676
|
+
computedOpacity: number;
|
|
677
|
+
} | {
|
|
678
|
+
type: "LAYER.TIME_INFO_CHANGED";
|
|
679
|
+
layerId: string;
|
|
680
|
+
timeInfo: LayerTimeInfo;
|
|
681
|
+
} | {
|
|
682
|
+
type: "LAYER.LAYER_DATA_CHANGED";
|
|
683
|
+
layerId: string;
|
|
684
|
+
layerData: TLayer | TGroup;
|
|
685
|
+
}, MetaObject, {
|
|
686
|
+
id: "layerManager";
|
|
687
|
+
}>;
|
|
688
|
+
|
|
689
|
+
/**
|
|
690
|
+
* Finds a managed layer item by its ID.
|
|
691
|
+
*
|
|
692
|
+
* @param layers - The array of managed items to search.
|
|
693
|
+
* @param layerId - The unique ID of the layer to find.
|
|
694
|
+
* @returns The ManagedItem if found, otherwise undefined.
|
|
695
|
+
*/
|
|
696
|
+
export declare function findManagedLayerById<TLayer, TGroup = TLayer>(layers: ManagedItem<TLayer, TGroup>[], layerId: string): ManagedItem<TLayer, TGroup> | undefined;
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* Resolves the parent actor for a given configuration.
|
|
700
|
+
*
|
|
701
|
+
* @param layers - The list of existing layers.
|
|
702
|
+
* @param layerConfig - The configuration containing the `parentId`.
|
|
703
|
+
* @returns The parent LayerGroupMachineActor if valid, otherwise null.
|
|
704
|
+
*/
|
|
705
|
+
export declare function findParentActor<TLayer, TGroup = TLayer>(layers: ManagedItem<TLayer, TGroup>[], layerConfig: LayerConfig<TLayer> | LayerGroupConfig<TLayer, TGroup>): LayerGroupMachineActor<TLayer, TGroup> | null;
|
|
706
|
+
|
|
707
|
+
/**
|
|
708
|
+
* Specific helper to find an actor strictly if it is a Layer Group.
|
|
709
|
+
*
|
|
710
|
+
* @param layers - The list of layers.
|
|
711
|
+
* @param parentId - The ID of the potential parent.
|
|
712
|
+
* @returns The LayerGroup actor if found and is a group, otherwise null.
|
|
713
|
+
*/
|
|
714
|
+
export declare function findParentLayerGroupActor<TLayer, TGroup = TLayer>(layers: ManagedItem<TLayer, TGroup>[], parentId: string): LayerGroupMachineActor<TLayer, TGroup> | null;
|
|
715
|
+
|
|
716
|
+
/**
|
|
717
|
+
* Recursively flattens the layer tree into a single list of IDs.
|
|
718
|
+
* Traverses into Group Layers to find children.
|
|
719
|
+
*
|
|
720
|
+
* @param layers - The full map of managed layers.
|
|
721
|
+
* @param topLevelLayerOrder - The root order array.
|
|
722
|
+
* @returns A flat array of all Layer IDs in depth-first order.
|
|
723
|
+
*/
|
|
724
|
+
export declare function getFlatLayerOrder<TLayer, TGroup = TLayer>(layers: ManagedItem<TLayer, TGroup>[], topLevelLayerOrder: string[]): string[];
|
|
725
|
+
|
|
726
|
+
/**
|
|
727
|
+
* Extracts the layer data (context) from a specific layer ID.
|
|
728
|
+
*
|
|
729
|
+
* @param layers - The array of managed items.
|
|
730
|
+
* @param layerId - The ID of the target layer.
|
|
731
|
+
* @returns The layer data (TLayer or TGroup) if found, otherwise undefined.
|
|
732
|
+
*/
|
|
733
|
+
export declare function getLayerDataFromLayerId<TLayer, TGroup = TLayer>(layers: ManagedItem<TLayer, TGroup>[], layerId: string): TLayer | TGroup | undefined;
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* Maps a Group's child order array to actual ChildLayerActor objects.
|
|
737
|
+
*/
|
|
738
|
+
export declare function getLayerGroupChildrenInOrder(childLayerOrder: string[], layers: ChildLayerActor[]): ChildLayerActor[];
|
|
739
|
+
|
|
740
|
+
/**
|
|
741
|
+
* Maps the top-level order array of strings to actual ManagedItem objects.
|
|
742
|
+
*/
|
|
743
|
+
export declare function getTopLevelLayersInOrder<TLayer, TGroup = TLayer>(layerOrder: string[], layers: ManagedItem<TLayer, TGroup>[]): ManagedItem<TLayer, TGroup>[];
|
|
744
|
+
|
|
745
|
+
/**
|
|
746
|
+
* Calculates the new state for the Layer Manager after adding a layer.
|
|
747
|
+
*
|
|
748
|
+
* NOTE: If `parentRef` is provided, this function has a SIDE EFFECT
|
|
749
|
+
* of sending an event to that parent actor.
|
|
750
|
+
*
|
|
751
|
+
* @param context - Current manager context.
|
|
752
|
+
* @param newManagedLayer - The new layer wrapper to add.
|
|
753
|
+
* @param parentRef - The parent actor (if adding to a group).
|
|
754
|
+
* @param index - Optional index.
|
|
755
|
+
* @param position - Optional position ('top' | 'bottom').
|
|
756
|
+
* @returns A partial context update (layers list and potentially order).
|
|
757
|
+
*/
|
|
758
|
+
export declare function getUpdatedLayerStructure<TLayer, TGroup = TLayer>(context: LayerManagerContext<TLayer, TGroup>, newManagedLayer: ManagedItem<TLayer, TGroup>, parentRef: LayerGroupMachineActor<TLayer, TGroup> | null, index?: number, position?: 'top' | 'bottom'): Partial<LayerManagerContext<TLayer, TGroup>>;
|
|
759
|
+
|
|
760
|
+
/**
|
|
761
|
+
* Calculates the new state after removing a layer.
|
|
762
|
+
* Removes the layer from the main list and the top-level order array.
|
|
763
|
+
*/
|
|
764
|
+
export declare function getUpdatedLayerStructureAfterRemoval<TLayer, TGroup = TLayer>(context: LayerManagerContext<TLayer, TGroup>, layerId: string): Partial<LayerManagerContext<TLayer, TGroup>>;
|
|
765
|
+
|
|
766
|
+
export declare function isLayerGroupMachine<TLayer, TGroup = TLayer>(layer: LayerActor<TLayer, TGroup>): layer is LayerGroupMachineActor<TLayer, TGroup>;
|
|
767
|
+
|
|
768
|
+
export declare function isLayerMachine<TLayer, TGroup = TLayer>(layer: LayerActor<TLayer, TGroup>): layer is LayerMachineActor<TLayer, TGroup>;
|
|
769
|
+
|
|
770
|
+
export declare function isRangeTimeInfo(timeInfo?: LayerTimeInfo): timeInfo is RangeTimeInfo;
|
|
771
|
+
|
|
772
|
+
export declare function isSingleTimeInfo(timeInfo?: LayerTimeInfo): timeInfo is SingleTimeInfo;
|
|
773
|
+
|
|
774
|
+
/**
|
|
775
|
+
* Validates if a layer configuration can be added to the current context.
|
|
776
|
+
* Checks for duplicate IDs and nested group permissions.
|
|
777
|
+
*
|
|
778
|
+
* @param layerConfig - The proposed new layer configuration.
|
|
779
|
+
* @param context - The current Layer Manager context.
|
|
780
|
+
* @returns True if valid, false otherwise (logs warnings on failure).
|
|
781
|
+
*/
|
|
782
|
+
export declare function isValidLayerConfig<TLayer, TGroup = TLayer>(layerConfig: LayerConfig<TLayer> | LayerGroupConfig<TLayer, TGroup>, { layers, allowNestedGroupLayers }: LayerManagerContext<TLayer, TGroup>): boolean;
|
|
783
|
+
|
|
784
|
+
/**
|
|
785
|
+
* Checks if a provided index is within the bounds of the array.
|
|
786
|
+
*/
|
|
787
|
+
export declare function isValidLayerIndex(index: number, length: number): boolean;
|
|
788
|
+
|
|
789
|
+
/**
|
|
790
|
+
* Ensures that if a parentId was requested, a valid parent actor exists.
|
|
791
|
+
*
|
|
792
|
+
* @param layerConfig - The layer config.
|
|
793
|
+
* @param parentRef - The resolved parent actor reference.
|
|
794
|
+
* @returns False if parentId exists but parentRef is missing.
|
|
795
|
+
*/
|
|
796
|
+
export declare function isValidParentRef<TLayer, TGroup = TLayer>(layerConfig: LayerConfig<TLayer> | LayerGroupConfig<TLayer, TGroup>, parentRef: LayerGroupMachineActor<TLayer, TGroup> | null): boolean;
|
|
797
|
+
|
|
798
|
+
export declare type LayerActor<TLayer = any, TGroup = any> = LayerMachineActor<TLayer, TGroup> | LayerGroupMachineActor<TLayer, TGroup>;
|
|
799
|
+
|
|
800
|
+
export declare interface LayerConfig<TLayer> extends BaseLayerConfig<TLayer> {
|
|
801
|
+
layerType: 'layer';
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
export declare interface LayerContext<TLayer, TGroup = TLayer> extends LayerContextBase<TLayer, TGroup> {
|
|
805
|
+
layerType: 'layer';
|
|
806
|
+
layerData: TLayer;
|
|
807
|
+
listMode: 'show' | 'hide';
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
export declare interface LayerContextBase<TLayer, TGroup = TLayer> {
|
|
811
|
+
layerManagerRef: LayerManagerRef<TLayer, TGroup>;
|
|
812
|
+
parentRef: ParentLayerActor | null;
|
|
813
|
+
layerId: string;
|
|
814
|
+
layerName: string;
|
|
815
|
+
layerType: LayerType;
|
|
816
|
+
layerData: TLayer | TGroup;
|
|
817
|
+
timeInfo?: LayerTimeInfo;
|
|
818
|
+
opacity: number;
|
|
819
|
+
computedOpacity: number;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
export declare type LayerEvent<TLayer> = ChildEvent | LayerEventBase<TLayer>;
|
|
823
|
+
|
|
824
|
+
export declare type LayerEventBase<T> = {
|
|
825
|
+
type: 'LAYER.SET_OPACITY';
|
|
826
|
+
opacity: number;
|
|
827
|
+
} | {
|
|
828
|
+
type: 'LAYER.SET_TIME_INFO';
|
|
829
|
+
timeInfo: LayerTimeInfo;
|
|
830
|
+
} | {
|
|
831
|
+
type: 'LAYER.SET_LAYER_DATA';
|
|
832
|
+
layerData: T;
|
|
833
|
+
};
|
|
834
|
+
|
|
835
|
+
export declare interface LayerGroupConfig<TLayer, TGroup = TLayer> extends BaseLayerConfig<TGroup> {
|
|
836
|
+
layerType: 'layerGroup';
|
|
837
|
+
listMode?: 'show' | 'hide' | 'hide-children';
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
export declare interface LayerGroupContext<TLayer, TGroup = TLayer> extends LayerContextBase<TLayer, TGroup> {
|
|
841
|
+
layerType: 'layerGroup';
|
|
842
|
+
layerData: TGroup;
|
|
843
|
+
children: ChildLayerActor[];
|
|
844
|
+
childLayerOrder: string[];
|
|
845
|
+
listMode: 'show' | 'hide' | 'hide-children';
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
export declare type LayerGroupEvent<TGroup> = ChildEvent | ParentEvent | LayerEventBase<TGroup>;
|
|
849
|
+
|
|
850
|
+
export declare type LayerGroupInfo<TLayer = unknown, TGroup = TLayer> = Omit<LayerGroupContext<TLayer, TGroup>, 'layerManagerRef' | 'parentRef' | 'children' | 'childLayerOrder'> & {
|
|
851
|
+
enabled: boolean;
|
|
852
|
+
visible: boolean;
|
|
853
|
+
parentId: string | null;
|
|
854
|
+
};
|
|
855
|
+
|
|
856
|
+
export declare function layerGroupMachine<TLayer, TGroup = TLayer>(): StateMachine<LayerGroupContext<TLayer, TGroup>, {
|
|
857
|
+
type: "LAYER.ENABLED";
|
|
858
|
+
} | {
|
|
859
|
+
type: "LAYER.DISABLED";
|
|
860
|
+
} | {
|
|
861
|
+
type: "PARENT.VISIBLE";
|
|
862
|
+
} | {
|
|
863
|
+
type: "PARENT.HIDDEN";
|
|
864
|
+
} | {
|
|
865
|
+
type: "PARENT.OPACITY_CHANGED";
|
|
866
|
+
opacity: number;
|
|
867
|
+
} | {
|
|
868
|
+
type: "LAYER.SET_OPACITY";
|
|
869
|
+
opacity: number;
|
|
870
|
+
} | {
|
|
871
|
+
type: "LAYER.SET_TIME_INFO";
|
|
872
|
+
timeInfo: LayerTimeInfo;
|
|
873
|
+
} | {
|
|
874
|
+
type: "CHILD.VISIBLE";
|
|
875
|
+
layerId: string;
|
|
876
|
+
} | {
|
|
877
|
+
type: "LAYERS.ADD_CHILD";
|
|
878
|
+
child: ChildLayerActor;
|
|
879
|
+
index?: number;
|
|
880
|
+
position?: "top" | "bottom";
|
|
881
|
+
} | {
|
|
882
|
+
type: "LAYERS.REMOVE_CHILD";
|
|
883
|
+
id: string;
|
|
884
|
+
} | {
|
|
885
|
+
type: "LAYER.SET_LAYER_DATA";
|
|
886
|
+
layerData: TGroup;
|
|
887
|
+
}, {}, never, {
|
|
888
|
+
type: "Notify Manager of visibility change";
|
|
889
|
+
params: {
|
|
890
|
+
visible: boolean;
|
|
891
|
+
};
|
|
892
|
+
} | {
|
|
893
|
+
type: "Update Computed Opacity";
|
|
894
|
+
params: NonReducibleUnknown;
|
|
895
|
+
} | {
|
|
896
|
+
type: "Change Layer Opacity";
|
|
897
|
+
params: {
|
|
898
|
+
opacity: number;
|
|
899
|
+
};
|
|
900
|
+
} | {
|
|
901
|
+
type: "Change Layer Time Info";
|
|
902
|
+
params: {
|
|
903
|
+
timeInfo: LayerTimeInfo;
|
|
904
|
+
};
|
|
905
|
+
} | {
|
|
906
|
+
type: "Change Layer Data";
|
|
907
|
+
params: {
|
|
908
|
+
layerData: TGroup;
|
|
909
|
+
};
|
|
910
|
+
} | {
|
|
911
|
+
type: "Notify children of visibility change";
|
|
912
|
+
params: {
|
|
913
|
+
visible: boolean;
|
|
914
|
+
};
|
|
915
|
+
} | {
|
|
916
|
+
type: "Notify children of opacity change";
|
|
917
|
+
params: NonReducibleUnknown;
|
|
918
|
+
} | {
|
|
919
|
+
type: "Notify Parent of visibility change";
|
|
920
|
+
params: NonReducibleUnknown;
|
|
921
|
+
} | {
|
|
922
|
+
type: "Update Children";
|
|
923
|
+
params: {
|
|
924
|
+
child: ChildLayerActor;
|
|
925
|
+
index?: number;
|
|
926
|
+
position?: "top" | "bottom";
|
|
927
|
+
};
|
|
928
|
+
} | {
|
|
929
|
+
type: "Remove Child";
|
|
930
|
+
params: {
|
|
931
|
+
id: string;
|
|
932
|
+
};
|
|
933
|
+
}, never, never, {
|
|
934
|
+
enabled: "visible" | "hidden";
|
|
935
|
+
} | {
|
|
936
|
+
disabled: "hidden";
|
|
937
|
+
}, string, {
|
|
938
|
+
layerId: string;
|
|
939
|
+
parentRef: ParentLayerActor | null;
|
|
940
|
+
layerName: string;
|
|
941
|
+
layerManagerRef: LayerManagerRef<TLayer, TGroup>;
|
|
942
|
+
listMode?: "show" | "hide" | "hide-children";
|
|
943
|
+
timeInfo?: LayerTimeInfo;
|
|
944
|
+
opacity?: number;
|
|
945
|
+
layerData: TGroup;
|
|
946
|
+
}, NonReducibleUnknown, EventObject, MetaObject, {
|
|
947
|
+
id: "layerGroup";
|
|
948
|
+
states: {
|
|
949
|
+
readonly enabled: {
|
|
950
|
+
states: {
|
|
951
|
+
readonly visible: {};
|
|
952
|
+
readonly hidden: {};
|
|
953
|
+
};
|
|
954
|
+
};
|
|
955
|
+
readonly disabled: {
|
|
956
|
+
states: {
|
|
957
|
+
readonly hidden: {};
|
|
958
|
+
};
|
|
959
|
+
};
|
|
960
|
+
};
|
|
961
|
+
}>;
|
|
962
|
+
|
|
963
|
+
export declare type LayerGroupMachineActor<TLayer = any, TGroup = any> = ActorRefFrom<ReturnType<typeof layerGroupMachine<TLayer, TGroup>>>;
|
|
964
|
+
|
|
965
|
+
export declare type LayerInfo<TLayer = unknown, TGroup = TLayer> = Omit<LayerContext<TLayer, TGroup>, 'layerManagerRef' | 'parentRef'> & {
|
|
966
|
+
enabled: boolean;
|
|
967
|
+
visible: boolean;
|
|
968
|
+
parentId: string | null;
|
|
969
|
+
};
|
|
970
|
+
|
|
971
|
+
export declare function layerMachine<TLayer, TGroup = TLayer>(initialEnabledState: 'enabled' | 'disabled', initialVisibleState: 'visible' | 'hidden'): StateMachine<LayerContext<TLayer, TGroup>, {
|
|
972
|
+
type: "LAYER.ENABLED";
|
|
973
|
+
} | {
|
|
974
|
+
type: "LAYER.DISABLED";
|
|
975
|
+
} | {
|
|
976
|
+
type: "PARENT.VISIBLE";
|
|
977
|
+
} | {
|
|
978
|
+
type: "PARENT.HIDDEN";
|
|
979
|
+
} | {
|
|
980
|
+
type: "PARENT.OPACITY_CHANGED";
|
|
981
|
+
opacity: number;
|
|
982
|
+
} | {
|
|
983
|
+
type: "LAYER.SET_OPACITY";
|
|
984
|
+
opacity: number;
|
|
985
|
+
} | {
|
|
986
|
+
type: "LAYER.SET_TIME_INFO";
|
|
987
|
+
timeInfo: LayerTimeInfo;
|
|
988
|
+
} | {
|
|
989
|
+
type: "LAYER.SET_LAYER_DATA";
|
|
990
|
+
layerData: TLayer;
|
|
991
|
+
}, {}, never, {
|
|
992
|
+
type: "Notify Parent that layer is visible";
|
|
993
|
+
params: NonReducibleUnknown;
|
|
994
|
+
} | {
|
|
995
|
+
type: "Notify Manager of visibility change";
|
|
996
|
+
params: {
|
|
997
|
+
visible: boolean;
|
|
998
|
+
};
|
|
999
|
+
} | {
|
|
1000
|
+
type: "Update Computed Opacity";
|
|
1001
|
+
params: {
|
|
1002
|
+
opacity: number;
|
|
1003
|
+
};
|
|
1004
|
+
} | {
|
|
1005
|
+
type: "Change Layer Opacity";
|
|
1006
|
+
params: {
|
|
1007
|
+
opacity: number;
|
|
1008
|
+
};
|
|
1009
|
+
} | {
|
|
1010
|
+
type: "Change Layer Time Info";
|
|
1011
|
+
params: {
|
|
1012
|
+
timeInfo: LayerTimeInfo;
|
|
1013
|
+
};
|
|
1014
|
+
} | {
|
|
1015
|
+
type: "Change Layer Data";
|
|
1016
|
+
params: {
|
|
1017
|
+
layerData: TLayer;
|
|
1018
|
+
};
|
|
1019
|
+
}, never, never, {
|
|
1020
|
+
enabled: "visible" | "hidden";
|
|
1021
|
+
} | {
|
|
1022
|
+
disabled: "hidden";
|
|
1023
|
+
}, string, {
|
|
1024
|
+
layerManagerRef: LayerManagerRef<TLayer, TGroup>;
|
|
1025
|
+
layerId: string;
|
|
1026
|
+
parentRef: ParentLayerActor | null;
|
|
1027
|
+
layerName: string;
|
|
1028
|
+
listMode?: "show" | "hide";
|
|
1029
|
+
opacity?: number;
|
|
1030
|
+
timeInfo?: LayerTimeInfo;
|
|
1031
|
+
layerData: TLayer;
|
|
1032
|
+
}, NonReducibleUnknown, EventObject, MetaObject, {
|
|
1033
|
+
id: "layer";
|
|
1034
|
+
states: {
|
|
1035
|
+
readonly enabled: {
|
|
1036
|
+
states: {
|
|
1037
|
+
readonly visible: {};
|
|
1038
|
+
readonly hidden: {};
|
|
1039
|
+
};
|
|
1040
|
+
};
|
|
1041
|
+
readonly disabled: {
|
|
1042
|
+
states: {
|
|
1043
|
+
readonly hidden: {};
|
|
1044
|
+
};
|
|
1045
|
+
};
|
|
1046
|
+
};
|
|
1047
|
+
}>;
|
|
1048
|
+
|
|
1049
|
+
export declare type LayerMachineActor<TLayer = any, TGroup = any> = ActorRefFrom<ReturnType<typeof layerMachine<TLayer, TGroup>>>;
|
|
1050
|
+
|
|
1051
|
+
/**
|
|
1052
|
+
* Framework-agnostic manager for an ordered collection of layers and layer groups.
|
|
1053
|
+
*
|
|
1054
|
+
* `TLayer` is the consumer's layer data type; `TGroup` is the group data type
|
|
1055
|
+
* (defaults to `TLayer` when omitted). Lifecycle events are forwarded to both
|
|
1056
|
+
* the optional {@link LayerManagerAdapter} and the callbacks in
|
|
1057
|
+
* {@link LayerManagerOptions}.
|
|
1058
|
+
*/
|
|
1059
|
+
export declare class LayerManager<TLayer, TGroup = undefined> {
|
|
1060
|
+
private readonly _actor;
|
|
1061
|
+
private readonly _options;
|
|
1062
|
+
private _adapter;
|
|
1063
|
+
/** Cleanup functions for each active XState actor event subscription. */
|
|
1064
|
+
private readonly _subscriptions;
|
|
1065
|
+
private _destroyed;
|
|
1066
|
+
constructor(options?: LayerManagerOptions<TLayer, TGroup>);
|
|
1067
|
+
/**
|
|
1068
|
+
* Escape hatch for `@xstate/react` integration (e.g. `useSelector`).
|
|
1069
|
+
* Prefer the typed methods on this class for all other use cases.
|
|
1070
|
+
*/
|
|
1071
|
+
get actor(): LayerManagerActor<TLayer, TGroup>;
|
|
1072
|
+
/** `true` while the underlying XState actor is running (i.e. not yet stopped). */
|
|
1073
|
+
get isReady(): boolean;
|
|
1074
|
+
/** `true` after {@link destroy} has been called. The instance cannot be reused once destroyed. */
|
|
1075
|
+
get destroyed(): boolean;
|
|
1076
|
+
/** The current top-level layers in their display order. */
|
|
1077
|
+
get layers(): ManagedItem<TLayer, TGroup>[];
|
|
1078
|
+
/** Returns the managed item for `id`, or `undefined` if it does not exist. */
|
|
1079
|
+
getLayer(id: string): ManagedItem<TLayer, TGroup> | undefined;
|
|
1080
|
+
/** Starts the XState actor, wires event subscriptions, and registers any pending adapter. */
|
|
1081
|
+
private start;
|
|
1082
|
+
/** Alias for {@link destroy}. */
|
|
1083
|
+
stop(): void;
|
|
1084
|
+
/** Resets layer state, unregisters the adapter, cancels all subscriptions, and stops the actor. */
|
|
1085
|
+
destroy(): void;
|
|
1086
|
+
/** Removes all layers and groups, returning the manager to its initial empty state. */
|
|
1087
|
+
reset(): void;
|
|
1088
|
+
/**
|
|
1089
|
+
* Attach or replace the adapter at any time.
|
|
1090
|
+
* Pass `null` to detach the current adapter.
|
|
1091
|
+
*/
|
|
1092
|
+
setAdapter(adapter: LayerManagerAdapter<TLayer, TGroup> | null): void;
|
|
1093
|
+
/** Adds a single layer to the manager. */
|
|
1094
|
+
addLayer(params: AddLayerParams<TLayer>): void;
|
|
1095
|
+
/** Adds a layer group to the manager. */
|
|
1096
|
+
addGroup(params: AddGroupLayerParams<TGroup>): void;
|
|
1097
|
+
/** Removes the layer or group with the given `layerId`. */
|
|
1098
|
+
removeLayer(layerId: string): void;
|
|
1099
|
+
/** Shows or hides the layer with the given `layerId`. */
|
|
1100
|
+
setVisibility(layerId: string, visible: boolean): void;
|
|
1101
|
+
/** Alias for {@link setVisibility}. */
|
|
1102
|
+
setEnabled(layerId: string, enabled: boolean): void;
|
|
1103
|
+
/** Sets the opacity (0–1) for the layer with the given `layerId`. */
|
|
1104
|
+
setOpacity(layerId: string, opacity: number): void;
|
|
1105
|
+
/** Sets the time info for the layer with the given `layerId`. */
|
|
1106
|
+
setTimeInfo(layerId: string, timeInfo: LayerTimeInfo): void;
|
|
1107
|
+
/** Replaces the `layerData` payload for the layer or group with the given `layerId`. */
|
|
1108
|
+
updateLayerData(layerId: string, layerData: TLayer | TGroup): void;
|
|
1109
|
+
/** Subscribes to machine-emitted events and forwards them to the adapter and options callbacks. */
|
|
1110
|
+
private _wireSubscriptions;
|
|
1111
|
+
private _cleanupSubscriptions;
|
|
1112
|
+
private _registerAdapter;
|
|
1113
|
+
/**
|
|
1114
|
+
* Converts an internal XState actor context into the stable
|
|
1115
|
+
* {@link ManagedLayerInfo} shape exposed to adapters and option callbacks.
|
|
1116
|
+
* The `isLayerMachine` branch is required for TypeScript to narrow `ctx`
|
|
1117
|
+
* to the correct discriminated union member.
|
|
1118
|
+
*/
|
|
1119
|
+
private _toManagedLayerInfo;
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
export declare type LayerManagerActor<TLayer, TGroup = TLayer> = ActorRefFrom<LayerManagerMachine<TLayer, TGroup>>;
|
|
1123
|
+
|
|
1124
|
+
export declare interface LayerManagerAdapter<TLayer = unknown, TGroup = unknown> {
|
|
1125
|
+
/**
|
|
1126
|
+
* Called by LayerManager.start() (or setAdapter()) to give the adapter
|
|
1127
|
+
* a reference back into the manager for querying state.
|
|
1128
|
+
*/
|
|
1129
|
+
register?: (layerManager: LayerManager<TLayer, TGroup>, callbacks: LayerManagerCallbacks<TLayer, TGroup>) => void;
|
|
1130
|
+
/** Called by LayerManager.dispose() or setAdapter(null) to clean up. */
|
|
1131
|
+
unregister?: () => void;
|
|
1132
|
+
/** Called when a new layer is added and ready. */
|
|
1133
|
+
onLayerAdded?: (info: ManagedLayerInfo<TLayer, TGroup>) => void;
|
|
1134
|
+
/** Called when a layer is removed. */
|
|
1135
|
+
onLayerRemoved?: (layerId: string) => void;
|
|
1136
|
+
/** Called when a layer's visibility changes. */
|
|
1137
|
+
onVisibilityChanged?: (info: ManagedLayerInfo<TLayer, TGroup>, visible: boolean) => void;
|
|
1138
|
+
/** Called when a layer's computed opacity changes. */
|
|
1139
|
+
onOpacityChanged?: (info: ManagedLayerInfo<TLayer, TGroup>, computedOpacity: number) => void;
|
|
1140
|
+
/** Called when a layer's time info is updated. */
|
|
1141
|
+
onTimeInfoChanged?: (info: ManagedLayerInfo<TLayer, TGroup>, timeInfo: LayerTimeInfo) => void;
|
|
1142
|
+
/** Called when a layer's data payload is updated. */
|
|
1143
|
+
onLayerDataChanged?: (info: ManagedLayerInfo<TLayer, TGroup>) => void;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
export declare interface LayerManagerCallbacks<TLayer, TGroup> {
|
|
1147
|
+
/** Returns the current ordered top-level layer snapshot. */
|
|
1148
|
+
getSnapshot: () => ManagedItem<TLayer, TGroup>[];
|
|
1149
|
+
/** Returns a single managed item by ID, or undefined if not found. */
|
|
1150
|
+
getLayer: (id: string) => ManagedItem<TLayer, TGroup> | undefined;
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
export declare interface LayerManagerContext<TLayer, TGroup = TLayer> {
|
|
1154
|
+
layers: ManagedItem<TLayer, TGroup>[];
|
|
1155
|
+
childLayerOrder: string[];
|
|
1156
|
+
allowNestedGroupLayers: boolean;
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
export declare type LayerManagerEmittedEvent<TLayer, TGroup = TLayer> = {
|
|
1160
|
+
type: 'LAYER.ADDED';
|
|
1161
|
+
layerId: string;
|
|
1162
|
+
visible: boolean;
|
|
1163
|
+
} | {
|
|
1164
|
+
type: 'LAYER.REMOVED';
|
|
1165
|
+
layerId: string;
|
|
1166
|
+
} | {
|
|
1167
|
+
type: 'LAYER.ORDER_CHANGED';
|
|
1168
|
+
layerOrder: string[];
|
|
1169
|
+
} | {
|
|
1170
|
+
type: 'LAYER.VISIBILITY_CHANGED';
|
|
1171
|
+
layerId: string;
|
|
1172
|
+
visible: boolean;
|
|
1173
|
+
} | {
|
|
1174
|
+
type: 'LAYER.OPACITY_CHANGED';
|
|
1175
|
+
layerId: string;
|
|
1176
|
+
opacity: number;
|
|
1177
|
+
computedOpacity: number;
|
|
1178
|
+
} | {
|
|
1179
|
+
type: 'LAYER.TIME_INFO_CHANGED';
|
|
1180
|
+
layerId: string;
|
|
1181
|
+
timeInfo: LayerTimeInfo;
|
|
1182
|
+
} | {
|
|
1183
|
+
type: 'LAYER.LAYER_DATA_CHANGED';
|
|
1184
|
+
layerId: string;
|
|
1185
|
+
layerData: TLayer | TGroup;
|
|
1186
|
+
};
|
|
1187
|
+
|
|
1188
|
+
export declare type LayerManagerEvent<TLayer, TGroup = TLayer> = {
|
|
1189
|
+
type: 'LAYER.ADD';
|
|
1190
|
+
params: AddManagedLayerParams<TLayer, TGroup>;
|
|
1191
|
+
} | {
|
|
1192
|
+
type: 'LAYER.REMOVE';
|
|
1193
|
+
layerId: string;
|
|
1194
|
+
} | {
|
|
1195
|
+
type: 'LAYER.UPDATE_VISIBILITY';
|
|
1196
|
+
layerId: string;
|
|
1197
|
+
visible: boolean;
|
|
1198
|
+
} | {
|
|
1199
|
+
type: 'LAYER.UPDATE_OPACITY';
|
|
1200
|
+
layerId: string;
|
|
1201
|
+
opacity: number;
|
|
1202
|
+
computedOpacity: number;
|
|
1203
|
+
} | {
|
|
1204
|
+
type: 'LAYER.UPDATE_TIME_INFO';
|
|
1205
|
+
layerId: string;
|
|
1206
|
+
timeInfo: LayerTimeInfo;
|
|
1207
|
+
} | {
|
|
1208
|
+
type: 'LAYER.UPDATE_LAYER_DATA';
|
|
1209
|
+
layerId: string;
|
|
1210
|
+
layerData: TLayer | TGroup;
|
|
1211
|
+
} | {
|
|
1212
|
+
type: 'RESET';
|
|
1213
|
+
};
|
|
1214
|
+
|
|
1215
|
+
export declare type LayerManagerMachine<TLayer, TGroup = TLayer> = ReturnType<typeof createLayerManagerMachine<TLayer, TGroup>>;
|
|
1216
|
+
|
|
1217
|
+
export declare interface LayerManagerOptions<TLayer, TGroup = TLayer> {
|
|
1218
|
+
/** Allow layer groups to be nested inside other layer groups. */
|
|
1219
|
+
allowNestedGroupLayers?: boolean;
|
|
1220
|
+
/** Called whenever a new layer is added. */
|
|
1221
|
+
onLayerAdded?: (info: ManagedLayerInfo<TLayer, TGroup>) => void;
|
|
1222
|
+
/** Called whenever a layer is removed. */
|
|
1223
|
+
onLayerRemoved?: (layerId: string) => void;
|
|
1224
|
+
/** Called whenever a layer's visibility changes. */
|
|
1225
|
+
onVisibilityChanged?: (info: ManagedLayerInfo<TLayer, TGroup>, visible: boolean) => void;
|
|
1226
|
+
/** Called whenever a layer's computed opacity changes. */
|
|
1227
|
+
onOpacityChanged?: (info: ManagedLayerInfo<TLayer, TGroup>, computedOpacity: number) => void;
|
|
1228
|
+
/** Called whenever a layer's time info changes. */
|
|
1229
|
+
onTimeInfoChanged?: (info: ManagedLayerInfo<TLayer, TGroup>, timeInfo: LayerTimeInfo) => void;
|
|
1230
|
+
/** Called when an internal error occurs. */
|
|
1231
|
+
onError?: (error: Error) => void;
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
export declare type LayerManagerRef<TLayer, TGroup = TLayer> = ActorRef<Snapshot<unknown>, LayerManagerEvent<TLayer, TGroup>>;
|
|
1235
|
+
|
|
1236
|
+
export declare type LayerTimeInfo = BaseTimeInfo & (SingleTimeInfo | RangeTimeInfo);
|
|
1237
|
+
|
|
1238
|
+
export declare type LayerType = 'layer' | 'layerGroup';
|
|
1239
|
+
|
|
1240
|
+
export declare type ManagedItem<TLayer, TGroup = TLayer> = ManagedLayer<TLayer, TGroup> | ManagedLayerGroup<TLayer, TGroup>;
|
|
1241
|
+
|
|
1242
|
+
export declare interface ManagedLayer<TLayer, TGroup = TLayer> {
|
|
1243
|
+
type: 'layer';
|
|
1244
|
+
layerActor: LayerMachineActor<TLayer, TGroup>;
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
export declare interface ManagedLayerGroup<TLayer, TGroup = TLayer> {
|
|
1248
|
+
type: 'layerGroup';
|
|
1249
|
+
layerActor: LayerGroupMachineActor<TLayer, TGroup>;
|
|
1250
|
+
}
|
|
1251
|
+
|
|
1252
|
+
export declare type ManagedLayerInfo<TLayer = unknown, TGroup = TLayer> = LayerInfo<TLayer, TGroup> | LayerGroupInfo<TLayer, TGroup>;
|
|
1253
|
+
|
|
1254
|
+
export declare type ParentEvent = {
|
|
1255
|
+
type: 'CHILD.VISIBLE';
|
|
1256
|
+
layerId: string;
|
|
1257
|
+
} | {
|
|
1258
|
+
type: 'LAYERS.ADD_CHILD';
|
|
1259
|
+
child: ChildLayerActor;
|
|
1260
|
+
index?: number;
|
|
1261
|
+
position?: 'top' | 'bottom';
|
|
1262
|
+
} | {
|
|
1263
|
+
type: 'LAYERS.REMOVE_CHILD';
|
|
1264
|
+
id: string;
|
|
1265
|
+
};
|
|
1266
|
+
|
|
1267
|
+
export declare type ParentLayerActor = ActorRef<MachineSnapshot<LayerGroupContext<any, any>, any, any, any, any, any, any, any>, ParentEvent>;
|
|
1268
|
+
|
|
1269
|
+
/** Duration or span of time */
|
|
1270
|
+
export declare interface RangeTimeInfo extends BaseTimeInfo {
|
|
1271
|
+
type: 'range';
|
|
1272
|
+
start: DateValue;
|
|
1273
|
+
end: DateValue;
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
/** Single point in time */
|
|
1277
|
+
export declare interface SingleTimeInfo extends BaseTimeInfo {
|
|
1278
|
+
type: 'single';
|
|
1279
|
+
value: DateValue;
|
|
1280
|
+
}
|
|
1281
|
+
|
|
1282
|
+
/**
|
|
1283
|
+
* Updates an array of layer IDs to include a new ID at a specific location.
|
|
1284
|
+
*
|
|
1285
|
+
* @param currentOrder - The existing array of IDs.
|
|
1286
|
+
* @param newLayerId - The ID to insert.
|
|
1287
|
+
* @param index - (Optional) Specific index to insert at.
|
|
1288
|
+
* @param position - (Optional) 'top' (end of array) or 'bottom' (start of array).
|
|
1289
|
+
* @returns A new array with the order updated.
|
|
1290
|
+
*/
|
|
1291
|
+
export declare function updateLayerOrder(currentOrder: string[], newLayerId: string, index?: number, position?: 'top' | 'bottom'): string[];
|
|
1292
|
+
|
|
1293
|
+
export { }
|