vgapp 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.
@@ -1,5 +1,5 @@
1
1
  import BaseModule from "../../base-module";
2
- import {isDisabled, isEmptyObj, mergeDeepObject, noop, transliterate} from "../../../utils/js/functions";
2
+ import {isDisabled, isEmptyObj, mergeDeepObject, noop, normalizeData, transliterate} from "../../../utils/js/functions";
3
3
  import {Manipulator} from "../../../utils/js/dom/manipulator";
4
4
  import EventHandler from "../../../utils/js/dom/event";
5
5
  import Selectors from "../../../utils/js/dom/selectors";
@@ -23,13 +23,16 @@ const CLASS_NAME_PLACEHOLDER = 'vg-select-current--placeholder';
23
23
  const CLASS_NAME_SEARCH = 'vg-select-search';
24
24
 
25
25
  const EVENT_KEY_CLICK_DATA_API = `click.${NAME_KEY}.data.api`;
26
+ const EVENT_KEY_UP_DATA_API = `keyup.${NAME_KEY}.data.api`;
26
27
  const EVENT_KEY_CHANGE = `${NAME_KEY}.change`;
27
28
  const EVENT_KEY_HIDE = `${NAME_KEY}.hide`;
28
29
  const EVENT_KEY_HIDDEN = `${NAME_KEY}.hidden`;
29
30
  const EVENT_KEY_SHOW = `${NAME_KEY}.show`;
30
31
  const EVENT_KEY_SHOWN = `${NAME_KEY}.shown`;
31
32
 
32
- const SELECTOR_DATA_TOGGLE = '[data-vg-toggle="select"]';
33
+ const SELECTOR_DATA_TOGGLE = '[data-vg-toggle="select"]';
34
+ const SELECTOR_OPTION_TOGGLE = '[data-vg-toggle="select-option"]';
35
+ const SELECTOR_SEARCH_TOGGLE = '[name=vg-select-search]';
33
36
 
34
37
 
35
38
  let observerTimout;
@@ -46,6 +49,10 @@ class VGSelect extends BaseModule {
46
49
  target: '',
47
50
  method: 'get',
48
51
  loader: false,
52
+ },
53
+ render: {
54
+ option: noop,
55
+ item: noop
49
56
  }
50
57
  }, params));
51
58
 
@@ -60,101 +67,103 @@ class VGSelect extends BaseModule {
60
67
  return NAME_KEY;
61
68
  }
62
69
 
63
- toggle(relatedTarget) {
64
- return !this._isShown() ? this.show(relatedTarget) : this.hide();
65
- }
70
+ static buildListOptions(selector, drop) {
71
+ let options = selector.options,
72
+ list = document.createElement('ul');
66
73
 
67
- show(relatedTarget) {
68
- if (isDisabled(this._element)) return;
74
+ list.classList.add(CLASS_NAME_LIST);
69
75
 
70
- const showEvent = EventHandler.trigger(this._element, EVENT_KEY_SHOW, { relatedTarget })
71
- if (showEvent.defaultPrevented) return;
76
+ let optGroup = selector.querySelectorAll('optgroup');
72
77
 
73
- if ('ontouchstart' in document.documentElement) {
74
- for (const element of [].concat(...document.body.children)) {
75
- EventHandler.on(element, 'mouseover', noop);
76
- }
77
- }
78
+ if (optGroup.length) {
79
+ let isSelected = false;
80
+ [...optGroup].forEach(function (el) {
81
+ let olOptGroup = document.createElement('ol');
82
+ olOptGroup.classList.add(CLASS_NAME_OPTGROUP);
78
83
 
79
- this._element.classList.add(CLASS_NAME_SHOW);
84
+ let liLabel = document.createElement('li');
85
+ liLabel.innerHTML = el.label.trim();
86
+ liLabel.classList.add(CLASS_NAME_OPTGROUP_TITLE)
80
87
 
81
- const completeCallBack = () => {
82
- this._element.classList.add(CLASS_NAME_ACTIVE);
83
- EventHandler.trigger(this._element, EVENT_KEY_SHOWN, { relatedTarget });
84
- }
88
+ olOptGroup.prepend(liLabel)
85
89
 
86
- this._queueCallback(completeCallBack, this._drop, true, 50)
87
- }
90
+ let optGroupOptions = Selectors.findAll('option', el);
88
91
 
89
- hide() {
90
- if (isDisabled(this._element) || !this._isShown()) return;
92
+ createLi(optGroupOptions, olOptGroup, isSelected);
91
93
 
92
- this._completeHide();
93
- }
94
+ list.append(olOptGroup);
95
+ isSelected = true;
96
+ });
97
+ } else {
98
+ let isSelected = false;
99
+ createLi(options, list, isSelected);
100
+ }
94
101
 
95
- _completeHide() {
96
- const hideEvent = EventHandler.trigger(this._element, EVENT_KEY_HIDE, {})
97
- if (hideEvent.defaultPrevented) return;
102
+ drop.append(list);
98
103
 
99
- this._element.classList.remove(CLASS_NAME_ACTIVE);
100
- //this._element.setAttribute('aria-expanded', 'false');
104
+ return list;
101
105
 
102
- if ('ontouchstart' in document.documentElement) {
103
- for (const element of [].concat(...document.body.children)) {
104
- EventHandler.off(element, 'mouseover', noop);
105
- }
106
- }
106
+ function createLi(options, list, isSelected) {
107
+ let i = 0;
108
+ for (const option of options) {
109
+ let li = document.createElement('li');
107
110
 
108
- const completeCallback = () => {
109
- this._element.classList.remove(CLASS_NAME_SHOW);
110
- EventHandler.trigger(this._element, EVENT_KEY_HIDDEN, {});
111
- }
112
- this._queueCallback(completeCallback, this._element, true, 10);
113
- }
111
+ li.innerHTML = option.innerHTML.trim().replace(/<\/[^>]+(>|$)/g, "")
112
+ li.dataset.value = Manipulator.get(option, 'value');
113
+ li.classList.add(CLASS_NAME_OPTION);
114
114
 
115
- _isShown() {
116
- return this._element.classList.contains(CLASS_NAME_SHOW);
117
- }
115
+ Manipulator.set(li, 'data-vg-toggle', 'select-option');
118
116
 
119
- build(isRebuild, elm = null) {
120
- const _this = this;
121
- let element = this._element;
117
+ let liData = Manipulator.get(option);
118
+ if (!isEmptyObj(liData)) {
119
+ for (const key of Object.keys(liData)) {
120
+ Manipulator.set(li, 'data-' + key, liData[key]);
121
+ }
122
+ }
122
123
 
123
- if (elm) element = elm;
124
+ if (i === selector.selectedIndex && !isSelected) {
125
+ li.classList.add('selected');
126
+ }
124
127
 
125
- if (element.dataset?.inited === 'true' && !isRebuild) {
126
- return;
127
- } else if (isRebuild) {
128
- _this.destroy(element);
129
- }
128
+ if (Manipulator.has(option, 'disabled')) li.classList.add('disabled');
129
+ if (Manipulator.has(option, 'hidden')) li.classList.add('hidden');
130
130
 
131
- element.parentElement.style.position = 'relative';
131
+ list.append(li);
132
+
133
+ i++;
134
+ }
135
+ }
136
+ }
132
137
 
138
+ static build(selector) {
133
139
  let option_selected,
134
- options = element.options;
140
+ placeholder = selector.dataset.placeholder || '',
141
+ isSearch = selector.dataset.search || false;
135
142
 
136
- if (_this._params.placeholder && element.selectedIndex === 0) {
137
- option_selected = '<span class="'+ CLASS_NAME_PLACEHOLDER +'">' + _this._params.placeholder + '<span>';
143
+ selector.parentElement.style.position = 'relative';
144
+
145
+ if (placeholder && selector.selectedIndex === 0) {
146
+ option_selected = '<span class="'+ CLASS_NAME_PLACEHOLDER +'">' + placeholder + '<span>';
138
147
  } else {
139
- option_selected = element.options[element.selectedIndex].innerText;
148
+ option_selected = selector.options[selector.selectedIndex].innerText;
140
149
  }
141
150
 
142
151
  // Создаем основной элемент с классами селекта
143
- let classes = Manipulator.get(element,'class'),
144
- select = document.createElement('div');
152
+ let classes = Manipulator.get(selector,'class'),
153
+ element = document.createElement('div');
145
154
 
146
155
  classes = classes.split(' ');
147
156
 
148
157
  for (const _class of classes) {
149
- select.classList.add(_class)
158
+ element.classList.add(_class)
150
159
  }
151
160
 
152
- if (Manipulator.has(element, 'disabled')) select.classList.add('disabled')
161
+ if (Manipulator.has(selector, 'disabled')) element.classList.add('disabled');
153
162
 
154
- let elData = Manipulator.get(element);
163
+ let elData = Manipulator.get(selector);
155
164
  if (!isEmptyObj(elData)) {
156
165
  for (const key of Object.keys(elData)) {
157
- Manipulator.set(select,'data-' + key, elData[key]);
166
+ Manipulator.set(element,'data-' + key, elData[key]);
158
167
  }
159
168
  }
160
169
 
@@ -164,83 +173,127 @@ class VGSelect extends BaseModule {
164
173
  Manipulator.set(current, 'data-vg-toggle', 'select');
165
174
  Manipulator.set(current, 'aria-expanded', 'false');
166
175
  current.innerHTML = option_selected.trim();
167
- select.append(current);
176
+ element.append(current);
168
177
 
169
178
  // Создаем элемент выпадающего списка
170
179
  let dropdown = document.createElement('div');
171
180
  dropdown.classList.add(CLASS_NAME_DROPDOWN);
172
- select.append(dropdown);
181
+ element.append(dropdown);
173
182
 
174
183
  // Создаем список и варианты селекта
175
- let list = document.createElement('ul');
176
- list.classList.add(CLASS_NAME_LIST);
184
+ VGSelect.buildListOptions(selector, dropdown);
177
185
 
178
- let optGroup = element.querySelectorAll('optgroup');
186
+ // Добавляем все созданный контейнер после селекта
187
+ selector.insertAdjacentElement('afterend', element);
179
188
 
180
- if (optGroup.length) {
181
- let isSelected = false;
182
- [...optGroup].forEach(function (el) {
183
- let olOptGroup = document.createElement('ol');
184
- olOptGroup.classList.add(CLASS_NAME_OPTGROUP);
189
+ // помечаем элемент инициализированным
190
+ selector.dataset.inited = 'true';
185
191
 
186
- let liLabel = document.createElement('li');
187
- liLabel.innerHTML = el.label.trim();
188
- liLabel.classList.add(CLASS_NAME_OPTGROUP_TITLE)
192
+ if (isSearch) {
193
+ let search_container = document.createElement('div');
194
+ search_container.classList.add(CLASS_NAME_SEARCH);
189
195
 
190
- olOptGroup.prepend(liLabel)
196
+ let input = document.createElement('input');
197
+ Manipulator.set(input, 'name', 'vg-select-search');
198
+ Manipulator.set(input, 'type', 'text');
199
+ Manipulator.set(input, 'placeholder', 'Поиск...');
191
200
 
192
- let optGroupOptions = el.querySelectorAll('option');
201
+ search_container.append(input);
202
+ dropdown.prepend(search_container);
203
+ }
193
204
 
194
- createLi(optGroupOptions, olOptGroup, isSelected);
205
+ return element;
206
+ }
195
207
 
196
- list.append(olOptGroup);
197
- isSelected = true;
198
- });
199
- } else {
200
- let isSelected = false;
201
- createLi(options, list, isSelected);
202
- }
208
+ render(selector, callback) {
209
+ let list = Selectors.find('.' + CLASS_NAME_LIST, this._drop);
210
+ if (list) list.remove();
203
211
 
204
- function createLi(options, list, isSelected) {
205
- let i = 0;
206
- for (const option of options) {
207
- let li = document.createElement('li');
212
+ VGSelect.buildListOptions(selector, this._drop);
213
+ }
208
214
 
209
- li.innerHTML = option.innerHTML.trim().replace(/<\/[^>]+(>|$)/g, "")
210
- li.dataset.value = Manipulator.get(option, 'value');
211
- li.classList.add(CLASS_NAME_OPTION);
215
+ toggle(relatedTarget) {
216
+ return !this._isShown() ? this.show(relatedTarget) : this.hide();
217
+ }
212
218
 
213
- let liData = Manipulator.get(option);
214
- if (!isEmptyObj(liData)) {
215
- for (const key of Object.keys(liData)) {
216
- Manipulator.set(li, 'data-' + key, liData[key]);
217
- }
218
- }
219
+ show(relatedTarget) {
220
+ if (isDisabled(this._element)) return;
219
221
 
220
- if (i === element.selectedIndex && !isSelected) {
221
- li.classList.add('selected');
222
- }
222
+ const showEvent = EventHandler.trigger(this._element, EVENT_KEY_SHOW, { relatedTarget })
223
+ if (showEvent.defaultPrevented) return;
223
224
 
224
- if (Manipulator.has(option, 'disabled')) li.classList.add('disabled');
225
- if (Manipulator.has(option, 'hidden')) li.classList.add('hidden');
225
+ if ('ontouchstart' in document.documentElement) {
226
+ for (const element of [].concat(...document.body.children)) {
227
+ EventHandler.on(element, 'mouseover', noop);
228
+ }
229
+ }
226
230
 
227
- list.append(li);
231
+ // TODO доделать
232
+ /*this._route((status, data) => {
233
+ let response = normalizeData(data.response),
234
+ select = this._element.previousSibling;
228
235
 
229
- i++;
236
+ if (response.length) {
237
+ Selectors.findAll('option', select).forEach(option => {
238
+ option.remove();
239
+ });
240
+
241
+ response.forEach(el => {
242
+ let option = document.createElement('option');
243
+ option.innerText = el.title;
244
+ Manipulator.set(option, 'value', el.id);
245
+
246
+ select.append(option);
247
+ });
248
+
249
+ this.render(select);
230
250
  }
251
+ });*/
252
+
253
+ this._element.classList.add(CLASS_NAME_SHOW);
254
+
255
+ if (this._params.search) {
256
+ let input = Selectors.find('input', this._element);
257
+ if (input) input.focus();
231
258
  }
232
259
 
233
- dropdown.append(list);
260
+ const completeCallBack = () => {
261
+ this._element.classList.add(CLASS_NAME_ACTIVE);
262
+ EventHandler.trigger(this._element, EVENT_KEY_SHOWN, { relatedTarget });
263
+ }
234
264
 
235
- // Добавляем все созданный контейнер после селекта
236
- element.insertAdjacentElement('afterend', select);
265
+ this._queueCallback(completeCallBack, this._drop, true, 50)
266
+ }
237
267
 
238
- // помечаем элемент инициализированным
239
- element.dataset.inited = 'true';
268
+ hide() {
269
+ if (isDisabled(this._element) || !this._isShown()) return;
270
+
271
+ this._completeHide();
272
+ }
273
+
274
+ _completeHide() {
275
+ const hideEvent = EventHandler.trigger(this._element, EVENT_KEY_HIDE, {})
276
+ if (hideEvent.defaultPrevented) return;
277
+
278
+ this._element.classList.remove(CLASS_NAME_ACTIVE);
279
+ let toggle = Selectors.find(SELECTOR_DATA_TOGGLE, this._element);
280
+ Manipulator.set(toggle, 'aria-expanded', 'false');
240
281
 
241
- if (_this._params.search) {
242
- this.search(select);
282
+ if ('ontouchstart' in document.documentElement) {
283
+ for (const element of [].concat(...document.body.children)) {
284
+ EventHandler.off(element, 'mouseover', noop);
285
+ }
243
286
  }
287
+
288
+ const completeCallback = () => {
289
+ this._element.classList.remove(CLASS_NAME_SHOW);
290
+ EventHandler.trigger(this._element, EVENT_KEY_HIDDEN, {});
291
+ }
292
+ this._queueCallback(completeCallback, this._element, true, 10);
293
+ }
294
+
295
+ _isShown() {
296
+ return this._element.classList.contains(CLASS_NAME_SHOW);
244
297
  }
245
298
 
246
299
  destroy(select) {
@@ -279,131 +332,45 @@ class VGSelect extends BaseModule {
279
332
  }
280
333
 
281
334
  search(select) {
282
- let dropdown = select.querySelector('.' + CLASS_NAME_DROPDOWN);
283
-
284
- let search_container = document.createElement('div');
285
- search_container.classList.add(CLASS_NAME_SEARCH);
286
-
287
- let input = document.createElement('input');
288
- input.setAttribute('name', 'vg-select-search');
289
- input.setAttribute('type', 'text');
290
- input.setAttribute('placeholder', 'Поиск...');
291
-
292
- search_container.append(input);
293
- dropdown.prepend(search_container);
294
-
295
- search_container.querySelector('[name=vg-select-search]').addEventListener('keyup', (e) => {
296
- e.preventDefault();
297
-
298
- let el = e.target;
299
335
 
300
- let selectList = el?.closest('.' + CLASS_NAME_DROPDOWN).querySelector('.' + CLASS_NAME_LIST);
301
- if (selectList) {
302
- let options = [...selectList.querySelectorAll('.' + CLASS_NAME_OPTION)],
303
- optionsGroup = [...selectList.querySelectorAll('.' + CLASS_NAME_OPTGROUP)],
304
- value = el?.value;
305
-
306
- options = options.concat(optionsGroup);
307
-
308
- for (const option of options) {
309
- Manipulator.show(option);
310
- }
311
-
312
- if (value.length) {
313
- value = value.trim();
314
- value = value.toLowerCase();
315
- value = transliterate(value, true);
316
-
317
- for (const option of options) {
318
- let text = option.innerText.toLowerCase();
319
-
320
- if (text.indexOf(value) === -1) Manipulator.hide(option);
321
- }
322
- }
323
- }
324
- });
325
336
  }
326
337
 
327
338
  dispose() {
328
339
  super.dispose();
329
340
  }
330
341
 
331
- _addEventListeners(select) {
332
- const _this = this;
342
+ static hideOpenToggles(event) {
343
+ const openToggles = Selectors.findAll('.vg-select:not(.disabled):not(:disabled).show');
333
344
 
334
- select.querySelector('.' + CLASS_NAME_CURRENT).onclick = function (e) {
335
- let el = e.target,
336
- container = el.closest('.' + CLASS_NAME_CONTAINER);
345
+ for (const toggle of openToggles) {
346
+ const context = VGSelect.getInstance(toggle);
347
+ if (!context) continue;
337
348
 
338
- let selects = document.querySelectorAll('.' + CLASS_NAME_CONTAINER);
339
- if (selects.length) {
340
- for (const els of selects) {
341
- if (els !== container) {
342
- els?.classList.remove('show');
343
- }
344
- }
349
+ if (event.target.closest('.' + CLASS_NAME_CONTAINER) === context._element) {
350
+ return;
345
351
  }
346
352
 
347
- if (container.classList.contains('show')) {
348
- container.classList.remove('show');
349
- } else {
350
- container.classList.add('show');
351
-
352
- if (_this._params.search) {
353
- let input = container.querySelector('input');
354
- if (input) input.focus();
355
- }
353
+ const composedPath = event.composedPath();
354
+ if (composedPath.includes(context._element)) {
355
+ continue
356
356
  }
357
357
 
358
- return false;
359
- }
358
+ const relatedTarget = { relatedTarget: context._element }
360
359
 
361
- select.querySelectorAll('.' + CLASS_NAME_OPTION).forEach((option) => {
362
- option.addEventListener('click', (e) => {
363
- e.preventDefault();
364
-
365
- let el = e.target;
366
-
367
- if (!el.classList.contains('disabled')) {
368
- let container = el.closest('.' + CLASS_NAME_CONTAINER),
369
- options = container.querySelectorAll('.' + CLASS_NAME_OPTION);
370
-
371
- if (options.length) {
372
- for (const option of options) {
373
- option.classList.remove('selected');
374
- }
375
- }
376
-
377
- el.classList.add('selected');
378
-
379
- container.querySelector('.' + CLASS_NAME_CURRENT).innerText = el.innerText;
380
- container.classList.remove('show');
360
+ if (event.type === 'click') {
361
+ relatedTarget.clickEvent = event
362
+ }
381
363
 
382
- let select = container.previousSibling;
383
- select.value = el.dataset.value;
384
- EventHandler.trigger(select, EVENT_KEY_CHANGE)
385
- }
386
- });
387
- });
364
+ context._completeHide(relatedTarget)
365
+ }
366
+ }
388
367
 
389
- window.addEventListener('click', function (e) {
390
- if (!e?.target.closest('.' + CLASS_NAME_CONTAINER)) {
391
- let selects = document.querySelectorAll('.' + CLASS_NAME_CONTAINER);
392
- if (selects.length) {
393
- for (const el of selects) {
394
- el?.classList.remove('show');
395
- }
396
- }
397
- }
398
- });
368
+ static clearDrops(event) {
369
+ if (event.button === 2 || (event.type === 'keyup' && event.key !== 'Tab')) {
370
+ return
371
+ }
399
372
 
400
- [...document.querySelectorAll('form')].forEach(function (form) {
401
- form.addEventListener("reset", function () {
402
- form.querySelectorAll('select.vg-select').forEach(function (select) {
403
- VGSelect.init(select, {}, true)
404
- })
405
- });
406
- });
373
+ VGSelect.hideOpenToggles(event)
407
374
  }
408
375
 
409
376
  /**
@@ -413,20 +380,18 @@ class VGSelect extends BaseModule {
413
380
  * @param isRebuild
414
381
  */
415
382
  static init(element, params = {}, isRebuild = false) {
416
- const instance = VGSelect.getOrCreateInstance(element, params);
417
- instance.build(isRebuild);
383
+ let elm = VGSelect.build(element);
384
+ VGSelect.getOrCreateInstance(elm, params);
418
385
  }
419
386
  }
420
387
 
388
+ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, VGSelect.clearDrops);
389
+
421
390
  EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function () {
422
391
  const target = this.closest('.' + CLASS_NAME_CONTAINER);
423
392
 
424
393
  Manipulator.set(this, 'aria-expanded', true);
425
394
 
426
- EventHandler.one(target, EVENT_KEY_HIDDEN, () => {
427
- Manipulator.set(this, 'aria-expanded', false);
428
- })
429
-
430
395
  const alreadyOpen = Selectors.find('.vg-select.show')
431
396
  if (alreadyOpen && alreadyOpen !== target) {
432
397
  VGSelect.getInstance(alreadyOpen).hide();
@@ -436,5 +401,58 @@ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, functi
436
401
  instance.toggle(this);
437
402
  });
438
403
 
404
+ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_OPTION_TOGGLE, function (e) {
405
+ let el = e.target;
406
+
407
+ if (!el.classList.contains('disabled')) {
408
+ let container = el.closest('.' + CLASS_NAME_CONTAINER),
409
+ options = container.querySelectorAll('.' + CLASS_NAME_OPTION);
410
+
411
+ if (options.length) {
412
+ for (const option of options) {
413
+ option.classList.remove('selected');
414
+ }
415
+ }
416
+
417
+ el.classList.add('selected');
418
+
419
+ container.querySelector('.' + CLASS_NAME_CURRENT).innerText = el.innerText;
420
+ container.classList.remove('show');
421
+
422
+ let select = container.previousSibling;
423
+ select.value = el.dataset.value;
424
+ EventHandler.trigger(select, EVENT_KEY_CHANGE, {value: el.dataset.value});
425
+ }
426
+ });
427
+
428
+ EventHandler.on(document, EVENT_KEY_UP_DATA_API, SELECTOR_SEARCH_TOGGLE, function (e) {
429
+ let el = this;
430
+
431
+ let selectList = el?.closest('.' + CLASS_NAME_DROPDOWN).querySelector('.' + CLASS_NAME_LIST);
432
+ if (selectList) {
433
+ let options = [...selectList.querySelectorAll('.' + CLASS_NAME_OPTION)],
434
+ optionsGroup = [...selectList.querySelectorAll('.' + CLASS_NAME_OPTGROUP)],
435
+ value = el?.value;
436
+
437
+ options = options.concat(optionsGroup);
438
+
439
+ for (const option of options) {
440
+ Manipulator.show(option);
441
+ }
442
+
443
+ if (value.length) {
444
+ value = value.trim();
445
+ value = value.toLowerCase();
446
+ value = transliterate(value, true);
447
+
448
+ for (const option of options) {
449
+ let text = option.innerText.toLowerCase();
450
+
451
+ if (text.indexOf(value) === -1) Manipulator.hide(option);
452
+ }
453
+ }
454
+ }
455
+ });
456
+
439
457
 
440
458
  export default VGSelect;