@itrocks/autocomplete 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/autocomplete.css CHANGED
@@ -4,6 +4,7 @@
4
4
  margin-top: -1px;
5
5
  padding: 0;
6
6
  position: absolute;
7
+ user-select: none;
7
8
  z-index: 1;
8
9
  }
9
10
  .autocomplete + .suggestions:empty {
package/autocomplete.d.ts CHANGED
@@ -30,17 +30,26 @@ export declare class AutoComplete {
30
30
  suggest(value?: string): void;
31
31
  }
32
32
  declare class Suggestions {
33
- combo: AutoComplete;
33
+ autoComplete: AutoComplete;
34
34
  length: number;
35
35
  list?: HTMLUListElement;
36
- constructor(combo: AutoComplete);
36
+ pointerStart?: {
37
+ id: number;
38
+ item: HTMLLIElement;
39
+ x: number;
40
+ y: number;
41
+ };
42
+ constructor(autoComplete: AutoComplete);
37
43
  createList(): HTMLUListElement;
38
44
  first(): Item | null;
39
45
  hide(): void;
40
46
  isFirstSelected(): boolean | null | undefined;
41
47
  isLastSelected(): boolean | null | undefined;
42
48
  isVisible(): boolean | undefined;
43
- onPointerDown(event: MouseEvent): void;
49
+ onPointerDown(event: PointerEvent): void;
50
+ onPointerCancel(_event: PointerEvent): void;
51
+ onPointerMove(event: PointerEvent): void;
52
+ onPointerUp(event: PointerEvent): void;
44
53
  removeList(): void;
45
54
  selected(item?: HTMLLIElement | null): Item | null;
46
55
  selectFirst(): void;
package/autocomplete.js CHANGED
@@ -137,6 +137,7 @@ export class AutoComplete {
137
137
  return;
138
138
  event.preventDefault();
139
139
  this.select();
140
+ suggestions.hide();
140
141
  }
141
142
  keyEscape(event) {
142
143
  if (DEBUG)
@@ -242,7 +243,6 @@ export class AutoComplete {
242
243
  this.input.value = suggestion.caption;
243
244
  this.onInputValueChange();
244
245
  this.autoIdInputValue();
245
- suggestions.hide();
246
246
  }
247
247
  suggest(value) {
248
248
  if (DEBUG)
@@ -262,19 +262,23 @@ export class AutoComplete {
262
262
  }
263
263
  }
264
264
  class Suggestions {
265
- combo;
265
+ autoComplete;
266
266
  length = 0;
267
267
  list;
268
- constructor(combo) {
269
- this.combo = combo;
268
+ pointerStart;
269
+ constructor(autoComplete) {
270
+ this.autoComplete = autoComplete;
270
271
  }
271
272
  createList() {
272
273
  if (DEBUG)
273
274
  console.log('createList()');
274
275
  const list = this.list = document.createElement('ul');
275
276
  list.classList.add('suggestions');
276
- this.combo.input.insertAdjacentElement('afterend', list);
277
+ this.autoComplete.input.insertAdjacentElement('afterend', list);
277
278
  list.addEventListener('pointerdown', event => this.onPointerDown(event));
279
+ list.addEventListener('pointercancel', event => this.onPointerCancel(event));
280
+ list.addEventListener('pointermove', event => this.onPointerMove(event));
281
+ list.addEventListener('pointerup', event => this.onPointerUp(event));
278
282
  return list;
279
283
  }
280
284
  first() {
@@ -307,7 +311,7 @@ class Suggestions {
307
311
  onPointerDown(event) {
308
312
  if (DEBUG)
309
313
  console.log('onPointerDown()', event.button);
310
- if (event.button !== 0)
314
+ if ((event.pointerType === 'mouse') && (event.button !== 0))
311
315
  return;
312
316
  if (!(event.target instanceof Element))
313
317
  return;
@@ -319,10 +323,33 @@ class Suggestions {
319
323
  return;
320
324
  if (DEBUG)
321
325
  console.log(' select', item);
326
+ if (event.pointerType !== 'mouse') {
327
+ this.pointerStart = { id: event.pointerId, item, x: event.clientX, y: event.clientY };
328
+ return;
329
+ }
322
330
  this.unselect();
323
331
  item.classList.add('selected');
324
- this.combo.select();
325
- event.preventDefault();
332
+ this.autoComplete.select();
333
+ this.pointerStart = undefined;
334
+ }
335
+ onPointerCancel(_event) {
336
+ this.pointerStart = undefined;
337
+ }
338
+ onPointerMove(event) {
339
+ if (!this.pointerStart || (event.pointerId !== this.pointerStart.id))
340
+ return;
341
+ const distance = Math.abs(event.clientX - this.pointerStart.x) + Math.abs(event.clientY - this.pointerStart.y);
342
+ if (distance < 8)
343
+ return;
344
+ this.pointerStart = undefined;
345
+ }
346
+ onPointerUp(event) {
347
+ if (!this.pointerStart || (event.pointerId !== this.pointerStart.id))
348
+ return;
349
+ this.unselect();
350
+ this.pointerStart.item.classList.add('selected');
351
+ this.autoComplete.select();
352
+ this.pointerStart = undefined;
326
353
  }
327
354
  removeList() {
328
355
  if (DEBUG)
package/package.json CHANGED
@@ -40,5 +40,5 @@
40
40
  },
41
41
  "type": "module",
42
42
  "types": "./autocomplete.d.ts",
43
- "version": "0.1.5"
43
+ "version": "0.1.6"
44
44
  }