@elaraai/east-ui 1.0.14 → 1.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/src/charts/chart/index.d.ts +22 -0
  2. package/dist/src/charts/chart/index.d.ts.map +1 -1
  3. package/dist/src/charts/chart/index.js +17 -5
  4. package/dist/src/charts/chart/index.js.map +1 -1
  5. package/dist/src/charts/spec/index.d.ts +23 -0
  6. package/dist/src/charts/spec/index.d.ts.map +1 -1
  7. package/dist/src/charts/spec/types.d.ts +12 -0
  8. package/dist/src/charts/spec/types.d.ts.map +1 -1
  9. package/dist/src/charts/spec/types.js +3 -0
  10. package/dist/src/charts/spec/types.js.map +1 -1
  11. package/dist/src/collections/index.d.ts +1 -0
  12. package/dist/src/collections/index.d.ts.map +1 -1
  13. package/dist/src/collections/index.js +1 -0
  14. package/dist/src/collections/index.js.map +1 -1
  15. package/dist/src/collections/map/index.d.ts +1183 -0
  16. package/dist/src/collections/map/index.d.ts.map +1 -0
  17. package/dist/src/collections/map/index.js +805 -0
  18. package/dist/src/collections/map/index.js.map +1 -0
  19. package/dist/src/collections/map/types.d.ts +589 -0
  20. package/dist/src/collections/map/types.d.ts.map +1 -0
  21. package/dist/src/collections/map/types.js +318 -0
  22. package/dist/src/collections/map/types.js.map +1 -0
  23. package/dist/src/component.d.ts +243 -0
  24. package/dist/src/component.d.ts.map +1 -1
  25. package/dist/src/component.js +36 -0
  26. package/dist/src/component.js.map +1 -1
  27. package/dist/src/index.d.ts +1 -1
  28. package/dist/src/index.d.ts.map +1 -1
  29. package/dist/src/index.js +1 -1
  30. package/dist/src/index.js.map +1 -1
  31. package/dist/src/internal.d.ts +1 -1
  32. package/dist/src/internal.d.ts.map +1 -1
  33. package/dist/src/internal.js +1 -1
  34. package/dist/src/internal.js.map +1 -1
  35. package/dist/src/platform/slice/impl.d.ts +1 -0
  36. package/dist/src/platform/slice/impl.d.ts.map +1 -1
  37. package/dist/src/platform/slice/impl.js +2 -2
  38. package/dist/src/platform/slice/impl.js.map +1 -1
  39. package/dist/src/platform/slice/index.d.ts +12 -0
  40. package/dist/src/platform/slice/index.d.ts.map +1 -1
  41. package/dist/src/platform/slice/index.js +3 -0
  42. package/dist/src/platform/slice/index.js.map +1 -1
  43. package/dist/src/runtime/collections/index.d.ts +1 -0
  44. package/dist/src/runtime/collections/index.d.ts.map +1 -1
  45. package/dist/src/runtime/collections/index.js +1 -0
  46. package/dist/src/runtime/collections/index.js.map +1 -1
  47. package/dist/src/runtime/collections/map.d.ts +74 -0
  48. package/dist/src/runtime/collections/map.d.ts.map +1 -0
  49. package/dist/src/runtime/collections/map.js +70 -0
  50. package/dist/src/runtime/collections/map.js.map +1 -0
  51. package/dist/src/slice/breakdown/index.d.ts +1 -0
  52. package/dist/src/slice/breakdown/index.d.ts.map +1 -1
  53. package/dist/src/slice/breakdown/types.d.ts +1 -0
  54. package/dist/src/slice/breakdown/types.d.ts.map +1 -1
  55. package/dist/src/slice/cohort/index.d.ts +1 -0
  56. package/dist/src/slice/cohort/index.d.ts.map +1 -1
  57. package/dist/src/slice/cohort/types.d.ts +1 -0
  58. package/dist/src/slice/cohort/types.d.ts.map +1 -1
  59. package/dist/src/slice/filter/index.d.ts +1 -0
  60. package/dist/src/slice/filter/index.d.ts.map +1 -1
  61. package/dist/src/slice/filter/types.d.ts +1 -0
  62. package/dist/src/slice/filter/types.d.ts.map +1 -1
  63. package/dist/src/slice/index.d.ts +12 -0
  64. package/dist/src/slice/index.d.ts.map +1 -1
  65. package/dist/src/slice/legend/index.d.ts +1 -0
  66. package/dist/src/slice/legend/index.d.ts.map +1 -1
  67. package/dist/src/slice/legend/types.d.ts +1 -0
  68. package/dist/src/slice/legend/types.d.ts.map +1 -1
  69. package/dist/src/slice/range/index.d.ts +1 -0
  70. package/dist/src/slice/range/index.d.ts.map +1 -1
  71. package/dist/src/slice/range/types.d.ts +1 -0
  72. package/dist/src/slice/range/types.d.ts.map +1 -1
  73. package/dist/src/slice/search/index.d.ts +1 -0
  74. package/dist/src/slice/search/index.d.ts.map +1 -1
  75. package/dist/src/slice/search/types.d.ts +1 -0
  76. package/dist/src/slice/search/types.d.ts.map +1 -1
  77. package/dist/src/slice/summary/index.d.ts +1 -0
  78. package/dist/src/slice/summary/index.d.ts.map +1 -1
  79. package/dist/src/slice/summary/types.d.ts +1 -0
  80. package/dist/src/slice/summary/types.d.ts.map +1 -1
  81. package/dist/test/charts/chart.examples.d.ts +1 -0
  82. package/dist/test/charts/chart.examples.d.ts.map +1 -1
  83. package/dist/test/charts/chart.examples.js +15 -0
  84. package/dist/test/charts/chart.examples.js.map +1 -1
  85. package/dist/test/collections/map.examples.d.ts +8 -0
  86. package/dist/test/collections/map.examples.d.ts.map +1 -0
  87. package/dist/test/collections/map.examples.js +150 -0
  88. package/dist/test/collections/map.examples.js.map +1 -0
  89. package/package.json +3 -3
@@ -0,0 +1,1183 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * `Map` — an interactive geographic basemap (CARTO / OSM raster tiles) with
7
+ * H3 hex and filled-area overlays, connector lines, pins, standalone labels,
8
+ * and a generalised overlay slot that hosts arbitrary East `UIComponent`
9
+ * children (a HUD, a legend, a back button) positioned over the canvas.
10
+ * **Read-only / selection-only**: click an area (returns its key), zoom, and
11
+ * fly to; any writes ride in through ordinary `Button` children in the
12
+ * overlay slot. Colour stays theme-owned — data selects a `tone` / `status`
13
+ * and the renderer's recipe maps each to a token.
14
+ *
15
+ * @packageDocumentation
16
+ */
17
+ import { type ExprType, type SubtypeExprOrValue, type TypeOf, ArrayType, BooleanType, FloatType, FunctionType, IntegerType, NullType, OptionType, StringType, StructType } from "@elaraai/east";
18
+ import { UIComponentType } from "../../component.js";
19
+ import { AlignType, type AlignLiteral } from "../../style/content.js";
20
+ import { type StatusTokenType } from "../../style/interaction.js";
21
+ import { type IconName } from "../../display/icon/types.js";
22
+ import { MapLatLngType, MapToneType, MapTileType, MapFocusType, MapAreaShapeType, MapAreaType, MapHexLayerType, MapMarkerType, MapLineStyleType, MapLineType, MapLabelType } from "./types.js";
23
+ export { MapLatLngType, MapToneType, MapCartoStyleType, MapTileType, MapFocusType, MapAreaShapeType, MapAreaType, MapHexLayerType, MapMarkerType, MapLineStyleType, MapLineType, MapLabelType, } from "./types.js";
24
+ /** String literal form of {@link MapToneType} tags. */
25
+ export type MapToneLiteral = "brand" | "ink" | "muted" | "success" | "warning" | "danger";
26
+ /** String literal form of {@link MapCartoStyleType} tags. */
27
+ export type MapCartoLiteral = "positron" | "darkMatter" | "voyager";
28
+ /**
29
+ * Builds a geographic point value.
30
+ *
31
+ * @param lat - Latitude in degrees
32
+ * @param lng - Longitude in degrees
33
+ * @returns A `MapLatLngType` value
34
+ */
35
+ declare function at(lat: SubtypeExprOrValue<FloatType>, lng: SubtypeExprOrValue<FloatType>): ExprType<MapLatLngType>;
36
+ /**
37
+ * Builds a CARTO raster basemap.
38
+ *
39
+ * @param style - The CARTO preset (default `positron`)
40
+ * @returns A `MapTileType` value
41
+ */
42
+ declare function carto(style?: MapCartoLiteral): ExprType<MapTileType>;
43
+ /**
44
+ * Builds an OpenStreetMap raster basemap.
45
+ *
46
+ * @returns A `MapTileType` value
47
+ */
48
+ declare function osm(): ExprType<MapTileType>;
49
+ /** Configuration for {@link tile} — a raw XYZ basemap. */
50
+ export interface MapTileConfig {
51
+ /** XYZ tile URL template. */
52
+ url: SubtypeExprOrValue<StringType>;
53
+ /** Attribution HTML kept visible in the corner. */
54
+ attribution: SubtypeExprOrValue<StringType>;
55
+ /** Optional `{s}` subdomain list. */
56
+ subdomains?: SubtypeExprOrValue<ArrayType<StringType>>;
57
+ /** Optional max zoom for the layer. */
58
+ maxZoom?: SubtypeExprOrValue<IntegerType>;
59
+ /** Optional retina `{r}` tiles. */
60
+ detectRetina?: SubtypeExprOrValue<BooleanType> | boolean;
61
+ }
62
+ /**
63
+ * Builds a raw XYZ basemap with explicit attribution.
64
+ *
65
+ * @param config - The tile URL, attribution, and optional `subdomains` / `maxZoom` / `detectRetina`
66
+ * @returns A `MapTileType` value
67
+ */
68
+ declare function tile(config: MapTileConfig): ExprType<MapTileType>;
69
+ /**
70
+ * Builds an `hexDisk` area shape — a `gridDisk(origin, k)` blob at a resolution.
71
+ *
72
+ * @param center - The disk origin
73
+ * @param k - Ring count around the origin
74
+ * @param resolution - H3 resolution
75
+ * @returns A `MapAreaShapeType` value
76
+ */
77
+ declare function hexDisk(center: SubtypeExprOrValue<MapLatLngType>, k: SubtypeExprOrValue<IntegerType>, resolution: SubtypeExprOrValue<IntegerType>): ExprType<MapAreaShapeType>;
78
+ /**
79
+ * Builds a `cells` area shape — an explicit set of H3 cell ids.
80
+ *
81
+ * @param ids - The H3 cell ids
82
+ * @returns A `MapAreaShapeType` value
83
+ */
84
+ declare function cells(ids: SubtypeExprOrValue<ArrayType<StringType>>): ExprType<MapAreaShapeType>;
85
+ /**
86
+ * Builds a `polygon` area shape — an explicit ring of points (an irregular
87
+ * region boundary). Two polygons that share an edge abut exactly, so adjacent
88
+ * regions running up against each other are authored by reusing the shared
89
+ * boundary points in both.
90
+ *
91
+ * @param points - The boundary points, in order (auto-closed; `Map.at(...)`)
92
+ * @returns A `MapAreaShapeType` value
93
+ */
94
+ declare function polygon(points: SubtypeExprOrValue<ArrayType<MapLatLngType>>): ExprType<MapAreaShapeType>;
95
+ /**
96
+ * Builds a `point` camera target — centre on a point at a zoom level.
97
+ *
98
+ * @param center - The centre
99
+ * @param zoom - The zoom level to settle at
100
+ * @returns A `MapFocusType` value
101
+ */
102
+ declare function point(center: SubtypeExprOrValue<MapLatLngType>, zoom: SubtypeExprOrValue<IntegerType>): ExprType<MapFocusType>;
103
+ /**
104
+ * Builds a `bounds` camera target — frame a south-west / north-east box.
105
+ *
106
+ * @param sw - South-west corner
107
+ * @param ne - North-east corner
108
+ * @returns A `MapFocusType` value
109
+ */
110
+ declare function bounds(sw: SubtypeExprOrValue<MapLatLngType>, ne: SubtypeExprOrValue<MapLatLngType>): ExprType<MapFocusType>;
111
+ /** Stroke configuration for {@link solid} / {@link dashed}. */
112
+ export interface MapLineStyleConfig {
113
+ /** Stroke tone. */
114
+ tone?: MapToneLiteral;
115
+ /** Stroke width in px. */
116
+ weight?: number;
117
+ }
118
+ /**
119
+ * Builds a `solid` line style.
120
+ *
121
+ * @param config - Optional stroke configuration (`tone`, `weight`)
122
+ * @returns A `MapLineStyleType` value
123
+ */
124
+ declare function solid(config?: MapLineStyleConfig): ExprType<MapLineStyleType>;
125
+ /**
126
+ * Builds a `dashed` line style.
127
+ *
128
+ * @param config - Optional stroke configuration (`tone`, `weight`)
129
+ * @returns A `MapLineStyleType` value
130
+ */
131
+ declare function dashed(config?: MapLineStyleConfig): ExprType<MapLineStyleType>;
132
+ /** Configuration for {@link hex}. */
133
+ export interface MapHexConfig {
134
+ /** Optional faint background lattice (a disk of cells around a centre). */
135
+ lattice?: {
136
+ /** The lattice centre. */
137
+ center: SubtypeExprOrValue<MapLatLngType>;
138
+ /** Ring count around the centre. */
139
+ k: SubtypeExprOrValue<IntegerType>;
140
+ /** H3 resolution. */
141
+ resolution: SubtypeExprOrValue<IntegerType>;
142
+ };
143
+ /** Optional per-cell detail. */
144
+ cells?: readonly MapHexCellInput[];
145
+ /** Optional lattice stroke tone (default `muted`). */
146
+ tone?: SubtypeExprOrValue<MapToneType> | MapToneLiteral;
147
+ /** Optional click-through flag (default false — decorative). */
148
+ interactive?: SubtypeExprOrValue<BooleanType> | boolean;
149
+ }
150
+ /** One per-cell detail entry for {@link hex}. */
151
+ export interface MapHexCellInput {
152
+ /** H3 cell id. */
153
+ id: SubtypeExprOrValue<StringType>;
154
+ /** Optional status-token option for the cell fill. */
155
+ status?: SubtypeExprOrValue<OptionType<StatusTokenType>>;
156
+ /** Optional fill alpha (0–1). */
157
+ fillOpacity?: SubtypeExprOrValue<FloatType>;
158
+ /** Optional detail text shown only at/after `lodZoom`. */
159
+ detail?: SubtypeExprOrValue<StringType>;
160
+ }
161
+ /**
162
+ * Builds the hex layer — a faint background lattice plus optional per-cell
163
+ * detail revealed at LOD.
164
+ *
165
+ * @param config - Optional `lattice`, `cells`, `tone`, and `interactive`
166
+ * @returns A `MapHexLayerType` value
167
+ */
168
+ declare function hex(config?: MapHexConfig): ExprType<MapHexLayerType>;
169
+ /**
170
+ * The generalised overlay slot value — an East `UIComponent` positioned over
171
+ * the map, either screen-anchored (`align` / `verticalAlign`) or pinned to a
172
+ * coordinate (`geoAnchor`).
173
+ *
174
+ * @property content - The East child tree rendered over the canvas
175
+ * @property align - Horizontal screen anchor
176
+ * @property verticalAlign - Vertical screen anchor
177
+ * @property key - Optional stable child storage-key segment
178
+ * @property geoAnchor - Optional coordinate the overlay follows on pan / zoom
179
+ * @property offset - Optional px nudge from the anchor
180
+ * @property interactive - Optional pointer-events flag (default true)
181
+ */
182
+ export declare const MapOverlayType: StructType<{
183
+ /** The East child tree rendered over the canvas */
184
+ readonly content: import("@elaraai/east").RecursiveType<import("../../component.js").UIComponentNode>;
185
+ /** Horizontal screen anchor */
186
+ readonly align: import("@elaraai/east").VariantType<{
187
+ readonly start: NullType;
188
+ readonly center: NullType;
189
+ readonly end: NullType;
190
+ }>;
191
+ /** Vertical screen anchor */
192
+ readonly verticalAlign: import("@elaraai/east").VariantType<{
193
+ readonly start: NullType;
194
+ readonly center: NullType;
195
+ readonly end: NullType;
196
+ }>;
197
+ /** Optional stable child storage-key segment */
198
+ readonly key: OptionType<StringType>;
199
+ /** Optional coordinate the overlay follows on pan / zoom */
200
+ readonly geoAnchor: OptionType<StructType<{
201
+ readonly lat: FloatType;
202
+ readonly lng: FloatType;
203
+ }>>;
204
+ /** Optional px nudge from the anchor */
205
+ readonly offset: OptionType<StructType<{
206
+ readonly x: FloatType;
207
+ readonly y: FloatType;
208
+ }>>;
209
+ /** Optional pointer-events flag (default true; false ⇒ click-through) */
210
+ readonly interactive: OptionType<BooleanType>;
211
+ }>;
212
+ /**
213
+ * Type representing the overlay slot.
214
+ */
215
+ export type MapOverlayType = typeof MapOverlayType;
216
+ /** A positioned overlay child, as produced by {@link overlay}. */
217
+ export type MapOverlayInput = ExprType<MapOverlayType>;
218
+ /** Options for {@link overlay}. */
219
+ export interface MapOverlayOptions {
220
+ /** Horizontal screen anchor (default `start`). */
221
+ align?: AlignLiteral | SubtypeExprOrValue<AlignType>;
222
+ /** Vertical screen anchor (default `start`). */
223
+ verticalAlign?: AlignLiteral | SubtypeExprOrValue<AlignType>;
224
+ /** Optional stable child storage-key segment. */
225
+ key?: SubtypeExprOrValue<StringType>;
226
+ /** Optional coordinate the overlay follows on pan / zoom. */
227
+ geoAnchor?: SubtypeExprOrValue<MapLatLngType>;
228
+ /** Optional px nudge from the anchor. */
229
+ offset?: {
230
+ x: SubtypeExprOrValue<FloatType>;
231
+ y: SubtypeExprOrValue<FloatType>;
232
+ };
233
+ /** Optional pointer-events flag (default true; false ⇒ click-through). */
234
+ interactive?: SubtypeExprOrValue<BooleanType> | boolean;
235
+ }
236
+ /**
237
+ * Builds a positioned overlay child for the `overlays` slot.
238
+ *
239
+ * @param content - The East child tree (a HUD, legend, back button)
240
+ * @param options - Anchor / offset / interactivity options
241
+ * @returns A `MapOverlayType` value
242
+ */
243
+ declare function overlay(content: SubtypeExprOrValue<UIComponentType>, options?: MapOverlayOptions): MapOverlayInput;
244
+ /**
245
+ * The struct element type of a `SubtypeExprOrValue<ArrayType<StructType>>`.
246
+ */
247
+ export type RowElement<T extends SubtypeExprOrValue<ArrayType<StructType>>> = TypeOf<T> extends ArrayType<infer S> ? (S extends StructType ? S : never) : never;
248
+ /**
249
+ * Fields the `marker` mapper returns — one pin, before defaults.
250
+ *
251
+ * @property key - Marker identity — `onMarkerClick` returns it
252
+ * @property lat - Latitude in degrees
253
+ * @property lng - Longitude in degrees
254
+ * @property label - Optional permanent tooltip
255
+ * @property icon - Optional Font Awesome solid icon (static name or expression)
256
+ * @property tone - Optional marker tone
257
+ * @property minZoom - Optional LOD gate; the pin appears only at/after this zoom
258
+ * @property interactive - Optional click flag (default true)
259
+ */
260
+ export interface MapMarkerFields {
261
+ /** Marker identity — `onMarkerClick` returns it. */
262
+ key: SubtypeExprOrValue<StringType>;
263
+ /** Latitude in degrees. */
264
+ lat: SubtypeExprOrValue<FloatType>;
265
+ /** Longitude in degrees. */
266
+ lng: SubtypeExprOrValue<FloatType>;
267
+ /** Optional permanent tooltip. */
268
+ label?: SubtypeExprOrValue<StringType>;
269
+ /** Optional Font Awesome solid icon (static name or expression). */
270
+ icon?: IconName | ExprType<StringType>;
271
+ /** Optional marker tone. */
272
+ tone?: SubtypeExprOrValue<MapToneType> | MapToneLiteral;
273
+ /** Optional LOD gate; the pin appears only at/after this zoom. */
274
+ minZoom?: SubtypeExprOrValue<IntegerType>;
275
+ /** Optional click flag (default true). */
276
+ interactive?: SubtypeExprOrValue<BooleanType> | boolean;
277
+ }
278
+ /**
279
+ * Builds a resolved marker value.
280
+ *
281
+ * @param fields - The marker fields ({@link MapMarkerFields})
282
+ * @returns A `MapMarkerType` value
283
+ */
284
+ declare function marker(fields: MapMarkerFields): ExprType<MapMarkerType>;
285
+ /**
286
+ * Fields the `area` mapper returns — one filled area, before defaults.
287
+ *
288
+ * @property key - Area identity — `onAreaClick` returns it
289
+ * @property shape - The H3 / polygon boundary (`Map.hexDisk()` / `Map.cells()`)
290
+ * @property label - Optional permanent tooltip
291
+ * @property detailLabel - Optional richer label shown only at/after `lodZoom`
292
+ * @property status - Optional status-token option; drives colour + pulse
293
+ * @property tone - Optional explicit tone override; absent ⇒ `status` drives colour
294
+ * @property color - Optional raw CSS colour; wins over `tone`
295
+ * @property fillOpacity - Optional fill alpha (0–1)
296
+ * @property weight - Optional stroke width in px
297
+ * @property pulse - Optional explicit pulse override; absent ⇒ derived from `status`
298
+ * @property flyTo - Optional click camera target; absent ⇒ frame the shape
299
+ */
300
+ export interface MapAreaFields {
301
+ /** Area identity — `onAreaClick` returns it. */
302
+ key: SubtypeExprOrValue<StringType>;
303
+ /** The H3 / polygon boundary (`Map.hexDisk()` / `Map.cells()`). */
304
+ shape: SubtypeExprOrValue<MapAreaShapeType>;
305
+ /** Optional permanent tooltip. */
306
+ label?: SubtypeExprOrValue<StringType>;
307
+ /** Optional richer label shown only at/after `lodZoom`. */
308
+ detailLabel?: SubtypeExprOrValue<StringType>;
309
+ /** Optional status-token option; drives colour + pulse. */
310
+ status?: SubtypeExprOrValue<OptionType<StatusTokenType>>;
311
+ /** Optional explicit tone override; absent ⇒ `status` drives colour. */
312
+ tone?: SubtypeExprOrValue<MapToneType> | MapToneLiteral;
313
+ /** Optional raw CSS colour (e.g. `"#2D7FF9"`); wins over `tone`. */
314
+ color?: SubtypeExprOrValue<StringType>;
315
+ /** Optional fill alpha (0–1). */
316
+ fillOpacity?: SubtypeExprOrValue<FloatType>;
317
+ /** Optional stroke width in px. */
318
+ weight?: SubtypeExprOrValue<FloatType>;
319
+ /** Optional explicit pulse override; absent ⇒ derived from `status`. */
320
+ pulse?: SubtypeExprOrValue<BooleanType> | boolean;
321
+ /** Optional click camera target; absent ⇒ frame the shape. */
322
+ flyTo?: SubtypeExprOrValue<MapFocusType>;
323
+ /** Optional click flag; absent ⇒ clickable only when a callback / `flyTo` is set. */
324
+ interactive?: SubtypeExprOrValue<BooleanType> | boolean;
325
+ }
326
+ /**
327
+ * Builds a resolved area value.
328
+ *
329
+ * @param fields - The area fields ({@link MapAreaFields})
330
+ * @returns A `MapAreaType` value
331
+ */
332
+ declare function area(fields: MapAreaFields): ExprType<MapAreaType>;
333
+ /**
334
+ * Fields the `line` mapper returns — one connector, before defaults.
335
+ *
336
+ * @property key - Line identity
337
+ * @property points - The polyline points, in order (`Map.at()`)
338
+ * @property style - Optional style (default `Map.solid()`)
339
+ * @property flow - Optional animated dash-offset when active
340
+ * @property arrow - Optional arrowhead at the destination
341
+ */
342
+ export interface MapLineFields {
343
+ /** Line identity. */
344
+ key: SubtypeExprOrValue<StringType>;
345
+ /** The polyline points, in order (`Map.at()`). */
346
+ points: SubtypeExprOrValue<ArrayType<MapLatLngType>>;
347
+ /** Optional style (default `Map.solid()`). */
348
+ style?: SubtypeExprOrValue<MapLineStyleType>;
349
+ /** Optional animated dash-offset when active. */
350
+ flow?: SubtypeExprOrValue<BooleanType> | boolean;
351
+ /** Optional arrowhead at the destination. */
352
+ arrow?: SubtypeExprOrValue<BooleanType> | boolean;
353
+ }
354
+ /**
355
+ * Builds a resolved line value.
356
+ *
357
+ * @param fields - The line fields ({@link MapLineFields})
358
+ * @returns A `MapLineType` value
359
+ */
360
+ declare function line(fields: MapLineFields): ExprType<MapLineType>;
361
+ /**
362
+ * Fields the `label` mapper returns — one standalone label, before defaults.
363
+ *
364
+ * @property key - Label identity
365
+ * @property lat - Latitude in degrees
366
+ * @property lng - Longitude in degrees
367
+ * @property text - The label text
368
+ */
369
+ export interface MapLabelFields {
370
+ /** Label identity. */
371
+ key: SubtypeExprOrValue<StringType>;
372
+ /** Latitude in degrees. */
373
+ lat: SubtypeExprOrValue<FloatType>;
374
+ /** Longitude in degrees. */
375
+ lng: SubtypeExprOrValue<FloatType>;
376
+ /** The label text. */
377
+ text: SubtypeExprOrValue<StringType>;
378
+ }
379
+ /**
380
+ * East StructType for the Map component.
381
+ *
382
+ * @remarks
383
+ * The `overlays` slot and (via `content`) any child trees are recursive
384
+ * `UIComponentType` values; the registration in `component.ts` spells the
385
+ * same shape with the recursion `node`.
386
+ *
387
+ * @property tiles - Basemap source
388
+ * @property center - Initial centre
389
+ * @property zoom - Initial zoom
390
+ * @property minZoom - Optional minimum zoom clamp
391
+ * @property maxZoom - Optional maximum zoom clamp
392
+ * @property lodZoom - Optional detail-LOD threshold
393
+ * @property fitBounds - Optional camera framing (alternative to center / zoom)
394
+ * @property areas - Filled boundaries
395
+ * @property hexes - Optional H3 lattice + per-cell detail
396
+ * @property markers - Pins
397
+ * @property lines - Connectors / move arrows
398
+ * @property labels - Standalone labels
399
+ * @property overlays - Positioned East children (HUD / legend / back)
400
+ * @property scrollWheelZoom - Optional scroll-wheel zoom (default true)
401
+ * @property attributionPrefix - Optional Leaflet prefix toggle (default false)
402
+ * @property height - Optional fixed panel height
403
+ * @property onAreaClick - Optional area-click callback (receives the area key)
404
+ * @property onMarkerClick - Optional marker-click callback (receives the marker key)
405
+ * @property onZoom - Optional zoom-end callback (receives the zoom level)
406
+ * @property onSelect - Optional hex / marker selection callback (receives the key)
407
+ */
408
+ export declare const MapRootType: StructType<{
409
+ tiles: MapTileType;
410
+ center: MapLatLngType;
411
+ zoom: IntegerType;
412
+ minZoom: OptionType<IntegerType>;
413
+ maxZoom: OptionType<IntegerType>;
414
+ lodZoom: OptionType<IntegerType>;
415
+ fitBounds: OptionType<MapFocusType>;
416
+ areas: ArrayType<MapAreaType>;
417
+ hexes: OptionType<MapHexLayerType>;
418
+ markers: ArrayType<MapMarkerType>;
419
+ lines: ArrayType<MapLineType>;
420
+ labels: ArrayType<MapLabelType>;
421
+ overlays: ArrayType<MapOverlayType>;
422
+ scrollWheelZoom: OptionType<BooleanType>;
423
+ attributionPrefix: OptionType<BooleanType>;
424
+ height: OptionType<StringType>;
425
+ onAreaClick: OptionType<FunctionType<[StringType], NullType>>;
426
+ onMarkerClick: OptionType<FunctionType<[StringType], NullType>>;
427
+ onZoom: OptionType<FunctionType<[IntegerType], NullType>>;
428
+ onSelect: OptionType<FunctionType<[StringType], NullType>>;
429
+ }>;
430
+ /**
431
+ * Type representing the Map component.
432
+ */
433
+ export type MapRootType = typeof MapRootType;
434
+ /**
435
+ * Configuration for {@link createMap}.
436
+ *
437
+ * @typeParam M - The markers row struct
438
+ * @typeParam A - The areas row struct
439
+ * @typeParam La - The labels row struct
440
+ * @typeParam L - The lines row struct
441
+ * @property tiles - Optional basemap (default `Map.carto("positron")`)
442
+ * @property center - Initial centre (`Map.at(lat, lng)`)
443
+ * @property zoom - Initial zoom
444
+ * @property minZoom - Optional minimum zoom clamp
445
+ * @property maxZoom - Optional maximum zoom clamp
446
+ * @property lodZoom - Optional detail-LOD threshold
447
+ * @property fitBounds - Optional camera framing (alternative to center / zoom)
448
+ * @property marker - Markers row mapper (omit when rows are already resolved)
449
+ * @property areas - Optional areas table
450
+ * @property area - Areas row mapper (omit when rows are already resolved)
451
+ * @property hexes - Optional H3 lattice + per-cell detail (`Map.hex()`)
452
+ * @property labels - Optional labels table
453
+ * @property label - Labels row mapper (omit when rows are already resolved)
454
+ * @property lines - Optional lines table
455
+ * @property line - Lines row mapper (omit when rows are already resolved)
456
+ * @property overlays - Positioned East children (`Map.overlay()`)
457
+ * @property scrollWheelZoom - Optional scroll-wheel zoom (default true)
458
+ * @property attributionPrefix - Optional Leaflet prefix toggle (default false)
459
+ * @property height - Optional fixed panel height
460
+ * @property onAreaClick - Optional area-click callback (receives the area key)
461
+ * @property onMarkerClick - Optional marker-click callback (receives the marker key)
462
+ * @property onZoom - Optional zoom-end callback (receives the zoom level)
463
+ * @property onSelect - Optional hex / marker selection callback (receives the key)
464
+ */
465
+ export interface MapConfig<M extends StructType, A extends StructType, La extends StructType, L extends StructType> {
466
+ /** Optional basemap (default `Map.carto("positron")`). */
467
+ tiles?: SubtypeExprOrValue<MapTileType>;
468
+ /** Initial centre (`Map.at(lat, lng)`). */
469
+ center: SubtypeExprOrValue<MapLatLngType>;
470
+ /** Initial zoom. */
471
+ zoom: SubtypeExprOrValue<IntegerType>;
472
+ /** Optional minimum zoom clamp. */
473
+ minZoom?: SubtypeExprOrValue<IntegerType>;
474
+ /** Optional maximum zoom clamp. */
475
+ maxZoom?: SubtypeExprOrValue<IntegerType>;
476
+ /** Optional detail-LOD threshold; zoom ≥ this ⇒ detail. */
477
+ lodZoom?: SubtypeExprOrValue<IntegerType>;
478
+ /** Optional camera framing (alternative to `center` / `zoom`). */
479
+ fitBounds?: SubtypeExprOrValue<MapFocusType>;
480
+ /** Markers row mapper; omit when `markers` is already `ArrayType(Map.Types.Marker)`. */
481
+ marker?: (m: ExprType<M>) => MapMarkerFields;
482
+ /** Optional areas table. */
483
+ areas?: SubtypeExprOrValue<ArrayType<A>>;
484
+ /** Areas row mapper; omit when `areas` is already `ArrayType(Map.Types.Area)`. */
485
+ area?: (a: ExprType<A>) => MapAreaFields;
486
+ /** Optional H3 lattice + per-cell detail (`Map.hex()`). */
487
+ hexes?: SubtypeExprOrValue<MapHexLayerType>;
488
+ /** Optional labels table. */
489
+ labels?: SubtypeExprOrValue<ArrayType<La>>;
490
+ /** Labels row mapper; omit when `labels` is already `ArrayType(Map.Types.Label)`. */
491
+ label?: (s: ExprType<La>) => MapLabelFields;
492
+ /** Optional lines table. */
493
+ lines?: SubtypeExprOrValue<ArrayType<L>>;
494
+ /** Lines row mapper; omit when `lines` is already `ArrayType(Map.Types.Line)`. */
495
+ line?: (l: ExprType<L>) => MapLineFields;
496
+ /** Positioned East children (`Map.overlay()`). */
497
+ overlays?: readonly MapOverlayInput[];
498
+ /** Optional scroll-wheel zoom (default true). */
499
+ scrollWheelZoom?: SubtypeExprOrValue<BooleanType> | boolean;
500
+ /** Optional Leaflet prefix toggle (default false — strips it, keeps the tile credit). */
501
+ attributionPrefix?: SubtypeExprOrValue<BooleanType> | boolean;
502
+ /** Optional fixed panel height (any CSS length, e.g. `"540px"`). */
503
+ height?: SubtypeExprOrValue<StringType> | string;
504
+ /** Optional area-click callback (receives the area key). */
505
+ onAreaClick?: SubtypeExprOrValue<FunctionType<[StringType], NullType>>;
506
+ /** Optional marker-click callback (receives the marker key). */
507
+ onMarkerClick?: SubtypeExprOrValue<FunctionType<[StringType], NullType>>;
508
+ /** Optional zoom-end callback (receives the zoom level). */
509
+ onZoom?: SubtypeExprOrValue<FunctionType<[IntegerType], NullType>>;
510
+ /** Optional hex / marker selection callback (receives the key). */
511
+ onSelect?: SubtypeExprOrValue<FunctionType<[StringType], NullType>>;
512
+ }
513
+ /**
514
+ * Creates a Map — an interactive geographic basemap with H3 / area overlays
515
+ * and a generalised East-child overlay slot.
516
+ *
517
+ * @typeParam M - The markers-table input
518
+ * @typeParam A - The areas-table input
519
+ * @typeParam La - The labels-table input
520
+ * @typeParam L - The lines-table input
521
+ * @param markers - The pin rows (the required first table)
522
+ * @param config - The Map configuration ({@link MapConfig})
523
+ * @returns An East expression of `UIComponentType`
524
+ *
525
+ * @example
526
+ * ```ts
527
+ * import { East } from "@elaraai/east";
528
+ * import { Map, UIComponentType } from "@elaraai/east-ui";
529
+ *
530
+ * const example = East.function([], UIComponentType, _$ =>
531
+ * Map.Root(
532
+ * [{ id: "okafor", lat: -34.842, lng: 138.598, name: "J. Okafor" }],
533
+ * {
534
+ * center: Map.at(-34.881, 138.6), zoom: 12n,
535
+ * marker: m => ({ key: m.id, lat: m.lat, lng: m.lng, label: m.name }),
536
+ * },
537
+ * ),
538
+ * );
539
+ * ```
540
+ */
541
+ declare function createMap<M extends SubtypeExprOrValue<ArrayType<StructType>>, A extends SubtypeExprOrValue<ArrayType<StructType>> = [], La extends SubtypeExprOrValue<ArrayType<StructType>> = [], L extends SubtypeExprOrValue<ArrayType<StructType>> = []>(markers: M | undefined, config: MapConfig<RowElement<M>, RowElement<A>, RowElement<La>, RowElement<L>> & {
542
+ areas?: A;
543
+ labels?: La;
544
+ lines?: L;
545
+ }): ExprType<UIComponentType>;
546
+ /**
547
+ * Map component namespace.
548
+ *
549
+ * @remarks
550
+ * `Map.Root(markers, config)` builds the basemap from flat tables (markers,
551
+ * areas, labels, lines) plus the `hexes` layer and the `overlays` slot;
552
+ * closed-set fields in data (`status`, `tone`, `style`) are typed variant
553
+ * values (`Map.Types.*`).
554
+ */
555
+ export declare const Map: {
556
+ /**
557
+ * Creates a Map — an interactive geographic basemap with H3 / area
558
+ * overlays and a generalised East-child overlay slot.
559
+ *
560
+ * @typeParam M - The markers-table input
561
+ * @typeParam A - The areas-table input
562
+ * @typeParam La - The labels-table input
563
+ * @typeParam L - The lines-table input
564
+ * @param markers - The pin rows (the required first table)
565
+ * @param config - The Map configuration ({@link MapConfig})
566
+ * @returns An East expression of `UIComponentType`
567
+ *
568
+ * @example
569
+ * ```ts
570
+ * import { East } from "@elaraai/east";
571
+ * import { Map, UIComponentType } from "@elaraai/east-ui";
572
+ *
573
+ * const example = East.function([], UIComponentType, _$ =>
574
+ * Map.Root(
575
+ * [{ id: "okafor", lat: -34.842, lng: 138.598, name: "J. Okafor" }],
576
+ * {
577
+ * center: Map.at(-34.881, 138.6), zoom: 12n,
578
+ * marker: m => ({ key: m.id, lat: m.lat, lng: m.lng, label: m.name }),
579
+ * },
580
+ * ),
581
+ * );
582
+ * ```
583
+ */
584
+ readonly Root: typeof createMap;
585
+ /**
586
+ * Builds a geographic point value.
587
+ *
588
+ * @param lat - Latitude in degrees
589
+ * @param lng - Longitude in degrees
590
+ * @returns A `MapLatLngType` value
591
+ *
592
+ * @example
593
+ * ```ts
594
+ * Map.at(-34.881, 138.6)
595
+ * ```
596
+ */
597
+ readonly at: typeof at;
598
+ /**
599
+ * Builds a CARTO raster basemap.
600
+ *
601
+ * @param style - The CARTO preset (default `positron`)
602
+ * @returns A `MapTileType` value
603
+ *
604
+ * @example
605
+ * ```ts
606
+ * Map.carto("voyager")
607
+ * ```
608
+ */
609
+ readonly carto: typeof carto;
610
+ /**
611
+ * Builds an OpenStreetMap raster basemap.
612
+ *
613
+ * @returns A `MapTileType` value
614
+ *
615
+ * @example
616
+ * ```ts
617
+ * Map.osm()
618
+ * ```
619
+ */
620
+ readonly osm: typeof osm;
621
+ /**
622
+ * Builds a raw XYZ basemap with explicit attribution.
623
+ *
624
+ * @param config - The tile URL, attribution, and optional layer options
625
+ * @returns A `MapTileType` value
626
+ *
627
+ * @example
628
+ * ```ts
629
+ * Map.tile({ url: "https://{s}.tiles.example/{z}/{x}/{y}.png", attribution: "© Example" })
630
+ * ```
631
+ */
632
+ readonly tile: typeof tile;
633
+ /**
634
+ * Builds an `hexDisk` area shape — a `gridDisk(origin, k)` blob.
635
+ *
636
+ * @param center - The disk origin
637
+ * @param k - Ring count around the origin
638
+ * @param resolution - H3 resolution
639
+ * @returns A `MapAreaShapeType` value
640
+ *
641
+ * @example
642
+ * ```ts
643
+ * Map.hexDisk(Map.at(-34.9258, 138.5994), 1n, 8n)
644
+ * ```
645
+ */
646
+ readonly hexDisk: typeof hexDisk;
647
+ /**
648
+ * Builds a `cells` area shape — an explicit set of H3 cell ids.
649
+ *
650
+ * @param ids - The H3 cell ids
651
+ * @returns A `MapAreaShapeType` value
652
+ *
653
+ * @example
654
+ * ```ts
655
+ * Map.cells(["882830829bfffff"])
656
+ * ```
657
+ */
658
+ readonly cells: typeof cells;
659
+ /**
660
+ * Builds a `polygon` area shape — an explicit ring of points (an irregular
661
+ * region boundary). Two polygons sharing an edge abut exactly.
662
+ *
663
+ * @param points - The boundary points, in order (auto-closed; `Map.at(...)`)
664
+ * @returns A `MapAreaShapeType` value
665
+ */
666
+ readonly polygon: typeof polygon;
667
+ /**
668
+ * Builds the hex layer — a faint background lattice plus optional per-cell
669
+ * detail revealed at LOD.
670
+ *
671
+ * @param config - Optional `lattice`, `cells`, `tone`, and `interactive`
672
+ * @returns A `MapHexLayerType` value
673
+ *
674
+ * @example
675
+ * ```ts
676
+ * Map.hex({ lattice: { center: Map.at(-34.881, 138.6), k: 11n, resolution: 8n }, tone: "muted" })
677
+ * ```
678
+ */
679
+ readonly hex: typeof hex;
680
+ /**
681
+ * Builds a resolved marker value.
682
+ *
683
+ * @param fields - The marker fields ({@link MapMarkerFields})
684
+ * @returns A `MapMarkerType` value
685
+ *
686
+ * @example
687
+ * ```ts
688
+ * Map.marker({ key: "okafor", lat: -34.842, lng: 138.598, label: "J. Okafor", icon: "house" })
689
+ * ```
690
+ */
691
+ readonly marker: typeof marker;
692
+ /**
693
+ * Builds a resolved area value.
694
+ *
695
+ * @param fields - The area fields ({@link MapAreaFields})
696
+ * @returns A `MapAreaType` value
697
+ *
698
+ * @example
699
+ * ```ts
700
+ * Map.area({ key: "5000", shape: Map.hexDisk(Map.at(-34.9258, 138.5994), 1n, 8n), label: "5000 · CBD" })
701
+ * ```
702
+ */
703
+ readonly area: typeof area;
704
+ /**
705
+ * Builds a resolved line value.
706
+ *
707
+ * @param fields - The line fields ({@link MapLineFields})
708
+ * @returns A `MapLineType` value
709
+ *
710
+ * @example
711
+ * ```ts
712
+ * Map.line({ key: "move", points: [Map.at(-34.905, 138.6), Map.at(-34.852, 138.6)], style: Map.dashed({ tone: "brand" }), arrow: true })
713
+ * ```
714
+ */
715
+ readonly line: typeof line;
716
+ /**
717
+ * Builds a `solid` line style.
718
+ *
719
+ * @param config - Optional stroke configuration (`tone`, `weight`)
720
+ * @returns A `MapLineStyleType` value
721
+ *
722
+ * @example
723
+ * ```ts
724
+ * Map.solid({ tone: "brand" })
725
+ * ```
726
+ */
727
+ readonly solid: typeof solid;
728
+ /**
729
+ * Builds a `dashed` line style.
730
+ *
731
+ * @param config - Optional stroke configuration (`tone`, `weight`)
732
+ * @returns A `MapLineStyleType` value
733
+ *
734
+ * @example
735
+ * ```ts
736
+ * Map.dashed({ tone: "brand" })
737
+ * ```
738
+ */
739
+ readonly dashed: typeof dashed;
740
+ /**
741
+ * Builds a `point` camera target.
742
+ *
743
+ * @param center - The centre
744
+ * @param zoom - The zoom level to settle at
745
+ * @returns A `MapFocusType` value
746
+ *
747
+ * @example
748
+ * ```ts
749
+ * Map.point(Map.at(-34.9258, 138.5994), 14n)
750
+ * ```
751
+ */
752
+ readonly point: typeof point;
753
+ /**
754
+ * Builds a `bounds` camera target.
755
+ *
756
+ * @param sw - South-west corner
757
+ * @param ne - North-east corner
758
+ * @returns A `MapFocusType` value
759
+ *
760
+ * @example
761
+ * ```ts
762
+ * Map.bounds(Map.at(-34.95, 138.55), Map.at(-34.80, 138.65))
763
+ * ```
764
+ */
765
+ readonly bounds: typeof bounds;
766
+ /**
767
+ * Builds a positioned overlay child for the `overlays` slot.
768
+ *
769
+ * @param content - The East child tree (a HUD, legend, back button)
770
+ * @param options - Anchor / offset / interactivity options
771
+ * @returns A `MapOverlayType` value
772
+ *
773
+ * @example
774
+ * ```ts
775
+ * Map.overlay(Text.Root("ELARA"), { align: "start", verticalAlign: "start", key: "hud" })
776
+ * ```
777
+ */
778
+ readonly overlay: typeof overlay;
779
+ readonly Types: {
780
+ /**
781
+ * East StructType for the Map component.
782
+ *
783
+ * @remarks
784
+ * See {@link MapRootType} for per-field docs.
785
+ *
786
+ * @property tiles - Basemap source
787
+ * @property center - Initial centre
788
+ * @property zoom - Initial zoom
789
+ * @property areas - Filled boundaries
790
+ * @property markers - Pins
791
+ * @property overlays - Positioned East children
792
+ */
793
+ readonly Map: StructType<{
794
+ tiles: MapTileType;
795
+ center: MapLatLngType;
796
+ zoom: IntegerType;
797
+ minZoom: OptionType<IntegerType>;
798
+ maxZoom: OptionType<IntegerType>;
799
+ lodZoom: OptionType<IntegerType>;
800
+ fitBounds: OptionType<MapFocusType>;
801
+ areas: ArrayType<MapAreaType>;
802
+ hexes: OptionType<MapHexLayerType>;
803
+ markers: ArrayType<MapMarkerType>;
804
+ lines: ArrayType<MapLineType>;
805
+ labels: ArrayType<MapLabelType>;
806
+ overlays: ArrayType<MapOverlayType>;
807
+ scrollWheelZoom: OptionType<BooleanType>;
808
+ attributionPrefix: OptionType<BooleanType>;
809
+ height: OptionType<StringType>;
810
+ onAreaClick: OptionType<FunctionType<[StringType], NullType>>;
811
+ onMarkerClick: OptionType<FunctionType<[StringType], NullType>>;
812
+ onZoom: OptionType<FunctionType<[IntegerType], NullType>>;
813
+ onSelect: OptionType<FunctionType<[StringType], NullType>>;
814
+ }>;
815
+ /**
816
+ * A geographic point.
817
+ *
818
+ * @property lat - Latitude in degrees
819
+ * @property lng - Longitude in degrees
820
+ */
821
+ readonly LatLng: StructType<{
822
+ readonly lat: FloatType;
823
+ readonly lng: FloatType;
824
+ }>;
825
+ /**
826
+ * Theme tone for areas / hexes / markers / lines.
827
+ *
828
+ * @property brand - Brand teal
829
+ * @property ink - Foreground ink
830
+ * @property muted - Muted foreground
831
+ * @property success - Status ok
832
+ * @property warning - Status warn
833
+ * @property danger - Status bad
834
+ */
835
+ readonly Tone: import("@elaraai/east").VariantType<{
836
+ readonly brand: NullType;
837
+ readonly ink: NullType;
838
+ readonly muted: NullType;
839
+ readonly success: NullType;
840
+ readonly warning: NullType;
841
+ readonly danger: NullType;
842
+ }>;
843
+ /**
844
+ * CARTO basemap preset.
845
+ *
846
+ * @property positron - Light base
847
+ * @property darkMatter - Dark base
848
+ * @property voyager - Colour base
849
+ */
850
+ readonly CartoStyle: import("@elaraai/east").VariantType<{
851
+ readonly positron: NullType;
852
+ readonly darkMatter: NullType;
853
+ readonly voyager: NullType;
854
+ }>;
855
+ /**
856
+ * Basemap source (`carto` / `osm` / `custom`).
857
+ *
858
+ * @property carto - A CARTO raster preset
859
+ * @property osm - OpenStreetMap raster tiles
860
+ * @property custom - A raw XYZ template with attribution
861
+ */
862
+ readonly Tile: import("@elaraai/east").VariantType<{
863
+ readonly carto: StructType<{
864
+ readonly style: import("@elaraai/east").VariantType<{
865
+ readonly positron: NullType;
866
+ readonly darkMatter: NullType;
867
+ readonly voyager: NullType;
868
+ }>;
869
+ }>;
870
+ readonly osm: NullType;
871
+ readonly custom: StructType<{
872
+ readonly url: StringType;
873
+ readonly attribution: StringType;
874
+ readonly subdomains: OptionType<ArrayType<StringType>>;
875
+ readonly maxZoom: OptionType<IntegerType>;
876
+ readonly detectRetina: OptionType<BooleanType>;
877
+ }>;
878
+ }>;
879
+ /**
880
+ * Camera target (`point` / `bounds`).
881
+ *
882
+ * @property point - Centre on a point at a zoom level
883
+ * @property bounds - Frame a south-west / north-east box
884
+ */
885
+ readonly Focus: import("@elaraai/east").VariantType<{
886
+ readonly point: StructType<{
887
+ readonly center: StructType<{
888
+ readonly lat: FloatType;
889
+ readonly lng: FloatType;
890
+ }>;
891
+ readonly zoom: IntegerType;
892
+ }>;
893
+ readonly bounds: StructType<{
894
+ readonly sw: StructType<{
895
+ readonly lat: FloatType;
896
+ readonly lng: FloatType;
897
+ }>;
898
+ readonly ne: StructType<{
899
+ readonly lat: FloatType;
900
+ readonly lng: FloatType;
901
+ }>;
902
+ }>;
903
+ }>;
904
+ /**
905
+ * Area boundary (`hexDisk` / `polygon` / `cells`).
906
+ *
907
+ * @property hexDisk - A `gridDisk(origin, k)` blob
908
+ * @property polygon - An explicit ring of points
909
+ * @property cells - Explicit H3 cell ids
910
+ */
911
+ readonly AreaShape: import("@elaraai/east").VariantType<{
912
+ readonly hexDisk: StructType<{
913
+ readonly center: StructType<{
914
+ readonly lat: FloatType;
915
+ readonly lng: FloatType;
916
+ }>;
917
+ readonly k: IntegerType;
918
+ readonly resolution: IntegerType;
919
+ }>;
920
+ readonly polygon: ArrayType<StructType<{
921
+ readonly lat: FloatType;
922
+ readonly lng: FloatType;
923
+ }>>;
924
+ readonly cells: ArrayType<StringType>;
925
+ }>;
926
+ /**
927
+ * A resolved area.
928
+ *
929
+ * @property key - Area identity
930
+ * @property shape - The boundary
931
+ * @property status - Optional status (drives colour + pulse)
932
+ * @property flyTo - Optional click camera target
933
+ */
934
+ readonly Area: StructType<{
935
+ readonly key: StringType;
936
+ readonly shape: import("@elaraai/east").VariantType<{
937
+ readonly hexDisk: StructType<{
938
+ readonly center: StructType<{
939
+ readonly lat: FloatType;
940
+ readonly lng: FloatType;
941
+ }>;
942
+ readonly k: IntegerType;
943
+ readonly resolution: IntegerType;
944
+ }>;
945
+ readonly polygon: ArrayType<StructType<{
946
+ readonly lat: FloatType;
947
+ readonly lng: FloatType;
948
+ }>>;
949
+ readonly cells: ArrayType<StringType>;
950
+ }>;
951
+ readonly label: OptionType<StringType>;
952
+ readonly detailLabel: OptionType<StringType>;
953
+ readonly status: OptionType<import("@elaraai/east").VariantType<{
954
+ readonly success: NullType;
955
+ readonly warning: NullType;
956
+ readonly danger: NullType;
957
+ readonly info: NullType;
958
+ readonly neutral: NullType;
959
+ }>>;
960
+ readonly tone: OptionType<import("@elaraai/east").VariantType<{
961
+ readonly brand: NullType;
962
+ readonly ink: NullType;
963
+ readonly muted: NullType;
964
+ readonly success: NullType;
965
+ readonly warning: NullType;
966
+ readonly danger: NullType;
967
+ }>>;
968
+ readonly color: OptionType<StringType>;
969
+ readonly fillOpacity: OptionType<FloatType>;
970
+ readonly weight: OptionType<FloatType>;
971
+ readonly pulse: OptionType<BooleanType>;
972
+ readonly flyTo: OptionType<import("@elaraai/east").VariantType<{
973
+ readonly point: StructType<{
974
+ readonly center: StructType<{
975
+ readonly lat: FloatType;
976
+ readonly lng: FloatType;
977
+ }>;
978
+ readonly zoom: IntegerType;
979
+ }>;
980
+ readonly bounds: StructType<{
981
+ readonly sw: StructType<{
982
+ readonly lat: FloatType;
983
+ readonly lng: FloatType;
984
+ }>;
985
+ readonly ne: StructType<{
986
+ readonly lat: FloatType;
987
+ readonly lng: FloatType;
988
+ }>;
989
+ }>;
990
+ }>>;
991
+ readonly interactive: OptionType<BooleanType>;
992
+ }>;
993
+ /**
994
+ * The hex layer (lattice + per-cell detail).
995
+ *
996
+ * @property lattice - Optional faint background lattice
997
+ * @property cells - Per-cell detail
998
+ * @property tone - Optional lattice stroke tone
999
+ */
1000
+ readonly Hex: StructType<{
1001
+ readonly lattice: OptionType<StructType<{
1002
+ readonly center: StructType<{
1003
+ readonly lat: FloatType;
1004
+ readonly lng: FloatType;
1005
+ }>;
1006
+ readonly k: IntegerType;
1007
+ readonly resolution: IntegerType;
1008
+ }>>;
1009
+ readonly cells: ArrayType<StructType<{
1010
+ readonly id: StringType;
1011
+ readonly status: OptionType<import("@elaraai/east").VariantType<{
1012
+ readonly success: NullType;
1013
+ readonly warning: NullType;
1014
+ readonly danger: NullType;
1015
+ readonly info: NullType;
1016
+ readonly neutral: NullType;
1017
+ }>>;
1018
+ readonly fillOpacity: OptionType<FloatType>;
1019
+ readonly detail: OptionType<StringType>;
1020
+ }>>;
1021
+ readonly tone: OptionType<import("@elaraai/east").VariantType<{
1022
+ readonly brand: NullType;
1023
+ readonly ink: NullType;
1024
+ readonly muted: NullType;
1025
+ readonly success: NullType;
1026
+ readonly warning: NullType;
1027
+ readonly danger: NullType;
1028
+ }>>;
1029
+ readonly interactive: OptionType<BooleanType>;
1030
+ }>;
1031
+ /**
1032
+ * A resolved marker.
1033
+ *
1034
+ * @property key - Marker identity
1035
+ * @property at - The pin location
1036
+ * @property minZoom - Optional LOD gate
1037
+ */
1038
+ readonly Marker: StructType<{
1039
+ readonly key: StringType;
1040
+ readonly at: StructType<{
1041
+ readonly lat: FloatType;
1042
+ readonly lng: FloatType;
1043
+ }>;
1044
+ readonly label: OptionType<StringType>;
1045
+ readonly icon: OptionType<StringType>;
1046
+ readonly tone: OptionType<import("@elaraai/east").VariantType<{
1047
+ readonly brand: NullType;
1048
+ readonly ink: NullType;
1049
+ readonly muted: NullType;
1050
+ readonly success: NullType;
1051
+ readonly warning: NullType;
1052
+ readonly danger: NullType;
1053
+ }>>;
1054
+ readonly minZoom: OptionType<IntegerType>;
1055
+ readonly interactive: OptionType<BooleanType>;
1056
+ }>;
1057
+ /**
1058
+ * Line render style (`solid` / `dashed`).
1059
+ *
1060
+ * @property solid - A solid connector
1061
+ * @property dashed - A dashed / routing connector
1062
+ */
1063
+ readonly LineStyle: import("@elaraai/east").VariantType<{
1064
+ readonly solid: StructType<{
1065
+ readonly tone: OptionType<import("@elaraai/east").VariantType<{
1066
+ readonly brand: NullType;
1067
+ readonly ink: NullType;
1068
+ readonly muted: NullType;
1069
+ readonly success: NullType;
1070
+ readonly warning: NullType;
1071
+ readonly danger: NullType;
1072
+ }>>;
1073
+ readonly weight: OptionType<FloatType>;
1074
+ }>;
1075
+ readonly dashed: StructType<{
1076
+ readonly tone: OptionType<import("@elaraai/east").VariantType<{
1077
+ readonly brand: NullType;
1078
+ readonly ink: NullType;
1079
+ readonly muted: NullType;
1080
+ readonly success: NullType;
1081
+ readonly warning: NullType;
1082
+ readonly danger: NullType;
1083
+ }>>;
1084
+ readonly weight: OptionType<FloatType>;
1085
+ }>;
1086
+ }>;
1087
+ /**
1088
+ * A resolved line.
1089
+ *
1090
+ * @property key - Line identity
1091
+ * @property points - The polyline points
1092
+ * @property style - Render style
1093
+ * @property flow - Optional animated dash-offset
1094
+ */
1095
+ readonly Line: StructType<{
1096
+ readonly key: StringType;
1097
+ readonly points: ArrayType<StructType<{
1098
+ readonly lat: FloatType;
1099
+ readonly lng: FloatType;
1100
+ }>>;
1101
+ readonly style: import("@elaraai/east").VariantType<{
1102
+ readonly solid: StructType<{
1103
+ readonly tone: OptionType<import("@elaraai/east").VariantType<{
1104
+ readonly brand: NullType;
1105
+ readonly ink: NullType;
1106
+ readonly muted: NullType;
1107
+ readonly success: NullType;
1108
+ readonly warning: NullType;
1109
+ readonly danger: NullType;
1110
+ }>>;
1111
+ readonly weight: OptionType<FloatType>;
1112
+ }>;
1113
+ readonly dashed: StructType<{
1114
+ readonly tone: OptionType<import("@elaraai/east").VariantType<{
1115
+ readonly brand: NullType;
1116
+ readonly ink: NullType;
1117
+ readonly muted: NullType;
1118
+ readonly success: NullType;
1119
+ readonly warning: NullType;
1120
+ readonly danger: NullType;
1121
+ }>>;
1122
+ readonly weight: OptionType<FloatType>;
1123
+ }>;
1124
+ }>;
1125
+ readonly flow: OptionType<BooleanType>;
1126
+ readonly arrow: OptionType<BooleanType>;
1127
+ }>;
1128
+ /**
1129
+ * A resolved standalone label.
1130
+ *
1131
+ * @property key - Label identity
1132
+ * @property at - The anchor
1133
+ * @property text - The text
1134
+ */
1135
+ readonly Label: StructType<{
1136
+ readonly key: StringType;
1137
+ readonly at: StructType<{
1138
+ readonly lat: FloatType;
1139
+ readonly lng: FloatType;
1140
+ }>;
1141
+ readonly text: StringType;
1142
+ }>;
1143
+ /**
1144
+ * The overlay slot value.
1145
+ *
1146
+ * @property content - The East child tree
1147
+ * @property align - Horizontal screen anchor
1148
+ * @property verticalAlign - Vertical screen anchor
1149
+ * @property geoAnchor - Optional coordinate anchor
1150
+ */
1151
+ readonly Overlay: StructType<{
1152
+ /** The East child tree rendered over the canvas */
1153
+ readonly content: import("@elaraai/east").RecursiveType<import("../../component.js").UIComponentNode>;
1154
+ /** Horizontal screen anchor */
1155
+ readonly align: import("@elaraai/east").VariantType<{
1156
+ readonly start: NullType;
1157
+ readonly center: NullType;
1158
+ readonly end: NullType;
1159
+ }>;
1160
+ /** Vertical screen anchor */
1161
+ readonly verticalAlign: import("@elaraai/east").VariantType<{
1162
+ readonly start: NullType;
1163
+ readonly center: NullType;
1164
+ readonly end: NullType;
1165
+ }>;
1166
+ /** Optional stable child storage-key segment */
1167
+ readonly key: OptionType<StringType>;
1168
+ /** Optional coordinate the overlay follows on pan / zoom */
1169
+ readonly geoAnchor: OptionType<StructType<{
1170
+ readonly lat: FloatType;
1171
+ readonly lng: FloatType;
1172
+ }>>;
1173
+ /** Optional px nudge from the anchor */
1174
+ readonly offset: OptionType<StructType<{
1175
+ readonly x: FloatType;
1176
+ readonly y: FloatType;
1177
+ }>>;
1178
+ /** Optional pointer-events flag (default true; false ⇒ click-through) */
1179
+ readonly interactive: OptionType<BooleanType>;
1180
+ }>;
1181
+ };
1182
+ };
1183
+ //# sourceMappingURL=index.d.ts.map