@fieldia/map 0.16.0 → 0.18.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 (108) hide show
  1. package/README.md +56 -9
  2. package/package.json +4 -4
  3. package/src/index.d.mts +1 -1
  4. package/src/index.d.ts +1 -1
  5. package/src/index.js.map +1 -1
  6. package/src/index.mjs.map +1 -1
  7. package/src/lib/area.js +2 -1
  8. package/src/lib/area.js.map +1 -1
  9. package/src/lib/area.mjs +3 -2
  10. package/src/lib/area.mjs.map +1 -1
  11. package/src/lib/card.d.mts +2 -1
  12. package/src/lib/card.d.ts +2 -1
  13. package/src/lib/card.js +5 -3
  14. package/src/lib/card.js.map +1 -1
  15. package/src/lib/card.mjs +5 -3
  16. package/src/lib/card.mjs.map +1 -1
  17. package/src/lib/cluster.d.mts +6 -1
  18. package/src/lib/cluster.d.ts +6 -1
  19. package/src/lib/cluster.js +11 -5
  20. package/src/lib/cluster.js.map +1 -1
  21. package/src/lib/cluster.mjs +11 -5
  22. package/src/lib/cluster.mjs.map +1 -1
  23. package/src/lib/form-map.d.mts +5 -2
  24. package/src/lib/form-map.d.ts +5 -2
  25. package/src/lib/form-map.js +222 -22
  26. package/src/lib/form-map.js.map +1 -1
  27. package/src/lib/form-map.mjs +224 -24
  28. package/src/lib/form-map.mjs.map +1 -1
  29. package/src/lib/heat.d.mts +25 -0
  30. package/src/lib/heat.d.ts +25 -0
  31. package/src/lib/heat.js +111 -0
  32. package/src/lib/heat.js.map +1 -0
  33. package/src/lib/heat.mjs +108 -0
  34. package/src/lib/heat.mjs.map +1 -0
  35. package/src/lib/labels.d.mts +23 -0
  36. package/src/lib/labels.d.ts +23 -0
  37. package/src/lib/labels.js +56 -4
  38. package/src/lib/labels.js.map +1 -1
  39. package/src/lib/labels.mjs +56 -4
  40. package/src/lib/labels.mjs.map +1 -1
  41. package/src/lib/leaflet.js +1 -0
  42. package/src/lib/leaflet.js.map +1 -1
  43. package/src/lib/leaflet.mjs +1 -0
  44. package/src/lib/leaflet.mjs.map +1 -1
  45. package/src/lib/list-view.js +126 -18
  46. package/src/lib/list-view.js.map +1 -1
  47. package/src/lib/list-view.mjs +126 -18
  48. package/src/lib/list-view.mjs.map +1 -1
  49. package/src/lib/map-core.d.mts +8 -0
  50. package/src/lib/map-core.d.ts +8 -0
  51. package/src/lib/map-core.js +41 -5
  52. package/src/lib/map-core.js.map +1 -1
  53. package/src/lib/map-core.mjs +40 -5
  54. package/src/lib/map-core.mjs.map +1 -1
  55. package/src/lib/marks.d.mts +11 -0
  56. package/src/lib/marks.d.ts +11 -0
  57. package/src/lib/marks.js +26 -1
  58. package/src/lib/marks.js.map +1 -1
  59. package/src/lib/marks.mjs +23 -0
  60. package/src/lib/marks.mjs.map +1 -1
  61. package/src/lib/measure.d.mts +15 -0
  62. package/src/lib/measure.d.ts +15 -0
  63. package/src/lib/measure.js +157 -0
  64. package/src/lib/measure.js.map +1 -0
  65. package/src/lib/measure.mjs +153 -0
  66. package/src/lib/measure.mjs.map +1 -0
  67. package/src/lib/place.js +3 -1
  68. package/src/lib/place.js.map +1 -1
  69. package/src/lib/place.mjs +4 -2
  70. package/src/lib/place.mjs.map +1 -1
  71. package/src/lib/providers.d.mts +37 -5
  72. package/src/lib/providers.d.ts +37 -5
  73. package/src/lib/providers.js +37 -18
  74. package/src/lib/providers.js.map +1 -1
  75. package/src/lib/providers.mjs +37 -18
  76. package/src/lib/providers.mjs.map +1 -1
  77. package/src/lib/reach.d.mts +25 -0
  78. package/src/lib/reach.d.ts +25 -0
  79. package/src/lib/reach.js +158 -0
  80. package/src/lib/reach.js.map +1 -0
  81. package/src/lib/reach.mjs +153 -0
  82. package/src/lib/reach.mjs.map +1 -0
  83. package/src/lib/regions.d.mts +137 -0
  84. package/src/lib/regions.d.ts +137 -0
  85. package/src/lib/regions.js +456 -0
  86. package/src/lib/regions.js.map +1 -0
  87. package/src/lib/regions.mjs +445 -0
  88. package/src/lib/regions.mjs.map +1 -0
  89. package/src/lib/routes.d.mts +16 -4
  90. package/src/lib/routes.d.ts +16 -4
  91. package/src/lib/routes.js +40 -3
  92. package/src/lib/routes.js.map +1 -1
  93. package/src/lib/routes.mjs +38 -3
  94. package/src/lib/routes.mjs.map +1 -1
  95. package/src/lib/settings.d.mts +9 -1
  96. package/src/lib/settings.d.ts +9 -1
  97. package/src/lib/styles.d.mts +3 -3
  98. package/src/lib/styles.d.ts +3 -3
  99. package/src/lib/styles.js +18 -1
  100. package/src/lib/styles.js.map +1 -1
  101. package/src/lib/styles.mjs +18 -1
  102. package/src/lib/styles.mjs.map +1 -1
  103. package/src/lib/tools.d.mts +30 -0
  104. package/src/lib/tools.d.ts +30 -0
  105. package/src/lib/tools.js +135 -0
  106. package/src/lib/tools.js.map +1 -0
  107. package/src/lib/tools.mjs +132 -0
  108. package/src/lib/tools.mjs.map +1 -0
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.drawHeat = drawHeat;
4
+ /** How far each record's glow reaches, in pixels, and how soft its edge is. */
5
+ const RADIUS = 22;
6
+ const BLUR = 16;
7
+ function drawHeat(options) {
8
+ const { map, L, document: doc } = options;
9
+ const canvas = doc.createElement('canvas');
10
+ canvas.className = 'fd-map-heat leaflet-zoom-hide';
11
+ canvas.setAttribute('aria-hidden', 'true');
12
+ canvas.style.position = 'absolute';
13
+ canvas.style.pointerEvents = 'none';
14
+ const pane = map.getPane('fd-heat') ?? map.createPane('fd-heat');
15
+ // Over the images, under the shapes (400) and the pins (600).
16
+ pane.style.zIndex = '350';
17
+ pane.style.pointerEvents = 'none';
18
+ pane.append(canvas);
19
+ let points = [];
20
+ let shown = false;
21
+ let palette = null;
22
+ let paletteOf = '';
23
+ // One record's glow, drawn once: a blurred disc to stamp at each place.
24
+ const stamp = doc.createElement('canvas');
25
+ const r = RADIUS + BLUR;
26
+ stamp.width = stamp.height = r * 2;
27
+ const stampContext = stamp.getContext('2d');
28
+ if (stampContext) {
29
+ stampContext.shadowOffsetX = stampContext.shadowOffsetY = r * 2;
30
+ stampContext.shadowBlur = BLUR;
31
+ stampContext.shadowColor = 'black';
32
+ stampContext.beginPath();
33
+ stampContext.arc(-r, -r, RADIUS, 0, Math.PI * 2);
34
+ stampContext.fill();
35
+ }
36
+ /** 256 colours, from none to the strongest, made from the page's tones as the canvas reads them. */
37
+ function makePalette(colours) {
38
+ const strip = doc.createElement('canvas');
39
+ strip.width = 256;
40
+ strip.height = 1;
41
+ const context = strip.getContext('2d');
42
+ if (!context)
43
+ return new Uint8ClampedArray(1024);
44
+ const gradient = context.createLinearGradient(0, 0, 256, 0);
45
+ colours.forEach((colour, i) => {
46
+ context.fillStyle = '#2563eb';
47
+ // A tone the canvas cannot read keeps the last it could.
48
+ context.fillStyle = colour;
49
+ gradient.addColorStop(0.25 + (0.75 * i) / Math.max(1, colours.length - 1), context.fillStyle);
50
+ });
51
+ context.fillStyle = gradient;
52
+ context.fillRect(0, 0, 256, 1);
53
+ return context.getImageData(0, 0, 256, 1).data;
54
+ }
55
+ function redraw() {
56
+ const size = map.getSize();
57
+ const ratio = doc.defaultView?.devicePixelRatio ?? 1;
58
+ L.DomUtil.setPosition(canvas, map.containerPointToLayerPoint([0, 0]));
59
+ canvas.style.width = `${size.x}px`;
60
+ canvas.style.height = `${size.y}px`;
61
+ canvas.width = Math.round(size.x * ratio);
62
+ canvas.height = Math.round(size.y * ratio);
63
+ canvas.hidden = !shown;
64
+ const context = canvas.getContext('2d', { willReadFrequently: true });
65
+ if (!context || !shown || !points.length)
66
+ return;
67
+ const colours = options.colours();
68
+ if (colours.join() !== paletteOf) {
69
+ palette = makePalette(colours);
70
+ paletteOf = colours.join();
71
+ }
72
+ context.setTransform(ratio, 0, 0, ratio, 0, 0);
73
+ const most = Math.max(...points.map((p) => p.weight), 1e-9);
74
+ const bounds = map.getBounds().pad(0.2);
75
+ for (const point of points) {
76
+ if (!bounds.contains([point.lat, point.lng]))
77
+ continue;
78
+ const at = map.latLngToContainerPoint([point.lat, point.lng]);
79
+ // Each adds a little: only many together, or the heaviest, glow strongest.
80
+ context.globalAlpha = Math.max(0.04, point.weight / most) * 0.22;
81
+ context.drawImage(stamp, at.x - r, at.y - r);
82
+ }
83
+ // Each pixel's strength becomes its colour.
84
+ const image = context.getImageData(0, 0, canvas.width, canvas.height);
85
+ const data = image.data;
86
+ for (let i = 3; i < data.length; i += 4) {
87
+ const strength = data[i];
88
+ if (!strength || !palette)
89
+ continue;
90
+ const j = strength * 4;
91
+ data[i - 3] = palette[j];
92
+ data[i - 2] = palette[j + 1];
93
+ data[i - 1] = palette[j + 2];
94
+ data[i] = Math.min(220, strength * 1.6);
95
+ }
96
+ context.putImageData(image, 0, 0);
97
+ }
98
+ map.on('moveend resize', redraw);
99
+ return {
100
+ draw(next, on) {
101
+ points = next;
102
+ shown = on;
103
+ redraw();
104
+ },
105
+ destroy() {
106
+ map.off('moveend resize', redraw);
107
+ canvas.remove();
108
+ },
109
+ };
110
+ }
111
+ //# sourceMappingURL=heat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heat.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/heat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /** How far each record's glow reaches, in pixels, and how soft its edge is. */
2
+ const RADIUS = 22;
3
+ const BLUR = 16;
4
+ export function drawHeat(options) {
5
+ const { map, L, document: doc } = options;
6
+ const canvas = doc.createElement('canvas');
7
+ canvas.className = 'fd-map-heat leaflet-zoom-hide';
8
+ canvas.setAttribute('aria-hidden', 'true');
9
+ canvas.style.position = 'absolute';
10
+ canvas.style.pointerEvents = 'none';
11
+ const pane = map.getPane('fd-heat') ?? map.createPane('fd-heat');
12
+ // Over the images, under the shapes (400) and the pins (600).
13
+ pane.style.zIndex = '350';
14
+ pane.style.pointerEvents = 'none';
15
+ pane.append(canvas);
16
+ let points = [];
17
+ let shown = false;
18
+ let palette = null;
19
+ let paletteOf = '';
20
+ // One record's glow, drawn once: a blurred disc to stamp at each place.
21
+ const stamp = doc.createElement('canvas');
22
+ const r = RADIUS + BLUR;
23
+ stamp.width = stamp.height = r * 2;
24
+ const stampContext = stamp.getContext('2d');
25
+ if (stampContext) {
26
+ stampContext.shadowOffsetX = stampContext.shadowOffsetY = r * 2;
27
+ stampContext.shadowBlur = BLUR;
28
+ stampContext.shadowColor = 'black';
29
+ stampContext.beginPath();
30
+ stampContext.arc(-r, -r, RADIUS, 0, Math.PI * 2);
31
+ stampContext.fill();
32
+ }
33
+ /** 256 colours, from none to the strongest, made from the page's tones as the canvas reads them. */
34
+ function makePalette(colours) {
35
+ const strip = doc.createElement('canvas');
36
+ strip.width = 256;
37
+ strip.height = 1;
38
+ const context = strip.getContext('2d');
39
+ if (!context)
40
+ return new Uint8ClampedArray(1024);
41
+ const gradient = context.createLinearGradient(0, 0, 256, 0);
42
+ colours.forEach((colour, i) => {
43
+ context.fillStyle = '#2563eb';
44
+ // A tone the canvas cannot read keeps the last it could.
45
+ context.fillStyle = colour;
46
+ gradient.addColorStop(0.25 + (0.75 * i) / Math.max(1, colours.length - 1), context.fillStyle);
47
+ });
48
+ context.fillStyle = gradient;
49
+ context.fillRect(0, 0, 256, 1);
50
+ return context.getImageData(0, 0, 256, 1).data;
51
+ }
52
+ function redraw() {
53
+ const size = map.getSize();
54
+ const ratio = doc.defaultView?.devicePixelRatio ?? 1;
55
+ L.DomUtil.setPosition(canvas, map.containerPointToLayerPoint([0, 0]));
56
+ canvas.style.width = `${size.x}px`;
57
+ canvas.style.height = `${size.y}px`;
58
+ canvas.width = Math.round(size.x * ratio);
59
+ canvas.height = Math.round(size.y * ratio);
60
+ canvas.hidden = !shown;
61
+ const context = canvas.getContext('2d', { willReadFrequently: true });
62
+ if (!context || !shown || !points.length)
63
+ return;
64
+ const colours = options.colours();
65
+ if (colours.join() !== paletteOf) {
66
+ palette = makePalette(colours);
67
+ paletteOf = colours.join();
68
+ }
69
+ context.setTransform(ratio, 0, 0, ratio, 0, 0);
70
+ const most = Math.max(...points.map((p) => p.weight), 1e-9);
71
+ const bounds = map.getBounds().pad(0.2);
72
+ for (const point of points) {
73
+ if (!bounds.contains([point.lat, point.lng]))
74
+ continue;
75
+ const at = map.latLngToContainerPoint([point.lat, point.lng]);
76
+ // Each adds a little: only many together, or the heaviest, glow strongest.
77
+ context.globalAlpha = Math.max(0.04, point.weight / most) * 0.22;
78
+ context.drawImage(stamp, at.x - r, at.y - r);
79
+ }
80
+ // Each pixel's strength becomes its colour.
81
+ const image = context.getImageData(0, 0, canvas.width, canvas.height);
82
+ const data = image.data;
83
+ for (let i = 3; i < data.length; i += 4) {
84
+ const strength = data[i];
85
+ if (!strength || !palette)
86
+ continue;
87
+ const j = strength * 4;
88
+ data[i - 3] = palette[j];
89
+ data[i - 2] = palette[j + 1];
90
+ data[i - 1] = palette[j + 2];
91
+ data[i] = Math.min(220, strength * 1.6);
92
+ }
93
+ context.putImageData(image, 0, 0);
94
+ }
95
+ map.on('moveend resize', redraw);
96
+ return {
97
+ draw(next, on) {
98
+ points = next;
99
+ shown = on;
100
+ redraw();
101
+ },
102
+ destroy() {
103
+ map.off('moveend resize', redraw);
104
+ canvas.remove();
105
+ },
106
+ };
107
+ }
108
+ //# sourceMappingURL=heat.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heat.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/heat.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,19 @@ export interface MapLabels {
57
57
  /** The designer's setting naming the field a place's address is written into. */
58
58
  settingAddress: string;
59
59
  settingNowhere: string;
60
+ /** The tools under the zoom. */
61
+ satellite: string;
62
+ traffic: string;
63
+ fullScreen: string;
64
+ leaveFullScreen: string;
65
+ measure: string;
66
+ measureHint: string;
67
+ /** A way measured: `{distance}` its length. */
68
+ measured: string;
69
+ /** An area of a map's shaded areas, with its number. */
70
+ areaValue: string;
71
+ /** The legend's step for areas with nothing to shade them. */
72
+ areasNone: string;
60
73
  }
61
74
  export declare const MAP_LABELS: Record<Locale, MapLabels>;
62
75
  /** The words a list's map shows, besides the maps' own: kept apart, so a form with only a place or an area never carries them. */
@@ -80,6 +93,14 @@ export interface ListMapLabels {
80
93
  /** The tools that draw an area on a list's map, and the search the area becomes. */
81
94
  drawArea: string;
82
95
  inDrawnArea: string;
96
+ /** A search for one shaded area's records: `{name}` the area. */
97
+ inRegion: string;
98
+ /** The tool that puts the records nearest the reader first. */
99
+ nearestFirst: string;
100
+ /** Said when the reader's place was not given: the records nearest the map's middle come first instead. */
101
+ nearestFromMiddle: string;
102
+ /** Said under a heat map. */
103
+ heatNote: string;
83
104
  }
84
105
  export declare const LIST_MAP_LABELS: Record<Locale, ListMapLabels>;
85
106
  /** The words a form's map shows, besides the maps' own and a list map's: kept apart, as theirs are. */
@@ -91,6 +112,8 @@ export interface FormMapLabels {
91
112
  /** Back to following a place that moves, after the person moved the map away. */
92
113
  follow: string;
93
114
  routeFailed: string;
115
+ /** Pins gathered: `{n}` how many, `{names}` whose ("2 here: Kitchen, Courier"). */
116
+ crowdHere: string;
94
117
  }
95
118
  export declare const FORM_MAP_LABELS: Record<Locale, FormMapLabels>;
96
119
  /** The words for a page's language, with the app's own over them. */
@@ -57,6 +57,19 @@ export interface MapLabels {
57
57
  /** The designer's setting naming the field a place's address is written into. */
58
58
  settingAddress: string;
59
59
  settingNowhere: string;
60
+ /** The tools under the zoom. */
61
+ satellite: string;
62
+ traffic: string;
63
+ fullScreen: string;
64
+ leaveFullScreen: string;
65
+ measure: string;
66
+ measureHint: string;
67
+ /** A way measured: `{distance}` its length. */
68
+ measured: string;
69
+ /** An area of a map's shaded areas, with its number. */
70
+ areaValue: string;
71
+ /** The legend's step for areas with nothing to shade them. */
72
+ areasNone: string;
60
73
  }
61
74
  export declare const MAP_LABELS: Record<Locale, MapLabels>;
62
75
  /** The words a list's map shows, besides the maps' own: kept apart, so a form with only a place or an area never carries them. */
@@ -80,6 +93,14 @@ export interface ListMapLabels {
80
93
  /** The tools that draw an area on a list's map, and the search the area becomes. */
81
94
  drawArea: string;
82
95
  inDrawnArea: string;
96
+ /** A search for one shaded area's records: `{name}` the area. */
97
+ inRegion: string;
98
+ /** The tool that puts the records nearest the reader first. */
99
+ nearestFirst: string;
100
+ /** Said when the reader's place was not given: the records nearest the map's middle come first instead. */
101
+ nearestFromMiddle: string;
102
+ /** Said under a heat map. */
103
+ heatNote: string;
83
104
  }
84
105
  export declare const LIST_MAP_LABELS: Record<Locale, ListMapLabels>;
85
106
  /** The words a form's map shows, besides the maps' own and a list map's: kept apart, as theirs are. */
@@ -91,6 +112,8 @@ export interface FormMapLabels {
91
112
  /** Back to following a place that moves, after the person moved the map away. */
92
113
  follow: string;
93
114
  routeFailed: string;
115
+ /** Pins gathered: `{n}` how many, `{names}` whose ("2 here: Kitchen, Courier"). */
116
+ crowdHere: string;
94
117
  }
95
118
  export declare const FORM_MAP_LABELS: Record<Locale, FormMapLabels>;
96
119
  /** The words for a page's language, with the app's own over them. */
package/src/lib/labels.js CHANGED
@@ -59,6 +59,15 @@ exports.MAP_LABELS = {
59
59
  settingShapes: 'Shapes',
60
60
  settingAddress: 'Address goes into',
61
61
  settingNowhere: 'Nowhere',
62
+ satellite: 'Satellite',
63
+ traffic: 'Traffic',
64
+ fullScreen: 'Full screen',
65
+ leaveFullScreen: 'Leave full screen',
66
+ measure: 'Measure a distance',
67
+ measureHint: 'Click points along the way; double-click or press Enter to finish. Escape clears.',
68
+ measured: 'The way measures {distance}.',
69
+ areaValue: '{name}: {value}',
70
+ areasNone: 'None',
62
71
  },
63
72
  ar: {
64
73
  mapOf: '{label}، خريطة',
@@ -114,6 +123,15 @@ exports.MAP_LABELS = {
114
123
  settingShapes: 'الأشكال',
115
124
  settingAddress: 'يُكتب العنوان في',
116
125
  settingNowhere: 'لا مكان',
126
+ satellite: 'القمر الصناعي',
127
+ traffic: 'حركة المرور',
128
+ fullScreen: 'ملء الشاشة',
129
+ leaveFullScreen: 'الخروج من ملء الشاشة',
130
+ measure: 'قِس مسافة',
131
+ measureHint: 'انقر نقاطًا على طول الطريق؛ انقر مرتين أو اضغط Enter للإنهاء، ويمسح Escape القياس.',
132
+ measured: 'يبلغ الطريق {distance}.',
133
+ areaValue: '{name}: {value}',
134
+ areasNone: 'لا شيء',
117
135
  },
118
136
  fr: {
119
137
  mapOf: '{label}, carte',
@@ -169,6 +187,15 @@ exports.MAP_LABELS = {
169
187
  settingShapes: 'Formes',
170
188
  settingAddress: 'L’adresse va dans',
171
189
  settingNowhere: 'Nulle part',
190
+ satellite: 'Satellite',
191
+ traffic: 'Trafic',
192
+ fullScreen: 'Plein écran',
193
+ leaveFullScreen: 'Quitter le plein écran',
194
+ measure: 'Mesurer une distance',
195
+ measureHint: 'Cliquez des points le long du trajet ; double-cliquez ou appuyez sur Entrée pour terminer. Échap efface.',
196
+ measured: 'Le trajet mesure {distance}.',
197
+ areaValue: '{name} : {value}',
198
+ areasNone: 'Aucun',
172
199
  },
173
200
  de: {
174
201
  mapOf: '{label}, Karte',
@@ -224,6 +251,15 @@ exports.MAP_LABELS = {
224
251
  settingShapes: 'Formen',
225
252
  settingAddress: 'Adresse kommt in',
226
253
  settingNowhere: 'Nirgends',
254
+ satellite: 'Satellit',
255
+ traffic: 'Verkehr',
256
+ fullScreen: 'Vollbild',
257
+ leaveFullScreen: 'Vollbild verlassen',
258
+ measure: 'Entfernung messen',
259
+ measureHint: 'Punkte entlang des Weges anklicken; Doppelklick oder Eingabe beendet, Escape löscht.',
260
+ measured: 'Der Weg misst {distance}.',
261
+ areaValue: '{name}: {value}',
262
+ areasNone: 'Keine',
227
263
  },
228
264
  };
229
265
  exports.LIST_MAP_LABELS = {
@@ -241,6 +277,10 @@ exports.LIST_MAP_LABELS = {
241
277
  mapFailed: 'The map could not load the records.',
242
278
  drawArea: 'Draw an area to search in',
243
279
  inDrawnArea: 'In the area drawn',
280
+ inRegion: 'In {name}',
281
+ nearestFirst: 'Nearest first',
282
+ nearestFromMiddle: 'Nearest the middle of the map first: your place was not given.',
283
+ heatNote: 'A heat map from afar: zoom in to the streets to see each one.',
244
284
  },
245
285
  ar: {
246
286
  pinKeys: 'ينتقل Tab بين الدبابيس. يفتح Enter بطاقة الدبوس، ويغلقها Escape.',
@@ -256,6 +296,10 @@ exports.LIST_MAP_LABELS = {
256
296
  mapFailed: 'تعذّر تحميل السجلات على الخريطة.',
257
297
  drawArea: 'ارسم منطقة للبحث فيها',
258
298
  inDrawnArea: 'في المنطقة المرسومة',
299
+ inRegion: 'في {name}',
300
+ nearestFirst: 'الأقرب أولًا',
301
+ nearestFromMiddle: 'الأقرب إلى منتصف الخريطة أولًا: لم يُعطَ موقعك.',
302
+ heatNote: 'خريطة حرارية من بعيد: قرّب إلى الشوارع لترى كلًّا منها.',
259
303
  },
260
304
  fr: {
261
305
  pinKeys: 'Tab parcourt les épingles. Entrée ouvre la fiche d’une épingle, Échap la ferme.',
@@ -271,6 +315,10 @@ exports.LIST_MAP_LABELS = {
271
315
  mapFailed: 'La carte n’a pas pu charger les enregistrements.',
272
316
  drawArea: 'Tracer une zone où chercher',
273
317
  inDrawnArea: 'Dans la zone tracée',
318
+ inRegion: 'À {name}',
319
+ nearestFirst: 'Les plus proches d’abord',
320
+ nearestFromMiddle: 'Les plus proches du centre de la carte d’abord : votre position n’a pas été donnée.',
321
+ heatNote: 'Une carte de chaleur vue de loin : zoomez jusqu’aux rues pour voir chacun.',
274
322
  },
275
323
  de: {
276
324
  pinKeys: 'Tab springt von Nadel zu Nadel. Eingabe öffnet die Karte einer Nadel, Escape schließt sie.',
@@ -286,13 +334,17 @@ exports.LIST_MAP_LABELS = {
286
334
  mapFailed: 'Die Karte konnte die Datensätze nicht laden.',
287
335
  drawArea: 'Ein Gebiet zum Suchen zeichnen',
288
336
  inDrawnArea: 'Im gezeichneten Gebiet',
337
+ inRegion: 'In {name}',
338
+ nearestFirst: 'Nächste zuerst',
339
+ nearestFromMiddle: 'Die der Kartenmitte nächsten zuerst: Ihr Standort wurde nicht freigegeben.',
340
+ heatNote: 'Eine Heatmap aus der Ferne: bis zu den Straßen zoomen, um jeden zu sehen.',
289
341
  },
290
342
  };
291
343
  exports.FORM_MAP_LABELS = {
292
- en: { map: 'Map', lastSeen: 'Last seen {time}', follow: 'Follow', routeFailed: 'The way could not be found.' },
293
- ar: { map: 'خريطة', lastSeen: 'آخر ظهور {time}', follow: 'تتبّع', routeFailed: 'تعذّر إيجاد الطريق.' },
294
- fr: { map: 'Carte', lastSeen: 'Vu pour la dernière fois {time}', follow: 'Suivre', routeFailed: 'Le trajet est introuvable.' },
295
- de: { map: 'Karte', lastSeen: 'Zuletzt gesehen {time}', follow: 'Folgen', routeFailed: 'Der Weg wurde nicht gefunden.' },
344
+ en: { map: 'Map', lastSeen: 'Last seen {time}', follow: 'Follow', routeFailed: 'The way could not be found.', crowdHere: '{n} here: {names}. Zoom in to see them.' },
345
+ ar: { map: 'خريطة', lastSeen: 'آخر ظهور {time}', follow: 'تتبّع', routeFailed: 'تعذّر إيجاد الطريق.', crowdHere: '{n} هنا: {names}. كبّر الخريطة لرؤيتها.' },
346
+ fr: { map: 'Carte', lastSeen: 'Vu pour la dernière fois {time}', follow: 'Suivre', routeFailed: 'Le trajet est introuvable.', crowdHere: '{n} ici : {names}. Zoomez pour les voir.' },
347
+ de: { map: 'Karte', lastSeen: 'Zuletzt gesehen {time}', follow: 'Folgen', routeFailed: 'Der Weg wurde nicht gefunden.', crowdHere: '{n} hier: {names}. Hineinzoomen, um sie zu sehen.' },
296
348
  };
297
349
  /** The words for a page's language, with the app's own over them. */
298
350
  function mapLabels(locale, own) {
@@ -1 +1 @@
1
- {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/labels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/labels.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,15 @@ export const MAP_LABELS = {
53
53
  settingShapes: 'Shapes',
54
54
  settingAddress: 'Address goes into',
55
55
  settingNowhere: 'Nowhere',
56
+ satellite: 'Satellite',
57
+ traffic: 'Traffic',
58
+ fullScreen: 'Full screen',
59
+ leaveFullScreen: 'Leave full screen',
60
+ measure: 'Measure a distance',
61
+ measureHint: 'Click points along the way; double-click or press Enter to finish. Escape clears.',
62
+ measured: 'The way measures {distance}.',
63
+ areaValue: '{name}: {value}',
64
+ areasNone: 'None',
56
65
  },
57
66
  ar: {
58
67
  mapOf: '{label}، خريطة',
@@ -108,6 +117,15 @@ export const MAP_LABELS = {
108
117
  settingShapes: 'الأشكال',
109
118
  settingAddress: 'يُكتب العنوان في',
110
119
  settingNowhere: 'لا مكان',
120
+ satellite: 'القمر الصناعي',
121
+ traffic: 'حركة المرور',
122
+ fullScreen: 'ملء الشاشة',
123
+ leaveFullScreen: 'الخروج من ملء الشاشة',
124
+ measure: 'قِس مسافة',
125
+ measureHint: 'انقر نقاطًا على طول الطريق؛ انقر مرتين أو اضغط Enter للإنهاء، ويمسح Escape القياس.',
126
+ measured: 'يبلغ الطريق {distance}.',
127
+ areaValue: '{name}: {value}',
128
+ areasNone: 'لا شيء',
111
129
  },
112
130
  fr: {
113
131
  mapOf: '{label}, carte',
@@ -163,6 +181,15 @@ export const MAP_LABELS = {
163
181
  settingShapes: 'Formes',
164
182
  settingAddress: 'L’adresse va dans',
165
183
  settingNowhere: 'Nulle part',
184
+ satellite: 'Satellite',
185
+ traffic: 'Trafic',
186
+ fullScreen: 'Plein écran',
187
+ leaveFullScreen: 'Quitter le plein écran',
188
+ measure: 'Mesurer une distance',
189
+ measureHint: 'Cliquez des points le long du trajet ; double-cliquez ou appuyez sur Entrée pour terminer. Échap efface.',
190
+ measured: 'Le trajet mesure {distance}.',
191
+ areaValue: '{name} : {value}',
192
+ areasNone: 'Aucun',
166
193
  },
167
194
  de: {
168
195
  mapOf: '{label}, Karte',
@@ -218,6 +245,15 @@ export const MAP_LABELS = {
218
245
  settingShapes: 'Formen',
219
246
  settingAddress: 'Adresse kommt in',
220
247
  settingNowhere: 'Nirgends',
248
+ satellite: 'Satellit',
249
+ traffic: 'Verkehr',
250
+ fullScreen: 'Vollbild',
251
+ leaveFullScreen: 'Vollbild verlassen',
252
+ measure: 'Entfernung messen',
253
+ measureHint: 'Punkte entlang des Weges anklicken; Doppelklick oder Eingabe beendet, Escape löscht.',
254
+ measured: 'Der Weg misst {distance}.',
255
+ areaValue: '{name}: {value}',
256
+ areasNone: 'Keine',
221
257
  },
222
258
  };
223
259
  export const LIST_MAP_LABELS = {
@@ -235,6 +271,10 @@ export const LIST_MAP_LABELS = {
235
271
  mapFailed: 'The map could not load the records.',
236
272
  drawArea: 'Draw an area to search in',
237
273
  inDrawnArea: 'In the area drawn',
274
+ inRegion: 'In {name}',
275
+ nearestFirst: 'Nearest first',
276
+ nearestFromMiddle: 'Nearest the middle of the map first: your place was not given.',
277
+ heatNote: 'A heat map from afar: zoom in to the streets to see each one.',
238
278
  },
239
279
  ar: {
240
280
  pinKeys: 'ينتقل Tab بين الدبابيس. يفتح Enter بطاقة الدبوس، ويغلقها Escape.',
@@ -250,6 +290,10 @@ export const LIST_MAP_LABELS = {
250
290
  mapFailed: 'تعذّر تحميل السجلات على الخريطة.',
251
291
  drawArea: 'ارسم منطقة للبحث فيها',
252
292
  inDrawnArea: 'في المنطقة المرسومة',
293
+ inRegion: 'في {name}',
294
+ nearestFirst: 'الأقرب أولًا',
295
+ nearestFromMiddle: 'الأقرب إلى منتصف الخريطة أولًا: لم يُعطَ موقعك.',
296
+ heatNote: 'خريطة حرارية من بعيد: قرّب إلى الشوارع لترى كلًّا منها.',
253
297
  },
254
298
  fr: {
255
299
  pinKeys: 'Tab parcourt les épingles. Entrée ouvre la fiche d’une épingle, Échap la ferme.',
@@ -265,6 +309,10 @@ export const LIST_MAP_LABELS = {
265
309
  mapFailed: 'La carte n’a pas pu charger les enregistrements.',
266
310
  drawArea: 'Tracer une zone où chercher',
267
311
  inDrawnArea: 'Dans la zone tracée',
312
+ inRegion: 'À {name}',
313
+ nearestFirst: 'Les plus proches d’abord',
314
+ nearestFromMiddle: 'Les plus proches du centre de la carte d’abord : votre position n’a pas été donnée.',
315
+ heatNote: 'Une carte de chaleur vue de loin : zoomez jusqu’aux rues pour voir chacun.',
268
316
  },
269
317
  de: {
270
318
  pinKeys: 'Tab springt von Nadel zu Nadel. Eingabe öffnet die Karte einer Nadel, Escape schließt sie.',
@@ -280,13 +328,17 @@ export const LIST_MAP_LABELS = {
280
328
  mapFailed: 'Die Karte konnte die Datensätze nicht laden.',
281
329
  drawArea: 'Ein Gebiet zum Suchen zeichnen',
282
330
  inDrawnArea: 'Im gezeichneten Gebiet',
331
+ inRegion: 'In {name}',
332
+ nearestFirst: 'Nächste zuerst',
333
+ nearestFromMiddle: 'Die der Kartenmitte nächsten zuerst: Ihr Standort wurde nicht freigegeben.',
334
+ heatNote: 'Eine Heatmap aus der Ferne: bis zu den Straßen zoomen, um jeden zu sehen.',
283
335
  },
284
336
  };
285
337
  export const FORM_MAP_LABELS = {
286
- en: { map: 'Map', lastSeen: 'Last seen {time}', follow: 'Follow', routeFailed: 'The way could not be found.' },
287
- ar: { map: 'خريطة', lastSeen: 'آخر ظهور {time}', follow: 'تتبّع', routeFailed: 'تعذّر إيجاد الطريق.' },
288
- fr: { map: 'Carte', lastSeen: 'Vu pour la dernière fois {time}', follow: 'Suivre', routeFailed: 'Le trajet est introuvable.' },
289
- de: { map: 'Karte', lastSeen: 'Zuletzt gesehen {time}', follow: 'Folgen', routeFailed: 'Der Weg wurde nicht gefunden.' },
338
+ en: { map: 'Map', lastSeen: 'Last seen {time}', follow: 'Follow', routeFailed: 'The way could not be found.', crowdHere: '{n} here: {names}. Zoom in to see them.' },
339
+ ar: { map: 'خريطة', lastSeen: 'آخر ظهور {time}', follow: 'تتبّع', routeFailed: 'تعذّر إيجاد الطريق.', crowdHere: '{n} هنا: {names}. كبّر الخريطة لرؤيتها.' },
340
+ fr: { map: 'Carte', lastSeen: 'Vu pour la dernière fois {time}', follow: 'Suivre', routeFailed: 'Le trajet est introuvable.', crowdHere: '{n} ici : {names}. Zoomez pour les voir.' },
341
+ de: { map: 'Karte', lastSeen: 'Zuletzt gesehen {time}', follow: 'Folgen', routeFailed: 'Der Weg wurde nicht gefunden.', crowdHere: '{n} hier: {names}. Hineinzoomen, um sie zu sehen.' },
290
342
  };
291
343
  /** The words for a page's language, with the app's own over them. */
292
344
  export function mapLabels(locale, own) {