@fieldia/map 0.19.0 → 0.19.1

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 (66) hide show
  1. package/README.md +90 -3
  2. package/package.json +4 -4
  3. package/src/lib/address-labels.d.mts +14 -2
  4. package/src/lib/address-labels.d.ts +14 -2
  5. package/src/lib/address-labels.js.map +1 -1
  6. package/src/lib/address-labels.mjs.map +1 -1
  7. package/src/lib/address-line.d.mts +10 -1
  8. package/src/lib/address-line.d.ts +10 -1
  9. package/src/lib/address-line.js +25 -8
  10. package/src/lib/address-line.js.map +1 -1
  11. package/src/lib/address-line.mjs +24 -8
  12. package/src/lib/address-line.mjs.map +1 -1
  13. package/src/lib/address-names.d.mts +38 -0
  14. package/src/lib/address-names.d.ts +38 -0
  15. package/src/lib/address-names.js +240 -0
  16. package/src/lib/address-names.js.map +1 -0
  17. package/src/lib/address-names.mjs +232 -0
  18. package/src/lib/address-names.mjs.map +1 -0
  19. package/src/lib/address-parts.d.mts +128 -10
  20. package/src/lib/address-parts.d.ts +128 -10
  21. package/src/lib/address-parts.js +836 -17
  22. package/src/lib/address-parts.js.map +1 -1
  23. package/src/lib/address-parts.mjs +827 -14
  24. package/src/lib/address-parts.mjs.map +1 -1
  25. package/src/lib/address-search.d.mts +8 -4
  26. package/src/lib/address-search.d.ts +8 -4
  27. package/src/lib/address-search.js +27 -9
  28. package/src/lib/address-search.js.map +1 -1
  29. package/src/lib/address-search.mjs +28 -10
  30. package/src/lib/address-search.mjs.map +1 -1
  31. package/src/lib/address-suggest.d.mts +5 -2
  32. package/src/lib/address-suggest.d.ts +5 -2
  33. package/src/lib/address-suggest.js +161 -28
  34. package/src/lib/address-suggest.js.map +1 -1
  35. package/src/lib/address-suggest.mjs +161 -28
  36. package/src/lib/address-suggest.mjs.map +1 -1
  37. package/src/lib/form-map.js +9 -7
  38. package/src/lib/form-map.js.map +1 -1
  39. package/src/lib/form-map.mjs +10 -8
  40. package/src/lib/form-map.mjs.map +1 -1
  41. package/src/lib/place.js +21 -10
  42. package/src/lib/place.js.map +1 -1
  43. package/src/lib/place.mjs +21 -10
  44. package/src/lib/place.mjs.map +1 -1
  45. package/src/lib/providers.d.mts +6 -0
  46. package/src/lib/providers.d.ts +6 -0
  47. package/src/lib/providers.js +46 -97
  48. package/src/lib/providers.js.map +1 -1
  49. package/src/lib/providers.mjs +46 -97
  50. package/src/lib/providers.mjs.map +1 -1
  51. package/src/lib/route-line.d.mts +9 -0
  52. package/src/lib/route-line.d.ts +9 -0
  53. package/src/lib/route-line.js +13 -0
  54. package/src/lib/route-line.js.map +1 -1
  55. package/src/lib/route-line.mjs +11 -0
  56. package/src/lib/route-line.mjs.map +1 -1
  57. package/src/lib/routes.js +6 -2
  58. package/src/lib/routes.js.map +1 -1
  59. package/src/lib/routes.mjs +6 -2
  60. package/src/lib/routes.mjs.map +1 -1
  61. package/src/lib/search-box.d.mts +15 -3
  62. package/src/lib/search-box.d.ts +15 -3
  63. package/src/lib/search-box.js +118 -34
  64. package/src/lib/search-box.js.map +1 -1
  65. package/src/lib/search-box.mjs +118 -34
  66. package/src/lib/search-box.mjs.map +1 -1
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.searchBox = searchBox;
4
+ const address_line_1 = require("./address-line");
4
5
  const map_core_1 = require("./map-core");
5
6
  function searchBox(options) {
6
7
  const { document: doc, labels } = options;
@@ -30,13 +31,48 @@ function searchBox(options) {
30
31
  element.append(...(options.input ? [] : [input]), list);
31
32
  let places = [];
32
33
  let active = -1;
33
- let asking = null;
34
34
  let timer;
35
+ /**
36
+ * The places each search brought, by its words (near the same place), and
37
+ * the searches on their way, by theirs, until a place is picked: the same
38
+ * words show them again, or wait for them. A search dropped is not called
39
+ * back, as the provider has its request (and may bill it): its answer is
40
+ * kept when it comes, and only not shown.
41
+ */
42
+ const answers = new Map();
43
+ const going = new Map();
44
+ /** The words whose answer opens the list when it comes, and which the search is said to be going for: none once it is dropped. */
45
+ let wanted = '';
46
+ /** The search whose places the list shows, and the words it asked for. */
47
+ let showing = '';
48
+ let listed = '';
49
+ /** A place picked, and nothing typed since: Enter asks nothing. */
50
+ let picked = false;
51
+ /** The search waiting to go never goes; the one on its way opens nothing when it comes, and is no longer said to be going. */
52
+ function drop() {
53
+ clearTimeout(timer);
54
+ timer = undefined;
55
+ if (!wanted)
56
+ return;
57
+ wanted = '';
58
+ options.say(null);
59
+ }
60
+ /** The address is found, or the box gone: what is on its way is of no use, and called back; the next words are asked for anew (a provider's session ends with the pick). */
61
+ function stop() {
62
+ drop();
63
+ going.forEach((asked) => asked.abort());
64
+ going.clear();
65
+ answers.clear();
66
+ }
35
67
  function close() {
68
+ const open = !list.hidden;
36
69
  list.hidden = true;
37
70
  input.setAttribute('aria-expanded', 'false');
38
71
  input.removeAttribute('aria-activedescendant');
39
72
  active = -1;
73
+ // What was said of the list (how many places came) goes with it.
74
+ if (open)
75
+ options.say(null);
40
76
  }
41
77
  function mark(index) {
42
78
  active = index;
@@ -50,35 +86,44 @@ function searchBox(options) {
50
86
  input.removeAttribute('aria-activedescendant');
51
87
  }
52
88
  function choose(place) {
89
+ // A pause in typing ends here: nothing more is asked for these words, and no answer opens the list again.
90
+ stop();
91
+ picked = true;
53
92
  input.value = place.label;
54
93
  close();
55
94
  options.say(null);
95
+ place.picked?.();
56
96
  options.pick(place);
57
97
  }
58
- function show(found) {
59
- places = found;
60
- list.replaceChildren(...found.map((place, i) => {
98
+ function show(found, these, words) {
99
+ showing = these;
100
+ listed = words;
101
+ // Two rows that read alike are one to the person reading them: the first is kept.
102
+ places = found.filter((place, i) => found.findIndex((other) => other.label === place.label && other.detail === place.detail) === i);
103
+ list.replaceChildren(...places.map((place, i) => {
61
104
  const option = doc.createElement('li');
62
105
  option.id = `${listId}-${i}`;
63
106
  option.setAttribute('role', 'option');
64
107
  option.setAttribute('aria-selected', 'false');
65
- // The place on one line, where it is on the next, as a map's own search shows them.
66
- const name = doc.createElement('span');
67
- name.className = 'fd-map-result-name';
68
- name.textContent = place.label;
69
- option.append(name);
70
- if (place.detail) {
71
- const detail = doc.createElement('span');
72
- detail.className = 'fd-map-result-detail';
73
- detail.textContent = place.detail;
74
- option.append(detail);
75
- }
108
+ // The place on one line, where it is on the next, as a map's own search shows them: both at the page's side, each in its own words' direction ("1 Mohammed Mahmoud" on an Arabic page).
109
+ const line = (className, words) => {
110
+ const span = doc.createElement('span');
111
+ span.className = className;
112
+ const own = doc.createElement('bdi');
113
+ own.dir = (0, address_line_1.directionOf)(words) || 'auto';
114
+ own.textContent = words;
115
+ span.append(own);
116
+ return span;
117
+ };
118
+ option.append(line('fd-map-result-name', place.label));
119
+ if (place.detail)
120
+ option.append(line('fd-map-result-detail', place.detail));
76
121
  // Picked on the press, the box keeping its focus.
77
122
  option.addEventListener('mousedown', (event) => event.preventDefault());
78
123
  option.addEventListener('click', () => choose(place));
79
124
  return option;
80
125
  }));
81
- const any = found.length > 0;
126
+ const any = places.length > 0;
82
127
  list.hidden = !any;
83
128
  input.setAttribute('aria-expanded', String(any));
84
129
  active = -1;
@@ -86,21 +131,52 @@ function searchBox(options) {
86
131
  }
87
132
  function run() {
88
133
  clearTimeout(timer);
134
+ timer = undefined;
89
135
  const text = input.value.trim();
90
- asking?.abort();
91
136
  if (text.length < (options.asYouType ? 2 : 1)) {
137
+ drop();
92
138
  close();
93
139
  options.say(null);
94
140
  return;
95
141
  }
96
- const mine = (asking = new AbortController());
142
+ const near = options.near();
143
+ const zoom = options.zoom?.();
144
+ const these = JSON.stringify([text, near, zoom]);
145
+ const had = answers.get(these);
146
+ if (had) {
147
+ // Here already: shown, unless they are, and nothing else waited for.
148
+ drop();
149
+ if (list.hidden || showing !== these)
150
+ show(had, these, text);
151
+ return;
152
+ }
153
+ // On their way and waited for already.
154
+ if (wanted === these)
155
+ return;
156
+ wanted = these;
97
157
  options.say(labels.searching);
98
- options
99
- .search({ text, near: options.near(), zoom: options.zoom?.(), locale: options.locale, signal: mine.signal })
100
- .then((found) => mine === asking && show(found))
101
- .catch((error) => {
102
- if (mine !== asking || error.name === 'AbortError')
158
+ // On their way though dropped (Escape, a letter more): waited for again, not asked again.
159
+ if (going.has(these))
160
+ return;
161
+ const mine = new AbortController();
162
+ going.set(these, mine);
163
+ // Its answer is kept, whether or not its words are still waited for, and shown if they are. Called back (by a pick), it is nobody's.
164
+ options.search({ text, near, zoom, locale: options.locale, signal: mine.signal }).then((found) => {
165
+ if (mine.signal.aborted)
166
+ return;
167
+ going.delete(these);
168
+ answers.set(these, found);
169
+ if (wanted !== these)
103
170
  return;
171
+ wanted = '';
172
+ show(found, these, text);
173
+ }, (error) => {
174
+ if (mine.signal.aborted)
175
+ return;
176
+ going.delete(these);
177
+ if (wanted !== these)
178
+ return;
179
+ wanted = '';
104
180
  close();
105
181
  options.say(labels.searchFailed, 'error');
106
182
  // The reader is told to try again; the developer, why it failed.
@@ -108,6 +184,9 @@ function searchBox(options) {
108
184
  });
109
185
  }
110
186
  input.addEventListener('input', () => {
187
+ picked = false;
188
+ // A row marked was marked for the words before.
189
+ mark(-1);
111
190
  if (!options.asYouType) {
112
191
  close();
113
192
  return;
@@ -123,21 +202,25 @@ function searchBox(options) {
123
202
  return;
124
203
  event.preventDefault();
125
204
  const step = event.key === 'ArrowDown' ? 1 : -1;
126
- mark((active + step + places.length) % places.length);
205
+ // From no row marked, Down marks the first and Up the last (as from the first); each goes round at the end.
206
+ mark(((active < 0 && step < 0 ? 0 : active) + step + places.length) % places.length);
127
207
  }
128
208
  else if (event.key === 'Enter') {
129
209
  // Never the form's own Enter.
130
210
  event.preventDefault();
131
- // Enter takes the place chosen with the arrows, or the first: the one nearest and likeliest.
132
- if (!list.hidden && places.length)
133
- choose(places[Math.max(active, 0)]);
134
- else
211
+ // Enter takes the place chosen with the arrows, or the first: the one nearest and likeliest, of a list made for the words in the box. A list made for fewer words names another place ("Al" for "Al Malqa"): their own are asked for now, and listed. On the place picked, nothing.
212
+ const chosen = active >= 0 ? places[active] : listed === input.value.trim() ? places[0] : undefined;
213
+ if (!list.hidden && chosen)
214
+ choose(chosen);
215
+ else if (!picked)
135
216
  run();
136
217
  }
137
218
  else if (event.key === 'Escape') {
138
- if (!list.hidden) {
219
+ // The list closed, and the search that would open it again dropped, waiting or on its way.
220
+ if (!list.hidden || wanted || timer) {
139
221
  event.preventDefault();
140
222
  close();
223
+ drop();
141
224
  }
142
225
  else if (input.value && !options.freeText) {
143
226
  event.preventDefault();
@@ -146,15 +229,16 @@ function searchBox(options) {
146
229
  }
147
230
  }
148
231
  });
149
- input.addEventListener('blur', () => close());
232
+ // Left: nothing waiting goes on to open the list over the next box.
233
+ input.addEventListener('blur', () => {
234
+ close();
235
+ drop();
236
+ });
150
237
  return {
151
238
  element,
152
239
  input,
153
240
  list,
154
- destroy() {
155
- clearTimeout(timer);
156
- asking?.abort();
157
- },
241
+ destroy: stop,
158
242
  };
159
243
  }
160
244
  //# sourceMappingURL=search-box.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-box.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/search-box.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-box.js","sourceRoot":"","sources":["../../../../../libs/map/src/lib/search-box.ts"],"names":[],"mappings":";;AA+CA,8BAyOC;AAvRD,iDAA6C;AAG7C,yCAAsC;AA2CtC,SAAgB,SAAS,CAAC,OAAyB;IACjD,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC;QAC7B,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;QACpB,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;QAClC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;QAC3B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;QACzB,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;IAChC,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,SAAS,CAAC;IACtC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,KAAK,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAChD,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC7C,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;IAClC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC;IACjB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAExD,IAAI,MAAM,GAAiB,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IAChB,IAAI,KAAgD,CAAC;IACrD;;;;;;OAMG;IACH,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAC;IACjD,kIAAkI;IAClI,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,0EAA0E;IAC1E,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,mEAAmE;IACnE,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,8HAA8H;IAC9H,SAAS,IAAI;QACX,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,GAAG,SAAS,CAAC;QAClB,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,GAAG,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,4KAA4K;IAC5K,SAAS,IAAI;QACX,IAAI,EAAE,CAAC;QACP,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACxC,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED,SAAS,KAAK;QACZ,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAC7C,KAAK,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC;QAC/C,MAAM,GAAG,CAAC,CAAC,CAAC;QACZ,iEAAiE;QACjE,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,SAAS,IAAI,CAAC,KAAa;QACzB,MAAM,GAAG,KAAK,CAAC;QACf,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;QACrG,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAA4B,CAAC;QAC/D,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,YAAY,CAAC,uBAAuB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACvD,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;;YAAM,KAAK,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC;IACxD,CAAC;IAED,SAAS,MAAM,CAAC,KAAiB;QAC/B,0GAA0G;QAC1G,IAAI,EAAE,CAAC;QACP,MAAM,GAAG,IAAI,CAAC;QACd,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,SAAS,IAAI,CAAC,KAAmB,EAAE,KAAa,EAAE,KAAa;QAC7D,OAAO,GAAG,KAAK,CAAC;QAChB,MAAM,GAAG,KAAK,CAAC;QACf,kFAAkF;QAClF,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpI,IAAI,CAAC,eAAe,CAClB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACzB,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,EAAE,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC9C,wLAAwL;YACxL,MAAM,IAAI,GAAG,CAAC,SAAiB,EAAE,KAAa,EAAE,EAAE;gBAChD,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACrC,GAAG,CAAC,GAAG,GAAG,IAAA,0BAAW,EAAC,KAAK,CAAC,IAAI,MAAM,CAAC;gBACvC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5E,kDAAkD;YAClD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CACH,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;QACnB,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,GAAG,CAAC,CAAC,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,GAAG;QACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,GAAG,SAAS,CAAC;QAClB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,GAAG,EAAE,CAAC;YACR,qEAAqE;YACrE,IAAI,EAAE,CAAC;YACP,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,KAAK;gBAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,uCAAuC;QACvC,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO;QAC7B,MAAM,GAAG,KAAK,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9B,0FAA0F;QAC1F,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QAC7B,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvB,qIAAqI;QACrI,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACpF,CAAC,KAAK,EAAE,EAAE;YACR,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO;YAChC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1B,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO;YAC7B,MAAM,GAAG,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC,EACD,CAAC,KAAY,EAAE,EAAE;YACf,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO;YAChC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO;YAC7B,MAAM,GAAG,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC1C,iEAAiE;YACjE,IAAA,mBAAQ,EAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QACnC,MAAM,GAAG,KAAK,CAAC;QACf,gDAAgD;QAChD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACT,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,KAAK,EAAE,CAAC;YACR,OAAO;QACT,CAAC;QACD,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1C,IAAI,KAAK,CAAC,QAAQ;YAAE,OAAO;QAC3B,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACzD,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,4GAA4G;YAC5G,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACvF,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACjC,8BAA8B;YAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,oRAAoR;YACpR,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,CAAC;iBACtC,IAAI,CAAC,MAAM;gBAAE,GAAG,EAAE,CAAC;QAC1B,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAClC,2FAA2F;YAC3F,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;gBACpC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,CAAC;YACT,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5C,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,oEAAoE;IACpE,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;QAClC,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO;QACP,KAAK;QACL,IAAI;QACJ,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { directionOf } from './address-line.mjs';
1
2
  import { warnOnce } from './map-core.mjs';
2
3
  export function searchBox(options) {
3
4
  const { document: doc, labels } = options;
@@ -27,13 +28,48 @@ export function searchBox(options) {
27
28
  element.append(...(options.input ? [] : [input]), list);
28
29
  let places = [];
29
30
  let active = -1;
30
- let asking = null;
31
31
  let timer;
32
+ /**
33
+ * The places each search brought, by its words (near the same place), and
34
+ * the searches on their way, by theirs, until a place is picked: the same
35
+ * words show them again, or wait for them. A search dropped is not called
36
+ * back, as the provider has its request (and may bill it): its answer is
37
+ * kept when it comes, and only not shown.
38
+ */
39
+ const answers = new Map();
40
+ const going = new Map();
41
+ /** The words whose answer opens the list when it comes, and which the search is said to be going for: none once it is dropped. */
42
+ let wanted = '';
43
+ /** The search whose places the list shows, and the words it asked for. */
44
+ let showing = '';
45
+ let listed = '';
46
+ /** A place picked, and nothing typed since: Enter asks nothing. */
47
+ let picked = false;
48
+ /** The search waiting to go never goes; the one on its way opens nothing when it comes, and is no longer said to be going. */
49
+ function drop() {
50
+ clearTimeout(timer);
51
+ timer = undefined;
52
+ if (!wanted)
53
+ return;
54
+ wanted = '';
55
+ options.say(null);
56
+ }
57
+ /** The address is found, or the box gone: what is on its way is of no use, and called back; the next words are asked for anew (a provider's session ends with the pick). */
58
+ function stop() {
59
+ drop();
60
+ going.forEach((asked) => asked.abort());
61
+ going.clear();
62
+ answers.clear();
63
+ }
32
64
  function close() {
65
+ const open = !list.hidden;
33
66
  list.hidden = true;
34
67
  input.setAttribute('aria-expanded', 'false');
35
68
  input.removeAttribute('aria-activedescendant');
36
69
  active = -1;
70
+ // What was said of the list (how many places came) goes with it.
71
+ if (open)
72
+ options.say(null);
37
73
  }
38
74
  function mark(index) {
39
75
  active = index;
@@ -47,35 +83,44 @@ export function searchBox(options) {
47
83
  input.removeAttribute('aria-activedescendant');
48
84
  }
49
85
  function choose(place) {
86
+ // A pause in typing ends here: nothing more is asked for these words, and no answer opens the list again.
87
+ stop();
88
+ picked = true;
50
89
  input.value = place.label;
51
90
  close();
52
91
  options.say(null);
92
+ place.picked?.();
53
93
  options.pick(place);
54
94
  }
55
- function show(found) {
56
- places = found;
57
- list.replaceChildren(...found.map((place, i) => {
95
+ function show(found, these, words) {
96
+ showing = these;
97
+ listed = words;
98
+ // Two rows that read alike are one to the person reading them: the first is kept.
99
+ places = found.filter((place, i) => found.findIndex((other) => other.label === place.label && other.detail === place.detail) === i);
100
+ list.replaceChildren(...places.map((place, i) => {
58
101
  const option = doc.createElement('li');
59
102
  option.id = `${listId}-${i}`;
60
103
  option.setAttribute('role', 'option');
61
104
  option.setAttribute('aria-selected', 'false');
62
- // The place on one line, where it is on the next, as a map's own search shows them.
63
- const name = doc.createElement('span');
64
- name.className = 'fd-map-result-name';
65
- name.textContent = place.label;
66
- option.append(name);
67
- if (place.detail) {
68
- const detail = doc.createElement('span');
69
- detail.className = 'fd-map-result-detail';
70
- detail.textContent = place.detail;
71
- option.append(detail);
72
- }
105
+ // The place on one line, where it is on the next, as a map's own search shows them: both at the page's side, each in its own words' direction ("1 Mohammed Mahmoud" on an Arabic page).
106
+ const line = (className, words) => {
107
+ const span = doc.createElement('span');
108
+ span.className = className;
109
+ const own = doc.createElement('bdi');
110
+ own.dir = directionOf(words) || 'auto';
111
+ own.textContent = words;
112
+ span.append(own);
113
+ return span;
114
+ };
115
+ option.append(line('fd-map-result-name', place.label));
116
+ if (place.detail)
117
+ option.append(line('fd-map-result-detail', place.detail));
73
118
  // Picked on the press, the box keeping its focus.
74
119
  option.addEventListener('mousedown', (event) => event.preventDefault());
75
120
  option.addEventListener('click', () => choose(place));
76
121
  return option;
77
122
  }));
78
- const any = found.length > 0;
123
+ const any = places.length > 0;
79
124
  list.hidden = !any;
80
125
  input.setAttribute('aria-expanded', String(any));
81
126
  active = -1;
@@ -83,21 +128,52 @@ export function searchBox(options) {
83
128
  }
84
129
  function run() {
85
130
  clearTimeout(timer);
131
+ timer = undefined;
86
132
  const text = input.value.trim();
87
- asking?.abort();
88
133
  if (text.length < (options.asYouType ? 2 : 1)) {
134
+ drop();
89
135
  close();
90
136
  options.say(null);
91
137
  return;
92
138
  }
93
- const mine = (asking = new AbortController());
139
+ const near = options.near();
140
+ const zoom = options.zoom?.();
141
+ const these = JSON.stringify([text, near, zoom]);
142
+ const had = answers.get(these);
143
+ if (had) {
144
+ // Here already: shown, unless they are, and nothing else waited for.
145
+ drop();
146
+ if (list.hidden || showing !== these)
147
+ show(had, these, text);
148
+ return;
149
+ }
150
+ // On their way and waited for already.
151
+ if (wanted === these)
152
+ return;
153
+ wanted = these;
94
154
  options.say(labels.searching);
95
- options
96
- .search({ text, near: options.near(), zoom: options.zoom?.(), locale: options.locale, signal: mine.signal })
97
- .then((found) => mine === asking && show(found))
98
- .catch((error) => {
99
- if (mine !== asking || error.name === 'AbortError')
155
+ // On their way though dropped (Escape, a letter more): waited for again, not asked again.
156
+ if (going.has(these))
157
+ return;
158
+ const mine = new AbortController();
159
+ going.set(these, mine);
160
+ // Its answer is kept, whether or not its words are still waited for, and shown if they are. Called back (by a pick), it is nobody's.
161
+ options.search({ text, near, zoom, locale: options.locale, signal: mine.signal }).then((found) => {
162
+ if (mine.signal.aborted)
163
+ return;
164
+ going.delete(these);
165
+ answers.set(these, found);
166
+ if (wanted !== these)
100
167
  return;
168
+ wanted = '';
169
+ show(found, these, text);
170
+ }, (error) => {
171
+ if (mine.signal.aborted)
172
+ return;
173
+ going.delete(these);
174
+ if (wanted !== these)
175
+ return;
176
+ wanted = '';
101
177
  close();
102
178
  options.say(labels.searchFailed, 'error');
103
179
  // The reader is told to try again; the developer, why it failed.
@@ -105,6 +181,9 @@ export function searchBox(options) {
105
181
  });
106
182
  }
107
183
  input.addEventListener('input', () => {
184
+ picked = false;
185
+ // A row marked was marked for the words before.
186
+ mark(-1);
108
187
  if (!options.asYouType) {
109
188
  close();
110
189
  return;
@@ -120,21 +199,25 @@ export function searchBox(options) {
120
199
  return;
121
200
  event.preventDefault();
122
201
  const step = event.key === 'ArrowDown' ? 1 : -1;
123
- mark((active + step + places.length) % places.length);
202
+ // From no row marked, Down marks the first and Up the last (as from the first); each goes round at the end.
203
+ mark(((active < 0 && step < 0 ? 0 : active) + step + places.length) % places.length);
124
204
  }
125
205
  else if (event.key === 'Enter') {
126
206
  // Never the form's own Enter.
127
207
  event.preventDefault();
128
- // Enter takes the place chosen with the arrows, or the first: the one nearest and likeliest.
129
- if (!list.hidden && places.length)
130
- choose(places[Math.max(active, 0)]);
131
- else
208
+ // Enter takes the place chosen with the arrows, or the first: the one nearest and likeliest, of a list made for the words in the box. A list made for fewer words names another place ("Al" for "Al Malqa"): their own are asked for now, and listed. On the place picked, nothing.
209
+ const chosen = active >= 0 ? places[active] : listed === input.value.trim() ? places[0] : undefined;
210
+ if (!list.hidden && chosen)
211
+ choose(chosen);
212
+ else if (!picked)
132
213
  run();
133
214
  }
134
215
  else if (event.key === 'Escape') {
135
- if (!list.hidden) {
216
+ // The list closed, and the search that would open it again dropped, waiting or on its way.
217
+ if (!list.hidden || wanted || timer) {
136
218
  event.preventDefault();
137
219
  close();
220
+ drop();
138
221
  }
139
222
  else if (input.value && !options.freeText) {
140
223
  event.preventDefault();
@@ -143,15 +226,16 @@ export function searchBox(options) {
143
226
  }
144
227
  }
145
228
  });
146
- input.addEventListener('blur', () => close());
229
+ // Left: nothing waiting goes on to open the list over the next box.
230
+ input.addEventListener('blur', () => {
231
+ close();
232
+ drop();
233
+ });
147
234
  return {
148
235
  element,
149
236
  input,
150
237
  list,
151
- destroy() {
152
- clearTimeout(timer);
153
- asking?.abort();
154
- },
238
+ destroy: stop,
155
239
  };
156
240
  }
157
241
  //# sourceMappingURL=search-box.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-box.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/search-box.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-box.mjs","sourceRoot":"","sources":["../../../../../libs/map/src/lib/search-box.ts"],"names":[],"mappings":"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"}