@fieldia/map 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +74 -7
  2. package/package.json +5 -4
  3. package/src/index.d.mts +3 -0
  4. package/src/index.d.ts +3 -0
  5. package/src/index.js +5 -1
  6. package/src/index.js.map +1 -1
  7. package/src/index.mjs +2 -0
  8. package/src/index.mjs.map +1 -1
  9. package/src/lib/area.js +29 -246
  10. package/src/lib/area.js.map +1 -1
  11. package/src/lib/area.mjs +29 -246
  12. package/src/lib/area.mjs.map +1 -1
  13. package/src/lib/card.d.mts +45 -0
  14. package/src/lib/card.d.ts +45 -0
  15. package/src/lib/card.js +89 -0
  16. package/src/lib/card.js.map +1 -0
  17. package/src/lib/card.mjs +85 -0
  18. package/src/lib/card.mjs.map +1 -0
  19. package/src/lib/cluster.d.mts +12 -0
  20. package/src/lib/cluster.d.ts +12 -0
  21. package/src/lib/cluster.js +60 -0
  22. package/src/lib/cluster.js.map +1 -0
  23. package/src/lib/cluster.mjs +57 -0
  24. package/src/lib/cluster.mjs.map +1 -0
  25. package/src/lib/drawing.d.mts +36 -0
  26. package/src/lib/drawing.d.ts +36 -0
  27. package/src/lib/drawing.js +267 -0
  28. package/src/lib/drawing.js.map +1 -0
  29. package/src/lib/drawing.mjs +263 -0
  30. package/src/lib/drawing.mjs.map +1 -0
  31. package/src/lib/kinds.js +9 -2
  32. package/src/lib/kinds.js.map +1 -1
  33. package/src/lib/kinds.mjs +9 -2
  34. package/src/lib/kinds.mjs.map +1 -1
  35. package/src/lib/labels.d.mts +32 -0
  36. package/src/lib/labels.d.ts +32 -0
  37. package/src/lib/labels.js +88 -1
  38. package/src/lib/labels.js.map +1 -1
  39. package/src/lib/labels.mjs +86 -0
  40. package/src/lib/labels.mjs.map +1 -1
  41. package/src/lib/list-view.d.mts +13 -0
  42. package/src/lib/list-view.d.ts +13 -0
  43. package/src/lib/list-view.js +481 -0
  44. package/src/lib/list-view.js.map +1 -0
  45. package/src/lib/list-view.mjs +478 -0
  46. package/src/lib/list-view.mjs.map +1 -0
  47. package/src/lib/map-core.d.mts +4 -2
  48. package/src/lib/map-core.d.ts +4 -2
  49. package/src/lib/map-core.js +19 -7
  50. package/src/lib/map-core.js.map +1 -1
  51. package/src/lib/map-core.mjs +18 -7
  52. package/src/lib/map-core.mjs.map +1 -1
  53. package/src/lib/map-icons.d.mts +8 -0
  54. package/src/lib/map-icons.d.ts +8 -0
  55. package/src/lib/map-icons.js +21 -0
  56. package/src/lib/map-icons.js.map +1 -0
  57. package/src/lib/map-icons.mjs +18 -0
  58. package/src/lib/map-icons.mjs.map +1 -0
  59. package/src/lib/pins.d.mts +56 -0
  60. package/src/lib/pins.d.ts +56 -0
  61. package/src/lib/pins.js +161 -0
  62. package/src/lib/pins.js.map +1 -0
  63. package/src/lib/pins.mjs +154 -0
  64. package/src/lib/pins.mjs.map +1 -0
  65. package/src/lib/place.d.mts +1 -1
  66. package/src/lib/place.d.ts +1 -1
  67. package/src/lib/place.js +46 -6
  68. package/src/lib/place.js.map +1 -1
  69. package/src/lib/place.mjs +48 -8
  70. package/src/lib/place.mjs.map +1 -1
  71. package/src/lib/providers.d.mts +29 -8
  72. package/src/lib/providers.d.ts +29 -8
  73. package/src/lib/providers.js +217 -33
  74. package/src/lib/providers.js.map +1 -1
  75. package/src/lib/providers.mjs +217 -33
  76. package/src/lib/providers.mjs.map +1 -1
  77. package/src/lib/search-box.d.mts +4 -2
  78. package/src/lib/search-box.d.ts +4 -2
  79. package/src/lib/search-box.js +20 -6
  80. package/src/lib/search-box.js.map +1 -1
  81. package/src/lib/search-box.mjs +20 -6
  82. package/src/lib/search-box.mjs.map +1 -1
  83. package/src/lib/settings.d.mts +5 -2
  84. package/src/lib/settings.d.ts +5 -2
  85. package/src/lib/styles.d.mts +9 -1
  86. package/src/lib/styles.d.ts +9 -1
  87. package/src/lib/styles.js +146 -2
  88. package/src/lib/styles.js.map +1 -1
  89. package/src/lib/styles.mjs +144 -1
  90. package/src/lib/styles.mjs.map +1 -1
@@ -0,0 +1,481 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapListViews = mapListViews;
4
+ const card_1 = require("./card");
5
+ const cluster_1 = require("./cluster");
6
+ const drawing_1 = require("./drawing");
7
+ const geo_1 = require("./geo");
8
+ const labels_1 = require("./labels");
9
+ const map_core_1 = require("./map-core");
10
+ const styles_1 = require("./styles");
11
+ const pins_1 = require("./pins");
12
+ /**
13
+ * A list's records on a map, for the viewer's `listViews`: the list's own
14
+ * search and its chosen records, shared with the table. A pin lights its row
15
+ * and a row its pin; a pin opens a card with the record's picture, a few of
16
+ * its fields, a box to choose it and a button to open it. Pins that crowd
17
+ * become a bubble with their count. After the map is moved, "Search this
18
+ * area" puts the area into the search bar, as the person's own search.
19
+ *
20
+ * mountViewer(host, { page, listViews: mapListViews({ provider }) })
21
+ */
22
+ function mapListViews(settings) {
23
+ return { map: (context) => listMap(settings, context) };
24
+ }
25
+ /** Pins nearer than this, in pixels, become one bubble. */
26
+ const CROWD = 48;
27
+ /** Room kept around the records when the map fits them, in pixels. */
28
+ const ROOM = 40;
29
+ /** Moves the person makes; a fit, a card's own pan and a resize are not. */
30
+ const MOVE_KEYS = new Set(['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', '+', '-', '=', '_']);
31
+ /** No size for a mark: Leaflet then sets none, and the mark is as large as its face (its types leave null out; its code takes it). */
32
+ const SIZED_BY_FACE = null;
33
+ /** How a mark stands on its point: its size is its face's, so CSS stands it there. */
34
+ const anchor = (face) => (face.element.dataset['look'] === 'label' ? 'fd-map-tail' : face.stands === 'foot' ? 'fd-map-foot' : 'fd-map-middle');
35
+ function listMap(settings, context) {
36
+ const { page, node, document: doc, locale } = context;
37
+ // The viewer asks for a map only for a list with `map`.
38
+ const spec = node.map;
39
+ const labels = (0, labels_1.listMapLabels)(locale, settings.labels?.[locale]);
40
+ const model = page.data.kind === 'record' ? page.data.model : '';
41
+ const title = spec.card?.title ?? node.columns[0];
42
+ const cardFields = spec.card?.fields ?? node.columns.filter((name) => name !== title).slice(0, 4);
43
+ const pins = (0, pins_1.makePins)({ document: doc, page, locale, pin: spec.pin ?? {}, title, icons: context.icons, drawers: settings.pins });
44
+ const where = spec.point ? [spec.point] : [spec.latitude, spec.longitude];
45
+ const fields = [...new Set([...where, ...pins.fields, ...(spec.card?.image ? [spec.card.image] : []), ...cardFields.flatMap((name) => (0, pins_1.withCurrency)(page, name))])];
46
+ const count = (n) => new Intl.NumberFormat(locale, { numberingSystem: 'latn' }).format(n);
47
+ (0, styles_1.installListMapStyles)(doc);
48
+ const element = doc.createElement('div');
49
+ element.className = 'fd-map-list';
50
+ const box = (0, map_core_1.createMapBox)({
51
+ document: doc,
52
+ provider: settings.provider,
53
+ locale,
54
+ labels,
55
+ name: page.title ?? model,
56
+ keys: labels.pinKeys,
57
+ center: settings.center,
58
+ zoom: settings.zoom,
59
+ height: 'clamp(320px, 64vh, 640px)',
60
+ });
61
+ element.append(box.element);
62
+ const here = doc.createElement('button');
63
+ here.type = 'button';
64
+ here.className = 'fd-map-here';
65
+ here.textContent = labels.searchThisArea;
66
+ here.hidden = true;
67
+ const note = doc.createElement('p');
68
+ note.className = 'fd-map-list-note';
69
+ note.setAttribute('role', 'status');
70
+ note.hidden = true;
71
+ // ---- an area drawn, to search in -----------------------------------------------------
72
+ const live = doc.createElement('div');
73
+ live.className = 'fd-sr-only';
74
+ live.setAttribute('aria-live', 'polite');
75
+ element.append(live);
76
+ const announce = (words) => {
77
+ live.textContent = '';
78
+ // A new node each time, so the same words are said again.
79
+ setTimeout(() => (live.textContent = words), 30);
80
+ };
81
+ const tools = doc.createElement('div');
82
+ tools.className = 'fd-map-draw';
83
+ tools.setAttribute('role', 'group');
84
+ tools.setAttribute('aria-label', labels.drawArea);
85
+ const toolButtons = new Map();
86
+ for (const shape of ['polygon', 'box', 'circle']) {
87
+ const button = doc.createElement('button');
88
+ button.type = 'button';
89
+ button.innerHTML = drawing_1.SHAPE_ICONS[shape];
90
+ button.setAttribute('aria-label', labels[shape]);
91
+ button.title = `${labels.drawArea}: ${labels[shape]}`;
92
+ button.setAttribute('aria-pressed', 'false');
93
+ button.addEventListener('click', () => drawing.arm(drawing.mode === shape ? null : shape));
94
+ toolButtons.set(shape, button);
95
+ tools.append(button);
96
+ }
97
+ const drawing = (0, drawing_1.shapeDrawing)({
98
+ box,
99
+ labels,
100
+ keys: element,
101
+ announce,
102
+ armed: (mode) => {
103
+ for (const [shape, button] of toolButtons)
104
+ button.setAttribute('aria-pressed', String(shape === mode));
105
+ },
106
+ done: (area) => box.ready((map, L) => searchIn(map, L, area)),
107
+ escaped: () => toolButtons.get('polygon')?.focus(),
108
+ finishesOn: (target) => target === toolButtons.get('polygon'),
109
+ over: '.fd-map-here, .fd-map-draw, .fd-map-list-note',
110
+ });
111
+ /** The area drawn, on the map while its search is in the search bar. */
112
+ let searched = null;
113
+ let searchedKey = '';
114
+ let records = [];
115
+ let places = [];
116
+ let drawn = [];
117
+ const drawnOf = new Map();
118
+ let hot = null;
119
+ let open = null;
120
+ let layer = null;
121
+ /** A record lit inside a bubble: its own pin over the bubble, for as long as its row is lit. */
122
+ let ghost = null;
123
+ let asking = 0;
124
+ let destroyed = false;
125
+ let fitted = false;
126
+ let lastFilter = '';
127
+ /** The search changed by the map's own "Search this area": the view stays where the person put it. */
128
+ let ownSearch = false;
129
+ let moving = false;
130
+ const dir = () => (doc.defaultView?.getComputedStyle(element).direction === 'rtl' ? 'rtl' : 'ltr');
131
+ const isKeys = (event) => !!event && event.type.startsWith('key');
132
+ const placeOf = (values) => {
133
+ if (spec.point)
134
+ return (0, geo_1.readPoint)(values[spec.point]);
135
+ const lat = values[spec.latitude];
136
+ const lng = values[spec.longitude];
137
+ return typeof lat === 'number' && typeof lng === 'number' && Math.abs(lat) <= 90 && Math.abs(lng) <= 180 ? { lat, lng } : null;
138
+ };
139
+ // ---- the person's own moves, after which "Search this area" is offered ----------
140
+ const pressed = (event) => {
141
+ const target = event.target;
142
+ if (!target?.closest('.leaflet-marker-icon, .leaflet-popup, .fd-map-here, .fd-map-credits, .fd-map-logo'))
143
+ moving = true;
144
+ };
145
+ const keyed = (event) => {
146
+ if (event.target === box.element && MOVE_KEYS.has(event.key))
147
+ moving = true;
148
+ };
149
+ const wheeled = (event) => {
150
+ if (event.ctrlKey || event.metaKey)
151
+ moving = true;
152
+ };
153
+ box.element.addEventListener('pointerdown', pressed, { capture: true });
154
+ box.element.addEventListener('keydown', keyed, { capture: true });
155
+ box.element.addEventListener('wheel', wheeled, { capture: true, passive: true });
156
+ function searchHere(map) {
157
+ const bounds = map.getBounds();
158
+ const round = (n) => Math.round(n * 1e6) / 1e6;
159
+ const wrap = (lng) => round(((((lng + 180) % 360) + 360) % 360) - 180);
160
+ const south = round(Math.max(-90, bounds.getSouth()));
161
+ const north = round(Math.min(90, bounds.getNorth()));
162
+ const whole = bounds.getEast() - bounds.getWest() >= 360;
163
+ const west = whole ? -180 : wrap(bounds.getWest());
164
+ const east = whole ? 180 : wrap(bounds.getEast());
165
+ const filter = spec.point
166
+ ? [{ field: spec.point, op: 'within', value: { south, west, north, east } }]
167
+ : [
168
+ { field: spec.latitude, op: 'between', value: [south, north] },
169
+ // Over the antimeridian no one range holds the longitudes: either side of it, then.
170
+ ...(whole
171
+ ? []
172
+ : west <= east
173
+ ? [{ field: spec.longitude, op: 'between', value: [west, east] }]
174
+ : [{ any: [{ field: spec.longitude, op: '>=', value: west }, { field: spec.longitude, op: '<=', value: east }] }]),
175
+ ];
176
+ ownSearch = true;
177
+ here.hidden = true;
178
+ context.addSearch({ label: labels.inThisArea, filter });
179
+ }
180
+ /** An area drawn becomes a search of its own, "In the area drawn": the places inside it, in the table and on the map. */
181
+ function searchIn(map, L, area) {
182
+ const round = (n) => Math.round(n * 1e6) / 1e6;
183
+ const shape = area.shape === 'circle'
184
+ ? { center: [round(area.center.lng), round(area.center.lat)], radius: Math.round(area.radius) }
185
+ : { polygon: area.points.map((p) => [round(p.lng), round(p.lat)]) };
186
+ const condition = spec.point
187
+ ? { field: spec.point, op: 'within', value: shape }
188
+ : { field: spec.latitude, op: 'within', value: { ...shape, longitude: spec.longitude } };
189
+ searched?.remove();
190
+ searched = (area.shape === 'circle'
191
+ ? L.circle([area.center.lat, area.center.lng], { radius: area.radius, className: 'fd-map-shape fd-map-searched', interactive: false })
192
+ : L.polygon(area.points.map((p) => [p.lat, p.lng]), { className: 'fd-map-shape fd-map-searched', interactive: false })).addTo(map);
193
+ searchedKey = JSON.stringify(condition);
194
+ ownSearch = true;
195
+ here.hidden = true;
196
+ announce(labels.shapeDrawn);
197
+ context.addSearch({ label: labels.inDrawnArea, filter: [condition] });
198
+ }
199
+ // ---- the card -------------------------------------------------------------------
200
+ function closeCard(map, back) {
201
+ if (!open)
202
+ return;
203
+ const { popup, back: to } = open;
204
+ open = null;
205
+ map.closePopup(popup);
206
+ if (back)
207
+ to?.focus();
208
+ }
209
+ function showCard(map, L, at, height, card, id, back, byKeys) {
210
+ closeCard(map, false);
211
+ // Escape closes the card and goes back to its pin; the arrows stay with the card, not the map.
212
+ card.element.addEventListener('keydown', (event) => {
213
+ if (event.key === 'Escape') {
214
+ event.stopPropagation();
215
+ closeCard(map, true);
216
+ }
217
+ else if (MOVE_KEYS.has(event.key))
218
+ event.stopPropagation();
219
+ });
220
+ const popup = L.popup({ closeButton: false, autoPanPadding: [16, 16], className: 'fd-map-card-popup', minWidth: 220, maxWidth: 280, offset: [0, 4 - height] })
221
+ .setLatLng([at.lat, at.lng])
222
+ .setContent(card.element);
223
+ open = { id, card, popup, back };
224
+ popup.openOn(map);
225
+ if (byKeys)
226
+ card.focus();
227
+ }
228
+ function openCard(map, L, record, at, height, back, byKeys) {
229
+ const card = (0, card_1.drawCard)({
230
+ document: doc,
231
+ page,
232
+ locale,
233
+ labels,
234
+ dir: dir(),
235
+ card: spec.card ?? {},
236
+ title,
237
+ fields: cardFields,
238
+ record,
239
+ chosen: context.isChosen(record.id),
240
+ choose: (on) => context.choose(record.id, on),
241
+ ...(context.open ? { open: () => context.open?.(record.id) } : {}),
242
+ close: () => closeCard(map, true),
243
+ });
244
+ showCard(map, L, at, height, card, record.id, back, byKeys);
245
+ }
246
+ // ---- the pins -------------------------------------------------------------------
247
+ function draw(map, L) {
248
+ layer ??= L.layerGroup().addTo(map);
249
+ layer.clearLayers();
250
+ drawn = [];
251
+ drawnOf.clear();
252
+ const placed = records.flatMap((record, i) => (places[i] ? [{ record, at: places[i] }] : []));
253
+ const zoom = map.getZoom();
254
+ const groups = spec.cluster === false
255
+ ? placed.map((_, i) => [i])
256
+ : (0, cluster_1.clusterPoints)(placed.map(({ at }) => map.project([at.lat, at.lng], zoom)), CROWD);
257
+ for (const group of groups) {
258
+ if (group.length === 1)
259
+ single(map, L, placed[group[0]].record, placed[group[0]].at);
260
+ else
261
+ bubble(map, L, group.map((i) => placed[i]));
262
+ }
263
+ restyle();
264
+ light(map, L);
265
+ }
266
+ /**
267
+ * A mark pressed: clicked, or Enter or Space while it has the focus. Leaflet
268
+ * makes a mark a button to the keyboard but clicks it only for a popup of its own.
269
+ */
270
+ function onPress(marker, act) {
271
+ marker.on('click', (event) => act(event.originalEvent));
272
+ marker.on('keydown', (event) => {
273
+ const key = event.originalEvent;
274
+ if (key.key !== 'Enter' && key.key !== ' ')
275
+ return;
276
+ key.preventDefault();
277
+ act(key);
278
+ });
279
+ }
280
+ function mark(entry, name) {
281
+ const element = entry.marker.getElement();
282
+ element?.setAttribute('aria-label', name);
283
+ drawn.push(entry);
284
+ for (const id of entry.ids)
285
+ drawnOf.set(id, entry);
286
+ return element;
287
+ }
288
+ function single(map, L, record, at) {
289
+ const face = pins.face(record);
290
+ const icon = L.divIcon({ className: `fd-map-mark ${anchor(face)}`, html: face.element, iconSize: SIZED_BY_FACE });
291
+ const marker = L.marker([at.lat, at.lng], { icon, keyboard: true, riseOnHover: true, riseOffset: 500 }).addTo(layer);
292
+ const element = mark({ marker, face: face.element, ids: [record.id] }, pins.name(record));
293
+ if (element)
294
+ element.dataset['id'] = String(record.id);
295
+ const height = face.stands === 'foot' ? face.height : face.height / 2;
296
+ onPress(marker, (event) => {
297
+ // Ctrl (⌘) and a click chooses the record, as in a list of files.
298
+ if (event && (event.ctrlKey || event.metaKey))
299
+ context.choose(record.id, !context.isChosen(record.id));
300
+ else
301
+ openCard(map, L, record, at, height, element ?? null, isKeys(event));
302
+ });
303
+ marker.on('mouseover', () => context.highlight(record.id));
304
+ marker.on('mouseout', () => context.highlight(null));
305
+ element?.addEventListener('focus', () => context.highlight(record.id));
306
+ element?.addEventListener('blur', () => context.highlight(null));
307
+ }
308
+ function bubble(map, L, members) {
309
+ const n = members.length;
310
+ const face = doc.createElement('div');
311
+ face.className = 'fd-map-bubble';
312
+ face.dataset['size'] = n < 10 ? 's' : n < 100 ? 'm' : 'l';
313
+ face.textContent = new Intl.NumberFormat(locale, { notation: 'compact', numberingSystem: 'latn' }).format(n);
314
+ const centre = { lat: members.reduce((sum, p) => sum + p.at.lat, 0) / n, lng: members.reduce((sum, p) => sum + p.at.lng, 0) / n };
315
+ const icon = L.divIcon({ className: 'fd-map-mark fd-map-middle', html: face, iconSize: SIZED_BY_FACE });
316
+ const marker = L.marker([centre.lat, centre.lng], { icon, keyboard: true, riseOnHover: true }).addTo(layer);
317
+ const element = mark({ marker, face, ids: members.map((p) => p.record.id) }, (0, labels_1.fill)(labels.cluster, { n: count(n) }));
318
+ const bounds = L.latLngBounds(members.map((p) => [p.at.lat, p.at.lng]));
319
+ onPress(marker, (event) => {
320
+ const byKeys = isKeys(event);
321
+ const most = Math.min(map.getMaxZoom(), 19);
322
+ // Closer, until they part; on one spot (a tower's flats), a list of them.
323
+ if (map.getZoom() < most && !bounds.getNorthEast().equals(bounds.getSouthWest(), 1e-7)) {
324
+ moving = true;
325
+ map.fitBounds(bounds, { padding: [ROOM, ROOM], maxZoom: most });
326
+ if (byKeys)
327
+ box.element.focus();
328
+ return;
329
+ }
330
+ const crowd = (0, card_1.drawCrowd)({
331
+ document: doc,
332
+ labels,
333
+ dir: dir(),
334
+ records: members.map((p) => ({ record: p.record, name: pins.name(p.record) })),
335
+ pick: (record) => {
336
+ const at = members.find((p) => p.record.id === record.id)?.at ?? centre;
337
+ openCard(map, L, record, at, 20, element ?? null, true);
338
+ },
339
+ close: () => closeCard(map, true),
340
+ });
341
+ showCard(map, L, centre, 20, crowd, null, element ?? null, byKeys);
342
+ });
343
+ }
344
+ /** A lit record that is in a bubble shows where it is: its own pin, over the bubble. */
345
+ function light(map, L) {
346
+ ghost?.remove();
347
+ ghost = null;
348
+ const entry = hot === null ? undefined : drawnOf.get(hot);
349
+ if (!entry || entry.ids.length === 1)
350
+ return;
351
+ const i = records.findIndex((record) => record.id === hot);
352
+ const at = places[i];
353
+ if (!at)
354
+ return;
355
+ const face = pins.face(records[i]);
356
+ face.element.toggleAttribute('data-hot', true);
357
+ face.element.toggleAttribute('data-chosen', context.isChosen(records[i].id));
358
+ const icon = L.divIcon({ className: `fd-map-mark fd-map-ghost ${anchor(face)}`, html: face.element, iconSize: SIZED_BY_FACE });
359
+ ghost = L.marker([at.lat, at.lng], { icon, interactive: false, keyboard: false, zIndexOffset: 2000 }).addTo(map);
360
+ ghost.getElement()?.setAttribute('aria-hidden', 'true');
361
+ }
362
+ /** Each pin as it stands: lit when its row is, ticked when its record is chosen. */
363
+ function restyle() {
364
+ for (const entry of drawn) {
365
+ const lit = hot !== null && entry.ids.includes(hot);
366
+ entry.face.toggleAttribute('data-hot', lit);
367
+ entry.face.toggleAttribute('data-chosen', entry.ids.some((id) => context.isChosen(id)));
368
+ entry.marker.setZIndexOffset(lit ? 1000 : 0);
369
+ }
370
+ }
371
+ function fit(map) {
372
+ const at = places.filter((p) => !!p);
373
+ if (!at.length)
374
+ return;
375
+ fitted = true;
376
+ if (at.length === 1)
377
+ map.setView([at[0].lat, at[0].lng], Math.max(map.getZoom(), 15), { animate: false });
378
+ else
379
+ map.fitBounds(at.map((p) => [p.lat, p.lng]), { padding: [ROOM, ROOM], maxZoom: 16, animate: false });
380
+ }
381
+ box.ready((map, L) => {
382
+ box.element.append(tools, here, note);
383
+ box.shield(tools);
384
+ box.shield(here);
385
+ box.follow(note);
386
+ box.follow(here);
387
+ here.addEventListener('click', () => searchHere(map));
388
+ map.on('zoomend', () => draw(map, L));
389
+ map.on('moveend', () => {
390
+ if (moving)
391
+ here.hidden = false;
392
+ moving = false;
393
+ });
394
+ map.on('popupclose', (event) => {
395
+ if (open?.popup === event.popup)
396
+ open = null;
397
+ });
398
+ });
399
+ async function reload() {
400
+ const source = context.dataSource;
401
+ if (!source?.list)
402
+ return;
403
+ const asked = ++asking;
404
+ const filter = context.filter();
405
+ const key = JSON.stringify(filter);
406
+ let result;
407
+ try {
408
+ result = await source.list({ model, fields, filter, sort: node.sort ?? [], offset: 0, limit: spec.limit ?? 500 });
409
+ }
410
+ catch {
411
+ if (asked !== asking || destroyed)
412
+ return;
413
+ note.textContent = labels.mapFailed;
414
+ note.hidden = false;
415
+ return;
416
+ }
417
+ if (asked !== asking || destroyed)
418
+ return;
419
+ records = result.records;
420
+ places = records.map((record) => placeOf(record.values));
421
+ const refit = !fitted || (key !== lastFilter && !ownSearch);
422
+ lastFilter = key;
423
+ ownSearch = false;
424
+ // The area drawn leaves the map when its search leaves the search bar.
425
+ if (searchedKey && !key.includes(searchedKey)) {
426
+ searched?.remove();
427
+ searched = null;
428
+ searchedKey = '';
429
+ }
430
+ const missing = places.filter((p) => !p).length;
431
+ const words = [
432
+ result.total > records.length ? (0, labels_1.fill)(labels.mapShowsFirst, { n: count(records.length), total: count(result.total) }) : '',
433
+ missing ? (0, labels_1.fill)(labels.notOnMap, { n: count(missing) }) : '',
434
+ ].filter(Boolean);
435
+ note.textContent = words.join(' ');
436
+ note.hidden = !words.length;
437
+ box.ready((map, L) => {
438
+ if (destroyed)
439
+ return;
440
+ if (refit) {
441
+ fit(map);
442
+ here.hidden = true;
443
+ }
444
+ draw(map, L);
445
+ if (open?.id !== null && open && !records.some((r) => r.id === open?.id))
446
+ closeCard(map, false);
447
+ else
448
+ open?.card.setChosen(open.id !== null && context.isChosen(open.id));
449
+ });
450
+ }
451
+ return {
452
+ element,
453
+ reload,
454
+ highlight(id) {
455
+ hot = id;
456
+ restyle();
457
+ box.ready((map, L) => light(map, L));
458
+ },
459
+ chosenChanged() {
460
+ restyle();
461
+ if (open?.id !== null && open)
462
+ open.card.setChosen(context.isChosen(open.id));
463
+ },
464
+ shown() {
465
+ box.refresh();
466
+ box.ready((map) => {
467
+ map.invalidateSize({ pan: false });
468
+ if (!fitted)
469
+ fit(map);
470
+ });
471
+ },
472
+ destroy() {
473
+ destroyed = true;
474
+ box.element.removeEventListener('pointerdown', pressed, { capture: true });
475
+ box.element.removeEventListener('keydown', keyed, { capture: true });
476
+ box.element.removeEventListener('wheel', wheeled, { capture: true });
477
+ box.destroy();
478
+ },
479
+ };
480
+ }
481
+ //# sourceMappingURL=list-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-view.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/list-view.ts"],"names":[],"mappings":"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"}