From 0c90d04d454281f4407cbf1e6c00ac35620cb3d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Sun, 22 Nov 2020 14:15:26 +0100 Subject: [PATCH 01/41] Move all existing tests to /integration --- __test__/create.test.js | 303 ----------------- .../{ => integration}/add-get-remove.test.js | 0 __test__/{ => integration}/buttons.test.js | 2 +- __test__/integration/create.test.js | 315 ++++++++++++++++++ __test__/{ => integration}/defaults.test.js | 0 __test__/{ => integration}/filter.test.js | 0 .../{ => integration}/fixtures-fuzzysearch.js | 0 .../{ => integration}/fixtures-pagination.js | 0 __test__/{ => integration}/fixtures.js | 2 +- .../{ => integration}/fuzzysearch.test.js | 2 +- __test__/{ => integration}/item.test.js | 0 __test__/{ => integration}/off.test.js | 0 __test__/{ => integration}/on.test.js | 0 __test__/{ => integration}/pagination.test.js | 2 +- __test__/{ => integration}/parse.test.js | 2 +- __test__/{ => integration}/re-index.test.js | 0 .../{ => integration}/search-filter.test.js | 0 __test__/{ => integration}/search.test.js | 0 __test__/{ => integration}/show.test.js | 0 __test__/{ => integration}/sort.test.js | 0 __test__/{ => integration}/trigger.test.js | 0 .../{ => integration}/utils.classes.test.js | 2 +- .../utils.get-by-class.test.js | 2 +- 23 files changed, 322 insertions(+), 310 deletions(-) delete mode 100644 __test__/create.test.js rename __test__/{ => integration}/add-get-remove.test.js (100%) rename __test__/{ => integration}/buttons.test.js (99%) create mode 100644 __test__/integration/create.test.js rename __test__/{ => integration}/defaults.test.js (100%) rename __test__/{ => integration}/filter.test.js (100%) rename __test__/{ => integration}/fixtures-fuzzysearch.js (100%) rename __test__/{ => integration}/fixtures-pagination.js (100%) rename __test__/{ => integration}/fixtures.js (96%) rename __test__/{ => integration}/fuzzysearch.test.js (98%) rename __test__/{ => integration}/item.test.js (100%) rename __test__/{ => integration}/off.test.js (100%) rename __test__/{ => integration}/on.test.js (100%) rename __test__/{ => integration}/pagination.test.js (99%) rename __test__/{ => integration}/parse.test.js (99%) rename __test__/{ => integration}/re-index.test.js (100%) rename __test__/{ => integration}/search-filter.test.js (100%) rename __test__/{ => integration}/search.test.js (100%) rename __test__/{ => integration}/show.test.js (100%) rename __test__/{ => integration}/sort.test.js (100%) rename __test__/{ => integration}/trigger.test.js (100%) rename __test__/{ => integration}/utils.classes.test.js (96%) rename __test__/{ => integration}/utils.get-by-class.test.js (92%) diff --git a/__test__/create.test.js b/__test__/create.test.js deleted file mode 100644 index bae4c927..00000000 --- a/__test__/create.test.js +++ /dev/null @@ -1,303 +0,0 @@ -const $ = require('jquery'), - List = require('../src/index') - -describe('Create', function () { - describe('With HTML items', function () { - var listEl = $( - '
\ - \ -
' - ) - - $(document.body).append(listEl) - - var list = new List('list', { valueNames: ['name'] }) - - it('should contain one item', function () { - expect(list.items.length).toEqual(1) - expect(listEl.find('li').length).toEqual(1) - }) - - it('should contain two items', function () { - list.add({ name: 'Jonas' }) - expect(list.items.length).toEqual(2) - expect(listEl.find('li').length).toEqual(2) - }) - - listEl.remove() - }) - - describe('With and element instead of id', function () { - var listEl = $( - '
\ - \ -
' - ) - - $(document.body).append(listEl) - var el = document.getElementById('list') - - var list = new List(el, { valueNames: ['name'] }) - - it('should contain one item', function () { - expect(list.items.length).toEqual(1) - expect(listEl.find('li').length).toEqual(1) - }) - - listEl.remove() - }) - - describe('Without items and with string template', function () { - var listEl = $('
\ - \ -
') - - $(document.body).append(listEl) - - var list = new List( - 'list', - { - valueNames: ['name'], - item: '
  • ', - }, - [{ name: 'Jonny' }] - ) - - it('should contain one item', function () { - expect(list.items.length).toEqual(1) - expect(listEl.find('li').length).toEqual(1) - }) - - it('should contain two items', function () { - list.add({ name: 'Jonas' }) - expect(list.items.length).toEqual(2) - expect(listEl.find('li').length).toEqual(2) - }) - - listEl.remove() - }) - - describe('Without items and with string template for table', function () { - var listEl = $('
    \ -
    \ -
    ') - - $(document.body).append(listEl) - - var list = new List( - 'list', - { - valueNames: ['name'], - item: '', - }, - [{ name: 'Jonny' }] - ) - - it('should contain one item', function () { - expect(list.items.length).toEqual(1) - expect(listEl.find('tr').length).toEqual(1) - }) - - it('should contain two items', function () { - list.add({ name: 'Jonas' }) - expect(list.items.length).toEqual(2) - expect(listEl.find('tr').length).toEqual(2) - }) - - listEl.remove() - }) - - describe('Without items and with template function', function () { - var listEl = $('
    \ - \ -
    ') - - $(document.body).append(listEl) - - var list = new List( - 'list', - { - valueNames: ['name'], - item: function (values) { - return `
  • ` - }, - }, - [{ name: 'Jonny' }] - ) - - it('should contain one item', function () { - expect(list.items.length).toEqual(1) - expect(listEl.find('li').length).toEqual(1) - }) - - it('should contain two items', function () { - list.add({ name: 'Jonas' }) - expect(list.items.length).toEqual(2) - expect(listEl.find('li').length).toEqual(2) - }) - - it('should get values from items', function () { - list.add({ name: 'Egon' }) - expect(listEl.find('li[data-template-fn-egon]').length).toEqual(1) - }) - - listEl.remove() - }) - - describe('without items and or template', function () { - it('should throw error on init', function () { - var listEl = $('
    \ - \ -
    ') - $(document.body).append(listEl) - - expect(function () { - var list = new List('list', { - valueNames: ['name'], - }) - }).toThrow() - listEl.remove() - }) - }) - - describe('Without items and with HTML template', function () { - var listEl = $('
    \ - \ -
    ') - - var templateEl = $('
  • ') - - $(document.body).append(listEl) - $(document.body).append(templateEl) - - var list = new List( - 'list', - { - valueNames: ['name'], - item: 'template-item', - }, - [{ name: 'Jonny' }] - ) - - it('should contain one item', function () { - expect(list.items.length).toEqual(1) - expect(listEl.find('li').length).toEqual(1) - }) - - it('should contain two items', function () { - list.add({ name: 'Jonas' }) - expect(list.items.length).toEqual(2) - expect(listEl.find('li').length).toEqual(2) - }) - - listEl.remove() - templateEl.remove() - }) - - describe('Asyn index with existing list', function () { - var listEl = $( - '
    \ - \ -
    ' - ) - - it('should contain one item', function (done) { - $(document.body).append(listEl) - var list = new List('list', { - valueNames: ['name'], - indexAsync: true, - parseComplete: function (list) { - expect(listEl.find('li').length).toEqual(162) - listEl.remove() - done() - }, - }) - }) - }) -}) diff --git a/__test__/add-get-remove.test.js b/__test__/integration/add-get-remove.test.js similarity index 100% rename from __test__/add-get-remove.test.js rename to __test__/integration/add-get-remove.test.js diff --git a/__test__/buttons.test.js b/__test__/integration/buttons.test.js similarity index 99% rename from __test__/buttons.test.js rename to __test__/integration/buttons.test.js index 2165579e..ca6103fa 100644 --- a/__test__/buttons.test.js +++ b/__test__/integration/buttons.test.js @@ -1,5 +1,5 @@ const $ = require('jquery'), - List = require('../src/index') + List = require('../../src/index') function fireKeyup(el) { if (document.createEvent) { diff --git a/__test__/integration/create.test.js b/__test__/integration/create.test.js new file mode 100644 index 00000000..8a353fbb --- /dev/null +++ b/__test__/integration/create.test.js @@ -0,0 +1,315 @@ +const $ = require('jquery') +const List = require('../../src/index') + +describe('Create', () => { + describe('With HTML items', () => { + let list, listEl + beforeEach(function () { + listEl = $(` +
    + +
    + `) + $(document.body).append(listEl) + list = new List('list', { valueNames: ['name'] }) + }) + afterEach(() => { + listEl.remove() + }) + + it('should contain one item', () => { + expect(list.items.length).toEqual(1) + expect(listEl.find('li').length).toEqual(1) + }) + + it('should contain two items', () => { + list.add({ name: 'Jonas' }) + expect(list.items.length).toEqual(2) + expect(listEl.find('li').length).toEqual(2) + }) + }) + + describe('With and element instead of id', () => { + var listEl, list + beforeEach(() => { + listEl = $(` +
    + +
    + `) + $(document.body).append(listEl) + var el = document.getElementById('list') + list = new List(el, { valueNames: ['name'] }) + }) + afterEach(() => { + listEl.remove() + }) + + it('should contain one item', () => { + expect(list.items.length).toEqual(1) + expect(listEl.find('li').length).toEqual(1) + }) + }) + + describe('Without items and with string template', () => { + var listEl, list + beforeEach(() => { + listEl = $('
    \ + \ +
    ') + $(document.body).append(listEl) + list = new List( + 'list', + { + valueNames: ['name'], + item: '
  • ', + }, + [{ name: 'Jonny' }] + ) + }) + afterEach(() => { + listEl.remove() + }) + + it('should contain one item', () => { + expect(list.items.length).toEqual(1) + expect(listEl.find('li').length).toEqual(1) + }) + + it('should contain two items', () => { + list.add({ name: 'Jonas' }) + expect(list.items.length).toEqual(2) + expect(listEl.find('li').length).toEqual(2) + }) + }) + + describe('Without items and with string template for table', () => { + var listEl, list + + beforeEach(() => { + listEl = $(` +
    +
    +
    + `) + $(document.body).append(listEl) + list = new List( + 'list', + { + valueNames: ['name'], + item: '', + }, + [{ name: 'Jonny' }] + ) + }) + + afterEach(() => { + listEl.remove() + }) + + it('should contain one item', () => { + expect(list.items.length).toEqual(1) + expect(listEl.find('tr').length).toEqual(1) + }) + + it('should contain two items', () => { + list.add({ name: 'Jonas' }) + expect(list.items.length).toEqual(2) + expect(listEl.find('tr').length).toEqual(2) + }) + }) + + describe('Without items and with template function', () => { + var listEl, list + beforeEach(() => { + listEl = $('
    ') + $(document.body).append(listEl) + list = new List( + 'list', + { + valueNames: ['name'], + item: function (values) { + return `
  • ` + }, + }, + [{ name: 'Jonny' }] + ) + }) + afterEach(() => { + listEl.remove() + }) + + it('should contain one item', () => { + expect(list.items.length).toEqual(1) + expect(listEl.find('li').length).toEqual(1) + }) + + it('should contain two items', () => { + list.add({ name: 'Jonas' }) + expect(list.items.length).toEqual(2) + expect(listEl.find('li').length).toEqual(2) + }) + + it('should get values from items', () => { + list.add({ name: 'Egon' }) + expect(listEl.find('li[data-template-fn-egon]').length).toEqual(1) + }) + }) + + describe('without items and or template', () => { + it('should throw error on init', () => { + var listEl = $('
    ') + $(document.body).append(listEl) + + expect(() => { + var list = new List('list', { + valueNames: ['name'], + }) + }).toThrow() + + listEl.remove() + }) + }) + + describe('Without items and with HTML template', () => { + var listEl, list, templateEl + beforeEach(() => { + listEl = $('
    ') + + templateEl = $('
  • ') + + $(document.body).append(listEl) + $(document.body).append(templateEl) + + list = new List( + 'list', + { + valueNames: ['name'], + item: 'template-item', + }, + [{ name: 'Jonny' }] + ) + }) + afterEach(() => { + listEl.remove() + templateEl.remove() + }) + + it('should contain one item', () => { + expect(list.items.length).toEqual(1) + expect(listEl.find('li').length).toEqual(1) + }) + + it('should contain two items', () => { + list.add({ name: 'Jonas' }) + expect(list.items.length).toEqual(2) + expect(listEl.find('li').length).toEqual(2) + }) + }) + + describe('Asyn index with existing list', () => { + it('should contain 162 items', (done) => { + var listEl = $(` +
    + +
    + `) + $(document.body).append(listEl) + var list = new List('list', { + valueNames: ['name'], + indexAsync: true, + parseComplete: function (list) { + expect(listEl.find('li').length).toEqual(162) + listEl.remove() + done() + }, + }) + }) + }) +}) diff --git a/__test__/defaults.test.js b/__test__/integration/defaults.test.js similarity index 100% rename from __test__/defaults.test.js rename to __test__/integration/defaults.test.js diff --git a/__test__/filter.test.js b/__test__/integration/filter.test.js similarity index 100% rename from __test__/filter.test.js rename to __test__/integration/filter.test.js diff --git a/__test__/fixtures-fuzzysearch.js b/__test__/integration/fixtures-fuzzysearch.js similarity index 100% rename from __test__/fixtures-fuzzysearch.js rename to __test__/integration/fixtures-fuzzysearch.js diff --git a/__test__/fixtures-pagination.js b/__test__/integration/fixtures-pagination.js similarity index 100% rename from __test__/fixtures-pagination.js rename to __test__/integration/fixtures-pagination.js diff --git a/__test__/fixtures.js b/__test__/integration/fixtures.js similarity index 96% rename from __test__/fixtures.js rename to __test__/integration/fixtures.js index 083dae56..32245c99 100644 --- a/__test__/fixtures.js +++ b/__test__/integration/fixtures.js @@ -1,5 +1,5 @@ const $ = require('jquery'), - List = require('../src/index') + List = require('../../src/index') var fixture = { list: function (valueNames, items) { diff --git a/__test__/fuzzysearch.test.js b/__test__/integration/fuzzysearch.test.js similarity index 98% rename from __test__/fuzzysearch.test.js rename to __test__/integration/fuzzysearch.test.js index eea89f5d..f0ba9afc 100644 --- a/__test__/fuzzysearch.test.js +++ b/__test__/integration/fuzzysearch.test.js @@ -1,6 +1,6 @@ const $ = require('jquery'), fixtureFuzzysearch = require('./fixtures-fuzzysearch'), - List = require('../src/index') + List = require('../../src/index') function fireKeyup(el) { if (document.createEvent) { diff --git a/__test__/item.test.js b/__test__/integration/item.test.js similarity index 100% rename from __test__/item.test.js rename to __test__/integration/item.test.js diff --git a/__test__/off.test.js b/__test__/integration/off.test.js similarity index 100% rename from __test__/off.test.js rename to __test__/integration/off.test.js diff --git a/__test__/on.test.js b/__test__/integration/on.test.js similarity index 100% rename from __test__/on.test.js rename to __test__/integration/on.test.js diff --git a/__test__/pagination.test.js b/__test__/integration/pagination.test.js similarity index 99% rename from __test__/pagination.test.js rename to __test__/integration/pagination.test.js index 0e113b1e..3dc1ff3e 100644 --- a/__test__/pagination.test.js +++ b/__test__/integration/pagination.test.js @@ -1,6 +1,6 @@ const $ = require('jquery'), fixturePagination = require('./fixtures-pagination'), - List = require('../src/index') + List = require('../../src/index') describe('Pagination', function () { describe('Default settings, innerWindow: 2, outerWindow: 0, left: 0, right: 0', function () { diff --git a/__test__/parse.test.js b/__test__/integration/parse.test.js similarity index 99% rename from __test__/parse.test.js rename to __test__/integration/parse.test.js index 4055050f..64c7e290 100644 --- a/__test__/parse.test.js +++ b/__test__/integration/parse.test.js @@ -1,5 +1,5 @@ const $ = require('jquery'), - List = require('../src/index') + List = require('../../src/index') describe('Parse', function () { describe('Parse class', function () { diff --git a/__test__/re-index.test.js b/__test__/integration/re-index.test.js similarity index 100% rename from __test__/re-index.test.js rename to __test__/integration/re-index.test.js diff --git a/__test__/search-filter.test.js b/__test__/integration/search-filter.test.js similarity index 100% rename from __test__/search-filter.test.js rename to __test__/integration/search-filter.test.js diff --git a/__test__/search.test.js b/__test__/integration/search.test.js similarity index 100% rename from __test__/search.test.js rename to __test__/integration/search.test.js diff --git a/__test__/show.test.js b/__test__/integration/show.test.js similarity index 100% rename from __test__/show.test.js rename to __test__/integration/show.test.js diff --git a/__test__/sort.test.js b/__test__/integration/sort.test.js similarity index 100% rename from __test__/sort.test.js rename to __test__/integration/sort.test.js diff --git a/__test__/trigger.test.js b/__test__/integration/trigger.test.js similarity index 100% rename from __test__/trigger.test.js rename to __test__/integration/trigger.test.js diff --git a/__test__/utils.classes.test.js b/__test__/integration/utils.classes.test.js similarity index 96% rename from __test__/utils.classes.test.js rename to __test__/integration/utils.classes.test.js index e2ad006f..71038e7d 100644 --- a/__test__/utils.classes.test.js +++ b/__test__/integration/utils.classes.test.js @@ -1,4 +1,4 @@ -const classes = require('../src/utils/classes') +const classes = require('../../src/utils/classes') describe('Classes', function () { var el diff --git a/__test__/utils.get-by-class.test.js b/__test__/integration/utils.get-by-class.test.js similarity index 92% rename from __test__/utils.get-by-class.test.js rename to __test__/integration/utils.get-by-class.test.js index b524b544..b3f08d95 100644 --- a/__test__/utils.get-by-class.test.js +++ b/__test__/integration/utils.get-by-class.test.js @@ -1,4 +1,4 @@ -const getByClass = require('../src/utils/get-by-class') +const getByClass = require('../../src/utils/get-by-class') describe('GetByClass', function () { var el From fa8173dc1ad2f11f2ba8e95baa273b3c6d388c3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Mon, 23 Nov 2020 11:53:54 +0100 Subject: [PATCH 02/41] Add unit tests for templates and star decouple Templater api from Item --- __test__/unit/templater.test.js | 165 ++++++++++++++++++++++++++++++++ src/index.js | 2 +- src/item.js | 13 ++- src/templater.js | 66 ++++++------- 4 files changed, 203 insertions(+), 43 deletions(-) create mode 100644 __test__/unit/templater.test.js diff --git a/__test__/unit/templater.test.js b/__test__/unit/templater.test.js new file mode 100644 index 00000000..e19ac7d3 --- /dev/null +++ b/__test__/unit/templater.test.js @@ -0,0 +1,165 @@ +const $ = require('jquery') +const Templater = require('../../src/templater') + +describe('Templater', () => { + describe('init', () => { + it('should init with item string of a div', () => { + const item = `
    Foo
    ` + const valueNames = ['name'] + const templater = Templater({ item, valueNames }) + const itemEl = templater.createItem() + expect(itemEl.outerHTML).toEqual('
    ') + }) + it('should init with item string of a tr', () => { + const item = `Foo` + const valueNames = ['name'] + const templater = Templater({ item, valueNames }) + const itemEl = templater.createItem() + expect(itemEl.outerHTML).toEqual('') + }) + it('should init with item function', () => { + const item = () => { + return `
    ` + } + const valueNames = ['name'] + const templater = Templater({ item, valueNames }) + const itemEl = templater.createItem() + expect(itemEl.outerHTML).toEqual('
    ') + }) + it('should init without item', () => { + const listEl = $(` + + `) + $(document.body).append(listEl) + const valueNames = ['name'] + const templater = Templater({ valueNames, list: document.querySelector('.list') }) + const itemEl = templater.createItem() + expect(itemEl.outerHTML).toEqual('
  • ') + }) + }) + describe('create', () => { + it('should create item with values', () => { + const item = + '
    ' + + 'Jonny' + + '1986' + + '' + + '' + + '
    ' + + const valueNames = [ + 'name', + 'born', + { data: ['id'] }, + { attr: 'src', name: 'image' }, + { attr: 'href', name: 'link' }, + { attr: 'value', name: 'foo' }, + { attr: 'data-timestamp', name: 'timestamp' }, + ] + const templater = Templater({ item, valueNames }) + const itemEl = templater.create({ + name: 'Sven', + born: 1950, + id: 4, + image: 'usage/rey.jpeg', + link: 'localhost', + timestamp: '1337', + foo: 'hej', + }) + expect(itemEl.outerHTML).toEqual( + '
    ' + + 'Sven' + + '1950' + + '' + + '' + + '
    ' + ) + }) + }) + describe('remove', () => { + it('should remove element from list', () => { + const listEl = $(` +
    +
    Foo
    +
    + `)[0] + document.body.appendChild(listEl) + const item = listEl.querySelector('div') + const valueNames = ['name'] + const templater = Templater({ list: listEl, valueNames }) + expect(listEl.querySelector('div')).not.toEqual(null) + templater.remove(item) + expect(listEl.querySelector('div')).toEqual(null) + }) + }) + describe('show', () => { + it('should add element to list', () => { + const listEl = $(`
    `)[0] + document.body.appendChild(listEl) + const item = $('
    Foo
    ')[0] + const valueNames = ['name'] + const templater = Templater({ list: listEl, valueNames, item: '
    ' }) + expect(listEl.querySelector('div')).toEqual(null) + templater.show(item) + expect(listEl.querySelector('div')).not.toEqual(null) + }) + }) + describe('clear', () => { + it('should clear the entire list of children', () => { + const listEl = $(` +
    +
    Foo
    +
    Foo
    +
    + `)[0] + document.body.appendChild(listEl) + const valueNames = ['name'] + const templater = Templater({ list: listEl, valueNames }) + expect(listEl.querySelectorAll('div').length).toEqual(2) + templater.clear() + expect(listEl.querySelectorAll('div').length).toEqual(0) + }) + }) + describe('set', () => { + it('should set values to element', () => { + const itemEl = $( + '
    ' + + 'Jonny' + + '1986' + + '' + + '' + + '
    ' + )[0] + const valueNames = [ + 'name', + 'born', + { data: ['id'] }, + { attr: 'src', name: 'image' }, + { attr: 'href', name: 'link' }, + { attr: 'value', name: 'foo' }, + { attr: 'data-timestamp', name: 'timestamp' }, + ] + const templater = Templater({ item: '
    ', valueNames }) + templater.set(itemEl, { + name: 'Sven', + born: 1950, + id: 4, + image: 'usage/rey.jpeg', + link: 'localhost', + timestamp: '1337', + foo: 'hej', + }) + expect(itemEl.outerHTML).toEqual( + '
    ' + + 'Sven' + + '1950' + + '' + + '' + + '
    ' + ) + }) + }) + describe('get', () => {}) +}) diff --git a/src/index.js b/src/index.js index 39ffcbac..ca6bb6d0 100644 --- a/src/index.js +++ b/src/index.js @@ -153,7 +153,7 @@ module.exports = function (id, options, values) { var found = 0 for (var i = 0, il = self.items.length; i < il; i++) { if (self.items[i].values()[valueName] == value) { - self.templater.remove(self.items[i], options) + self.templater.remove(self.items[i].elm) self.items.splice(i, 1) il-- i-- diff --git a/src/item.js b/src/item.js index 41410625..942d7768 100644 --- a/src/item.js +++ b/src/item.js @@ -27,7 +27,11 @@ module.exports = function (list) { item._values[name] = newValues[name] } if (notCreate !== true) { - list.templater.set(item, item.values()) + if (item.elm) { + list.templater.set(item.elm, item.values()) + } else { + list.templater.create(item.values()) + } } } else { return item._values @@ -35,11 +39,14 @@ module.exports = function (list) { } this.show = function () { - list.templater.show(item) + if (!item.elm) { + item.elm = list.templater.create(item.values()) + } + list.templater.show(item.elm) } this.hide = function () { - list.templater.hide(item) + list.templater.remove(item.elm) } this.matching = function () { diff --git a/src/templater.js b/src/templater.js index 5d09973d..ebe2e654 100644 --- a/src/templater.js +++ b/src/templater.js @@ -1,4 +1,6 @@ -var Templater = function (list) { +var getByClass = require('./utils/get-by-class') + +module.exports = function (list) { var createItem, templater = this @@ -6,7 +8,7 @@ var Templater = function (list) { var itemSource if (typeof list.item === 'function') { - createItem = function (values) { + templater.createItem = function (values) { var item = list.item(values) return getItemSource(item) } @@ -31,7 +33,7 @@ var Templater = function (list) { itemSource = createCleanTemplateItem(itemSource, list.valueNames) - createItem = function () { + templater.createItem = function () { return itemSource.cloneNode(true) } } @@ -48,12 +50,12 @@ var Templater = function (list) { el.setAttribute('data-' + valueName.data[j], '') } } else if (valueName.attr && valueName.name) { - elm = list.utils.getByClass(el, valueName.name, true) + elm = getByClass(el, valueName.name, true) if (elm) { elm.setAttribute(valueName.attr, '') } } else { - elm = list.utils.getByClass(el, valueName, true) + elm = getByClass(el, valueName, true) if (elm) { elm.innerHTML = '' } @@ -106,19 +108,19 @@ var Templater = function (list) { } } - var setValue = function (item, name, value) { + var setValue = function (el, name, value) { var elm = undefined, valueName = getValueName(name) if (!valueName) return if (valueName.data) { - item.elm.setAttribute('data-' + valueName.data, value) + el.setAttribute('data-' + valueName.data, value) } else if (valueName.attr && valueName.name) { - elm = list.utils.getByClass(item.elm, valueName.name, true) + elm = getByClass(el, valueName.name, true) if (elm) { elm.setAttribute(valueName.attr, value) } } else { - elm = list.utils.getByClass(item.elm, valueName, true) + elm = getByClass(el, valueName, true) if (elm) { elm.innerHTML = value } @@ -136,47 +138,36 @@ var Templater = function (list) { values[valueName.data[j]] = list.utils.getAttribute(item.elm, 'data-' + valueName.data[j]) } } else if (valueName.attr && valueName.name) { - elm = list.utils.getByClass(item.elm, valueName.name, true) + elm = getByClass(item.elm, valueName.name, true) values[valueName.name] = elm ? list.utils.getAttribute(elm, valueName.attr) : '' } else { - elm = list.utils.getByClass(item.elm, valueName, true) + elm = getByClass(item.elm, valueName, true) values[valueName] = elm ? elm.innerHTML : '' } } return values } - this.set = function (item, values) { - if (!templater.create(item)) { - for (var v in values) { - if (values.hasOwnProperty(v)) { - setValue(item, v, values[v]) - } + this.set = function (el, values) { + for (var v in values) { + if (values.hasOwnProperty(v)) { + setValue(el, v, values[v]) } } } - this.create = function (item) { - if (item.elm !== undefined) { - return false - } - item.elm = createItem(item.values()) - templater.set(item, item.values()) - return true + this.create = function (values) { + var elm = templater.createItem(values) + templater.set(elm, values) + return elm } - this.remove = function (item) { - if (item.elm.parentNode === list.list) { - list.list.removeChild(item.elm) + this.remove = function (el) { + if (el !== undefined && el.parentNode === list.list) { + list.list.removeChild(el) } } - this.show = function (item) { - templater.create(item) - list.list.appendChild(item.elm) - } - this.hide = function (item) { - if (item.elm !== undefined && item.elm.parentNode === list.list) { - list.list.removeChild(item.elm) - } + this.show = function (el) { + list.list.appendChild(el) } this.clear = function () { /* .innerHTML = ''; fucks up IE */ @@ -188,8 +179,5 @@ var Templater = function (list) { } init() -} - -module.exports = function (list) { - return new Templater(list) + return templater } From 5d522e727bb58f58cd0b43410350575895ff45bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Wed, 25 Nov 2020 22:06:28 +0100 Subject: [PATCH 03/41] Refactor templater.get and add unit test --- __test__/unit/templater.test.js | 33 ++++++++++++++++++++++++++++++++- src/item.js | 2 +- src/templater.js | 16 ++++++++-------- 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/__test__/unit/templater.test.js b/__test__/unit/templater.test.js index e19ac7d3..3047e9bb 100644 --- a/__test__/unit/templater.test.js +++ b/__test__/unit/templater.test.js @@ -161,5 +161,36 @@ describe('Templater', () => { ) }) }) - describe('get', () => {}) + describe('get', () => { + it('should get all values from element', () => { + const itemEl = $( + '
    ' + + 'Jonny' + + '1986' + + '' + + '' + + '
    ' + )[0] + const valueNames = [ + 'name', + 'born', + { data: ['id'] }, + { attr: 'src', name: 'image' }, + { attr: 'href', name: 'link' }, + { attr: 'value', name: 'foo' }, + { attr: 'data-timestamp', name: 'timestamp' }, + ] + const templater = Templater({ item: '
    ', valueNames }) + const values = templater.get(itemEl) + expect(values).toEqual({ + name: 'Jonny', + born: '1986', + id: '1', + image: 'usage/boba.jpeg', + link: 'http://lol.com', + foo: 'Bar', + timestamp: '54321', + }) + }) + }) }) diff --git a/src/item.js b/src/item.js index 942d7768..c62a3d06 100644 --- a/src/item.js +++ b/src/item.js @@ -16,7 +16,7 @@ module.exports = function (list) { } } else { item.elm = element - var values = list.templater.get(item, initValues) + var values = list.templater.get(item.elm) item.values(values) } } diff --git a/src/templater.js b/src/templater.js index ebe2e654..b5856e9f 100644 --- a/src/templater.js +++ b/src/templater.js @@ -1,4 +1,5 @@ var getByClass = require('./utils/get-by-class') +var getAttribute = require('./utils/get-attribute') module.exports = function (list) { var createItem, @@ -127,21 +128,20 @@ module.exports = function (list) { } } - this.get = function (item, valueNames) { - templater.create(item) + this.get = function (el) { + var valueNames = list.valueNames var values = {} for (var i = 0, il = valueNames.length; i < il; i++) { - var elm = undefined, - valueName = valueNames[i] + var valueName = valueNames[i] if (valueName.data) { for (var j = 0, jl = valueName.data.length; j < jl; j++) { - values[valueName.data[j]] = list.utils.getAttribute(item.elm, 'data-' + valueName.data[j]) + values[valueName.data[j]] = getAttribute(el, 'data-' + valueName.data[j]) } } else if (valueName.attr && valueName.name) { - elm = getByClass(item.elm, valueName.name, true) - values[valueName.name] = elm ? list.utils.getAttribute(elm, valueName.attr) : '' + var elm = getByClass(el, valueName.name, true) + values[valueName.name] = elm ? getAttribute(elm, valueName.attr) : '' } else { - elm = getByClass(item.elm, valueName, true) + var elm = getByClass(el, valueName, true) values[valueName] = elm ? elm.innerHTML : '' } } From b27b1f63355f656c5bfd114d9233b994c13818f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Sat, 28 Nov 2020 20:18:16 +0100 Subject: [PATCH 04/41] Complete decoupling of templater from list --- __test__/unit/templater.test.js | 83 ++++---- __test__/unit/utils.value-names.test.js | 65 +++++++ src/index.js | 17 +- src/item.js | 17 +- src/parse.js | 3 +- src/search.js | 2 +- src/templater.js | 239 +++++++++--------------- src/utils/value-names.js | 39 ++++ 8 files changed, 258 insertions(+), 207 deletions(-) create mode 100644 __test__/unit/utils.value-names.test.js create mode 100644 src/utils/value-names.js diff --git a/__test__/unit/templater.test.js b/__test__/unit/templater.test.js index 3047e9bb..d56fd4db 100644 --- a/__test__/unit/templater.test.js +++ b/__test__/unit/templater.test.js @@ -1,20 +1,20 @@ const $ = require('jquery') -const Templater = require('../../src/templater') +const templater = require('../../src/templater') describe('Templater', () => { - describe('init', () => { - it('should init with item string of a div', () => { + describe('getTemplate function', () => { + it('should get from string with div', () => { const item = `
    Foo
    ` const valueNames = ['name'] - const templater = Templater({ item, valueNames }) - const itemEl = templater.createItem() + const template = templater.getTemplate({ template: item, valueNames }) + const itemEl = template() expect(itemEl.outerHTML).toEqual('
    ') }) it('should init with item string of a tr', () => { const item = `Foo` const valueNames = ['name'] - const templater = Templater({ item, valueNames }) - const itemEl = templater.createItem() + const template = templater.getTemplate({ template: item, valueNames }) + const itemEl = template() expect(itemEl.outerHTML).toEqual('') }) it('should init with item function', () => { @@ -22,8 +22,8 @@ describe('Templater', () => { return `
    ` } const valueNames = ['name'] - const templater = Templater({ item, valueNames }) - const itemEl = templater.createItem() + const template = templater.getTemplate({ template: item, valueNames }) + const itemEl = template() expect(itemEl.outerHTML).toEqual('
    ') }) it('should init without item', () => { @@ -34,8 +34,8 @@ describe('Templater', () => { `) $(document.body).append(listEl) const valueNames = ['name'] - const templater = Templater({ valueNames, list: document.querySelector('.list') }) - const itemEl = templater.createItem() + const template = templater.getTemplate({ parentEl: document.querySelector('.list'), valueNames }) + const itemEl = template() expect(itemEl.outerHTML).toEqual('
  • ') }) }) @@ -58,16 +58,20 @@ describe('Templater', () => { { attr: 'value', name: 'foo' }, { attr: 'data-timestamp', name: 'timestamp' }, ] - const templater = Templater({ item, valueNames }) - const itemEl = templater.create({ - name: 'Sven', - born: 1950, - id: 4, - image: 'usage/rey.jpeg', - link: 'localhost', - timestamp: '1337', - foo: 'hej', - }) + const template = templater.getTemplate({ template: item, valueNames }) + const itemEl = templater.create( + { + name: 'Sven', + born: 1950, + id: 4, + image: 'usage/rey.jpeg', + link: 'localhost', + timestamp: '1337', + foo: 'hej', + }, + valueNames, + template + ) expect(itemEl.outerHTML).toEqual( '
    ' + 'Sven' + @@ -88,9 +92,8 @@ describe('Templater', () => { document.body.appendChild(listEl) const item = listEl.querySelector('div') const valueNames = ['name'] - const templater = Templater({ list: listEl, valueNames }) expect(listEl.querySelector('div')).not.toEqual(null) - templater.remove(item) + templater.remove(item, listEl) expect(listEl.querySelector('div')).toEqual(null) }) }) @@ -99,10 +102,8 @@ describe('Templater', () => { const listEl = $(`
    `)[0] document.body.appendChild(listEl) const item = $('
    Foo
    ')[0] - const valueNames = ['name'] - const templater = Templater({ list: listEl, valueNames, item: '
    ' }) expect(listEl.querySelector('div')).toEqual(null) - templater.show(item) + templater.show(item, listEl) expect(listEl.querySelector('div')).not.toEqual(null) }) }) @@ -115,10 +116,8 @@ describe('Templater', () => {
    `)[0] document.body.appendChild(listEl) - const valueNames = ['name'] - const templater = Templater({ list: listEl, valueNames }) expect(listEl.querySelectorAll('div').length).toEqual(2) - templater.clear() + templater.clear(listEl) expect(listEl.querySelectorAll('div').length).toEqual(0) }) }) @@ -141,16 +140,19 @@ describe('Templater', () => { { attr: 'value', name: 'foo' }, { attr: 'data-timestamp', name: 'timestamp' }, ] - const templater = Templater({ item: '
    ', valueNames }) - templater.set(itemEl, { - name: 'Sven', - born: 1950, - id: 4, - image: 'usage/rey.jpeg', - link: 'localhost', - timestamp: '1337', - foo: 'hej', - }) + templater.set( + itemEl, + { + name: 'Sven', + born: 1950, + id: 4, + image: 'usage/rey.jpeg', + link: 'localhost', + timestamp: '1337', + foo: 'hej', + }, + valueNames + ) expect(itemEl.outerHTML).toEqual( '
    ' + 'Sven' + @@ -180,8 +182,7 @@ describe('Templater', () => { { attr: 'value', name: 'foo' }, { attr: 'data-timestamp', name: 'timestamp' }, ] - const templater = Templater({ item: '
    ', valueNames }) - const values = templater.get(itemEl) + const values = templater.get(itemEl, valueNames) expect(values).toEqual({ name: 'Jonny', born: '1986', diff --git a/__test__/unit/utils.value-names.test.js b/__test__/unit/utils.value-names.test.js new file mode 100644 index 00000000..b48c2b65 --- /dev/null +++ b/__test__/unit/utils.value-names.test.js @@ -0,0 +1,65 @@ +const $ = require('jquery') +const valueNamesUtils = require('../../src/utils/value-names') + +describe('Utils / Value Names', () => { + let valueNames, itemEl + + beforeEach(() => { + valueNames = [ + 'name', + 'born', + { data: ['id'] }, + { attr: 'src', name: 'image' }, + { attr: 'href', name: 'link' }, + { attr: 'value', name: 'foo' }, + { attr: 'data-timestamp', name: 'timestamp' }, + ] + itemEl = $( + '
    ' + + 'Jonny' + + '1986' + + '' + + '' + + '
    ' + )[0] + }) + describe('getDefinitionFromName', () => { + it('should get regular class name', () => { + expect(valueNamesUtils.getDefinitionFromName('born', valueNames)).toEqual('born') + }) + it('should get root data attribute', () => { + expect(valueNamesUtils.getDefinitionFromName('id', valueNames)).toEqual({ data: 'id' }) + }) + it('should get attribute', () => { + expect(valueNamesUtils.getDefinitionFromName('link', valueNames)).toEqual({ attr: 'href', name: 'link' }) + }) + it('should get data attribute', () => { + expect(valueNamesUtils.getDefinitionFromName('timestamp', valueNames)).toEqual({ + attr: 'data-timestamp', + name: 'timestamp', + }) + }) + }) + describe('set', () => { + it('should set class', () => { + valueNamesUtils.set(itemEl, 'born', '1337', valueNames) + const born = itemEl.querySelector('.born').innerHTML + expect(born).toEqual('1337') + }) + it('should set root data attribute', () => { + valueNamesUtils.set(itemEl, 'id', '555', valueNames) + const id = itemEl.getAttribute('data-id') + expect(id).toEqual('555') + }) + it('should set attribute', () => { + valueNamesUtils.set(itemEl, 'link', 'http://foo.se/', valueNames) + const link = itemEl.querySelector('a').href + expect(link).toEqual('http://foo.se/') + }) + it('should set data attribut', () => { + valueNamesUtils.set(itemEl, 'timestamp', 'bar-bar', valueNames) + const timestamp = itemEl.querySelector('span').getAttribute('data-timestamp') + expect(timestamp).toEqual('bar-bar') + }) + }) +}) diff --git a/src/index.js b/src/index.js index 9171c458..78754210 100755 --- a/src/index.js +++ b/src/index.js @@ -52,7 +52,12 @@ module.exports = function (id, options, values) { self.list = getByClass(self.listContainer, self.listClass, true) self.parse = require('./parse')(self) - self.templater = require('./templater')(self) + self.templater = require('./templater') + self.template = self.templater.getTemplate({ + parentEl: self.list, + valueNames: self.valueNames, + template: self.item, + }) self.search = require('./search')(self) self.filter = require('./filter')(self) self.sort = require('./sort')(self) @@ -129,9 +134,7 @@ module.exports = function (id, options, values) { values = [values] } for (var i = 0, il = values.length; i < il; i++) { - var item = null - notCreate = self.items.length > self.page ? true : false - item = new Item(values[i], undefined, notCreate) + var item = new Item(values[i], undefined, notCreate) self.items.push(item) added.push(item) } @@ -154,7 +157,7 @@ module.exports = function (id, options, values) { var found = 0 for (var i = 0, il = self.items.length; i < il; i++) { if (self.items[i].values()[valueName] == value) { - self.templater.remove(self.items[i].elm) + self.templater.remove(self.items[i].elm, self.list) self.items.splice(i, 1) il-- i-- @@ -190,7 +193,7 @@ module.exports = function (id, options, values) { * Removes all items from the list */ this.clear = function () { - self.templater.clear() + self.templater.clear(self.list) self.items = [] return self } @@ -242,7 +245,7 @@ module.exports = function (id, options, values) { self.visibleItems = [] self.matchingItems = [] - self.templater.clear() + self.templater.clear(self.list) for (var i = 0; i < il; i++) { if (is[i].matching() && self.matchingItems.length + 1 >= self.i && self.visibleItems.length < self.page) { is[i].show() diff --git a/src/item.js b/src/item.js index c62a3d06..0d5a264d 100644 --- a/src/item.js +++ b/src/item.js @@ -16,8 +16,7 @@ module.exports = function (list) { } } else { item.elm = element - var values = list.templater.get(item.elm) - item.values(values) + item.values(initValues) } } @@ -26,12 +25,8 @@ module.exports = function (list) { for (var name in newValues) { item._values[name] = newValues[name] } - if (notCreate !== true) { - if (item.elm) { - list.templater.set(item.elm, item.values()) - } else { - list.templater.create(item.values()) - } + if (item.elm) { + list.templater.set(item.elm, item.values(), list.valueNames) } } else { return item._values @@ -40,13 +35,13 @@ module.exports = function (list) { this.show = function () { if (!item.elm) { - item.elm = list.templater.create(item.values()) + item.elm = list.templater.create(item.values(), list.valueNames, list.template) } - list.templater.show(item.elm) + list.templater.show(item.elm, list.list) } this.hide = function () { - list.templater.remove(item.elm) + list.templater.remove(item.elm, list.list) } this.matching = function () { diff --git a/src/parse.js b/src/parse.js index 0abe5900..7d7fe561 100644 --- a/src/parse.js +++ b/src/parse.js @@ -15,7 +15,8 @@ module.exports = function (list) { var parse = function (itemElements, valueNames) { for (var i = 0, il = itemElements.length; i < il; i++) { - list.items.push(new Item(valueNames, itemElements[i])) + var values = list.templater.get(itemElements[i], list.valueNames) + list.items.push(new Item(values, itemElements[i])) } } var parseAsync = function (itemElements, valueNames) { diff --git a/src/search.js b/src/search.js index 06c2d4b1..f64ae4cc 100755 --- a/src/search.js +++ b/src/search.js @@ -4,7 +4,7 @@ module.exports = function (list) { var prepare = { resetList: function () { list.i = 1 - list.templater.clear() + list.templater.clear(list.list) customSearch = undefined }, setOptions: function (args) { diff --git a/src/templater.js b/src/templater.js index b5856e9f..19af827d 100644 --- a/src/templater.js +++ b/src/templater.js @@ -1,183 +1,130 @@ var getByClass = require('./utils/get-by-class') var getAttribute = require('./utils/get-attribute') +var valueNamesUtils = require('./utils/value-names') -module.exports = function (list) { - var createItem, - templater = this - - var init = function () { - var itemSource - - if (typeof list.item === 'function') { - templater.createItem = function (values) { - var item = list.item(values) - return getItemSource(item) +var createCleanTemplateItem = function (templateNode, valueNames) { + var el = templateNode.cloneNode(true) + el.removeAttribute('id') + for (var i = 0, il = valueNames.length; i < il; i++) { + var elm = undefined, + valueName = valueNames[i] + if (valueName.data) { + for (var j = 0, jl = valueName.data.length; j < jl; j++) { + el.setAttribute('data-' + valueName.data[j], '') } - return - } - - if (typeof list.item === 'string') { - if (list.item.indexOf('<') === -1) { - itemSource = document.getElementById(list.item) - } else { - itemSource = getItemSource(list.item) + } else if (valueName.attr && valueName.name) { + elm = getByClass(el, valueName.name, true) + if (elm) { + elm.setAttribute(valueName.attr, '') } } else { - /* If item source does not exists, use the first item in list as - source for new items */ - itemSource = getFirstListItem() - } - - if (!itemSource) { - throw new Error("The list needs to have at least one item on init otherwise you'll have to add a template.") + elm = getByClass(el, valueName, true) + if (elm) { + elm.innerHTML = '' + } } + } + return el +} - itemSource = createCleanTemplateItem(itemSource, list.valueNames) - - templater.createItem = function () { - return itemSource.cloneNode(true) - } +var stringToDOMElement = function (itemHTML) { + if (typeof itemHTML !== 'string') return undefined + if (/]/g.exec(itemHTML)) { + var tbody = document.createElement('tbody') + tbody.innerHTML = itemHTML + return tbody.firstElementChild + } else if (itemHTML.indexOf('<') !== -1) { + var div = document.createElement('div') + div.innerHTML = itemHTML + return div.firstElementChild } + return undefined +} - var createCleanTemplateItem = function (templateNode, valueNames) { - var el = templateNode.cloneNode(true) - el.removeAttribute('id') +var templater = {} - for (var i = 0, il = valueNames.length; i < il; i++) { - var elm = undefined, - valueName = valueNames[i] - if (valueName.data) { - for (var j = 0, jl = valueName.data.length; j < jl; j++) { - el.setAttribute('data-' + valueName.data[j], '') - } - } else if (valueName.attr && valueName.name) { - elm = getByClass(el, valueName.name, true) - if (elm) { - elm.setAttribute(valueName.attr, '') - } - } else { - elm = getByClass(el, valueName, true) - if (elm) { - elm.innerHTML = '' - } - } +templater.getTemplate = function ({ valueNames, parentEl, template }) { + if (typeof template === 'function') { + return function (values) { + var item = template(values) + return stringToDOMElement(item) } - return el } - var getFirstListItem = function () { - var nodes = list.list.childNodes - + var itemSource + if (typeof template === 'string') { + if (template.indexOf('<') === -1) { + itemSource = document.getElementById(template) + } else { + itemSource = stringToDOMElement(template) + } + } else { + var nodes = parentEl.childNodes for (var i = 0, il = nodes.length; i < il; i++) { // Only textnodes have a data attribute if (nodes[i].data === undefined) { - return nodes[i].cloneNode(true) + itemSource = nodes[i].cloneNode(true) + break } } - return undefined } + if (!itemSource) + throw new Error("The list needs to have at least one item on init otherwise you'll have to add a template.") - var getItemSource = function (itemHTML) { - if (typeof itemHTML !== 'string') return undefined - if (/]/g.exec(itemHTML)) { - var tbody = document.createElement('tbody') - tbody.innerHTML = itemHTML - return tbody.firstElementChild - } else if (itemHTML.indexOf('<') !== -1) { - var div = document.createElement('div') - div.innerHTML = itemHTML - return div.firstElementChild - } - return undefined - } + itemSource = createCleanTemplateItem(itemSource, valueNames) - var getValueName = function (name) { - for (var i = 0, il = list.valueNames.length; i < il; i++) { - var valueName = list.valueNames[i] - if (valueName.data) { - var data = valueName.data - for (var j = 0, jl = data.length; j < jl; j++) { - if (data[j] === name) { - return { data: name } - } - } - } else if (valueName.attr && valueName.name && valueName.name == name) { - return valueName - } else if (valueName === name) { - return name - } - } + return function () { + return itemSource.cloneNode(true) } +} - var setValue = function (el, name, value) { - var elm = undefined, - valueName = getValueName(name) - if (!valueName) return +templater.get = function (el, valueNames) { + var values = {} + for (var i = 0, il = valueNames.length; i < il; i++) { + var valueName = valueNames[i] if (valueName.data) { - el.setAttribute('data-' + valueName.data, value) - } else if (valueName.attr && valueName.name) { - elm = getByClass(el, valueName.name, true) - if (elm) { - elm.setAttribute(valueName.attr, value) + for (var j = 0, jl = valueName.data.length; j < jl; j++) { + values[valueName.data[j]] = getAttribute(el, 'data-' + valueName.data[j]) } + } else if (valueName.attr && valueName.name) { + var elm = getByClass(el, valueName.name, true) + values[valueName.name] = elm ? getAttribute(elm, valueName.attr) : '' } else { - elm = getByClass(el, valueName, true) - if (elm) { - elm.innerHTML = value - } - } - } - - this.get = function (el) { - var valueNames = list.valueNames - var values = {} - for (var i = 0, il = valueNames.length; i < il; i++) { - var valueName = valueNames[i] - if (valueName.data) { - for (var j = 0, jl = valueName.data.length; j < jl; j++) { - values[valueName.data[j]] = getAttribute(el, 'data-' + valueName.data[j]) - } - } else if (valueName.attr && valueName.name) { - var elm = getByClass(el, valueName.name, true) - values[valueName.name] = elm ? getAttribute(elm, valueName.attr) : '' - } else { - var elm = getByClass(el, valueName, true) - values[valueName] = elm ? elm.innerHTML : '' - } + var elm = getByClass(el, valueName, true) + values[valueName] = elm ? elm.innerHTML : '' } - return values } + return values +} - this.set = function (el, values) { - for (var v in values) { - if (values.hasOwnProperty(v)) { - setValue(el, v, values[v]) - } +templater.set = function (el, values, valueNames) { + for (var v in values) { + if (values.hasOwnProperty(v)) { + valueNamesUtils.set(el, v, values[v], valueNames) } } +} - this.create = function (values) { - var elm = templater.createItem(values) - templater.set(elm, values) - return elm - } - this.remove = function (el) { - if (el !== undefined && el.parentNode === list.list) { - list.list.removeChild(el) - } - } - this.show = function (el) { - list.list.appendChild(el) +templater.create = function (values, valueNames, template) { + var elm = template(values) + templater.set(elm, values, valueNames) + return elm +} +templater.remove = function (el, parentEl) { + if (el !== undefined && el.parentNode === parentEl) { + parentEl.removeChild(el) } - this.clear = function () { - /* .innerHTML = ''; fucks up IE */ - if (list.list.hasChildNodes()) { - while (list.list.childNodes.length >= 1) { - list.list.removeChild(list.list.firstChild) - } +} +templater.show = function (el, parentEl) { + parentEl.appendChild(el) +} +templater.clear = function (parentEl) { + /* .innerHTML = ''; fucks up IE */ + if (parentEl.hasChildNodes()) { + while (parentEl.childNodes.length >= 1) { + parentEl.removeChild(parentEl.firstChild) } } - - init() - return templater } + +module.exports = templater diff --git a/src/utils/value-names.js b/src/utils/value-names.js new file mode 100644 index 00000000..158d8595 --- /dev/null +++ b/src/utils/value-names.js @@ -0,0 +1,39 @@ +var getByClass = require('./get-by-class') + +const getDefinitionFromName = (name, valueNames) => { + for (var i = 0, il = valueNames.length; i < il; i++) { + var valueName = valueNames[i] + if (valueName.data) { + var data = valueName.data + for (var j = 0, jl = data.length; j < jl; j++) { + if (data[j] === name) { + return { data: name } + } + } + } else if (valueName.attr && valueName.name && valueName.name == name) { + return valueName + } else if (valueName === name) { + return name + } + } +} +const set = (el, name, value, valueNames) => { + var elm = undefined, + valueName = getDefinitionFromName(name, valueNames) + if (!valueName) return + if (valueName.data) { + el.setAttribute('data-' + valueName.data, value) + } else if (valueName.attr && valueName.name) { + elm = getByClass(el, valueName.name, true) + if (elm) { + elm.setAttribute(valueName.attr, value) + } + } else { + elm = getByClass(el, valueName, true) + if (elm) { + elm.innerHTML = value + } + } +} + +module.exports = { getDefinitionFromName, set } From 6d7c59088a81a39e25ac54f54d065e4fda94e965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Sun, 29 Nov 2020 12:15:33 +0100 Subject: [PATCH 05/41] Begin decouple item from list and remove item.visible/hide/show and change .matching --- __test__/integration/filter.test.js | 25 ++-- __test__/integration/item.test.js | 46 ++---- __test__/integration/search-filter.test.js | 36 ++--- __test__/integration/search.test.js | 48 +++---- __test__/integration/show.test.js | 157 +++++++++++---------- __test__/unit/templater.test.js | 9 +- __test__/utils/is-visible.js | 4 + src/index.js | 23 +-- src/item.js | 33 ++--- src/templater.js | 25 ++-- 10 files changed, 195 insertions(+), 211 deletions(-) create mode 100644 __test__/utils/is-visible.js diff --git a/__test__/integration/filter.test.js b/__test__/integration/filter.test.js index 37760e20..78711dc0 100644 --- a/__test__/integration/filter.test.js +++ b/__test__/integration/filter.test.js @@ -1,4 +1,5 @@ const fixture = require('./fixtures') +const isVisible = require('../utils/is-visible') describe('Filter', function () { var list, jonny, martina, angelica, sebastian, imma, hasse @@ -68,34 +69,34 @@ describe('Filter', function () { }) }) it('should match jonny', function () { - expect(jonny.matching()).toBe(true) + expect(jonny.matching(list)).toBe(true) expect(jonny.filtered).toBe(true) - expect(jonny.visible()).toBe(true) + expect(isVisible(jonny.elm, list.list)).toBe(true) }) it('should match martina', function () { - expect(martina.matching()).toBe(true) + expect(martina.matching(list)).toBe(true) expect(martina.filtered).toBe(true) - expect(martina.visible()).toBe(true) + expect(isVisible(martina.elm, list.list)).toBe(true) }) it('should match but not show angelica', function () { - expect(angelica.matching()).toBe(true) + expect(angelica.matching(list)).toBe(true) expect(angelica.filtered).toBe(true) - expect(angelica.visible()).toBe(false) + expect(isVisible(angelica.elm, list.list)).toBe(false) }) it('should match but not show sebastian', function () { - expect(sebastian.matching()).toBe(true) + expect(sebastian.matching(list)).toBe(true) expect(sebastian.filtered).toBe(true) - expect(sebastian.visible()).toBe(false) + expect(isVisible(sebastian.elm, list.list)).toBe(false) }) it('should not match imma', function () { - expect(imma.matching()).toBe(false) + expect(imma.matching(list)).toBe(false) expect(imma.filtered).toBe(false) - expect(imma.visible()).toBe(false) + expect(isVisible(imma.elm, list.list)).toBe(false) }) it('should not match hasse', function () { - expect(hasse.matching()).toBe(false) + expect(hasse.matching(list)).toBe(false) expect(hasse.filtered).toBe(false) - expect(hasse.visible()).toBe(false) + expect(isVisible(hasse.elm, list.list)).toBe(false) }) }) }) diff --git a/__test__/integration/item.test.js b/__test__/integration/item.test.js index e1e6c464..07131c51 100644 --- a/__test__/integration/item.test.js +++ b/__test__/integration/item.test.js @@ -1,5 +1,6 @@ const $ = require('jquery'), - fixture = require('./fixtures') + fixture = require('./fixtures'), + isVisible = require('../utils/is-visible') describe('Item', function () { var list, item @@ -39,11 +40,8 @@ describe('Item', function () { }) it('should have all default methods', function () { - expect(item.hide).toBeInstanceOf(Function) - expect(item.show).toBeInstanceOf(Function) expect(item.values).toBeInstanceOf(Function) expect(item.matching).toBeInstanceOf(Function) - expect(item.visible).toBeInstanceOf(Function) }) }) @@ -79,44 +77,28 @@ describe('Item', function () { }) }) - describe('Hide, show, visible', function () { - it('should be hidden', function () { - expect($('#list li').length).toEqual(1) - item.hide() - expect(item.visible()).toBe(false) - expect($('#list li').length).toEqual(0) - }) - it('should be visible', function () { - item.hide() - expect($('#list li').length).toEqual(0) - item.show() - expect(item.visible()).toBe(true) - expect($('#list li').length).toEqual(1) - }) - }) - describe('Matching, found, filtered', function () { describe('Searching', function () { it('should not be visible, match, found or filtered', function () { list.search('Fredrik') - expect(item.matching()).toBe(false) + expect(item.matching(list)).toBe(false) expect(item.found).toBe(false) expect(item.filtered).toBe(false) - expect(item.visible()).toBe(false) + expect(isVisible(item.elm, list.list)).toBe(false) }) it('should be visble, match and found but not filterd', function () { var result = list.search('Sven') - expect(item.matching()).toBe(true) + expect(item.matching(list)).toBe(true) expect(item.found).toBe(true) expect(item.filtered).toBe(false) - expect(item.visible()).toBe(true) + expect(isVisible(item.elm, list.list)).toBe(true) }) it('reset: should be visible and matching but not found or filtered', function () { list.search() - expect(item.matching()).toBe(true) + expect(item.matching(list)).toBe(true) expect(item.found).toBe(false) expect(item.filtered).toBe(false) - expect(item.visible()).toBe(true) + expect(isVisible(item.elm, list.list)).toBe(true) }) }) describe('Filtering', function () { @@ -124,26 +106,26 @@ describe('Item', function () { list.filter(function (item) { return item.values().name == 'Fredrik' }) - expect(item.matching()).toBe(false) + expect(item.matching(list)).toBe(false) expect(item.found).toBe(false) expect(item.filtered).toBe(false) - expect(item.visible()).toBe(false) + expect(isVisible(item.elm, list.list)).toBe(false) }) it('should be visble, match and filtered but not found', function () { list.filter(function (item) { return item.values().name == 'Sven' }) - expect(item.matching()).toBe(true) + expect(item.matching(list)).toBe(true) expect(item.found).toBe(false) expect(item.filtered).toBe(true) - expect(item.visible()).toBe(true) + expect(isVisible(item.elm, list.list)).toBe(true) }) it('reset: should be visble and match but not filtered or found', function () { list.filter() - expect(item.matching()).toBe(true) + expect(item.matching(list)).toBe(true) expect(item.found).toBe(false) expect(item.filtered).toBe(false) - expect(item.visible()).toBe(true) + expect(isVisible(item.elm, list.list)).toBe(true) }) }) }) diff --git a/__test__/integration/search-filter.test.js b/__test__/integration/search-filter.test.js index 73e7264f..e7f69b60 100644 --- a/__test__/integration/search-filter.test.js +++ b/__test__/integration/search-filter.test.js @@ -29,12 +29,12 @@ describe('Search and filter', function () { return item.values().born == '1986' }) expect(list.matchingItems.length).toEqual(3) - expect(jonny.matching()).toBe(true) - expect(martina.matching()).toBe(true) - expect(angelica.matching()).toBe(true) - expect(sebastian.matching()).toBe(false) - expect(imma.matching()).toBe(false) - expect(hasse.matching()).toBe(false) + expect(jonny.matching(list)).toBe(true) + expect(martina.matching(list)).toBe(true) + expect(angelica.matching(list)).toBe(true) + expect(sebastian.matching(list)).toBe(false) + expect(imma.matching(list)).toBe(false) + expect(hasse.matching(list)).toBe(false) }) it('should find everyone born 1986 and containes "ö"', function () { list.filter(function (item) { @@ -42,12 +42,12 @@ describe('Search and filter', function () { }) list.search('ö') expect(list.matchingItems.length).toEqual(1) - expect(jonny.matching()).toBe(true) - expect(martina.matching()).toBe(false) - expect(angelica.matching()).toBe(false) - expect(sebastian.matching()).toBe(false) - expect(imma.matching()).toBe(false) - expect(hasse.matching()).toBe(false) + expect(jonny.matching(list)).toBe(true) + expect(martina.matching(list)).toBe(false) + expect(angelica.matching(list)).toBe(false) + expect(sebastian.matching(list)).toBe(false) + expect(imma.matching(list)).toBe(false) + expect(hasse.matching(list)).toBe(false) }) it('should find everyone with a "ö"', function () { list.filter(function (item) { @@ -56,12 +56,12 @@ describe('Search and filter', function () { list.search('ö') list.filter() expect(list.matchingItems.length).toEqual(4) - expect(jonny.matching()).toBe(true) - expect(martina.matching()).toBe(false) - expect(angelica.matching()).toBe(false) - expect(sebastian.matching()).toBe(true) - expect(imma.matching()).toBe(true) - expect(hasse.matching()).toBe(true) + expect(jonny.matching(list)).toBe(true) + expect(martina.matching(list)).toBe(false) + expect(angelica.matching(list)).toBe(false) + expect(sebastian.matching(list)).toBe(true) + expect(imma.matching(list)).toBe(true) + expect(hasse.matching(list)).toBe(true) }) }) }) diff --git a/__test__/integration/search.test.js b/__test__/integration/search.test.js index ec2abc7e..b2af0e62 100755 --- a/__test__/integration/search.test.js +++ b/__test__/integration/search.test.js @@ -30,22 +30,22 @@ describe('Search', function () { it('should find jonny, martina, angelice', function () { var result = list.search('1986') expect(result.length).toEqual(3) // 3!! - expect(jonny.matching()).toBe(true) - expect(martina.matching()).toBe(true) - expect(angelica.matching()).toBe(true) - expect(sebastian.matching()).toBe(false) - expect(imma.matching()).toBe(false) - expect(hasse.matching()).toBe(false) + expect(jonny.matching(list)).toBe(true) + expect(martina.matching(list)).toBe(true) + expect(angelica.matching(list)).toBe(true) + expect(sebastian.matching(list)).toBe(false) + expect(imma.matching(list)).toBe(false) + expect(hasse.matching(list)).toBe(false) }) it('should find all with utf-8 char ö', function () { var result = list.search('ö') expect(result.length).toEqual(4) // 4!! - expect(jonny.matching()).toBe(true) - expect(martina.matching()).toBe(false) - expect(angelica.matching()).toBe(false) - expect(sebastian.matching()).toBe(true) - expect(imma.matching()).toBe(true) - expect(hasse.matching()).toBe(true) + expect(jonny.matching(list)).toBe(true) + expect(martina.matching(list)).toBe(false) + expect(angelica.matching(list)).toBe(false) + expect(sebastian.matching(list)).toBe(true) + expect(imma.matching(list)).toBe(true) + expect(hasse.matching(list)).toBe(true) }) it('should not break with weird searches', function () { expect(function () { @@ -159,22 +159,22 @@ describe('Search', function () { it('should find jonny, hasse', function () { var result = list.search('berg str') expect(result.length).toEqual(2) - expect(jonny.matching()).toBe(true) - expect(martina.matching()).toBe(false) - expect(angelica.matching()).toBe(false) - expect(sebastian.matching()).toBe(false) - expect(imma.matching()).toBe(false) - expect(hasse.matching()).toBe(true) + expect(jonny.matching(list)).toBe(true) + expect(martina.matching(list)).toBe(false) + expect(angelica.matching(list)).toBe(false) + expect(sebastian.matching(list)).toBe(false) + expect(imma.matching(list)).toBe(false) + expect(hasse.matching(list)).toBe(true) }) it('should find martina, angelica, sebastian, hasse', function () { var result = list.search('a e') expect(result.length).toEqual(4) - expect(jonny.matching()).toBe(false) - expect(martina.matching()).toBe(true) - expect(angelica.matching()).toBe(true) - expect(sebastian.matching()).toBe(true) - expect(imma.matching()).toBe(false) - expect(hasse.matching()).toBe(true) + expect(jonny.matching(list)).toBe(false) + expect(martina.matching(list)).toBe(true) + expect(angelica.matching(list)).toBe(true) + expect(sebastian.matching(list)).toBe(true) + expect(imma.matching(list)).toBe(false) + expect(hasse.matching(list)).toBe(true) }) it('stripping whitespace should find martina', function () { var result = list.search('martina elm ') diff --git a/__test__/integration/show.test.js b/__test__/integration/show.test.js index 60fa41cb..d32dcf46 100644 --- a/__test__/integration/show.test.js +++ b/__test__/integration/show.test.js @@ -1,4 +1,5 @@ const fixture = require('./fixtures') +const isVisible = require('../utils/is-visible') describe('Show', function () { var list, a, b, c, d, e, f @@ -36,52 +37,52 @@ describe('Show', function () { it('should be 1, 2', function () { list.show(1, 2) expect(list.visibleItems.length).toEqual(2) - expect(a.visible()).toBe(true) - expect(b.visible()).toBe(true) - expect(c.visible()).toBe(false) - expect(d.visible()).toBe(false) - expect(e.visible()).toBe(false) - expect(f.visible()).toBe(false) + expect(isVisible(a.elm, list.list)).toBe(true) + expect(isVisible(b.elm, list.list)).toBe(true) + expect(isVisible(c.elm, list.list)).toBe(false) + expect(isVisible(d.elm, list.list)).toBe(false) + expect(isVisible(e.elm, list.list)).toBe(false) + expect(isVisible(f.elm, list.list)).toBe(false) }) it('should show item 6', function () { list.show(6, 2) expect(list.visibleItems.length).toEqual(1) - expect(a.visible()).toBe(false) - expect(b.visible()).toBe(false) - expect(c.visible()).toBe(false) - expect(d.visible()).toBe(false) - expect(e.visible()).toBe(false) - expect(f.visible()).toBe(true) + expect(isVisible(a.elm, list.list)).toBe(false) + expect(isVisible(b.elm, list.list)).toBe(false) + expect(isVisible(c.elm, list.list)).toBe(false) + expect(isVisible(d.elm, list.list)).toBe(false) + expect(isVisible(e.elm, list.list)).toBe(false) + expect(isVisible(f.elm, list.list)).toBe(true) }) it('should show item 1, 2, 3, 4, 5, 6', function () { list.show(1, 200) expect(list.visibleItems.length).toEqual(6) - expect(a.visible()).toBe(true) - expect(b.visible()).toBe(true) - expect(c.visible()).toBe(true) - expect(d.visible()).toBe(true) - expect(e.visible()).toBe(true) - expect(f.visible()).toBe(true) + expect(isVisible(a.elm, list.list)).toBe(true) + expect(isVisible(b.elm, list.list)).toBe(true) + expect(isVisible(c.elm, list.list)).toBe(true) + expect(isVisible(d.elm, list.list)).toBe(true) + expect(isVisible(e.elm, list.list)).toBe(true) + expect(isVisible(f.elm, list.list)).toBe(true) }) it('should show item 3, 4, 5', function () { list.show(3, 3) expect(list.visibleItems.length).toEqual(3) - expect(a.visible()).toBe(false) - expect(b.visible()).toBe(false) - expect(c.visible()).toBe(true) - expect(d.visible()).toBe(true) - expect(e.visible()).toBe(true) - expect(f.visible()).toBe(false) + expect(isVisible(a.elm, list.list)).toBe(false) + expect(isVisible(b.elm, list.list)).toBe(false) + expect(isVisible(c.elm, list.list)).toBe(true) + expect(isVisible(d.elm, list.list)).toBe(true) + expect(isVisible(e.elm, list.list)).toBe(true) + expect(isVisible(f.elm, list.list)).toBe(false) }) it('should show item 5, 6', function () { list.show(5, 3) expect(list.visibleItems.length).toEqual(2) - expect(a.visible()).toBe(false) - expect(b.visible()).toBe(false) - expect(c.visible()).toBe(false) - expect(d.visible()).toBe(false) - expect(e.visible()).toBe(true) - expect(f.visible()).toBe(true) + expect(isVisible(a.elm, list.list)).toBe(false) + expect(isVisible(b.elm, list.list)).toBe(false) + expect(isVisible(c.elm, list.list)).toBe(false) + expect(isVisible(d.elm, list.list)).toBe(false) + expect(isVisible(e.elm, list.list)).toBe(true) + expect(isVisible(f.elm, list.list)).toBe(true) }) }) @@ -93,35 +94,35 @@ describe('Show', function () { list.search('b') list.show(1, 2) expect(list.visibleItems.length).toEqual(2) - expect(a.visible()).toBe(false) - expect(b.visible()).toBe(false) - expect(c.visible()).toBe(true) - expect(d.visible()).toBe(true) - expect(e.visible()).toBe(false) - expect(f.visible()).toBe(false) + expect(isVisible(a.elm, list.list)).toBe(false) + expect(isVisible(b.elm, list.list)).toBe(false) + expect(isVisible(c.elm, list.list)).toBe(true) + expect(isVisible(d.elm, list.list)).toBe(true) + expect(isVisible(e.elm, list.list)).toBe(false) + expect(isVisible(f.elm, list.list)).toBe(false) }) it('should show item 3,4,5,6', function () { list.search('b') list.show(1, 4) expect(list.visibleItems.length).toEqual(4) - expect(a.visible()).toBe(false) - expect(b.visible()).toBe(false) - expect(c.visible()).toBe(true) - expect(d.visible()).toBe(true) - expect(e.visible()).toBe(true) - expect(f.visible()).toBe(true) + expect(isVisible(a.elm, list.list)).toBe(false) + expect(isVisible(b.elm, list.list)).toBe(false) + expect(isVisible(c.elm, list.list)).toBe(true) + expect(isVisible(d.elm, list.list)).toBe(true) + expect(isVisible(e.elm, list.list)).toBe(true) + expect(isVisible(f.elm, list.list)).toBe(true) }) it('should not show any items but match two', function () { list.search('a') list.show(3, 2) expect(list.visibleItems.length).toEqual(0) expect(list.matchingItems.length).toEqual(2) - expect(a.visible()).toBe(false) - expect(b.visible()).toBe(false) - expect(c.visible()).toBe(false) - expect(d.visible()).toBe(false) - expect(e.visible()).toBe(false) - expect(f.visible()).toBe(false) + expect(isVisible(a.elm, list.list)).toBe(false) + expect(isVisible(b.elm, list.list)).toBe(false) + expect(isVisible(c.elm, list.list)).toBe(false) + expect(isVisible(d.elm, list.list)).toBe(false) + expect(isVisible(e.elm, list.list)).toBe(false) + expect(isVisible(f.elm, list.list)).toBe(false) }) }) @@ -136,12 +137,12 @@ describe('Show', function () { list.show(1, 2) expect(list.visibleItems.length).toEqual(2) expect(list.matchingItems.length).toEqual(2) - expect(a.visible()).toBe(false) - expect(b.visible()).toBe(false) - expect(c.visible()).toBe(true) - expect(d.visible()).toBe(true) - expect(e.visible()).toBe(false) - expect(f.visible()).toBe(false) + expect(isVisible(a.elm, list.list)).toBe(false) + expect(isVisible(b.elm, list.list)).toBe(false) + expect(isVisible(c.elm, list.list)).toBe(true) + expect(isVisible(d.elm, list.list)).toBe(true) + expect(isVisible(e.elm, list.list)).toBe(false) + expect(isVisible(f.elm, list.list)).toBe(false) }) it('should show item 3,4,5,6', function () { list.filter(function (item) { @@ -150,12 +151,12 @@ describe('Show', function () { list.show(1, 4) expect(list.visibleItems.length).toEqual(2) expect(list.matchingItems.length).toEqual(2) - expect(a.visible()).toBe(false) - expect(b.visible()).toBe(false) - expect(c.visible()).toBe(false) - expect(d.visible()).toBe(false) - expect(e.visible()).toBe(true) - expect(f.visible()).toBe(true) + expect(isVisible(a.elm, list.list)).toBe(false) + expect(isVisible(b.elm, list.list)).toBe(false) + expect(isVisible(c.elm, list.list)).toBe(false) + expect(isVisible(d.elm, list.list)).toBe(false) + expect(isVisible(e.elm, list.list)).toBe(true) + expect(isVisible(f.elm, list.list)).toBe(true) }) it('should not show any items but match two', function () { list.filter(function (item) { @@ -164,12 +165,12 @@ describe('Show', function () { list.show(3, 2) expect(list.visibleItems.length).toEqual(0) expect(list.matchingItems.length).toEqual(2) - expect(a.visible()).toBe(false) - expect(b.visible()).toBe(false) - expect(c.visible()).toBe(false) - expect(d.visible()).toBe(false) - expect(e.visible()).toBe(false) - expect(f.visible()).toBe(false) + expect(isVisible(a.elm, list.list)).toBe(false) + expect(isVisible(b.elm, list.list)).toBe(false) + expect(isVisible(c.elm, list.list)).toBe(false) + expect(isVisible(d.elm, list.list)).toBe(false) + expect(isVisible(e.elm, list.list)).toBe(false) + expect(isVisible(f.elm, list.list)).toBe(false) }) }) @@ -185,12 +186,12 @@ describe('Show', function () { list.search('b') expect(list.visibleItems.length).toEqual(2) expect(list.matchingItems.length).toEqual(3) - expect(a.visible()).toBe(false) - expect(b.visible()).toBe(false) - expect(c.visible()).toBe(false) - expect(d.visible()).toBe(true) - expect(e.visible()).toBe(true) - expect(f.visible()).toBe(false) + expect(isVisible(a.elm, list.list)).toBe(false) + expect(isVisible(b.elm, list.list)).toBe(false) + expect(isVisible(c.elm, list.list)).toBe(false) + expect(isVisible(d.elm, list.list)).toBe(true) + expect(isVisible(e.elm, list.list)).toBe(true) + expect(isVisible(f.elm, list.list)).toBe(false) }) it('should show 5, 6', function () { list.show(1, 2) @@ -201,12 +202,12 @@ describe('Show', function () { list.show(2, 2) expect(list.visibleItems.length).toEqual(2) expect(list.matchingItems.length).toEqual(3) - expect(a.visible()).toBe(false) - expect(b.visible()).toBe(false) - expect(c.visible()).toBe(false) - expect(d.visible()).toBe(false) - expect(e.visible()).toBe(true) - expect(f.visible()).toBe(true) + expect(isVisible(a.elm, list.list)).toBe(false) + expect(isVisible(b.elm, list.list)).toBe(false) + expect(isVisible(c.elm, list.list)).toBe(false) + expect(isVisible(d.elm, list.list)).toBe(false) + expect(isVisible(e.elm, list.list)).toBe(true) + expect(isVisible(f.elm, list.list)).toBe(true) }) }) }) diff --git a/__test__/unit/templater.test.js b/__test__/unit/templater.test.js index d56fd4db..f717f95c 100644 --- a/__test__/unit/templater.test.js +++ b/__test__/unit/templater.test.js @@ -7,14 +7,14 @@ describe('Templater', () => { const item = `
    Foo
    ` const valueNames = ['name'] const template = templater.getTemplate({ template: item, valueNames }) - const itemEl = template() + const itemEl = template.render() expect(itemEl.outerHTML).toEqual('
    ') }) it('should init with item string of a tr', () => { const item = `Foo` const valueNames = ['name'] const template = templater.getTemplate({ template: item, valueNames }) - const itemEl = template() + const itemEl = template.render() expect(itemEl.outerHTML).toEqual('') }) it('should init with item function', () => { @@ -23,7 +23,7 @@ describe('Templater', () => { } const valueNames = ['name'] const template = templater.getTemplate({ template: item, valueNames }) - const itemEl = template() + const itemEl = template.render() expect(itemEl.outerHTML).toEqual('
    ') }) it('should init without item', () => { @@ -35,7 +35,7 @@ describe('Templater', () => { $(document.body).append(listEl) const valueNames = ['name'] const template = templater.getTemplate({ parentEl: document.querySelector('.list'), valueNames }) - const itemEl = template() + const itemEl = template.render() expect(itemEl.outerHTML).toEqual('
  • ') }) }) @@ -69,7 +69,6 @@ describe('Templater', () => { timestamp: '1337', foo: 'hej', }, - valueNames, template ) expect(itemEl.outerHTML).toEqual( diff --git a/__test__/utils/is-visible.js b/__test__/utils/is-visible.js new file mode 100644 index 00000000..dd00b255 --- /dev/null +++ b/__test__/utils/is-visible.js @@ -0,0 +1,4 @@ +module.exports = function (el, parent) { + if (!el) return false + return el && el.parentNode == parent +} diff --git a/src/index.js b/src/index.js index 78754210..b037d610 100755 --- a/src/index.js +++ b/src/index.js @@ -6,7 +6,8 @@ var naturalSort = require('string-natural-compare'), toString = require('./utils/to-string'), classes = require('./utils/classes'), getAttribute = require('./utils/get-attribute'), - toArray = require('./utils/to-array') + toArray = require('./utils/to-array'), + templater = require('./templater') module.exports = function (id, options, values) { var self = this, @@ -52,7 +53,7 @@ module.exports = function (id, options, values) { self.list = getByClass(self.listContainer, self.listClass, true) self.parse = require('./parse')(self) - self.templater = require('./templater') + self.templater = templater self.template = self.templater.getTemplate({ parentEl: self.list, valueNames: self.valueNames, @@ -128,13 +129,12 @@ module.exports = function (id, options, values) { addAsync(values.slice(0), callback) return } - var added = [], - notCreate = false + var added = [] if (values[0] === undefined) { values = [values] } for (var i = 0, il = values.length; i < il; i++) { - var item = new Item(values[i], undefined, notCreate) + var item = new Item(values[i]) self.items.push(item) added.push(item) } @@ -247,15 +247,18 @@ module.exports = function (id, options, values) { self.matchingItems = [] self.templater.clear(self.list) for (var i = 0; i < il; i++) { - if (is[i].matching() && self.matchingItems.length + 1 >= self.i && self.visibleItems.length < self.page) { - is[i].show() + if (is[i].matching(self) && self.matchingItems.length + 1 >= self.i && self.visibleItems.length < self.page) { + if (!is[i].elm) { + is[i].elm = templater.create(is[i].values(), self.template) + } + templater.show(is[i].elm, self.list) self.visibleItems.push(is[i]) self.matchingItems.push(is[i]) - } else if (is[i].matching()) { + } else if (is[i].matching(self)) { self.matchingItems.push(is[i]) - is[i].hide() + templater.remove(is[i].elm, self.list) } else { - is[i].hide() + templater.remove(is[i].elm, self.list) } } self.trigger('updated') diff --git a/src/item.js b/src/item.js index 0d5a264d..2158ce9a 100644 --- a/src/item.js +++ b/src/item.js @@ -1,11 +1,13 @@ +const templater = require('./templater') + module.exports = function (list) { return function (initValues, element, notCreate) { var item = this this._values = {} - this.found = false // Show if list.searched == true and this.found == true - this.filtered = false // Show if list.filtered == true and this.filtered == true + this.found = false + this.filtered = false var init = function (initValues, element, notCreate) { if (element === undefined) { @@ -26,37 +28,22 @@ module.exports = function (list) { item._values[name] = newValues[name] } if (item.elm) { - list.templater.set(item.elm, item.values(), list.valueNames) + templater.set(item.elm, item.values(), list.valueNames) } } else { return item._values } } - this.show = function () { - if (!item.elm) { - item.elm = list.templater.create(item.values(), list.valueNames, list.template) - } - list.templater.show(item.elm, list.list) - } - - this.hide = function () { - list.templater.remove(item.elm, list.list) - } - - this.matching = function () { + this.matching = function ({ searched, filtered }) { return ( - (list.filtered && list.searched && item.found && item.filtered) || - (list.filtered && !list.searched && item.filtered) || - (!list.filtered && list.searched && item.found) || - (!list.filtered && !list.searched) + (filtered && searched && item.found && item.filtered) || + (filtered && !searched && item.filtered) || + (!filtered && searched && item.found) || + (!filtered && !searched) ) } - this.visible = function () { - return item.elm && item.elm.parentNode == list.list ? true : false - } - init(initValues, element, notCreate) } } diff --git a/src/templater.js b/src/templater.js index 19af827d..a0e40bed 100644 --- a/src/templater.js +++ b/src/templater.js @@ -45,9 +45,13 @@ var templater = {} templater.getTemplate = function ({ valueNames, parentEl, template }) { if (typeof template === 'function') { - return function (values) { - var item = template(values) - return stringToDOMElement(item) + return { + valueNames, + type: 'dynamic', + render: function (values) { + var item = template(values) + return stringToDOMElement(item) + }, } } @@ -73,8 +77,13 @@ templater.getTemplate = function ({ valueNames, parentEl, template }) { itemSource = createCleanTemplateItem(itemSource, valueNames) - return function () { - return itemSource.cloneNode(true) + return { + valueNames, + render: function (values) { + var el = itemSource.cloneNode(true) + templater.set(el, values, valueNames) + return el + }, } } @@ -105,10 +114,8 @@ templater.set = function (el, values, valueNames) { } } -templater.create = function (values, valueNames, template) { - var elm = template(values) - templater.set(elm, values, valueNames) - return elm +templater.create = function (values, template) { + return template.render(values) } templater.remove = function (el, parentEl) { if (el !== undefined && el.parentNode === parentEl) { From 5500a5c9204c8cbd80dbb6e55e67e8232fc9d626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Sun, 29 Nov 2020 16:47:49 +0100 Subject: [PATCH 06/41] Complete decoupling of list from item --- src/index.js | 6 ++--- src/item.js | 68 +++++++++++++++++++++++----------------------------- src/parse.js | 6 ++--- 3 files changed, 36 insertions(+), 44 deletions(-) diff --git a/src/index.js b/src/index.js index b037d610..ee43dd0c 100755 --- a/src/index.js +++ b/src/index.js @@ -7,12 +7,12 @@ var naturalSort = require('string-natural-compare'), classes = require('./utils/classes'), getAttribute = require('./utils/get-attribute'), toArray = require('./utils/to-array'), - templater = require('./templater') + templater = require('./templater'), + Item = require('./item') module.exports = function (id, options, values) { var self = this, init, - Item = require('./item')(self), addAsync = require('./add-async')(self), initPagination = require('./pagination')(self) @@ -134,7 +134,7 @@ module.exports = function (id, options, values) { values = [values] } for (var i = 0, il = values.length; i < il; i++) { - var item = new Item(values[i]) + var item = new Item(values[i], { template: self.template }) self.items.push(item) added.push(item) } diff --git a/src/item.js b/src/item.js index 2158ce9a..2e29847e 100644 --- a/src/item.js +++ b/src/item.js @@ -1,49 +1,41 @@ const templater = require('./templater') -module.exports = function (list) { - return function (initValues, element, notCreate) { - var item = this +module.exports = function (initValues, { element, template } = {}) { + var item = this - this._values = {} + this._values = {} - this.found = false - this.filtered = false + this.found = false + this.filtered = false - var init = function (initValues, element, notCreate) { - if (element === undefined) { - if (notCreate) { - item.values(initValues, notCreate) - } else { - item.values(initValues) - } - } else { - item.elm = element - item.values(initValues) - } - } + var init = function (values, { element, template } = {}) { + if (element) item.elm = element + if (!template) throw new Error('no tempalte!') + item.template = template + item.values(values) + } - this.values = function (newValues, notCreate) { - if (newValues !== undefined) { - for (var name in newValues) { - item._values[name] = newValues[name] - } - if (item.elm) { - templater.set(item.elm, item.values(), list.valueNames) - } - } else { - return item._values + this.values = function (newValues) { + if (newValues !== undefined) { + for (var name in newValues) { + item._values[name] = newValues[name] } + if (item.elm) { + templater.set(item.elm, item.values(), item.template.valueNames) + } + } else { + return item._values } + } - this.matching = function ({ searched, filtered }) { - return ( - (filtered && searched && item.found && item.filtered) || - (filtered && !searched && item.filtered) || - (!filtered && searched && item.found) || - (!filtered && !searched) - ) - } - - init(initValues, element, notCreate) + this.matching = function ({ searched, filtered }) { + return ( + (filtered && searched && item.found && item.filtered) || + (filtered && !searched && item.filtered) || + (!filtered && searched && item.found) || + (!filtered && !searched) + ) } + + init(initValues, { element, template }) } diff --git a/src/parse.js b/src/parse.js index 7d7fe561..ab666589 100644 --- a/src/parse.js +++ b/src/parse.js @@ -1,6 +1,6 @@ -module.exports = function (list) { - var Item = require('./item')(list) +var Item = require('./item') +module.exports = function (list) { var getChildren = function (parent) { var nodes = parent.childNodes, items = [] @@ -16,7 +16,7 @@ module.exports = function (list) { var parse = function (itemElements, valueNames) { for (var i = 0, il = itemElements.length; i < il; i++) { var values = list.templater.get(itemElements[i], list.valueNames) - list.items.push(new Item(values, itemElements[i])) + list.items.push(new Item(values, { element: itemElements[i], template: list.template })) } } var parseAsync = function (itemElements, valueNames) { From 238b9001a3e19935ca36295bf184bc9ee23c01f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Mon, 30 Nov 2020 18:13:09 +0100 Subject: [PATCH 07/41] Add unit tests for Item --- __test__/unit/item.test.js | 102 +++++++++++++++++++++++++++++++++++++ src/item.js | 2 +- 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 __test__/unit/item.test.js diff --git a/__test__/unit/item.test.js b/__test__/unit/item.test.js new file mode 100644 index 00000000..e4f1ce15 --- /dev/null +++ b/__test__/unit/item.test.js @@ -0,0 +1,102 @@ +const $ = require('jquery') + +const Item = require('../../src/item') +const templater = require('../../src/templater') + +describe('item', function () { + beforeAll(() => { + this.templateParams = { + template: '
    ', + valueNames: ['name'], + } + }) + describe('init', () => { + it('should throw error if missing template', () => { + expect(() => { + new Item({ name: 'Jonny' }) + }).toThrowError('missing_item_template') + }) + }) + describe('create', () => { + it('should create item with only values', () => { + const template = templater.getTemplate(this.templateParams) + const item = new Item({ name: 'Jonny' }, { template }) + expect(item._values).toEqual({ name: 'Jonny' }) + expect(item.elm).toBeUndefined() + }) + it('should create item with values and element', () => { + const template = templater.getTemplate(this.templateParams) + const element = document.createElement('div') + const item = new Item({ name: 'Jonny' }, { element, template }) + expect(item._values).toEqual({ name: 'Jonny' }) + expect(item.elm).not.toBeUndefined() + expect(item.elm).toBe(element) + }) + }) + describe('get', () => { + it('should get values', () => { + const template = templater.getTemplate(this.templateParams) + const item = new Item({ name: 'Jonny' }, { template }) + expect(item.values()).toEqual({ name: 'Jonny' }) + }) + }) + describe('set', () => { + it('should set values on item without element', () => { + const template = templater.getTemplate(this.templateParams) + const item = new Item({ name: 'Jonny' }, { template }) + item.values({ name: 'Anna' }) + expect(item.elm).toBeUndefined() + expect(item._values.name).toEqual('Anna') + }) + it('should set values on item with element', () => { + const template = templater.getTemplate(this.templateParams) + const element = $('
    Jonny
    ')[0] + const item = new Item({ name: 'Jonny' }, { element, template }) + expect(item.elm.querySelector('span').innerHTML).toEqual('Jonny') + item.values({ name: 'Anna' }) + expect(item._values.name).toEqual('Anna') + expect(item.elm.querySelector('span').innerHTML).toEqual('Anna') + }) + }) + describe('matching', () => { + beforeAll(() => { + const template = templater.getTemplate(this.templateParams) + this.item = new Item({ name: 'Jonny' }, { template }) + }) + it('should handle not found or filtered', () => { + const item = this.item + item.found = false + item.filtered = false + expect(item.matching({ searched: false, filtered: false })).toEqual(true) + expect(item.matching({ searched: true, filtered: false })).toEqual(false) + expect(item.matching({ searched: true, filtered: false })).toEqual(false) + }) + it('should handle found and not filtered', () => { + const item = this.item + item.found = true + item.filtered = false + expect(item.matching({ searched: false, filtered: false })).toEqual(true) + expect(item.matching({ searched: true, filtered: false })).toEqual(true) + expect(item.matching({ searched: true, filtered: true })).toEqual(false) + expect(item.matching({ searched: false, filtered: true })).toEqual(false) + }) + it('should handle not found but filtered', () => { + const item = this.item + item.found = false + item.filtered = true + expect(item.matching({ searched: false, filtered: false })).toEqual(true) + expect(item.matching({ searched: true, filtered: false })).toEqual(false) + expect(item.matching({ searched: true, filtered: true })).toEqual(false) + expect(item.matching({ searched: false, filtered: true })).toEqual(true) + }) + it('should handle both found and filtered', () => { + const item = this.item + item.found = true + item.filtered = true + expect(item.matching({ searched: false, filtered: false })).toEqual(true) + expect(item.matching({ searched: true, filtered: false })).toEqual(true) + expect(item.matching({ searched: true, filtered: true })).toEqual(true) + expect(item.matching({ searched: false, filtered: true })).toEqual(true) + }) + }) +}) diff --git a/src/item.js b/src/item.js index 2e29847e..9d7628af 100644 --- a/src/item.js +++ b/src/item.js @@ -10,7 +10,7 @@ module.exports = function (initValues, { element, template } = {}) { var init = function (values, { element, template } = {}) { if (element) item.elm = element - if (!template) throw new Error('no tempalte!') + if (!template) throw new Error('missing_item_template') item.template = template item.values(values) } From d538d091cc187725f921dc81f48e747381ec4977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Thu, 17 Dec 2020 00:29:22 +0100 Subject: [PATCH 08/41] Update string-natural-compare from 2.0.2 to 3.0.1 --- __test__/integration/sort.test.js | 10 +++------- package-lock.json | 6 +++--- package.json | 2 +- src/sort.js | 16 +++++++++++----- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/__test__/integration/sort.test.js b/__test__/integration/sort.test.js index c30503f8..bcbcdd1c 100644 --- a/__test__/integration/sort.test.js +++ b/__test__/integration/sort.test.js @@ -286,24 +286,20 @@ describe('Sort', function () { expect(list.items[11].values().val).toBe('z') }) - it('should handle not longer (since 1.4.0) space and zero the same for desc and asc', function () { + it('should handle space and zero the same for desc and asc (worked 1.4.0 - 2.3.0 then string-natural-compare was updated)', function () { list.clear() list.add({ val: '' }) list.add({ val: '0' }) - list.add({ val: 0 }) list.sort('val', { order: 'asc' }) expect(list.items[0].values().val).toBe('') expect(list.items[1].values().val).toBe('0') - expect(list.items[2].values().val).toBe(0) list.sort('val', { order: 'desc' }) - expect(list.items[0].values().val).toBe('0') - expect(list.items[1].values().val).toBe(0) - expect(list.items[2].values().val).toBe('') + expect(list.items[0].values().val).toBe('') + expect(list.items[1].values().val).toBe('0') list.sort('val', { order: 'asc' }) expect(list.items[0].values().val).toBe('') expect(list.items[1].values().val).toBe('0') - expect(list.items[2].values().val).toBe(0) }) }) diff --git a/package-lock.json b/package-lock.json index fe1950dc..75cda77e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6529,9 +6529,9 @@ } }, "string-natural-compare": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-2.0.3.tgz", - "integrity": "sha512-4Kcl12rNjc+6EKhY8QyDVuQTAlMWwRiNbsxnVwBUKFr7dYPQuXVrtNU4sEkjF9LHY0AY6uVbB3ktbkIH4LC+BQ==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" }, "strip-bom": { "version": "4.0.0", diff --git a/package.json b/package.json index ddf8dadb..29edf624 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "url": "https://github.com/javve/list.js/issues" }, "dependencies": { - "string-natural-compare": "^2.0.2" + "string-natural-compare": "^3.0.1" }, "devDependencies": { "@babel/core": "^7.12.7", diff --git a/src/sort.js b/src/sort.js index 4e4b415f..1020d0c7 100644 --- a/src/sort.js +++ b/src/sort.js @@ -77,12 +77,18 @@ module.exports = function (list) { } } else { sortFunction = function (itemA, itemB) { - var sort = list.utils.naturalSort - sort.alphabet = list.alphabet || options.alphabet || undefined - if (!sort.alphabet && options.insensitive) { - sort = list.utils.naturalSort.caseInsensitive + var naturalSortOptions = {} + naturalSortOptions.alphabet = list.alphabet || options.alphabet || undefined + if (!naturalSortOptions.alphabet && options.insensitive) { + naturalSortOptions.caseInsensitive = true } - return sort(itemA.values()[options.valueName], itemB.values()[options.valueName]) * multi + return ( + list.utils.naturalSort( + '' + itemA.values()[options.valueName], + '' + itemB.values()[options.valueName], + naturalSortOptions + ) * multi + ) } } From ae7e92962e3378f6ad9dbd25948190cbd1685942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Thu, 17 Dec 2020 00:32:47 +0100 Subject: [PATCH 09/41] Refactor sort and sort listeners + add unit tests --- __test__/unit/sort-buttons.test.js | 210 ++++++++++++++++++++++++++ __test__/unit/sort.test.js | 230 +++++++++++++++++++++++++++++ src/index.js | 43 +++++- src/sort-buttons.js | 75 ++++++++++ src/sort.js | 131 ++++------------ 5 files changed, 581 insertions(+), 108 deletions(-) create mode 100644 __test__/unit/sort-buttons.test.js create mode 100644 __test__/unit/sort.test.js create mode 100644 src/sort-buttons.js diff --git a/__test__/unit/sort-buttons.test.js b/__test__/unit/sort-buttons.test.js new file mode 100644 index 00000000..5666f293 --- /dev/null +++ b/__test__/unit/sort-buttons.test.js @@ -0,0 +1,210 @@ +const naturalSort = require('string-natural-compare') +const $ = require('jquery') + +const Item = require('../../src/item') +const templater = require('../../src/templater') +const { + addSortListeners, + getInSensitive, + getNextSortOrder, + setSortOrder, + clearSortOrder, +} = require('../../src/sort-buttons') + +describe('sort listeners', function () { + describe('getInSensitive', () => { + it('should be false if data-insensitive is false', () => { + const button = $(`
    ', ) }) }) @@ -128,7 +128,7 @@ describe('Templater', () => { '1986' + '' + '' + - '' + '', )[0] const valueNames = [ 'name', @@ -150,7 +150,7 @@ describe('Templater', () => { timestamp: '1337', foo: 'hej', }, - valueNames + valueNames, ) expect(itemEl.outerHTML).toEqual( '
    ' + @@ -158,7 +158,7 @@ describe('Templater', () => { '1950' + '' + '' + - '
    ' + '', ) }) }) @@ -170,7 +170,7 @@ describe('Templater', () => { '1986' + '' + '' + - '' + '', )[0] const valueNames = [ 'name', diff --git a/__test__/unit/utils.value-names.test.js b/__test__/unit/utils.value-names.test.js index b48c2b65..d6b3c48b 100644 --- a/__test__/unit/utils.value-names.test.js +++ b/__test__/unit/utils.value-names.test.js @@ -1,5 +1,5 @@ -const $ = require('jquery') -const valueNamesUtils = require('../../src/utils/value-names') +import $ from 'jquery' +import valueNamesUtils from '../../src/utils/value-names' describe('Utils / Value Names', () => { let valueNames, itemEl @@ -20,7 +20,7 @@ describe('Utils / Value Names', () => { '1986' + '' + '' + - '' + '', )[0] }) describe('getDefinitionFromName', () => { diff --git a/package-lock.json b/package-lock.json index 75cda77e..aff8ac60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7411 +1,3619 @@ { "name": "list.js", "version": "2.1.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" + "packages": { + "": { + "name": "list.js", + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "string-natural-compare": "^3.0.1" + }, + "devDependencies": { + "@rollup/plugin-terser": "^0.4.4", + "@testing-library/dom": "^10.4.0", + "@testing-library/user-event": "^14.6.1", + "eslint": "^8.57.1", + "eslint-config-prettier": "^10.1.2", + "jquery": "^3.5.1", + "jsdom": "^26.1.0", + "prettier": "^3.5.3", + "vite": "^6.3.2", + "vitest": "^3.1.2" + }, + "engines": { + "node": "^22.14.0" } }, - "@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", - "dev": true - }, - "@babel/core": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.7.tgz", - "integrity": "sha512-tRKx9B53kJe8NCGGIxEQb2Bkr0riUIEuN7Sc1fxhs5H8lKlCWUvQCSNMVIB0Meva7hcbCRJ76de15KoLltdoqw==", + "node_modules/@asamuzakjp/css-color": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.4.tgz", + "integrity": "sha512-SeuBV4rnjpFNjI8HSgKUwteuFdkHwkboq31HWzznuqgySQir+jSTczoWVVL4jvOjKjuH80fMDG0Fvg1Sb+OJsA==", "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.7", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, + "license": "MIT", "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" } }, - "@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, - "requires": { - "@babel/types": "^7.12.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, - "requires": { - "@babel/types": "^7.10.4" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "node_modules/@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", "dev": true, - "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.14.5", - "semver": "^5.5.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "node_modules/@csstools/css-calc": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz", + "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "node_modules/@csstools/css-color-parser": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz", + "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "regexpu-core": "^4.7.1" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", "dev": true, - "requires": { - "@babel/types": "^7.12.1" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" } }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz", + "integrity": "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.3.tgz", + "integrity": "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.3.tgz", + "integrity": "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.3.tgz", + "integrity": "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.3.tgz", + "integrity": "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.3.tgz", + "integrity": "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.3.tgz", + "integrity": "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.3.tgz", + "integrity": "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.3.tgz", + "integrity": "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.3.tgz", + "integrity": "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.3.tgz", + "integrity": "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.3.tgz", + "integrity": "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.3.tgz", + "integrity": "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.3.tgz", + "integrity": "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.3.tgz", + "integrity": "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.3.tgz", + "integrity": "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.3.tgz", + "integrity": "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.3.tgz", + "integrity": "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.3.tgz", + "integrity": "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.3.tgz", + "integrity": "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.3.tgz", + "integrity": "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.3.tgz", + "integrity": "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.3.tgz", + "integrity": "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.3.tgz", + "integrity": "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.3.tgz", + "integrity": "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz", + "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==", "dev": true, - "requires": { - "@babel/types": "^7.10.4" + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, - "requires": { - "@babel/types": "^7.10.4" + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "requires": { - "@babel/types": "^7.12.7" + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { - "@babel/types": "^7.12.5" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - }, + "license": "ISC", "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", - "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==", + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, - "requires": { - "@babel/types": "^7.12.7" + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" } }, - "@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { - "@babel/types": "^7.12.1" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "requires": { - "@babel/types": "^7.12.1" + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true + "license": "BSD-3-Clause" }, - "@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "license": "MIT", + "engines": { + "node": ">=6.0.0" } }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "license": "MIT", + "engines": { + "node": ">=6.0.0" } }, - "@babel/parser": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", - "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "license": "MIT", + "engines": { + "node": ">= 8" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "license": "MIT", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz", + "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==", + "cpu": [ + "arm" + ], "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz", + "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", + "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz", + "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz", + "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz", + "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz", + "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz", + "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz", + "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz", + "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz", + "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz", + "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz", + "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz", + "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz", + "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz", + "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz", + "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz", + "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz", + "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz", + "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } + "license": "MIT" }, - "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "ISC" }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@vitest/expect": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.2.tgz", + "integrity": "sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.1.2", + "@vitest/utils": "3.1.2", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "node_modules/@vitest/mocker": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.2.tgz", + "integrity": "sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.1.2", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "node_modules/@vitest/pretty-format": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.2.tgz", + "integrity": "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@vitest/runner": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.2.tgz", + "integrity": "sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.1.2", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "node_modules/@vitest/snapshot": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.2.tgz", + "integrity": "sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.1.2", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "node_modules/@vitest/spy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.2.tgz", + "integrity": "sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/@vitest/utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.2.tgz", + "integrity": "sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.1.2", + "loupe": "^3.1.3", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "engines": { + "node": ">= 14" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "Python-2.0" }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" + "license": "MIT", + "engines": { + "node": ">=12" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "node_modules/chai": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "engines": { + "node": ">= 16" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "node_modules/cssstyle": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.1.tgz", + "integrity": "sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.1.2", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", - "babel-plugin-dynamic-import-node": "^2.3.3" + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", + "integrity": "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.3", + "@esbuild/android-arm": "0.25.3", + "@esbuild/android-arm64": "0.25.3", + "@esbuild/android-x64": "0.25.3", + "@esbuild/darwin-arm64": "0.25.3", + "@esbuild/darwin-x64": "0.25.3", + "@esbuild/freebsd-arm64": "0.25.3", + "@esbuild/freebsd-x64": "0.25.3", + "@esbuild/linux-arm": "0.25.3", + "@esbuild/linux-arm64": "0.25.3", + "@esbuild/linux-ia32": "0.25.3", + "@esbuild/linux-loong64": "0.25.3", + "@esbuild/linux-mips64el": "0.25.3", + "@esbuild/linux-ppc64": "0.25.3", + "@esbuild/linux-riscv64": "0.25.3", + "@esbuild/linux-s390x": "0.25.3", + "@esbuild/linux-x64": "0.25.3", + "@esbuild/netbsd-arm64": "0.25.3", + "@esbuild/netbsd-x64": "0.25.3", + "@esbuild/openbsd-arm64": "0.25.3", + "@esbuild/openbsd-x64": "0.25.3", + "@esbuild/sunos-x64": "0.25.3", + "@esbuild/win32-arm64": "0.25.3", + "@esbuild/win32-ia32": "0.25.3", + "@esbuild/win32-x64": "0.25.3" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "node_modules/eslint-config-prettier": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz", + "integrity": "sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.7.tgz", - "integrity": "sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.12.7", - "@babel/helper-compilation-targets": "^7.12.5", - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.1", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.7", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.1", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.7", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.1", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.7", - "core-js-compat": "^3.7.0", - "semver": "^5.5.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "@babel/traverse": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.7.tgz", - "integrity": "sha512-nMWaqsQEeSvMNypswUDzjqQ+0rR6pqCtoQpsqGJC4/Khm9cISwPTSpai57F6/jDaOoEGz8yE/WxcO3PV6tKSmQ==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, + "license": "ISC", "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "@babel/types": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", - "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - }, + "license": "BSD-2-Clause", "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, + "license": "BSD-3-Clause", "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, + "license": "BSD-2-Clause", "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "dev": true + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } }, - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, + "license": "MIT", "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } + "@types/estree": "^1.0.0" } }, - "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" } }, - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "node_modules/expect-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" } }, - "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - } + "license": "MIT" }, - "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "reusify": "^1.0.4" } }, - "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "peerDependenciesMeta": { + "picomatch": { + "optional": true } } }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, + "license": "MIT", "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } + "license": "ISC" }, - "@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, - "requires": { - "type-detect": "4.0.8" - } + "license": "ISC" }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "requires": { - "@babel/types": "^7.0.0" + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "@types/babel__traverse": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", - "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { - "@babel/types": "^7.3.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "@types/eslint": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.5.tgz", - "integrity": "sha512-Dc6ar9x16BdaR3NSxSF7T4IjL9gxxViJq8RmFd+2UAyA+K6ck2W+gUwfgpG/y9TPyUuBL35109bbULpEynvltA==", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } + "license": "MIT" }, - "@types/estree": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", - "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", - "dev": true - }, - "@types/graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "@types/node": "*" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, - "@types/json-schema": { + "node_modules/https-proxy-agent": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", - "dev": true - }, - "@types/node": { - "version": "14.14.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.9.tgz", - "integrity": "sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/prettier": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz", - "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "@types/yargs": { - "version": "15.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.10.tgz", - "integrity": "sha512-z8PNtlhrj7eJNLmrAivM7rjBESG6JwC5xP3RVk12i/8HVP7Xnx/sEmERnRImyEuUaJfO942X0qMOYsoupaJbZQ==", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, - "requires": { - "@types/yargs-parser": "*" + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" } }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" } }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "@webpack-cli/info": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.1.0.tgz", - "integrity": "sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { - "envinfo": "^7.7.3" + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "@webpack-cli/serve": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.1.0.tgz", - "integrity": "sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==", - "dev": true + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "dev": true, + "license": "MIT" }, - "acorn": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", - "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", - "dev": true + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "license": "MIT", "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true } } }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } + "license": "MIT" }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "requires": { - "type-fest": "^0.11.0" - }, + "license": "MIT", "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } + "json-buffer": "3.0.1" } }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "requires": { - "color-convert": "^2.0.1" + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, + "license": "MIT", "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "license": "MIT" }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-back": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", - "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "babel-loader": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz", - "integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", - "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.14.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz", - "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001157", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.591", - "escalade": "^3.1.1", - "node-releases": "^1.1.66" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001159", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz", - "integrity": "sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js-compat": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz", - "integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==", - "dev": true, - "requires": { - "browserslist": "^4.14.6", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-to-chromium": { - "version": "1.3.603", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.603.tgz", - "integrity": "sha512-J8OHxOeJkoSLgBXfV9BHgKccgfLMHh+CoeRo6wJsi6m0k3otaxS/5vrHpMNSEYY4MISwewqanPOuhAtuE8riQQ==", - "dev": true - }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.2.tgz", - "integrity": "sha512-G28GCrglCAH6+EqMN2D+Q2wCUS1O1vVQJBn8ME2I/Api41YBe4vLWWRBOUbwDH7vwzSZdljxwTRVqnf+sm6XqQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.0.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "envinfo": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", - "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "dev": true - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - }, - "dependencies": { - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true, - "optional": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - } - } - }, - "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - } - }, - "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - } - }, - "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "optional": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } - } - }, - "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - } - }, - "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true - }, - "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - } - }, - "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - } - } - }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "jquery": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", - "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.2.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", - "domexception": "^2.0.1", - "escodegen": "^1.14.1", - "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", - "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "loader-runner": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", - "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", - "dev": true - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", - "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "optional": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/loupe": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } + "license": "MIT" }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "license": "ISC" }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, - "requires": { - "path-key": "^2.0.0" + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" } }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, + "license": "MIT", "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } + "license": "MIT" }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/nwsapi": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } + "license": "MIT" }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" } }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "requires": { - "p-try": "^2.0.0" + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "requires": { - "p-limit": "^2.0.0" - }, + "license": "MIT", "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { + "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { - "find-up": "^4.0.0" - }, + "license": "MIT", "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prettier": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.0.tgz", - "integrity": "sha512-yYerpkvseM4iKD/BXLYUkQV5aKt4tQPqaGW6EsZjzyu0r7sVZZNPJW4Y8MyKmicp6t42XUPcBVA+H6sB3gqndw==", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "callsites": "^3.0.0" }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - } - } - }, - "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" + "engines": { + "node": ">=6" } }, - "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, + "license": "MIT", "dependencies": { - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "entities": "^6.0.0" }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "requires": { - "resolve": "^1.9.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "requires": { - "regenerate": "^1.4.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } + "license": "MIT" }, - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "license": "MIT", + "engines": { + "node": ">= 14.16" } }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "requires": { - "jsesc": "~0.5.0" + "license": "MIT", + "engines": { + "node": ">=12" }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "requires": { - "lodash": "^4.17.19" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } + "license": "MIT", + "engines": { + "node": ">= 0.8.0" } }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "resolve": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", - "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, - "requires": { - "path-parse": "^1.0.6" + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "requires": { - "resolve-from": "^5.0.0" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "requires": { - "glob": "^7.1.3" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ], + "license": "MIT" }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { - "xmlchars": "^2.2.0" + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + "license": "MIT" }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true, - "requires": { - "randombytes": "^2.1.0" - } + "license": "MIT" }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "license": "MIT", + "engines": { + "node": ">=4" } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, - "requires": { - "shebang-regex": "^1.0.0" + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "signal-exit": { + "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, + "license": "ISC", "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "glob": "^7.1.3" }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz", + "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.40.0", + "@rollup/rollup-android-arm64": "4.40.0", + "@rollup/rollup-darwin-arm64": "4.40.0", + "@rollup/rollup-darwin-x64": "4.40.0", + "@rollup/rollup-freebsd-arm64": "4.40.0", + "@rollup/rollup-freebsd-x64": "4.40.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", + "@rollup/rollup-linux-arm-musleabihf": "4.40.0", + "@rollup/rollup-linux-arm64-gnu": "4.40.0", + "@rollup/rollup-linux-arm64-musl": "4.40.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-musl": "4.40.0", + "@rollup/rollup-linux-s390x-gnu": "4.40.0", + "@rollup/rollup-linux-x64-gnu": "4.40.0", + "@rollup/rollup-linux-x64-musl": "4.40.0", + "@rollup/rollup-win32-arm64-msvc": "4.40.0", + "@rollup/rollup-win32-ia32-msvc": "4.40.0", + "@rollup/rollup-win32-x64-msvc": "4.40.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "requires": { - "extend-shallow": "^3.0.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } + "license": "MIT" }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, + "license": "ISC", "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" } }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, + "license": "BSD-3-Clause", "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } + "randombytes": "^2.1.0" } }, - "string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { + "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { - "has-flag": "^4.0.0" + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "table-layout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", - "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - } + "license": "ISC" }, - "tapable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.1.1.tgz", - "integrity": "sha512-Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ==", - "dev": true + "node_modules/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", + "dev": true, + "license": "MIT" }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "terser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.0.tgz", - "integrity": "sha512-eopt1Gf7/AQyPhpygdKePTzaet31TvQxXvrf7xYUvD/d8qkCJm4SKPDzu+GHK5ZaYTn8rvttfqaZc3swK21e5g==", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "terser-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "requires": { - "jest-worker": "^26.6.1", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.8" - }, + "license": "MIT", "dependencies": { - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } + "license": "MIT" }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true, + "license": "MIT" }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "license": "MIT" }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "requires": { - "kind-of": "^3.0.2" + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, + "license": "MIT", "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true, - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } + "license": "MIT" }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", "dev": true, - "requires": { - "punycode": "^2.1.1" + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } + "license": "MIT" }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" }, - "type-check": { + "node_modules/tinyexec": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "license": "MIT" }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", "dev": true, - "requires": { - "is-typedarray": "^1.0.0" + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" } }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", "dev": true, - "requires": { - "punycode": "^2.1.0" + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", "dev": true, - "optional": true + "license": "MIT" }, - "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", - "dev": true - }, - "v8-to-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", - "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, + "license": "BSD-3-Clause", "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" } }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "node_modules/vite": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.2.tgz", + "integrity": "sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==", "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "watchpack": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.0.1.tgz", - "integrity": "sha512-vO8AKGX22ZRo6PiOFM9dC0re8IcKh8Kd/aH2zeqUc6w4/jBGlTy2P7fTC6ekT0NjVeGjgU2dGC5rNstKkeLEQg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "webpack": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.6.0.tgz", - "integrity": "sha512-SIeFuBhuheKElRbd84O35UhKc0nxlgSwtzm2ksZ0BVhRJqxVJxEguT/pYhfiR0le/pxTa1VsCp7EOYyTsa6XOA==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.45", - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^8.0.4", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.3.1", - "eslint-scope": "^5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.1.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "pkg-dir": "^4.2.0", - "schema-utils": "^3.0.0", - "tapable": "^2.0.0", - "terser-webpack-plugin": "^5.0.3", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" - } - }, - "webpack-cli": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.2.0.tgz", - "integrity": "sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==", - "dev": true, - "requires": { - "@webpack-cli/info": "^1.1.0", - "@webpack-cli/serve": "^1.1.0", - "colorette": "^1.2.1", - "command-line-usage": "^6.1.0", - "commander": "^6.2.0", - "enquirer": "^2.3.6", - "execa": "^4.1.0", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "leven": "^3.1.0", - "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^4.2.2" - }, + "license": "MIT", "dependencies": { - "commander": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", - "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", - "dev": true + "esbuild": "^0.25.0", + "fdir": "^6.4.3", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.12" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } + "less": { + "optional": true }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } + "lightningcss": { + "optional": true }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "sass": { + "optional": true }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true + "sass-embedded": { + "optional": true }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } + "stylus": { + "optional": true }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "sugarss": { + "optional": true }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } + "terser": { + "optional": true }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "tsx": { + "optional": true }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "yaml": { + "optional": true } } }, - "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", - "dev": true, - "requires": { - "lodash": "^4.17.15" + "node_modules/vite-node": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.2.tgz", + "integrity": "sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.0", + "es-module-lexer": "^1.6.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.2.tgz", + "integrity": "sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "3.1.2", + "@vitest/mocker": "3.1.2", + "@vitest/pretty-format": "^3.1.2", + "@vitest/runner": "3.1.2", + "@vitest/snapshot": "3.1.2", + "@vitest/spy": "3.1.2", + "@vitest/utils": "3.1.2", + "chai": "^5.2.0", + "debug": "^4.4.0", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.13", + "tinypool": "^1.0.2", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0", + "vite-node": "3.1.2", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.1.2", + "@vitest/ui": "3.1.2", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } } }, - "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, + "license": "MIT", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" } }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, - "requires": { - "iconv-lite": "0.4.24" + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" } }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } }, - "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" + "license": "MIT", + "engines": { + "node": ">=18" } }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", "dev": true, - "requires": { - "isexe": "^2.0.0" + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } }, - "wordwrapjs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", - "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", - "dev": true - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } }, - "xmlchars": { + "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - } - } + "dev": true, + "license": "MIT" }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "license": "MIT", + "engines": { + "node": ">=10" }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } } diff --git a/package.json b/package.json index 29edf624..71992346 100644 --- a/package.json +++ b/package.json @@ -26,24 +26,26 @@ "string-natural-compare": "^3.0.1" }, "devDependencies": { - "@babel/core": "^7.12.7", - "@babel/preset-env": "^7.12.7", - "babel-loader": "^8.2.1", - "jest": "^26.6.3", + "@rollup/plugin-terser": "^0.4.4", + "@testing-library/dom": "^10.4.0", + "@testing-library/user-event": "^14.6.1", + "eslint": "^8.57.1", + "eslint-config-prettier": "^10.1.2", "jquery": "^3.5.1", - "prettier": "^2.2.0", - "webpack": "^5.6.0", - "webpack-cli": "^4.2.0" + "jsdom": "^26.1.0", + "prettier": "^3.5.3", + "vite": "^6.3.2", + "vitest": "^3.1.2" }, "main": "src/index", "engines": { - "node": "^14.15.1" + "node": "^22.14.0" }, "scripts": { - "test": "npx jest", + "test": "vitest", + "test:watch": "vitest --watch", "build": "npx webpack", "watch": "npx webpack --watch", - "watch-test": "npx jest --watch", "preversion": "npm test && npm run build && cp dist/list.min.js docs/assets/javascripts/list.min.js && cp dist/list.min.js.map docs/assets/javascripts/list.min.js.map && git add dist && git add docs/assets/javascripts", "postversion": "git push --follow-tags origin master && cp package.json docs/_data/pkg.json && git add docs/_data/pkg.json && git commit -m \"pkg.json update\"" }, diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 00000000..fbbad754 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,28 @@ +import { defineConfig } from 'vite' +import terser from '@rollup/plugin-terser' + +export default defineConfig({ + build: { + lib: { + entry: 'src/index.js', + name: 'List', + fileName: (format) => (format === 'umd' ? 'list.js' : 'list.min.js'), + formats: ['umd'], + }, + sourcemap: true, + rollupOptions: { + output: { + entryFileNames: (chunkInfo) => (chunkInfo.name === 'list' ? 'list.js' : 'list.min.js'), + plugins: [ + terser({ + format: { + comments: /^! List.js v.*/, + }, + include: [/\.min\.js$/], + mangle: true, + }), + ], + }, + }, + }, +}) diff --git a/vitest.config.js b/vitest.config.js new file mode 100644 index 00000000..06765a96 --- /dev/null +++ b/vitest.config.js @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + environment: 'jsdom', // <-- detta är det viktiga! + globals: true, + }, +}) diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 529f6b11..00000000 --- a/webpack.config.js +++ /dev/null @@ -1,49 +0,0 @@ -const webpack = require('webpack') -const PACKAGE = require('./package.json') -const TerserPlugin = require('terser-webpack-plugin') - -module.exports = { - entry: { - list: './src/index.js', - 'list.min': './src/index.js', - }, - output: { - path: __dirname + '/dist', - filename: '[name].js', - library: 'List', - }, - devtool: 'cheap-module-source-map', - module: { - rules: [ - { - test: /\.js$/, - exclude: /(node_modules)/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env'], - }, - }, - }, - ], - }, - devServer: { - inline: true, - }, - plugins: [], - optimization: { - minimize: true, - minimizer: [ - new TerserPlugin({ - include: /\.min\.js$/, - extractComments: false, - terserOptions: { - format: { - comments: /^! List.js v.*/, - }, - mangle: true, - }, - }), - ], - }, -} From 6e5e3fb984667d4ed331075a94a6e30e38390362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Fri, 25 Apr 2025 13:21:52 +0900 Subject: [PATCH 11/41] Add eslint and fix warnings --- .eslintignore | 3 +- .eslintrc.js | 27 ++-- __test__/integration/buttons.test.js | 25 ++- __test__/integration/create.test.js | 19 ++- __test__/integration/filter.test.js | 2 +- __test__/integration/fuzzysearch.test.js | 2 +- __test__/integration/item.test.js | 1 - __test__/integration/on.test.js | 168 +++++++++++--------- __test__/integration/re-index.test.js | 2 +- __test__/integration/search.test.js | 2 +- __test__/unit/sort-buttons.test.js | 4 +- __test__/unit/sort.test.js | 3 +- __test__/unit/templater.test.js | 13 +- package-lock.json | 190 +++++++++++------------ package.json | 1 + prettier.config.js | 3 +- src/fuzzy-search.js | 5 +- src/index.js | 33 ++-- src/item.js | 15 +- src/parse.js | 2 +- src/search.js | 4 +- src/sort-buttons.js | 24 ++- src/sort.js | 18 ++- src/templater.js | 18 ++- src/utils/classes.js | 6 - src/utils/value-names.js | 6 +- 26 files changed, 318 insertions(+), 278 deletions(-) diff --git a/.eslintignore b/.eslintignore index 161ea900..552c3777 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,4 +4,5 @@ node_modules/ .vscode/ .gitignore .eslintrc.js -docs/ \ No newline at end of file +docs/ +__test__/usage \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index d1a71964..80bfb9f7 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -5,14 +5,20 @@ module.exports = { node: true, }, parserOptions: { - ecmaVersion: 5, + ecmaVersion: 2022, + sourceType: 'module', }, extends: ['eslint:recommended', 'prettier'], - plugins: [], overrides: [ { files: ['__test__/**/*.test.js'], - // valfritt: kan lägga till globals om du använder t.ex. describe, it utan import + env: { + es6: true, + }, + parserOptions: { + ecmaVersion: 2022, + sourceType: 'module', + }, globals: { describe: 'readonly', it: 'readonly', @@ -21,18 +27,19 @@ module.exports = { afterAll: 'readonly', afterEach: 'readonly', beforeEach: 'readonly', - vi: 'readonly', // om du använder Vitests `vi.fn()` osv + xit: 'readonly', + vi: 'readonly', }, }, { files: ['src/**/*.js'], - rules: { - 'no-var': 'off', - 'prefer-const': 'off', + parserOptions: { + ecmaVersion: 5, + sourceType: 'script', }, + plugins: ['es'], + extends: ['plugin:es/restrict-to-es5'], + rules: {}, }, ], - rules: { - // Egna regler (lägg till/ändra här vid behov) - }, } diff --git a/__test__/integration/buttons.test.js b/__test__/integration/buttons.test.js index fa028ca6..71fba38b 100644 --- a/__test__/integration/buttons.test.js +++ b/__test__/integration/buttons.test.js @@ -1,4 +1,3 @@ -import { describe, it, expect } from 'vitest' import { screen } from '@testing-library/dom' import userEvent from '@testing-library/user-event' @@ -19,7 +18,7 @@ describe('Button', function () {
    Jonny1986
    Jocke1985
    - `), + `) ) list = new List('parse-list', { @@ -33,26 +32,26 @@ describe('Button', function () { describe('Sort', () => { it('should trigger sortStart', async () => { - return new Promise(async (resolve) => { + return new Promise((resolve) => { list.on('sortStart', () => { resolve() }) const sortBtn = document.querySelector('#sort-name') - await userEvent.click(sortBtn) + userEvent.click(sortBtn) }) }) it('should trigger sortComplete', async () => { - return new Promise(async (resolve) => { + return new Promise((resolve) => { list.on('sortComplete', () => { resolve() }) const sortBtn = document.querySelector('#sort-name') - await userEvent.click(sortBtn) + userEvent.click(sortBtn) }) }) it('should switch sorting order when clicking multiple times', () => { - return new Promise(async (resolve) => { + return new Promise((resolve) => { const sortBtn = document.querySelector('#sort-name') var sortRun = 0 list.on('sortComplete', () => { @@ -82,7 +81,7 @@ describe('Button', function () { }) it('should sort with predefined order', () => { - return new Promise(async (resolve) => { + return new Promise((resolve) => { const sortBtn = document.querySelector('#sort-name') const sortBtnAsc = document.querySelector('#sort-name-asc') const sortBtnDesc = document.querySelector('#sort-name-desc') @@ -150,7 +149,7 @@ describe('Button', function () { }) it('buttons should change class when sorting programmatically', () => { - return new Promise(async (resolve) => { + return new Promise((resolve) => { const sortBtn = document.querySelector('#sort-name') const sortBtnAsc = document.querySelector('#sort-name-asc') const sortBtnDesc = document.querySelector('#sort-name-desc') @@ -170,22 +169,22 @@ describe('Button', function () { describe('Search', () => { it('should trigger searchStart', async () => { - return new Promise(async (resolve) => { + return new Promise((resolve) => { list.on('searchStart', () => { resolve() }) const input = screen.getByRole('textbox') - await userEvent.type(input, 'jon') + userEvent.type(input, 'jon') }) }) it('should trigger searchComplete', async () => { - return new Promise(async (resolve) => { + return new Promise((resolve) => { list.on('searchComplete', () => { resolve() }) const input = screen.getByRole('textbox') - await userEvent.type(input, 'jon') + userEvent.type(input, 'jon') }) }) }) diff --git a/__test__/integration/create.test.js b/__test__/integration/create.test.js index 505b2da8..045c1ddb 100644 --- a/__test__/integration/create.test.js +++ b/__test__/integration/create.test.js @@ -1,4 +1,3 @@ -import { describe, it, expect } from 'vitest' import $ from 'jquery' import List from '../../src/index' @@ -62,7 +61,7 @@ describe('Create', () => { listEl = $( '
    \
      \ -
      ', + ' ) $(document.body).append(listEl) list = new List( @@ -71,7 +70,7 @@ describe('Create', () => { valueNames: ['name'], item: '
    • ', }, - [{ name: 'Jonny' }], + [{ name: 'Jonny' }] ) }) afterEach(() => { @@ -106,7 +105,7 @@ describe('Create', () => { valueNames: ['name'], item: '', }, - [{ name: 'Jonny' }], + [{ name: 'Jonny' }] ) }) @@ -139,7 +138,7 @@ describe('Create', () => { return `
    • ` }, }, - [{ name: 'Jonny' }], + [{ name: 'Jonny' }] ) }) afterEach(() => { @@ -169,7 +168,7 @@ describe('Create', () => { $(document.body).append(listEl) expect(() => { - var list = new List('list', { + new List('list', { valueNames: ['name'], }) }).toThrow() @@ -194,7 +193,7 @@ describe('Create', () => { valueNames: ['name'], item: 'template-item', }, - [{ name: 'Jonny' }], + [{ name: 'Jonny' }] ) }) afterEach(() => { @@ -216,7 +215,7 @@ describe('Create', () => { describe('Asyn index with existing list', () => { it('should contain 162 items', () => { - return new Promise(async (resolve) => { + return new Promise((resolve) => { var listEl = $(`
        @@ -305,10 +304,10 @@ describe('Create', () => {
      `) $(document.body).append(listEl) - var list = new List('list', { + new List('list', { valueNames: ['name'], indexAsync: true, - parseComplete: function (list) { + parseComplete: function () { expect(listEl.find('li').length).toEqual(162) listEl.remove() resolve() diff --git a/__test__/integration/filter.test.js b/__test__/integration/filter.test.js index 9ce9eb88..369e6cab 100644 --- a/__test__/integration/filter.test.js +++ b/__test__/integration/filter.test.js @@ -65,7 +65,7 @@ describe('Filter', function () { describe('Specific items', function () { beforeEach(function () { list.show(1, 2) - var result = list.filter(function (item) { + list.filter(function (item) { return item.values().born > 1985 }) }) diff --git a/__test__/integration/fuzzysearch.test.js b/__test__/integration/fuzzysearch.test.js index f0ba9afc..f9603ce6 100644 --- a/__test__/integration/fuzzysearch.test.js +++ b/__test__/integration/fuzzysearch.test.js @@ -21,7 +21,7 @@ function fireKeyup(el) { } describe('Fuzzy Search', function () { - var list, itemHTML, pagination + var list, itemHTML beforeEach(function () { itemHTML = fixtureFuzzysearch.list(['name', 'born']) diff --git a/__test__/integration/item.test.js b/__test__/integration/item.test.js index 07131c51..0990ccc7 100644 --- a/__test__/integration/item.test.js +++ b/__test__/integration/item.test.js @@ -87,7 +87,6 @@ describe('Item', function () { expect(isVisible(item.elm, list.list)).toBe(false) }) it('should be visble, match and found but not filterd', function () { - var result = list.search('Sven') expect(item.matching(list)).toBe(true) expect(item.found).toBe(true) expect(item.filtered).toBe(false) diff --git a/__test__/integration/on.test.js b/__test__/integration/on.test.js index 4f887c63..960942b9 100644 --- a/__test__/integration/on.test.js +++ b/__test__/integration/on.test.js @@ -12,112 +12,132 @@ describe('On', function () { }) describe('Updated', function () { - it('should be triggered after search', function (done) { - list.on('updated', function (list) { - done() + it('should be triggered after search', () => { + return new Promise((resolve) => { + list.on('updated', function () { + resolve() + }) + list.search('jonny') }) - list.search('jonny') }) - it('should be triggered after sort', function (done) { - list.on('updated', function (list) { - done() + it('should be triggered after sort', () => { + return new Promise((resolve) => { + list.on('updated', function () { + resolve() + }) + list.sort('name') }) - list.sort('name') }) - it('should be triggered after filter', function (done) { - list.on('updated', function (list) { - done() - }) - list.filter(function () { - return true + it('should be triggered after filter', () => { + return new Promise((resolve) => { + list.on('updated', function () { + resolve() + }) + list.filter(function () { + return true + }) }) }) - it('should be triggered after show', function (done) { - list.on('updated', function (list) { - done() + it('should be triggered after show', () => { + return new Promise((resolve) => { + list.on('updated', function () { + resolve() + }) + list.show(1, 10) }) - list.show(1, 10) }) - it('should be triggered after add', function (done) { - list.on('updated', function (list) { - done() + it('should be triggered after add', () => { + return new Promise((resolve) => { + list.on('updated', function () { + resolve() + }) + list.add({ name: 'Hej' }) }) - list.add({ name: 'Hej' }) }) - it('should be triggered after remove', function (done) { - list.on('updated', function (list) { - done() + it('should be triggered after remove', () => { + return new Promise((resolve) => { + list.on('updated', function () { + resolve() + }) + list.remove('name', 'Jonny') }) - list.remove('name', 'Jonny') }) }) - describe('Multiple handlers', function () { - it('should be trigger both handlers', function (done) { - var done1 = false, - done2 = false, - isDone = function () { - if (done1 && done2) { - done() + describe('Multiple handlers', () => { + it('should be trigger both handlers', () => { + return new Promise((resolve) => { + var done1 = false, + done2 = false, + isDone = function () { + if (done1 && done2) { + resolve() + } } - } - list.on('updated', function (list) { - done1 = true - isDone() - }) - list.on('updated', function (list) { - done2 = true - isDone() + list.on('updated', function () { + done1 = true + isDone() + }) + list.on('updated', function () { + done2 = true + isDone() + }) + list.search('jonny') }) - list.search('jonny') }) }) describe('Search', function () { - it('should be triggered before and after search', function (done) { - var done1 = false - list.on('searchStart', function (list) { - done1 = true - }) - list.on('searchComplete', function (list) { - if (done1) { - done() - } + it('should be triggered before and after search', () => { + return new Promise((resolve) => { + var done1 = false + list.on('searchStart', function () { + done1 = true + }) + list.on('searchComplete', function () { + if (done1) { + resolve() + } + }) + list.search('jonny') }) - list.search('jonny') }) }) describe('Sort', function () { - it('should be triggered before and after sort', function (done) { - var done1 = false - list.on('sortStart', function (list) { - done1 = true - }) - list.on('sortComplete', function (list) { - if (done1) { - done() - } + it('should be triggered before and after sort', () => { + return new Promise((resolve) => { + var done1 = false + list.on('sortStart', function () { + done1 = true + }) + list.on('sortComplete', function () { + if (done1) { + resolve() + } + }) + list.sort('name') }) - list.sort('name') }) }) describe('Filter', function () { - it('should be triggered before and after filter', function (done) { - var done1 = false - list.on('filterStart', function (list) { - done1 = true - }) - list.on('filterComplete', function (list) { - if (done1) { - done() - } - }) - list.filter(function () { - return true + it('should be triggered before and after filter', () => { + return new Promise((resolve) => { + var done1 = false + list.on('filterStart', function () { + done1 = true + }) + list.on('filterComplete', function () { + if (done1) { + resolve() + } + }) + list.filter(function () { + return true + }) }) }) }) diff --git a/__test__/integration/re-index.test.js b/__test__/integration/re-index.test.js index 6bed7c97..6091ede0 100644 --- a/__test__/integration/re-index.test.js +++ b/__test__/integration/re-index.test.js @@ -2,7 +2,7 @@ const $ = require('jquery'), fixture = require('./fixtures') describe('ReIndex', function () { - var list, jonny, martina, angelica, sebastian, imma, hasse + var list beforeAll(function () { list = fixture.list(['name', 'born'], fixture.all) diff --git a/__test__/integration/search.test.js b/__test__/integration/search.test.js index b2af0e62..83fd4f5f 100755 --- a/__test__/integration/search.test.js +++ b/__test__/integration/search.test.js @@ -138,7 +138,7 @@ describe('Search', function () { }) describe('Custom search function', function () { - var customSearchFunction = function (searchString, columns) { + var customSearchFunction = function () { for (var k = 0, kl = list.items.length; k < kl; k++) { if (list.items[k].values().born > 1985) { list.items[k].found = true diff --git a/__test__/unit/sort-buttons.test.js b/__test__/unit/sort-buttons.test.js index 92a80240..0ce6c3b5 100644 --- a/__test__/unit/sort-buttons.test.js +++ b/__test__/unit/sort-buttons.test.js @@ -163,14 +163,14 @@ describe('sort listeners', () => { 'Unn', ]) }) - it('should run before and after callbacks', (done) => { + it('should run before and after callbacks', () => { const buttonAge = $(`', }, }, - fixturePagination.all + fixturePagination.all, ) pagination = $('.pagination') diff --git a/__test__/integration/parse.test.js b/__test__/integration/parse.test.js index 64c7e290..0b10568e 100644 --- a/__test__/integration/parse.test.js +++ b/__test__/integration/parse.test.js @@ -1,5 +1,5 @@ -const $ = require('jquery'), - List = require('../../src/index') +import $ from 'jquery' +import List from '../../src/index' describe('Parse', function () { describe('Parse class', function () { @@ -12,8 +12,8 @@ describe('Parse', function () {
      Jonny1986
      \
      Jocke1985
      \ \ - ' - ) + ', + ), ) list = new List('parse-list', { @@ -73,8 +73,8 @@ describe('Parse', function () { \ \ \ - ' - ) + ', + ), ) list = new List('parse-list', { diff --git a/__test__/integration/re-index.test.js b/__test__/integration/re-index.test.js index 6091ede0..968bb4fc 100644 --- a/__test__/integration/re-index.test.js +++ b/__test__/integration/re-index.test.js @@ -1,5 +1,5 @@ -const $ = require('jquery'), - fixture = require('./fixtures') +import $ from 'jquery' +import fixture from './fixtures' describe('ReIndex', function () { var list diff --git a/__test__/integration/search-filter.test.js b/__test__/integration/search-filter.test.js index e7f69b60..01f001da 100644 --- a/__test__/integration/search-filter.test.js +++ b/__test__/integration/search-filter.test.js @@ -1,4 +1,4 @@ -const fixture = require('./fixtures') +import fixture from './fixtures' describe('Search and filter', function () { var list, jonny, martina, angelica, sebastian, imma, hasse diff --git a/__test__/integration/search.test.js b/__test__/integration/search.test.js index 83fd4f5f..2a0bd7a0 100755 --- a/__test__/integration/search.test.js +++ b/__test__/integration/search.test.js @@ -1,4 +1,4 @@ -const fixture = require('./fixtures') +import fixture from './fixtures' describe('Search', function () { var list, jonny, martina, angelica, sebastian, imma, hasse diff --git a/__test__/integration/show.test.js b/__test__/integration/show.test.js index d32dcf46..f172e4d6 100644 --- a/__test__/integration/show.test.js +++ b/__test__/integration/show.test.js @@ -1,5 +1,5 @@ -const fixture = require('./fixtures') -const isVisible = require('../utils/is-visible') +import fixture from './fixtures' +import isVisible from '../utils/is-visible' describe('Show', function () { var list, a, b, c, d, e, f @@ -14,7 +14,7 @@ describe('Show', function () { { id: '4', id2: 'b' }, { id: '5', id2: 'bc' }, { id: '6', id2: 'bc' }, - ] + ], ) a = list.get('id', '1')[0] b = list.get('id', '2')[0] diff --git a/__test__/integration/sort.test.js b/__test__/integration/sort.test.js index 4856350d..607ed45b 100644 --- a/__test__/integration/sort.test.js +++ b/__test__/integration/sort.test.js @@ -1,5 +1,5 @@ -const $ = require('jquery'), - fixture = require('./fixtures') +import $ from 'jquery' +import fixture from './fixtures' describe('Sort', function () { var list, i1, i2, i3, i4, i5, i6 diff --git a/__test__/integration/trigger.test.js b/__test__/integration/trigger.test.js index 2c4fa09c..ad7af6ed 100644 --- a/__test__/integration/trigger.test.js +++ b/__test__/integration/trigger.test.js @@ -1,4 +1,4 @@ -const fixture = require('./fixtures') +import fixture from './fixtures' describe('Trigger', function () { var list diff --git a/__test__/integration/utils.get-by-class.test.js b/__test__/integration/utils.get-by-class.test.js index b3f08d95..ac337454 100644 --- a/__test__/integration/utils.get-by-class.test.js +++ b/__test__/integration/utils.get-by-class.test.js @@ -1,4 +1,4 @@ -const getByClass = require('../../src/utils/get-by-class') +import getByClass from '../../src/utils/get-by-class' describe('GetByClass', function () { var el diff --git a/__test__/utils/is-visible.js b/__test__/utils/is-visible.js index dd00b255..321b23f2 100644 --- a/__test__/utils/is-visible.js +++ b/__test__/utils/is-visible.js @@ -1,4 +1,4 @@ -module.exports = function (el, parent) { +export default function (el, parent) { if (!el) return false return el && el.parentNode == parent } From 1f6ea07804eb8b497c466cf6aa8ad667b7be9ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Sun, 27 Apr 2025 11:02:42 +0900 Subject: [PATCH 34/41] Update package.json to refer to right files --- package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 5271ce63..5dbb33d7 100644 --- a/package.json +++ b/package.json @@ -40,10 +40,11 @@ "vitest": "^3.1.2" }, "main": "dist/list.cjs.js", - "module": "dist/list.js", - "unpkg": "dist/list.umd.js", + "module": "dist/list.esm.js", + "unpkg": "dist/list.js", + "browser": "dist/list.js", "exports": { - "import": "./dist/list.js", + "import": "./dist/list.esm.js", "require": "./dist/list.cjs.js" }, "engines": { From 9e4ab7cdcbb0a203d1d76c991c2aa7f5c8364baa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Sun, 27 Apr 2025 11:22:29 +0900 Subject: [PATCH 35/41] =?UTF-8?q?Remove=20jquery=20=F0=9F=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __test__/integration/buttons.test.js | 32 +- __test__/integration/create.test.js | 116 +++--- __test__/integration/defaults.test.js | 5 +- __test__/integration/fixtures-fuzzysearch.js | 15 +- __test__/integration/fixtures-pagination.js | 15 +- __test__/integration/fixtures.js | 19 +- __test__/integration/item.test.js | 5 +- __test__/integration/pagination.test.js | 375 +++++++++---------- __test__/integration/parse.test.js | 95 ++--- __test__/integration/re-index.test.js | 5 +- __test__/integration/sort.test.js | 30 +- __test__/unit/item.test.js | 5 +- __test__/unit/sort-buttons.test.js | 60 ++- __test__/unit/sort.test.js | 7 +- __test__/unit/templater.test.js | 64 ++-- __test__/unit/utils.value-names.test.js | 16 +- package-lock.json | 8 - package.json | 1 - 18 files changed, 451 insertions(+), 422 deletions(-) diff --git a/__test__/integration/buttons.test.js b/__test__/integration/buttons.test.js index 71fba38b..8ff487e2 100644 --- a/__test__/integration/buttons.test.js +++ b/__test__/integration/buttons.test.js @@ -1,25 +1,24 @@ import { screen } from '@testing-library/dom' import userEvent from '@testing-library/user-event' - -import $ from 'jquery' import List from '../../src/index' describe('Button', function () { var list beforeEach(function () { - $('body').append( - $(`
      - - Sort name - Sort name asc - Sort name desc -
      -
      Jonny1986
      -
      Jocke1985
      -
      -
      `) - ) + const listContainer = document.createElement('div') + listContainer.id = 'parse-list' + listContainer.innerHTML = ` + + Sort name + Sort name asc + Sort name desc +
      +
      Jonny1986
      +
      Jocke1985
      +
      + ` + document.body.appendChild(listContainer) list = new List('parse-list', { valueNames: ['name', 'born'], @@ -27,7 +26,10 @@ describe('Button', function () { }) afterEach(function () { - $('#parse-list').remove() + const listElement = document.getElementById('parse-list') + if (listElement) { + listElement.remove() + } }) describe('Sort', () => { diff --git a/__test__/integration/create.test.js b/__test__/integration/create.test.js index 045c1ddb..d0c2abdc 100644 --- a/__test__/integration/create.test.js +++ b/__test__/integration/create.test.js @@ -1,18 +1,17 @@ -import $ from 'jquery' import List from '../../src/index' describe('Create', () => { describe('With HTML items', () => { let list, listEl beforeEach(function () { - listEl = $(` -
      -
        -
      • Jonny
      • -
      -
      - `) - $(document.body).append(listEl) + listEl = document.createElement('div') + listEl.id = 'list' + listEl.innerHTML = ` +
        +
      • Jonny
      • +
      + ` + document.body.appendChild(listEl) list = new List('list', { valueNames: ['name'] }) }) afterEach(() => { @@ -21,27 +20,27 @@ describe('Create', () => { it('should contain one item', () => { expect(list.items.length).toEqual(1) - expect(listEl.find('li').length).toEqual(1) + expect(listEl.querySelectorAll('li').length).toEqual(1) }) it('should contain two items', () => { list.add({ name: 'Jonas' }) expect(list.items.length).toEqual(2) - expect(listEl.find('li').length).toEqual(2) + expect(listEl.querySelectorAll('li').length).toEqual(2) }) }) describe('With and element instead of id', () => { var listEl, list beforeEach(() => { - listEl = $(` -
      -
        -
      • Jonny
      • -
      -
      - `) - $(document.body).append(listEl) + listEl = document.createElement('div') + listEl.id = 'list' + listEl.innerHTML = ` +
        +
      • Jonny
      • +
      + ` + document.body.appendChild(listEl) var el = document.getElementById('list') list = new List(el, { valueNames: ['name'] }) }) @@ -51,19 +50,17 @@ describe('Create', () => { it('should contain one item', () => { expect(list.items.length).toEqual(1) - expect(listEl.find('li').length).toEqual(1) + expect(listEl.querySelectorAll('li').length).toEqual(1) }) }) describe('Without items and with string template', () => { var listEl, list beforeEach(() => { - listEl = $( - '
      \ -
        \ -
        ' - ) - $(document.body).append(listEl) + listEl = document.createElement('div') + listEl.id = 'list' + listEl.innerHTML = '
          ' + document.body.appendChild(listEl) list = new List( 'list', { @@ -79,13 +76,13 @@ describe('Create', () => { it('should contain one item', () => { expect(list.items.length).toEqual(1) - expect(listEl.find('li').length).toEqual(1) + expect(listEl.querySelectorAll('li').length).toEqual(1) }) it('should contain two items', () => { list.add({ name: 'Jonas' }) expect(list.items.length).toEqual(2) - expect(listEl.find('li').length).toEqual(2) + expect(listEl.querySelectorAll('li').length).toEqual(2) }) }) @@ -93,12 +90,10 @@ describe('Create', () => { var listEl, list beforeEach(() => { - listEl = $(` -
          -
          -
          - `) - $(document.body).append(listEl) + listEl = document.createElement('div') + listEl.id = 'list' + listEl.innerHTML = '
          ' + document.body.appendChild(listEl) list = new List( 'list', { @@ -115,21 +110,23 @@ describe('Create', () => { it('should contain one item', () => { expect(list.items.length).toEqual(1) - expect(listEl.find('tr').length).toEqual(1) + expect(listEl.querySelectorAll('tr').length).toEqual(1) }) it('should contain two items', () => { list.add({ name: 'Jonas' }) expect(list.items.length).toEqual(2) - expect(listEl.find('tr').length).toEqual(2) + expect(listEl.querySelectorAll('tr').length).toEqual(2) }) }) describe('Without items and with template function', () => { var listEl, list beforeEach(() => { - listEl = $('
            ') - $(document.body).append(listEl) + listEl = document.createElement('div') + listEl.id = 'list' + listEl.innerHTML = '
              ' + document.body.appendChild(listEl) list = new List( 'list', { @@ -147,25 +144,27 @@ describe('Create', () => { it('should contain one item', () => { expect(list.items.length).toEqual(1) - expect(listEl.find('li').length).toEqual(1) + expect(listEl.querySelectorAll('li').length).toEqual(1) }) it('should contain two items', () => { list.add({ name: 'Jonas' }) expect(list.items.length).toEqual(2) - expect(listEl.find('li').length).toEqual(2) + expect(listEl.querySelectorAll('li').length).toEqual(2) }) it('should get values from items', () => { list.add({ name: 'Egon' }) - expect(listEl.find('li[data-template-fn-egon]').length).toEqual(1) + expect(listEl.querySelectorAll('li[data-template-fn-egon]').length).toEqual(1) }) }) describe('without items and or template', () => { it('should throw error on init', () => { - var listEl = $('
                ') - $(document.body).append(listEl) + var listEl = document.createElement('div') + listEl.id = 'list' + listEl.innerHTML = '
                  ' + document.body.appendChild(listEl) expect(() => { new List('list', { @@ -180,12 +179,16 @@ describe('Create', () => { describe('Without items and with HTML template', () => { var listEl, list, templateEl beforeEach(() => { - listEl = $('
                    ') + listEl = document.createElement('div') + listEl.id = 'list' + listEl.innerHTML = '
                      ' - templateEl = $('
                    • ') + templateEl = document.createElement('li') + templateEl.id = 'template-item' + templateEl.innerHTML = '' - $(document.body).append(listEl) - $(document.body).append(templateEl) + document.body.appendChild(listEl) + document.body.appendChild(templateEl) list = new List( 'list', @@ -203,22 +206,23 @@ describe('Create', () => { it('should contain one item', () => { expect(list.items.length).toEqual(1) - expect(listEl.find('li').length).toEqual(1) + expect(listEl.querySelectorAll('li').length).toEqual(1) }) it('should contain two items', () => { list.add({ name: 'Jonas' }) expect(list.items.length).toEqual(2) - expect(listEl.find('li').length).toEqual(2) + expect(listEl.querySelectorAll('li').length).toEqual(2) }) }) describe('Asyn index with existing list', () => { it('should contain 162 items', () => { return new Promise((resolve) => { - var listEl = $(` -
                      -
                        + var listEl = document.createElement('div') + listEl.id = 'list' + listEl.innerHTML = ` +
                        • Jonny
                        • Sven
                        • Anna
                        • Lisa
                        • Egon
                        • Frida
                        • @@ -301,14 +305,14 @@ describe('Create', () => {
                        • Imma
                        • Hasse
                        • Robert
                        • Mona
                        -
                      - `) - $(document.body).append(listEl) + ` + document.body.appendChild(listEl) + new List('list', { valueNames: ['name'], indexAsync: true, parseComplete: function () { - expect(listEl.find('li').length).toEqual(162) + expect(listEl.querySelectorAll('li').length).toEqual(162) listEl.remove() resolve() }, diff --git a/__test__/integration/defaults.test.js b/__test__/integration/defaults.test.js index e65e24ee..63a6514c 100644 --- a/__test__/integration/defaults.test.js +++ b/__test__/integration/defaults.test.js @@ -1,5 +1,4 @@ import { describe, it, expect } from 'vitest' -import $ from 'jquery' import fixture from './fixtures' describe('Defaults', function () { @@ -36,8 +35,8 @@ describe('Defaults', function () { }) it('should have the right elements', function () { - expect(list.list).toEqual($('.list')[0]) - expect(list.listContainer).toEqual($('#list')[0]) + expect(list.list).toEqual(document.querySelector('.list')) + expect(list.listContainer).toEqual(document.getElementById('list')) }) it('should have all default methods', function () { diff --git a/__test__/integration/fixtures-fuzzysearch.js b/__test__/integration/fixtures-fuzzysearch.js index b016c554..cafa16eb 100644 --- a/__test__/integration/fixtures-fuzzysearch.js +++ b/__test__/integration/fixtures-fuzzysearch.js @@ -1,9 +1,9 @@ -import $ from 'jquery' - var fixtureFuzzysearch = { list: function (valueNames) { - var listHtml = $(''), - item = '' + var listHtml = document.createElement('div') + listHtml.id = 'list-fuzzy-search' + listHtml.innerHTML = '
                        ' + var item = '' item = '
                      • ' for (var i = 0; i < valueNames.length; i++) { @@ -11,12 +11,15 @@ var fixtureFuzzysearch = { } item += '
                      • ' - $(document.body).append(listHtml) + document.body.appendChild(listHtml) return item }, removeList: function () { - $('#list-fuzzy-search').remove() + const listElement = document.getElementById('list-fuzzy-search') + if (listElement) { + listElement.remove() + } }, i1: { name: 'Guybrush Threepwood' }, i2: { name: 'Manny Calavera' }, diff --git a/__test__/integration/fixtures-pagination.js b/__test__/integration/fixtures-pagination.js index f7b633f7..a51fbcfe 100644 --- a/__test__/integration/fixtures-pagination.js +++ b/__test__/integration/fixtures-pagination.js @@ -1,9 +1,9 @@ -import $ from 'jquery' - var fixturePagination = { list: function (valueNames) { - var listHtml = $('
                            '), - item = '' + var listHtml = document.createElement('div') + listHtml.id = 'list-pagination' + listHtml.innerHTML = '
                                ' + var item = '' item = '
                              • ' for (var i = 0; i < valueNames.length; i++) { @@ -11,12 +11,15 @@ var fixturePagination = { } item += '
                              • ' - $(document.body).append(listHtml) + document.body.appendChild(listHtml) return item }, removeList: function () { - $('#list-pagination').remove() + const listElement = document.getElementById('list-pagination') + if (listElement) { + listElement.remove() + } }, jonny: { name: 'Jonny Strömberg', diff --git a/__test__/integration/fixtures.js b/__test__/integration/fixtures.js index 38afc7de..424eba66 100644 --- a/__test__/integration/fixtures.js +++ b/__test__/integration/fixtures.js @@ -1,18 +1,20 @@ -import $ from 'jquery' import List from '../../src/index' var fixture = { list: function (valueNames, items) { - var listHtml = $('
                                  '), - item = '' + var listHtml = document.createElement('div') + listHtml.id = 'list' + var ul = document.createElement('ul') + ul.className = 'list' + listHtml.appendChild(ul) - item = '
                                • ' + var item = '
                                • ' for (var i = 0; i < valueNames.length; i++) { item += '' } item += '
                                • ' - $(document.body).append(listHtml) + document.body.appendChild(listHtml) items = items || [] @@ -22,11 +24,14 @@ var fixture = { valueNames: valueNames, item: item, }, - items, + items ) }, removeList: function () { - $('#list').remove() + var list = document.getElementById('list') + if (list) { + list.remove() + } }, jonny: { name: 'Jonny Strömberg', diff --git a/__test__/integration/item.test.js b/__test__/integration/item.test.js index 460d0be6..243ac13b 100644 --- a/__test__/integration/item.test.js +++ b/__test__/integration/item.test.js @@ -1,4 +1,3 @@ -import $ from 'jquery' import fixture from './fixtures' import isVisible from '../utils/is-visible' @@ -14,7 +13,7 @@ describe('Item', function () { born: '1986', doin: 'Living the dream', }, - ], + ] ) item = list.get('name', 'Jonny')[0] }) @@ -36,7 +35,7 @@ describe('Item', function () { }) it('should have the right elements', function () { - expect(item.elm).toEqual($('#list li')[0]) + expect(item.elm).toEqual(document.querySelector('#list li')) }) it('should have all default methods', function () { diff --git a/__test__/integration/pagination.test.js b/__test__/integration/pagination.test.js index d29b858a..4e7581b0 100644 --- a/__test__/integration/pagination.test.js +++ b/__test__/integration/pagination.test.js @@ -1,4 +1,3 @@ -import $ from 'jquery' import fixturePagination from './fixtures-pagination' import List from '../../src/index' @@ -16,10 +15,10 @@ describe('Pagination', function () { page: 2, pagination: true, }, - fixturePagination.all, + fixturePagination.all ) - pagination = $('.pagination') + pagination = document.querySelector('.pagination') }) afterAll(function () { @@ -27,72 +26,72 @@ describe('Pagination', function () { }) it('should have default settings', function () { - expect(pagination.find('a').length).toEqual(4) - expect(pagination.find('a').get(0).innerHTML).toEqual('1') - expect(pagination.find('a').get(1).innerHTML).toEqual('2') - expect(pagination.find('a').get(2).innerHTML).toEqual('3') - expect(pagination.find('a').get(3).innerHTML).toEqual('...') - expect(pagination.find('a').get(4)).toEqual(undefined) + expect(pagination.querySelectorAll('a').length).toEqual(4) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('1') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('2') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('3') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[4]).toEqual(undefined) }) it('should show same pages for show(7,2) and show(8,2)', function () { list.show(7, 2) - expect(pagination.find('a').length).toEqual(7) - expect(pagination.find('a').get(0).innerHTML).toEqual('...') - expect(pagination.find('a').get(1).innerHTML).toEqual('2') - expect(pagination.find('a').get(2).innerHTML).toEqual('3') - expect(pagination.find('a').get(3).innerHTML).toEqual('4') - expect(pagination.find('a').get(4).innerHTML).toEqual('5') - expect(pagination.find('a').get(5).innerHTML).toEqual('6') - expect(pagination.find('a').get(6).innerHTML).toEqual('...') - expect(pagination.find('a').get(7)).toEqual(undefined) - expect($(pagination.find('li').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(3)).hasClass('active')).toEqual(true) - expect($(pagination.find('li').get(4)).hasClass('active')).toEqual(false) + expect(pagination.querySelectorAll('a').length).toEqual(7) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('2') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('3') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('4') + expect(pagination.querySelectorAll('a')[4].innerHTML).toEqual('5') + expect(pagination.querySelectorAll('a')[5].innerHTML).toEqual('6') + expect(pagination.querySelectorAll('a')[6].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[7]).toEqual(undefined) + expect(pagination.querySelectorAll('li')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[3].classList.contains('active')).toEqual(true) + expect(pagination.querySelectorAll('li')[4].classList.contains('active')).toEqual(false) }) it('should show same pages for show(7,2) and show(8,2)', function () { list.show(8, 2) - expect(pagination.find('a').length).toEqual(7) - expect(pagination.find('a').get(0).innerHTML).toEqual('...') - expect(pagination.find('a').get(1).innerHTML).toEqual('2') - expect(pagination.find('a').get(2).innerHTML).toEqual('3') - expect(pagination.find('a').get(3).innerHTML).toEqual('4') - expect(pagination.find('a').get(4).innerHTML).toEqual('5') - expect(pagination.find('a').get(5).innerHTML).toEqual('6') - expect(pagination.find('a').get(6).innerHTML).toEqual('...') - expect(pagination.find('a').get(7)).toEqual(undefined) - expect($(pagination.find('li').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(3)).hasClass('active')).toEqual(true) - expect($(pagination.find('li').get(4)).hasClass('active')).toEqual(false) + expect(pagination.querySelectorAll('a').length).toEqual(7) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('2') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('3') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('4') + expect(pagination.querySelectorAll('a')[4].innerHTML).toEqual('5') + expect(pagination.querySelectorAll('a')[5].innerHTML).toEqual('6') + expect(pagination.querySelectorAll('a')[6].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[7]).toEqual(undefined) + expect(pagination.querySelectorAll('li')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[3].classList.contains('active')).toEqual(true) + expect(pagination.querySelectorAll('li')[4].classList.contains('active')).toEqual(false) }) it('should test show(14,2)', function () { list.show(14, 2) - expect(pagination.find('a').length).toEqual(6) - expect(pagination.find('a').get(0).innerHTML).toEqual('...') - expect(pagination.find('a').get(1).innerHTML).toEqual('5') - expect(pagination.find('a').get(2).innerHTML).toEqual('6') - expect(pagination.find('a').get(3).innerHTML).toEqual('7') - expect(pagination.find('a').get(4).innerHTML).toEqual('8') - expect(pagination.find('a').get(5).innerHTML).toEqual('9') - expect(pagination.find('a').get(6)).toEqual(undefined) - expect($(pagination.find('li').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(3)).hasClass('active')).toEqual(true) - expect($(pagination.find('li').get(4)).hasClass('active')).toEqual(false) + expect(pagination.querySelectorAll('a').length).toEqual(6) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('5') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('6') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('7') + expect(pagination.querySelectorAll('a')[4].innerHTML).toEqual('8') + expect(pagination.querySelectorAll('a')[5].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('a')[6]).toEqual(undefined) + expect(pagination.querySelectorAll('li')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[3].classList.contains('active')).toEqual(true) + expect(pagination.querySelectorAll('li')[4].classList.contains('active')).toEqual(false) }) it('should show last page with show(17,2)', function () { list.show(17, 2) - expect(pagination.find('a').length).toEqual(4) - expect(pagination.find('a').get(0).innerHTML).toEqual('...') - expect(pagination.find('a').get(1).innerHTML).toEqual('7') - expect(pagination.find('a').get(2).innerHTML).toEqual('8') - expect(pagination.find('a').get(3).innerHTML).toEqual('9') - expect(pagination.find('a').get(4)).toEqual(undefined) - expect($(pagination.find('li').get(1)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(3)).hasClass('active')).toEqual(true) + expect(pagination.querySelectorAll('a').length).toEqual(4) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('7') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('8') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('a')[4]).toEqual(undefined) + expect(pagination.querySelectorAll('li')[1].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[3].classList.contains('active')).toEqual(true) }) it('should handle page = 0', function () { @@ -120,10 +119,10 @@ describe('Pagination', function () { outerWindow: 1, }, }, - fixturePagination.all, + fixturePagination.all ) - pagination = $('.pagination') + pagination = document.querySelector('.pagination') }) afterAll(function () { @@ -131,56 +130,56 @@ describe('Pagination', function () { }) it('should have default settings', function () { - expect(pagination.find('a').length).toEqual(4) - expect(pagination.find('a').get(0).innerHTML).toEqual('1') - expect(pagination.find('a').get(1).innerHTML).toEqual('2') - expect(pagination.find('a').get(2).innerHTML).toEqual('...') - expect(pagination.find('a').get(3).innerHTML).toEqual('9') - expect(pagination.find('a').get(4)).toEqual(undefined) + expect(pagination.querySelectorAll('a').length).toEqual(4) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('1') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('2') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('a')[4]).toEqual(undefined) }) it('should test show(7,2)', function () { list.show(7, 2) - expect(pagination.find('a').length).toEqual(7) - expect(pagination.find('a').get(0).innerHTML).toEqual('1') - expect(pagination.find('a').get(1).innerHTML).toEqual('...') - expect(pagination.find('a').get(2).innerHTML).toEqual('3') - expect(pagination.find('a').get(3).innerHTML).toEqual('4') - expect(pagination.find('a').get(4).innerHTML).toEqual('5') - expect(pagination.find('a').get(5).innerHTML).toEqual('...') - expect(pagination.find('a').get(6).innerHTML).toEqual('9') - expect(pagination.find('a').get(7)).toEqual(undefined) - expect($(pagination.find('li').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(3)).hasClass('active')).toEqual(true) - expect($(pagination.find('li').get(4)).hasClass('active')).toEqual(false) + expect(pagination.querySelectorAll('a').length).toEqual(7) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('1') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('3') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('4') + expect(pagination.querySelectorAll('a')[4].innerHTML).toEqual('5') + expect(pagination.querySelectorAll('a')[5].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[6].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('a')[7]).toEqual(undefined) + expect(pagination.querySelectorAll('li')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[3].classList.contains('active')).toEqual(true) + expect(pagination.querySelectorAll('li')[4].classList.contains('active')).toEqual(false) }) it('should test show(14,2)', function () { list.show(14, 2) - expect(pagination.find('a').length).toEqual(6) - expect(pagination.find('a').get(0).innerHTML).toEqual('1') - expect(pagination.find('a').get(1).innerHTML).toEqual('...') - expect(pagination.find('a').get(2).innerHTML).toEqual('6') - expect(pagination.find('a').get(3).innerHTML).toEqual('7') - expect(pagination.find('a').get(4).innerHTML).toEqual('8') - expect(pagination.find('a').get(5).innerHTML).toEqual('9') - expect(pagination.find('a').get(6)).toEqual(undefined) - expect($(pagination.find('li').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(3)).hasClass('active')).toEqual(true) - expect($(pagination.find('li').get(4)).hasClass('active')).toEqual(false) + expect(pagination.querySelectorAll('a').length).toEqual(6) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('1') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('6') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('7') + expect(pagination.querySelectorAll('a')[4].innerHTML).toEqual('8') + expect(pagination.querySelectorAll('a')[5].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('a')[6]).toEqual(undefined) + expect(pagination.querySelectorAll('li')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[3].classList.contains('active')).toEqual(true) + expect(pagination.querySelectorAll('li')[4].classList.contains('active')).toEqual(false) }) it('should show last page with show(17,2)', function () { list.show(17, 2) - expect(pagination.find('a').length).toEqual(4) - expect(pagination.find('a').get(0).innerHTML).toEqual('1') - expect(pagination.find('a').get(1).innerHTML).toEqual('...') - expect(pagination.find('a').get(2).innerHTML).toEqual('8') - expect(pagination.find('a').get(3).innerHTML).toEqual('9') - expect(pagination.find('a').get(4)).toEqual(undefined) - expect($(pagination.find('li').get(1)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(3)).hasClass('active')).toEqual(true) + expect(pagination.querySelectorAll('a').length).toEqual(4) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('1') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('8') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('a')[4]).toEqual(undefined) + expect(pagination.querySelectorAll('li')[1].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[3].classList.contains('active')).toEqual(true) }) }) @@ -202,10 +201,10 @@ describe('Pagination', function () { right: 1, }, }, - fixturePagination.all, + fixturePagination.all ) - pagination = $('.pagination') + pagination = document.querySelector('.pagination') }) afterAll(function () { @@ -213,58 +212,58 @@ describe('Pagination', function () { }) it('should have default settings', function () { - expect(pagination.find('a').length).toEqual(4) - expect(pagination.find('a').get(0).innerHTML).toEqual('1') - expect(pagination.find('a').get(1).innerHTML).toEqual('2') - expect(pagination.find('a').get(2).innerHTML).toEqual('...') - expect(pagination.find('a').get(3).innerHTML).toEqual('9') - expect(pagination.find('a').get(4)).toEqual(undefined) + expect(pagination.querySelectorAll('a').length).toEqual(4) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('1') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('2') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('a')[4]).toEqual(undefined) }) it('should test show(7,2)', function () { list.show(7, 2) - expect(pagination.find('a').length).toEqual(7) - expect(pagination.find('a').get(0).innerHTML).toEqual('1') - expect(pagination.find('a').get(1).innerHTML).toEqual('2') - expect(pagination.find('a').get(2).innerHTML).toEqual('3') - expect(pagination.find('a').get(3).innerHTML).toEqual('4') - expect(pagination.find('a').get(4).innerHTML).toEqual('5') - expect(pagination.find('a').get(5).innerHTML).toEqual('...') - expect(pagination.find('a').get(6).innerHTML).toEqual('9') - expect(pagination.find('a').get(7)).toEqual(undefined) - expect($(pagination.find('li').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(3)).hasClass('active')).toEqual(true) - expect($(pagination.find('li').get(4)).hasClass('active')).toEqual(false) + expect(pagination.querySelectorAll('a').length).toEqual(7) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('1') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('2') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('3') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('4') + expect(pagination.querySelectorAll('a')[4].innerHTML).toEqual('5') + expect(pagination.querySelectorAll('a')[5].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[6].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('a')[7]).toEqual(undefined) + expect(pagination.querySelectorAll('li')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[3].classList.contains('active')).toEqual(true) + expect(pagination.querySelectorAll('li')[4].classList.contains('active')).toEqual(false) }) it('should test show(12,2)', function () { list.show(12, 2) - expect(pagination.find('a').length).toEqual(8) - expect(pagination.find('a').get(0).innerHTML).toEqual('1') - expect(pagination.find('a').get(1).innerHTML).toEqual('2') - expect(pagination.find('a').get(2).innerHTML).toEqual('...') - expect(pagination.find('a').get(3).innerHTML).toEqual('5') - expect(pagination.find('a').get(4).innerHTML).toEqual('6') - expect(pagination.find('a').get(5).innerHTML).toEqual('7') - expect(pagination.find('a').get(6).innerHTML).toEqual('...') - expect(pagination.find('a').get(7).innerHTML).toEqual('9') - expect(pagination.find('a').get(8)).toEqual(undefined) - expect($(pagination.find('li').get(3)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(4)).hasClass('active')).toEqual(true) - expect($(pagination.find('li').get(5)).hasClass('active')).toEqual(false) + expect(pagination.querySelectorAll('a').length).toEqual(8) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('1') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('2') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('5') + expect(pagination.querySelectorAll('a')[4].innerHTML).toEqual('6') + expect(pagination.querySelectorAll('a')[5].innerHTML).toEqual('7') + expect(pagination.querySelectorAll('a')[6].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[7].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('a')[8]).toEqual(undefined) + expect(pagination.querySelectorAll('li')[3].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[4].classList.contains('active')).toEqual(true) + expect(pagination.querySelectorAll('li')[5].classList.contains('active')).toEqual(false) }) it('should show last page with show(17,2)', function () { list.show(17, 2) - expect(pagination.find('a').length).toEqual(5) - expect(pagination.find('a').get(0).innerHTML).toEqual('1') - expect(pagination.find('a').get(1).innerHTML).toEqual('2') - expect(pagination.find('a').get(2).innerHTML).toEqual('...') - expect(pagination.find('a').get(3).innerHTML).toEqual('8') - expect(pagination.find('a').get(4).innerHTML).toEqual('9') - expect(pagination.find('a').get(5)).toEqual(undefined) - expect($(pagination.find('li').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(3)).hasClass('active')).toEqual(false) - expect($(pagination.find('li').get(4)).hasClass('active')).toEqual(true) + expect(pagination.querySelectorAll('a').length).toEqual(5) + expect(pagination.querySelectorAll('a')[0].innerHTML).toEqual('1') + expect(pagination.querySelectorAll('a')[1].innerHTML).toEqual('2') + expect(pagination.querySelectorAll('a')[2].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('a')[3].innerHTML).toEqual('8') + expect(pagination.querySelectorAll('a')[4].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('a')[5]).toEqual(undefined) + expect(pagination.querySelectorAll('li')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[3].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('li')[4].classList.contains('active')).toEqual(true) }) }) @@ -283,10 +282,10 @@ describe('Pagination', function () { item: '', }, }, - fixturePagination.all, + fixturePagination.all ) - pagination = $('.pagination') + pagination = document.querySelector('.pagination') }) afterAll(function () { @@ -294,72 +293,72 @@ describe('Pagination', function () { }) it('should have default settings', function () { - expect(pagination.find('span').length).toEqual(4) - expect(pagination.find('span').get(0).innerHTML).toEqual('1') - expect(pagination.find('span').get(1).innerHTML).toEqual('2') - expect(pagination.find('span').get(2).innerHTML).toEqual('3') - expect(pagination.find('span').get(3).innerHTML).toEqual('...') - expect(pagination.find('span').get(4)).toEqual(undefined) + expect(pagination.querySelectorAll('span').length).toEqual(4) + expect(pagination.querySelectorAll('span')[0].innerHTML).toEqual('1') + expect(pagination.querySelectorAll('span')[1].innerHTML).toEqual('2') + expect(pagination.querySelectorAll('span')[2].innerHTML).toEqual('3') + expect(pagination.querySelectorAll('span')[3].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('span')[4]).toEqual(undefined) }) it('should show same pages for show(7,2) and show(8,2)', function () { list.show(7, 2) - expect(pagination.find('span').length).toEqual(7) - expect(pagination.find('span').get(0).innerHTML).toEqual('...') - expect(pagination.find('span').get(1).innerHTML).toEqual('2') - expect(pagination.find('span').get(2).innerHTML).toEqual('3') - expect(pagination.find('span').get(3).innerHTML).toEqual('4') - expect(pagination.find('span').get(4).innerHTML).toEqual('5') - expect(pagination.find('span').get(5).innerHTML).toEqual('6') - expect(pagination.find('span').get(6).innerHTML).toEqual('...') - expect(pagination.find('span').get(7)).toEqual(undefined) - expect($(pagination.find('button').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('button').get(3)).hasClass('active')).toEqual(true) - expect($(pagination.find('button').get(4)).hasClass('active')).toEqual(false) + expect(pagination.querySelectorAll('span').length).toEqual(7) + expect(pagination.querySelectorAll('span')[0].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('span')[1].innerHTML).toEqual('2') + expect(pagination.querySelectorAll('span')[2].innerHTML).toEqual('3') + expect(pagination.querySelectorAll('span')[3].innerHTML).toEqual('4') + expect(pagination.querySelectorAll('span')[4].innerHTML).toEqual('5') + expect(pagination.querySelectorAll('span')[5].innerHTML).toEqual('6') + expect(pagination.querySelectorAll('span')[6].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('span')[7]).toEqual(undefined) + expect(pagination.querySelectorAll('button')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('button')[3].classList.contains('active')).toEqual(true) + expect(pagination.querySelectorAll('button')[4].classList.contains('active')).toEqual(false) }) it('should show same pages for show(7,2) and show(8,2)', function () { list.show(8, 2) - expect(pagination.find('span').length).toEqual(7) - expect(pagination.find('span').get(0).innerHTML).toEqual('...') - expect(pagination.find('span').get(1).innerHTML).toEqual('2') - expect(pagination.find('span').get(2).innerHTML).toEqual('3') - expect(pagination.find('span').get(3).innerHTML).toEqual('4') - expect(pagination.find('span').get(4).innerHTML).toEqual('5') - expect(pagination.find('span').get(5).innerHTML).toEqual('6') - expect(pagination.find('span').get(6).innerHTML).toEqual('...') - expect(pagination.find('span').get(7)).toEqual(undefined) - expect($(pagination.find('button').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('button').get(3)).hasClass('active')).toEqual(true) - expect($(pagination.find('button').get(4)).hasClass('active')).toEqual(false) + expect(pagination.querySelectorAll('span').length).toEqual(7) + expect(pagination.querySelectorAll('span')[0].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('span')[1].innerHTML).toEqual('2') + expect(pagination.querySelectorAll('span')[2].innerHTML).toEqual('3') + expect(pagination.querySelectorAll('span')[3].innerHTML).toEqual('4') + expect(pagination.querySelectorAll('span')[4].innerHTML).toEqual('5') + expect(pagination.querySelectorAll('span')[5].innerHTML).toEqual('6') + expect(pagination.querySelectorAll('span')[6].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('span')[7]).toEqual(undefined) + expect(pagination.querySelectorAll('button')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('button')[3].classList.contains('active')).toEqual(true) + expect(pagination.querySelectorAll('button')[4].classList.contains('active')).toEqual(false) }) it('should test show(14,2)', function () { list.show(14, 2) - expect(pagination.find('span').length).toEqual(6) - expect(pagination.find('span').get(0).innerHTML).toEqual('...') - expect(pagination.find('span').get(1).innerHTML).toEqual('5') - expect(pagination.find('span').get(2).innerHTML).toEqual('6') - expect(pagination.find('span').get(3).innerHTML).toEqual('7') - expect(pagination.find('span').get(4).innerHTML).toEqual('8') - expect(pagination.find('span').get(5).innerHTML).toEqual('9') - expect(pagination.find('span').get(6)).toEqual(undefined) - expect($(pagination.find('button').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('button').get(3)).hasClass('active')).toEqual(true) - expect($(pagination.find('button').get(4)).hasClass('active')).toEqual(false) + expect(pagination.querySelectorAll('span').length).toEqual(6) + expect(pagination.querySelectorAll('span')[0].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('span')[1].innerHTML).toEqual('5') + expect(pagination.querySelectorAll('span')[2].innerHTML).toEqual('6') + expect(pagination.querySelectorAll('span')[3].innerHTML).toEqual('7') + expect(pagination.querySelectorAll('span')[4].innerHTML).toEqual('8') + expect(pagination.querySelectorAll('span')[5].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('span')[6]).toEqual(undefined) + expect(pagination.querySelectorAll('button')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('button')[3].classList.contains('active')).toEqual(true) + expect(pagination.querySelectorAll('button')[4].classList.contains('active')).toEqual(false) }) it('should show last page with show(17,2)', function () { list.show(17, 2) - expect(pagination.find('span').length).toEqual(4) - expect(pagination.find('span').get(0).innerHTML).toEqual('...') - expect(pagination.find('span').get(1).innerHTML).toEqual('7') - expect(pagination.find('span').get(2).innerHTML).toEqual('8') - expect(pagination.find('span').get(3).innerHTML).toEqual('9') - expect(pagination.find('span').get(4)).toEqual(undefined) - expect($(pagination.find('button').get(1)).hasClass('active')).toEqual(false) - expect($(pagination.find('button').get(2)).hasClass('active')).toEqual(false) - expect($(pagination.find('button').get(3)).hasClass('active')).toEqual(true) + expect(pagination.querySelectorAll('span').length).toEqual(4) + expect(pagination.querySelectorAll('span')[0].innerHTML).toEqual('...') + expect(pagination.querySelectorAll('span')[1].innerHTML).toEqual('7') + expect(pagination.querySelectorAll('span')[2].innerHTML).toEqual('8') + expect(pagination.querySelectorAll('span')[3].innerHTML).toEqual('9') + expect(pagination.querySelectorAll('span')[4]).toEqual(undefined) + expect(pagination.querySelectorAll('button')[1].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('button')[2].classList.contains('active')).toEqual(false) + expect(pagination.querySelectorAll('button')[3].classList.contains('active')).toEqual(true) }) it('should handle page = 0', function () { diff --git a/__test__/integration/parse.test.js b/__test__/integration/parse.test.js index 0b10568e..41199036 100644 --- a/__test__/integration/parse.test.js +++ b/__test__/integration/parse.test.js @@ -1,20 +1,18 @@ -import $ from 'jquery' import List from '../../src/index' describe('Parse', function () { describe('Parse class', function () { var list beforeEach(function () { - $('body').append( - $( - '
                                  \ -
                                  \ -
                                  Jonny1986
                                  \ -
                                  Jocke1985
                                  \ -
                                  \ -
                                  ', - ), - ) + const div = document.createElement('div') + div.id = 'parse-list' + div.innerHTML = ` +
                                  +
                                  Jonny1986
                                  +
                                  Jocke1985
                                  +
                                  + ` + document.body.appendChild(div) list = new List('parse-list', { valueNames: ['name', 'born'], @@ -22,7 +20,10 @@ describe('Parse', function () { }) afterEach(function () { - $('#parse-list').remove() + const element = document.getElementById('parse-list') + if (element) { + element.remove() + } }) it('should have two items', function () { @@ -38,10 +39,11 @@ describe('Parse', function () { expect(list.items[2].values().name).toEqual('Sven') expect(list.items[0].values().born).toEqual('1986') expect(list.items[2].values().born).toEqual(1950) - var el = $($('#parse-list').find('.list div')[2]) - expect(el.find('span').length).toEqual(2) - expect(el.find('span.name').text()).toEqual('Sven') - expect(el.find('span.born').text()).toEqual('1950') + const listDiv = document.querySelector('#parse-list .list') + const el = listDiv.children[2] + expect(el.querySelectorAll('span').length).toEqual(2) + expect(el.querySelector('.name').textContent).toEqual('Sven') + expect(el.querySelector('.born').textContent).toEqual('1950') }) it('should parsed value always be string while added could be number', function () { list.add({ name: 'Sven', born: 1950 }) @@ -56,26 +58,25 @@ describe('Parse', function () { var list beforeEach(function () { - $('body').append( - $( - '
                                  \ -
                                  \ -
                                  \ - Jonny\ - 1986\ - \ - \ -
                                  \ -
                                  \ - Jocke\ - 1985\ - \ - \ -
                                  \ -
                                  \ -
                                  ', - ), - ) + const div = document.createElement('div') + div.id = 'parse-list' + div.innerHTML = ` +
                                  +
                                  + Jonny + 1986 + + +
                                  +
                                  + Jocke + 1985 + + +
                                  +
                                  + ` + document.body.appendChild(div) list = new List('parse-list', { valueNames: [ @@ -91,7 +92,10 @@ describe('Parse', function () { }) afterEach(function () { - $('#parse-list').remove() + const element = document.getElementById('parse-list') + if (element) { + element.remove() + } }) it('should get values from class, data, src, value and child els data-attribute', function () { @@ -123,14 +127,15 @@ describe('Parse', function () { expect(sven.link).toEqual('localhost') expect(sven.timestamp).toEqual('1337') expect(sven.foo).toEqual('hej') - var el = $($('#parse-list').find('.list div')[2]) - expect(el.data('id')).toEqual(4) - expect(el.find('.name').text()).toEqual('Sven') - expect(el.find('.born').text()).toEqual('1950') - expect(el.find('.image').attr('src')).toEqual('usage/rey.jpeg') - expect(el.find('.link').attr('href')).toEqual('localhost') - expect(el.find('.timestamp').data('timestamp')).toEqual(1337) - expect(el.find('.foo').val()).toEqual('hej') + const listDiv = document.querySelector('#parse-list .list') + const el = listDiv.children[2] + expect(el.dataset.id).toEqual('4') + expect(el.querySelector('.name').textContent).toEqual('Sven') + expect(el.querySelector('.born').textContent).toEqual('1950') + expect(el.querySelector('.image').getAttribute('src')).toEqual('usage/rey.jpeg') + expect(el.querySelector('.link').getAttribute('href')).toEqual('localhost') + expect(el.querySelector('.timestamp').dataset.timestamp).toEqual('1337') + expect(el.querySelector('.foo').value).toEqual('hej') }) }) }) diff --git a/__test__/integration/re-index.test.js b/__test__/integration/re-index.test.js index 968bb4fc..9e05af2b 100644 --- a/__test__/integration/re-index.test.js +++ b/__test__/integration/re-index.test.js @@ -1,4 +1,3 @@ -import $ from 'jquery' import fixture from './fixtures' describe('ReIndex', function () { @@ -24,9 +23,9 @@ describe('ReIndex', function () { { name: 'Imma Grafström', born: '1953' }, { name: 'Hasse Strömberg', born: '1955' }, ]) - var newHtml = '
                                • Sven2013' + let newHtml = '
                                • Sven2013' newHtml = newHtml + '
                                • Anna3043' - $(list.list).html(newHtml) + list.list.innerHTML = newHtml list.reIndex() expect(list.toJSON()).toEqual([ { name: 'Sven', born: '2013' }, diff --git a/__test__/integration/sort.test.js b/__test__/integration/sort.test.js index 607ed45b..b4be8e5d 100644 --- a/__test__/integration/sort.test.js +++ b/__test__/integration/sort.test.js @@ -1,4 +1,3 @@ -import $ from 'jquery' import fixture from './fixtures' describe('Sort', function () { @@ -14,7 +13,7 @@ describe('Sort', function () { { id: '4', val: '' }, { id: '5', val: '' }, { id: '6', val: '' }, - ], + ] ) i1 = list.get('id', '1')[0] i2 = list.get('id', '2')[0] @@ -313,10 +312,11 @@ describe('Sort', function () { i6.values({ val: "" }) list.sort('val', { sortFunction: function (itemA, itemB, options) { - return list.utils.naturalSort( - $(itemA.values()[options.valueName]).val(), - $(itemB.values()[options.valueName]).val(), - ) + const tempA = document.createElement('div') + const tempB = document.createElement('div') + tempA.innerHTML = itemA.values()[options.valueName] + tempB.innerHTML = itemB.values()[options.valueName] + return list.utils.naturalSort(tempA.querySelector('input').value, tempB.querySelector('input').value) }, }) expect(list.items[0].values().val).toBe("") @@ -328,10 +328,11 @@ describe('Sort', function () { }) it('should use default custom sort function', function () { list.sortFunction = function (itemA, itemB, options) { - return list.utils.naturalSort( - $(itemA.values()[options.valueName]).val(), - $(itemB.values()[options.valueName]).val(), - ) + const tempA = document.createElement('div') + const tempB = document.createElement('div') + tempA.innerHTML = itemA.values()[options.valueName] + tempB.innerHTML = itemB.values()[options.valueName] + return list.utils.naturalSort(tempA.querySelector('input').value, tempB.querySelector('input').value) } i1.values({ val: "" }) i2.values({ val: "" }) @@ -349,10 +350,11 @@ describe('Sort', function () { }) it('should use default custom sort function with order desc', function () { list.sortFunction = function (itemA, itemB, options) { - return list.utils.naturalSort( - $(itemA.values()[options.valueName]).val(), - $(itemB.values()[options.valueName]).val(), - ) + const tempA = document.createElement('div') + const tempB = document.createElement('div') + tempA.innerHTML = itemA.values()[options.valueName] + tempB.innerHTML = itemB.values()[options.valueName] + return list.utils.naturalSort(tempA.querySelector('input').value, tempB.querySelector('input').value) } i1.values({ val: "" }) i2.values({ val: "" }) diff --git a/__test__/unit/item.test.js b/__test__/unit/item.test.js index 255d7df1..35a81f4a 100644 --- a/__test__/unit/item.test.js +++ b/__test__/unit/item.test.js @@ -1,7 +1,5 @@ import { describe, it, expect } from 'vitest' -import $ from 'jquery' - import Item from '../../src/item' import templater from '../../src/templater' @@ -51,7 +49,8 @@ describe('item', function () { }) it('should set values on item with element', () => { const template = templater.getTemplate(templateParams) - const element = $('
                                  Jonny
                                  ')[0] + const element = document.createElement('div') + element.innerHTML = 'Jonny' const item = new Item({ name: 'Jonny' }, { element, template }) expect(item.elm.querySelector('span').innerHTML).toEqual('Jonny') item.values({ name: 'Anna' }) diff --git a/__test__/unit/sort-buttons.test.js b/__test__/unit/sort-buttons.test.js index d603d15f..e349daa4 100644 --- a/__test__/unit/sort-buttons.test.js +++ b/__test__/unit/sort-buttons.test.js @@ -1,4 +1,3 @@ -import $ from 'jquery' import naturalSort from 'string-natural-compare' import Item from '../../src/item' @@ -15,44 +14,52 @@ import { describe('sort listeners', () => { describe('getInSensitive', () => { it('should be false if data-insensitive is false', () => { - const button = $(` - - - - diff --git a/docs/_includes/carbon.html b/docs/_includes/carbon.html deleted file mode 100644 index aa09f87f..00000000 --- a/docs/_includes/carbon.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/_includes/codepen.html b/docs/_includes/codepen.html deleted file mode 100644 index 10e914d9..00000000 --- a/docs/_includes/codepen.html +++ /dev/null @@ -1,10 +0,0 @@ -

                                  {{ page.name }}

                                  -

                                  {{ page.title }}

                                  - - -

                                  - See the Pen {{ page.url }} by Jonny Strömberg (@javve) - on CodePen. -

                                  - \ No newline at end of file diff --git a/docs/_includes/examples/annotated-example.html b/docs/_includes/examples/annotated-example.html deleted file mode 100644 index 3c0b72e8..00000000 --- a/docs/_includes/examples/annotated-example.html +++ /dev/null @@ -1,171 +0,0 @@ -
                                  -

                                  Basic examples

                                  -

                                  - Here is an example of a list with List.js applied. List.js can be used in - three different ways. It can be on existing HTML, it can create it's own - HTML or a combination of both methods. -

                                  -
                                  - - - -
                                  -
                                  -

                                  Jonny Strömberg

                                  -

                                  1990

                                  -
                                  -
                                  -

                                  Jonas Arnklint

                                  -

                                  1985

                                  -
                                  -
                                  -

                                  Martina Elm

                                  -

                                  1986

                                  -
                                  -
                                  -

                                  Gustaf Lindqvist

                                  -

                                  1983

                                  -
                                  -
                                  -
                                  - -

                                  Apply List.js on existing HTML

                                  -
                                  -
                                  -
                                  <div id="users">
                                  -
                                  -<!-- class="search" automagically makes an input a search field. -->
                                  -  <input class="search" placeholder="Search" />
                                  -<!-- class="sort" automagically makes an element a sort buttons. The date-sort value decides what to sort by. -->
                                  -  <button class="sort" data-sort="name">
                                  -    Sort
                                  -  </button>
                                  -
                                  -<!-- Child elements of container with class="list" becomes list items -->
                                  -  <ul class="list">
                                  -    <li>
                                  -<!-- The innerHTML of children with class="name" becomes this items "name" value -->
                                  -      <h3 class="name">Jonny Stromberg</h3>
                                  -      <p class="born">1986</p>
                                  -    </li>
                                  -    <li>
                                  -      <h3 class="name">Jonas Arnklint</h3>
                                  -      <p class="born">1985</p>
                                  -    </li>
                                  -    <li>
                                  -      <h3 class="name">Martina Elm</h3>
                                  -      <p class="born">1986</p>
                                  -    </li>
                                  -    <li>
                                  -      <h3 class="name">Gustaf Lindqvist</h3>
                                  -      <p class="born">1983</p>
                                  -    </li>
                                  -  </ul>
                                  -
                                  -</div>
                                  -
                                  -
                                  -
                                  var options = {
                                  -  valueNames: [ 'name', 'born' ]
                                  -};
                                  -
                                  -var userList = new List('users', options);
                                  -
                                  -
                                  - -

                                  Apply List.js on existing HTML and then add items

                                  -
                                  -
                                  -
                                  <div id="users">
                                  -
                                  -  <input class="search" placeholder="Search" />
                                  -  <button class="sort" data-sort="name">
                                  -    Sort
                                  -  </button>
                                  -
                                  -  <ul class="list">
                                  -<!-- This, the first element in the list, will be used as template for new items. -->
                                  -    <li>
                                  -      <h3 class="name">Jonny Stromberg</h3>
                                  -      <p class="born">1986</p>
                                  -    </li>
                                  -  </ul>
                                  -
                                  -</div>
                                  -
                                  -
                                  -
                                  -
                                  var options = {
                                  -  valueNames: [ 'name', 'born' ]
                                  -};
                                  -
                                  -// These items will be added to the list on initialization.
                                  -var values = [
                                  -  {
                                  -    name: 'Jonas Arnklint',
                                  -    born: 1985
                                  -  },
                                  -  {
                                  -    name: 'Martina Elm',
                                  -    born: 1986
                                  -  }
                                  -];
                                  -
                                  -var userList = new List('users', options, values);
                                  -
                                  -// It's possible to add items after list been initiated
                                  -userList.add({
                                  -  name: 'Gustaf Lindqvist',
                                  -  born: 1983
                                  -});
                                  -
                                  -
                                  - - - -

                                  Make List.js create a list from scratch

                                  -
                                  -
                                  -
                                  <div id="users">
                                  -
                                  -  <input class="search" placeholder="Search" />
                                  -  <button class="sort" data-sort="name">
                                  -    Sort
                                  -  </button>
                                  -
                                  -  <ul class="list"></ul>
                                  -
                                  -</div>
                                  -
                                  -
                                  -
                                  var options = {
                                  -  valueNames: [ 'name', 'born' ],
                                  -  // Since there are no elements in the list, this will be used as template.
                                  -  item: '<li><h3 class="name"></h3><p class="born"></p></li>'
                                  -};
                                  -
                                  -var values = [
                                  -  {
                                  -    name: 'Jonny Strömberg',
                                  -    born: 1986
                                  -  },
                                  -  {
                                  -    name: 'Jonas Arnklint',
                                  -    born: 1985
                                  -  },
                                  -  {
                                  -    name: 'Martina Elm',
                                  -    born: 1986
                                  -  }
                                  -];
                                  -
                                  -var userList = new List('users', options, values);
                                  -
                                  -userList.add({
                                  -  name: 'Gustaf Lindqvist',
                                  -  born: 1983
                                  -});
                                  -
                                  -
                                  -
                                  -
                                  diff --git a/docs/_includes/javascripts/vendor/bootstrap/tab.js b/docs/_includes/javascripts/vendor/bootstrap/tab.js deleted file mode 100644 index bdf8bbe9..00000000 --- a/docs/_includes/javascripts/vendor/bootstrap/tab.js +++ /dev/null @@ -1,135 +0,0 @@ -/* ======================================================================== - * Bootstrap: tab.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#tabs - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // TAB CLASS DEFINITION - // ==================== - - var Tab = function (element) { - this.element = $(element) - } - - Tab.prototype.show = function () { - var $this = this.element - var $ul = $this.closest('ul:not(.dropdown-menu)') - var selector = $this.data('target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - if ($this.parent('li').hasClass('active')) return - - var previous = $ul.find('.active:last a')[0] - var e = $.Event('show.bs.tab', { - relatedTarget: previous - }) - - $this.trigger(e) - - if (e.isDefaultPrevented()) return - - var $target = $(selector) - - this.activate($this.parent('li'), $ul) - this.activate($target, $target.parent(), function () { - $this.trigger({ - type: 'shown.bs.tab' - , relatedTarget: previous - }) - }) - } - - Tab.prototype.activate = function (element, container, callback) { - var $active = container.find('> .active') - var transition = callback - && $.support.transition - && $active.hasClass('fade') - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - - element.addClass('active') - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } - - if (element.parent('.dropdown-menu')) { - element.closest('li.dropdown').addClass('active') - } - - callback && callback() - } - - transition ? - $active - .one($.support.transition.end, next) - .emulateTransitionEnd(150) : - next() - - $active.removeClass('in') - } - - - // TAB PLUGIN DEFINITION - // ===================== - - var old = $.fn.tab - - $.fn.tab = function ( option ) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tab') - - if (!data) $this.data('bs.tab', (data = new Tab(this))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tab.Constructor = Tab - - - // TAB NO CONFLICT - // =============== - - $.fn.tab.noConflict = function () { - $.fn.tab = old - return this - } - - - // TAB DATA-API - // ============ - - $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { - e.preventDefault() - $(this).tab('show') - }) - -}(window.jQuery); diff --git a/docs/_includes/javascripts/vendor/bootstrap/tooltip.js b/docs/_includes/javascripts/vendor/bootstrap/tooltip.js deleted file mode 100644 index 41375c6c..00000000 --- a/docs/_includes/javascripts/vendor/bootstrap/tooltip.js +++ /dev/null @@ -1,386 +0,0 @@ -/* ======================================================================== - * Bootstrap: tooltip.js v3.0.0 - * http://getbootstrap.com/javascript/#tooltip - * Inspired by the original jQuery.tipsy by Jason Frame - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // TOOLTIP PUBLIC CLASS DEFINITION - // =============================== - - var Tooltip = function (element, options) { - this.type = - this.options = - this.enabled = - this.timeout = - this.hoverState = - this.$element = null - - this.init('tooltip', element, options) - } - - Tooltip.DEFAULTS = { - animation: true - , placement: 'top' - , selector: false - , template: '
                                  ' - , trigger: 'hover focus' - , title: '' - , delay: 0 - , html: false - , container: false - } - - Tooltip.prototype.init = function (type, element, options) { - this.enabled = true - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - - var triggers = this.options.trigger.split(' ') - - for (var i = triggers.length; i--;) { - var trigger = triggers[i] - - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' - var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' - - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) - } - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - Tooltip.prototype.getDefaults = function () { - return Tooltip.DEFAULTS - } - - Tooltip.prototype.getOptions = function (options) { - options = $.extend({}, this.getDefaults(), this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay - , hide: options.delay - } - } - - return options - } - - Tooltip.prototype.getDelegateOptions = function () { - var options = {} - var defaults = this.getDefaults() - - this._options && $.each(this._options, function (key, value) { - if (defaults[key] != value) options[key] = value - }) - - return options - } - - Tooltip.prototype.enter = function (obj) { - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) - - clearTimeout(self.timeout) - - self.hoverState = 'in' - - if (!self.options.delay || !self.options.delay.show) return self.show() - - self.timeout = setTimeout(function () { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } - - Tooltip.prototype.leave = function (obj) { - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) - - clearTimeout(self.timeout) - - self.hoverState = 'out' - - if (!self.options.delay || !self.options.delay.hide) return self.hide() - - self.timeout = setTimeout(function () { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } - - Tooltip.prototype.show = function () { - var e = $.Event('show.bs.'+ this.type) - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - - if (e.isDefaultPrevented()) return - - var $tip = this.tip() - - this.setContent() - - if (this.options.animation) $tip.addClass('fade') - - var placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement - - var autoToken = /\s?auto?\s?/i - var autoPlace = autoToken.test(placement) - if (autoPlace) placement = placement.replace(autoToken, '') || 'top' - - $tip - .detach() - .css({ top: 0, left: 0, display: 'block' }) - .addClass(placement) - - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - - var pos = this.getPosition() - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight - - if (autoPlace) { - var $parent = this.$element.parent() - - var orgPlacement = placement - var docScroll = document.documentElement.scrollTop || document.body.scrollTop - var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth() - var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight() - var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left - - placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' : - placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' : - placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' : - placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' : - placement - - $tip - .removeClass(orgPlacement) - .addClass(placement) - } - - var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) - - this.applyPlacement(calculatedOffset, placement) - this.$element.trigger('shown.bs.' + this.type) - } - } - - Tooltip.prototype.applyPlacement = function(offset, placement) { - var replace - var $tip = this.tip() - var width = $tip[0].offsetWidth - var height = $tip[0].offsetHeight - - // manually read margins because getBoundingClientRect includes difference - var marginTop = parseInt($tip.css('margin-top'), 10) - var marginLeft = parseInt($tip.css('margin-left'), 10) - - // we must check for NaN for ie 8/9 - if (isNaN(marginTop)) marginTop = 0 - if (isNaN(marginLeft)) marginLeft = 0 - - offset.top = offset.top + marginTop - offset.left = offset.left + marginLeft - - $tip - .offset(offset) - .addClass('in') - - // check to see if placing tip in new offset caused the tip to resize itself - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight - - if (placement == 'top' && actualHeight != height) { - replace = true - offset.top = offset.top + height - actualHeight - } - - if (/bottom|top/.test(placement)) { - var delta = 0 - - if (offset.left < 0) { - delta = offset.left * -2 - offset.left = 0 - - $tip.offset(offset) - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - } - - this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') - } else { - this.replaceArrow(actualHeight - height, actualHeight, 'top') - } - - if (replace) $tip.offset(offset) - } - - Tooltip.prototype.replaceArrow = function(delta, dimension, position) { - this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') - } - - Tooltip.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() - - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } - - Tooltip.prototype.hide = function () { - var that = this - var $tip = this.tip() - var e = $.Event('hide.bs.' + this.type) - - function complete() { - if (that.hoverState != 'in') $tip.detach() - } - - this.$element.trigger(e) - - if (e.isDefaultPrevented()) return - - $tip.removeClass('in') - - $.support.transition && this.$tip.hasClass('fade') ? - $tip - .one($.support.transition.end, complete) - .emulateTransitionEnd(150) : - complete() - - this.$element.trigger('hidden.bs.' + this.type) - - return this - } - - Tooltip.prototype.fixTitle = function () { - var $e = this.$element - if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') - } - } - - Tooltip.prototype.hasContent = function () { - return this.getTitle() - } - - Tooltip.prototype.getPosition = function () { - var el = this.$element[0] - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { - width: el.offsetWidth - , height: el.offsetHeight - }, this.$element.offset()) - } - - Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { - return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : - placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : - placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : - /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } - } - - Tooltip.prototype.getTitle = function () { - var title - var $e = this.$element - var o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - return title - } - - Tooltip.prototype.tip = function () { - return this.$tip = this.$tip || $(this.options.template) - } - - Tooltip.prototype.arrow = function () { - return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow') - } - - Tooltip.prototype.validate = function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } - - Tooltip.prototype.enable = function () { - this.enabled = true - } - - Tooltip.prototype.disable = function () { - this.enabled = false - } - - Tooltip.prototype.toggleEnabled = function () { - this.enabled = !this.enabled - } - - Tooltip.prototype.toggle = function (e) { - var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this - self.tip().hasClass('in') ? self.leave(self) : self.enter(self) - } - - Tooltip.prototype.destroy = function () { - this.hide().$element.off('.' + this.type).removeData('bs.' + this.type) - } - - - // TOOLTIP PLUGIN DEFINITION - // ========================= - - var old = $.fn.tooltip - - $.fn.tooltip = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tooltip') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tooltip.Constructor = Tooltip - - - // TOOLTIP NO CONFLICT - // =================== - - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old - return this - } - -}(window.jQuery); diff --git a/docs/_includes/javascripts/vendor/bootstrap/transition.js b/docs/_includes/javascripts/vendor/bootstrap/transition.js deleted file mode 100644 index d3a7abff..00000000 --- a/docs/_includes/javascripts/vendor/bootstrap/transition.js +++ /dev/null @@ -1,56 +0,0 @@ -/* ======================================================================== - * Bootstrap: transition.js v3.0.0 - * http://getbootstrap.com/javascript/#transitions - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ - - function transitionEnd() { - var el = document.createElement('bootstrap') - - var transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } - - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } - } - - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function (duration) { - var called = false, $el = this - $(this).one($.support.transition.end, function () { called = true }) - var callback = function () { if (!called) $($el).trigger($.support.transition.end) } - setTimeout(callback, duration) - return this - } - - $(function () { - $.support.transition = transitionEnd() - }) - -}(window.jQuery); diff --git a/docs/_includes/javascripts/vendor/highlight.pack.js b/docs/_includes/javascripts/vendor/highlight.pack.js deleted file mode 100644 index 7ec26642..00000000 --- a/docs/_includes/javascripts/vendor/highlight.pack.js +++ /dev/null @@ -1 +0,0 @@ -var hljs=new function(){function l(o){return o.replace(/&/gm,"&").replace(//gm,">")}function b(p){for(var o=p.firstChild;o;o=o.nextSibling){if(o.nodeName=="CODE"){return o}if(!(o.nodeType==3&&o.nodeValue.match(/\s+/))){break}}}function h(p,o){return Array.prototype.map.call(p.childNodes,function(q){if(q.nodeType==3){return o?q.nodeValue.replace(/\n/g,""):q.nodeValue}if(q.nodeName=="BR"){return"\n"}return h(q,o)}).join("")}function a(q){var p=(q.className+" "+(q.parentNode?q.parentNode.className:"")).split(/\s+/);p=p.map(function(r){return r.replace(/^language-/,"")});for(var o=0;o"}while(x.length||v.length){var u=t().splice(0,1)[0];y+=l(w.substr(p,u.offset-p));p=u.offset;if(u.event=="start"){y+=s(u.node);r.push(u.node)}else{if(u.event=="stop"){var o,q=r.length;do{q--;o=r[q];y+=("")}while(o!=u.node);r.splice(q,1);while(q'+M[0]+""}else{r+=M[0]}O=A.lR.lastIndex;M=A.lR.exec(L)}return r+L.substr(O)}function z(){if(A.sL&&!e[A.sL]){return l(w)}var r=A.sL?d(A.sL,w):g(w);if(A.r>0){v+=r.keyword_count;B+=r.r}return''+r.value+""}function K(){return A.sL!==undefined?z():H()}function J(M,r){var L=M.cN?'':"";if(M.rB){x+=L;w=""}else{if(M.eB){x+=l(r)+L;w=""}else{x+=L;w=r}}A=Object.create(M,{parent:{value:A}})}function D(L,r){w+=L;if(r===undefined){x+=K();return 0}var N=o(r,A);if(N){x+=K();J(N,r);return N.rB?0:r.length}var O=s(A,r);if(O){var M=A;if(!(M.rE||M.eE)){w+=r}x+=K();do{if(A.cN){x+=""}B+=A.r;A=A.parent}while(A!=O.parent);if(M.eE){x+=l(r)}w="";if(O.starts){J(O.starts,"")}return M.rE?0:r.length}if(t(r,A)){throw new Error('Illegal lexem "'+r+'" for mode "'+(A.cN||"")+'"')}w+=r;return r.length||1}var G=e[E];f(G);var A=G;var w="";var B=0;var v=0;var x="";try{var u,q,p=0;while(true){A.t.lastIndex=p;u=A.t.exec(F);if(!u){break}q=D(F.substr(p,u.index-p),u[0]);p=u.index+q}D(F.substr(p));return{r:B,keyword_count:v,value:x,language:E}}catch(I){if(I.message.indexOf("Illegal")!=-1){return{r:0,keyword_count:0,value:l(F)}}else{throw I}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s,false);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\t)+)/gm,function(r,v,u,t){return v.replace(/\t/g,p)})}if(o){q=q.replace(/\n/g,"
                                  ")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t=="no-highlight"){return}var w=t?d(t,v,true):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElement("pre");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match("(\\s|^)(language-)?"+t+"(\\s|$)")){s=s?(s+" "+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagName("pre"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener("DOMContentLoaded",n,false);window.addEventListener("load",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gim]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES.javascript=function(a){return{k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const",literal:"true false null undefined NaN Infinity"},c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBLCLM,a.REGEXP_MODE,{b:/;/,sL:"xml"}],r:0},{cN:"function",bWK:true,e:/{/,k:"function",c:[{cN:"title",b:/[A-Za-z$_][0-9A-Za-z$_]*/},{cN:"params",b:/\(/,e:/\)/,c:[a.CLCM,a.CBLCLM],i:/["'\(]/}],i:/\[|%/}]}}(hljs);hljs.LANGUAGES.css=function(a){var b="[a-zA-Z-][a-zA-Z0-9_-]*";var c={cN:"function",b:b+"\\(",e:"\\)",c:["self",a.NM,a.ASM,a.QSM]};return{cI:true,i:"[=/|']",c:[a.CBLCLM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:true,eE:true,r:0,c:[c,a.ASM,a.QSM,a.NM]}]},{cN:"tag",b:b,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[a.CBLCLM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[c,a.NM,a.QSM,a.ASM,a.CBLCLM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]}]}]}}(hljs);hljs.LANGUAGES.xml=function(a){var c="[A-Za-z0-9\\._:-]+";var b={eW:true,r:0,c:[{cN:"attribute",b:c,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"|$)",e:">",k:{title:"style"},c:[b],starts:{e:"",rE:true,sL:"css"}},{cN:"tag",b:"|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%}",sL:"vbscript"},{cN:"tag",b:"",r:0,c:[{cN:"title",b:"[^ /><]+"},b]}]}}(hljs);hljs.LANGUAGES.json=function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}}(hljs); \ No newline at end of file diff --git a/docs/_includes/javascripts/vendor/jquery-1.8.3.min.js b/docs/_includes/javascripts/vendor/jquery-1.8.3.min.js deleted file mode 100644 index 83589daa..00000000 --- a/docs/_includes/javascripts/vendor/jquery-1.8.3.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v1.8.3 jquery.com | jquery.org/license */ -(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write(""),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t
                                  a",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="
                                  t
                                  ",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="
                                  ",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="
                                  ",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="

                                  ",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*\s*$/g,Nt={option:[1,""],legend:[1,"
                                  ","
                                  "],thead:[1,"","
                                  "],tr:[2,"","
                                  "],td:[3,"","
                                  "],col:[2,"","
                                  "],area:[1,"",""],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X
                                  ","
                                  "]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1>");try{for(;r1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===""&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("
                                  ").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window); \ No newline at end of file diff --git a/docs/_includes/menu.html b/docs/_includes/menu.html deleted file mode 100755 index 79a81266..00000000 --- a/docs/_includes/menu.html +++ /dev/null @@ -1,27 +0,0 @@ -
                                  - -

                                  Overview

                                  - - -

                                  Documentation

                                  - - -

                                  Examples

                                  - -
                                  diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html deleted file mode 100644 index b030ec6a..00000000 --- a/docs/_layouts/default.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - {{ page.title }} - {{ site.title }} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                  -
                                  - {% include menu.html %} -
                                  - {{ content }} -
                                  -
                                  -
                                  - - - - {% include carbon.html %} - - - - -
                                  - - - - - - diff --git a/docs/_sass/_base.scss b/docs/_sass/_base.scss deleted file mode 100644 index 3919b171..00000000 --- a/docs/_sass/_base.scss +++ /dev/null @@ -1,194 +0,0 @@ -/** - * Basic styling - */ -body { - font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family; - color: $text-color; - background-color: $background-color; - -webkit-text-size-adjust: 100%; - -webkit-font-feature-settings: "kern" 1; - -moz-font-feature-settings: "kern" 1; - -o-font-feature-settings: "kern" 1; - font-feature-settings: "kern" 1; - font-kerning: normal; - @include transition(background-color .2s ease-in-out); -} - - - -/** - * Set `margin-bottom` to maintain vertical rhythm - */ -h1, h2, h3, h4, h5, h6, -p, blockquote, pre, -ul, ol, dl, figure, -%vertical-rhythm { - margin-top:0; - margin-bottom: $spacing-unit / 2; -} - - - -/** - * Images - */ -img { - max-width: 100%; - vertical-align: middle; -} - - - -/** - * Figures - */ -figure > img { - display: block; -} - -figcaption { - font-size: $small-font-size; -} - - - -/** - * Lists - */ -ul, ol { - margin-left: $spacing-unit; -} - -li { - > ul, - > ol { - margin-bottom: 0; - } -} - - - -/** - * Headings - */ -h1, h2, h3, h4, h5, h6 { - font-family: $headline-font-family; - font-weight: $headline-font-weight; -} - - - -/** - * Links - */ -a { - color: $brand-color; - text-decoration: none; - - &:visited { - color: darken($brand-color, 15%); - } - - &:hover { - color: $text-color; - text-decoration: underline; - } -} - - - -/** - * Blockquotes - */ -blockquote { - color: $grey-color; - border-left: 4px solid $grey-color-light; - padding-left: $spacing-unit / 2; - font-size: 18px; - letter-spacing: -1px; - font-style: italic; - - > :last-child { - margin-bottom: 0; - } -} - - - -/** - * Code formatting - */ -pre, -code { - font-size: 15px; - border: 1px solid $grey-color-light; - border-radius: 3px; - background-color: #eef; -} - -code { - padding: 1px 5px; -} - -pre { - padding: 8px 12px; - overflow-x: auto; - - > code { - border: 0; - padding-right: 0; - padding-left: 0; - } -} - - - -/** - * Wrapper - */ -.wrapper { - max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2)); - max-width: calc(#{$content-width} - (#{$spacing-unit} * 2)); - margin-right: auto; - margin-left: auto; - padding-right: $spacing-unit; - padding-left: $spacing-unit; - @extend %clearfix; - - @include media-query($on-laptop) { - max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit})); - max-width: calc(#{$content-width} - (#{$spacing-unit})); - padding-right: $spacing-unit / 2; - padding-left: $spacing-unit / 2; - } -} - -.content-container { - background-color: #fff; - box-sizing: border-box; - max-width: $content-width; - margin:- $spacing-unit auto $spacing-unit; -} -.content { - @include transition(all .2s ease-in-out); - padding: $spacing-unit; - @include media-query($on-laptop) { - padding:$spacing-unit * 2; - } - &:after { - content: ""; - display: table; - clear: both; - } -} - -.image-shadow-box { - border: solid $spacing-unit / 2 #fff; - box-shadow: 5px 10px 40px rgba(0,0,0,.3); -} -.image-right-50 { - float:right; - margin-left:$spacing-unit * 2; - margin-bottom:$spacing-unit; - max-width: 45%; -} diff --git a/docs/_sass/_carbonads.scss b/docs/_sass/_carbonads.scss deleted file mode 100644 index 8c98d2cf..00000000 --- a/docs/_sass/_carbonads.scss +++ /dev/null @@ -1,114 +0,0 @@ -@keyframes fadein { - from { - transform: translateY(100%); - opacity: 0; - } - to { - opacity: 1; - transform: translateY(0); - } -} -@-moz-keyframes fadein { - from { - transform: translateY(100%); - opacity: 0; - } - to { - opacity: 1; - transform: translateY(0); - } -} -@-webkit-keyframes fadein { - from { - transform: translateY(100%); - opacity: 0; - } - to { - opacity: 1; - transform: translateY(0); - } -} -@-ms-keyframes fadein { - from { - transform: translateY(100%); - opacity: 0; - } - to { - opacity: 1; - transform: translateY(0); - } -} -@-o-keyframes fadein { - from { - transform: translateY(100%); - opacity: 0; - } - to { - opacity: 1; - transform: translateY(0); - } -} - -#carbonads { - position: fixed; - z-index: 10000; - right: 0; - bottom: 0; - opacity: 0; - transform: translateY(100%); - -webkit-animation: fadein 1s 2s forwards; - -moz-animation: fadein 1s 2s forwards; - -ms-animation: fadein 1s 2s forwards; - -o-animation: fadein 1s 2s forwards; - animation: fadein 1s 2s forwards -} - -#carbonads { - display: block; - overflow: hidden; - padding: 1em; - background-color: hsla(0, 0%, 100%, .88); - max-width: 330px; - box-shadow: 0 0 1px 0 hsla(0, 0%, 0%, .6); - font-size: 14px; - border-top-left-radius: 4px; - line-height: 1.5; -} - -#carbonads a { - text-decoration: none; -} - -#carbonads span { - position: relative; - display: block; - overflow: hidden; -} - -.carbon-img { - float: left; - margin-right: 1em; -} - -.carbon-img img { - display: block; -} - -.carbon-text { - display: block; - float: left; - max-width: calc(100% - 130px - 1em); - text-align: left; -} - -.carbon-poweredby { - position: absolute; - right: 0; - bottom: 0; - display: block; - font-size: 10px; - color: hsl(0, 0%, 60%); - text-transform: uppercase; - line-height: 1; - letter-spacing: 1px; -} diff --git a/docs/_sass/_docs.scss b/docs/_sass/_docs.scss deleted file mode 100644 index 04a99b25..00000000 --- a/docs/_sass/_docs.scss +++ /dev/null @@ -1,111 +0,0 @@ -.docs { - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; -} -.docs-menu { - background-color:$blue; - max-width: $menuWidth; - position: relative; - padding: 0 20px; - box-sizing: border-box; - flex: 1; - - a { - transition: opacity .2s ease-in-out; - color:#fff; - text-decoration: none; - &:hover { - opacity: 0.7; - color:#fff; - } - } - ul { - padding-left:20px; - color:rgba(255,255,255,0.3); - } - li { - margin-bottom:4px; - &.active { - font-weight: 700; - color:#fff; - } - } -} - -.docs-content { - position: relative; - color:#555; - padding:30px; - box-sizing: border-box; - - flex: 1; - - h2:first-child { - margin-top: 0; - } - p, h1, h2, h3, h4, h5 { - max-width: 500px; - } - p { - line-height: 1.5; - } - ul { - padding-left:30px; - pre { - margin-left:-60px; - padding-left:60px; - } - ul pre { - margin-left:-90px; - padding-left:90px; - } - } - strong, b { - color:#222; - font-weight: bold; - } - pre { - background-color: $lightGrey; - padding:20px 30px; - margin:0 -30px 1px; - code { - background-color: transparent; - } - } - li { - margin-bottom:5px; - } - .api-index { - -webkit-column-count: 3; - -moz-column-count: 3; - column-count: 3; - margin:0; - padding:0; - li { - list-style-type: none; - margin-bottom: 0; - } - } -} -.docs-parameter-description { - color:#999; - font-size:80%; -} - -.docs-top { - display:none; - border-bottom:solid 1px $lightGrey; - padding:20px; - .docs-top-title { - font-size: 50px; - font-size: 5rem; - color:$orange; - font-weight:700; - margin:0; - } -} diff --git a/docs/_sass/_menu.scss b/docs/_sass/_menu.scss deleted file mode 100644 index 9a4b680e..00000000 --- a/docs/_sass/_menu.scss +++ /dev/null @@ -1,87 +0,0 @@ -@-webkit-keyframes pluse { - 0% { - -webkit-transform: scale(1); - } - 80% { - -webkit-transform: scale(1.2); - } - 100% { - -webkit-transform: scale(1); - } -} -@keyframes pluse { - 0% { - transform: scale(1); - } - 80% { - transform: scale(1.2); - } - 100% { - transform: scale(1); - } -} - -.menu { - padding:0 20px; - z-index: 100; - //margin-top:-80px; - //margin-bottom:40px; - margin:0; - background-color: $black; - - .heart { - -webkit-animation: pluse 1.4s infinite linear; - animation: pluse 1.4s infinite linear; - position:relative; - top:2px; - right:-3px; - display: inline-block; - } - - ul { - display:block; - margin:0; - padding:0; - } - li { - display:inline-block; - margin:0 10px 0 0; - } - a { - line-height:60px; - display: inline-block; - text-decoration: none; - font-weight: 600; - color:#fff; - &:hover, - &.active { - color:#eee; - } - &.active { - font-weight: 500; - color:$black; - } - } -} - -.menu-sub { - margin:-40px 0 20px; - color: #ccc; - background-color:$lightGrey; - font-size:14px; - font-size:1.4rem; - @extend %clearfix; - ul { - padding: 15px 0 13px; - margin:0; - } - li { - display: inline-block; - margin-right:20px; - &.active { - a { - color:#222; - } - } - } -} diff --git a/docs/_sass/_mixins.scss b/docs/_sass/_mixins.scss deleted file mode 100644 index eb4208ae..00000000 --- a/docs/_sass/_mixins.scss +++ /dev/null @@ -1,19 +0,0 @@ -%clearfix { - &:after { - content: ""; - display: table; - clear: both; - } -} - -@mixin media-query($device) { - @media screen and (min-width: $device) { - @content; - } -} - - -@mixin transition($value){ - -webkit-transition: $value; - transition: $value; -} diff --git a/docs/_sass/_normalize.scss b/docs/_sass/_normalize.scss deleted file mode 100644 index c2de8df9..00000000 --- a/docs/_sass/_normalize.scss +++ /dev/null @@ -1,406 +0,0 @@ -/*! normalize.css v2.1.3 | MIT License | git.io/normalize */ - -/* ========================================================================== - HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined in IE 8/9. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} - -/** - * Correct `inline-block` display not defined in IE 8/9. - */ - -audio, -canvas, -video { - display: inline-block; -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9. - * Hide the `template` element in IE, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* ========================================================================== - Base - ========================================================================== */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* ========================================================================== - Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background: transparent; -} - -/** - * Address `outline` inconsistency between Chrome and other browsers. - */ - -a:focus { - outline: thin dotted; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* ========================================================================== - Typography - ========================================================================== */ - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari 5, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9, Safari 5, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari 5 and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Correct font family set oddly in Safari 5 and Chrome. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, serif; - font-size: 1em; -} - -/** - * Improve readability of pre-formatted text in all browsers. - */ - -pre { - white-space: pre-wrap; -} - -/** - * Set consistent quote types. - */ - -q { - quotes: "\201C" "\201D" "\2018" "\2019"; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* ========================================================================== - Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9. - */ - -img { - border: 0; -} - -/** - * Correct overflow displayed oddly in IE 9. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* ========================================================================== - Figures - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari 5. - */ - -figure { - margin: 0; -} - -/* ========================================================================== - Forms - ========================================================================== */ - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * 1. Correct font family not being inherited in all browsers. - * 2. Correct font size not being inherited in all browsers. - * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. - */ - -button, -input, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -button, -input { - line-height: normal; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. - * Correct `select` style inheritance in Firefox 4+ and Opera. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome - * (include `-moz` to future-proof). - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; -} - -/** - * Remove inner padding and search cancel button in Safari 5 and Chrome - * on OS X. - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * 1. Remove default vertical scrollbar in IE 8/9. - * 2. Improve readability and alignment in all browsers. - */ - -textarea { - overflow: auto; /* 1 */ - vertical-align: top; /* 2 */ -} - -/* ========================================================================== - Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} diff --git a/docs/_sass/vendor/highlight/xcode.scss b/docs/_sass/vendor/highlight/xcode.scss deleted file mode 100644 index 0f4e851d..00000000 --- a/docs/_sass/vendor/highlight/xcode.scss +++ /dev/null @@ -1,156 +0,0 @@ -/* - -XCode style (c) Angel Garcia - -*/ - -pre code { - display: block; padding: 0.5em; - background: #fff; color: black; -} - -pre .comment, -pre .template_comment, -pre .javadoc, -pre .comment * { - color: rgba(0, 0, 0, 0.27); -} - -pre .keyword, -pre .literal, -pre .nginx .title { - color: rgb(170,13,145); -} -pre .method, -pre .list .title, -pre .tag .title, -pre .setting .value, -pre .winutils, -pre .tex .command, -pre .http .title, -pre .request, -pre .status { - color: #008; -} - -pre .envvar, -pre .tex .special { - color: #660; -} - -pre .string { - color: rgb(196,26,22); -} -pre .tag .value, -pre .cdata, -pre .filter .argument, -pre .attr_selector, -pre .apache .cbracket, -pre .date, -pre .regexp { - color: #080; -} - -pre .sub .identifier, -pre .pi, -pre .tag, -pre .tag .keyword, -pre .decorator, -pre .ini .title, -pre .shebang, -pre .prompt, -pre .hexcolor, -pre .rules .value, -pre .css .value .number, -pre .symbol, -pre .symbol .string, -pre .number, -pre .css .function, -pre .clojure .title, -pre .clojure .built_in, -pre .function .title, -pre .coffeescript .attribute { - color: rgb(28,0,207); -} - -pre .class .title, -pre .haskell .type, -pre .smalltalk .class, -pre .javadoctag, -pre .yardoctag, -pre .phpdoc, -pre .typename, -pre .tag .attribute, -pre .doctype, -pre .class .id, -pre .built_in, -pre .setting, -pre .params, -pre .clojure .attribute { - color: rgb(92,38,153); -} - -pre .variable { - color: rgb(63,110,116); -} -pre .css .tag, -pre .rules .property, -pre .pseudo, -pre .subst { - color: #000; -} - -pre .css .class, pre .css .id { - color: #9B703F; -} - -pre .value .important { - color: #ff7700; - font-weight: bold; -} - -pre .rules .keyword { - color: #C5AF75; -} - -pre .annotation, -pre .apache .sqbracket, -pre .nginx .built_in { - color: #9B859D; -} - -pre .preprocessor, -pre .preprocessor * { - color: rgb(100,56,32); -} - -pre .tex .formula { - background-color: #EEE; - font-style: italic; -} - -pre .diff .header, -pre .chunk { - color: #808080; - font-weight: bold; -} - -pre .diff .change { - background-color: #BCCFF9; -} - -pre .addition { - background-color: #BAEEBA; -} - -pre .deletion { - background-color: #FFC8BD; -} - -pre .comment .yardoctag { - font-weight: bold; -} - -pre .method .id { - color: #000; -} diff --git a/docs/api.html b/docs/api.html deleted file mode 100755 index ee045f4a..00000000 --- a/docs/api.html +++ /dev/null @@ -1,395 +0,0 @@ ---- -layout: default -title: List API -redirect_from: - - /docs/list-api - - /docs/options ---- - -

                                  - - List API -

                                  - -

                                  Options

                                  - - -

                                  Properties

                                  - - - -

                                  Methods

                                  - - -

                                  - - Options -

                                  -

                                  Using List.js is pretty much plug and play, but you can change some options if you feel like it.

                                  -
                                  new List(id/element, options, values);
                                  - -
                                    -
                                  • - id or element *required
                                    - Id the element in which the list area should be initialized. OR the actual element itself. -
                                  • -
                                  • -

                                    options Object, default: undefined
                                    -Some of the option parameters are required at some times

                                    - -
                                      -
                                    • -

                                      valueNames Array, default: null. *required
                                      -If the list contains items on initialization, then this array -has to contain the value names (class names) for the different values of -each list item.

                                      - -
                                      <ul class="list">
                                      -    <li>
                                      -        <span class="name">Jonny</span>
                                      -        <span class="city">Sundsvall</span>
                                      -    </li>
                                      -</ul>
                                      -
                                      -var valueNames = ['name', 'city'];
                                      -
                                      - -
                                      <ul class="list">
                                      - <li data-id="1">
                                      -   <a href="http://javve.com" class="link name">Jonny</a>
                                      -   <p class="born timestamp" data-timestamp="1234">1986</p>
                                      -   <img class="image" src="javve.jpg" />
                                      - </li>
                                      -</ul>
                                      -
                                      -var valueNames =  [
                                      -  'name',
                                      -  'born',
                                      -  { data: ['id'] },
                                      -  { name: 'timestamp', attr: 'data-timestamp' },
                                      -  { name: 'link', attr: 'href' },
                                      -  { name: 'image', attr: 'src' }
                                      -];
                                      - -
                                    • -
                                    • -

                                      item String, default: undefined
                                      -ID to item template element or a string of HTML. Can also be a function which receives a values object and which must return the complete item's HTML as a string.

                                      - -
                                      var options = {
                                      -    item: "<li><span class='name'></span><span class='city'></span></li>"
                                      -}
                                      -// or
                                      -var options = {
                                      -    item: 'cool-item-id'
                                      -};
                                      -// or
                                      -var options = {
                                      -    item: function(values) {
                                      -      return `<li><span class='name'>${values.name}</span><span class='city'>${values.city}</span></li>`;
                                      -    }
                                      -};
                                      -
                                      -
                                    • -
                                    • listClass String, default: "list"
                                      -What is the class of the list-container?

                                    • -
                                    • searchClass String, default: "search"
                                      -What is the class of the search field?

                                    • -
                                    • searchColumns Array of strings, default: undefined
                                      -Restrict searching to just these column names? Default is to search all columns.

                                    • -
                                    • searchDelay Int default: 0
                                      -Delay in milliseconds after last keypress in search field before search starts. 250→750 is good for very large lists.

                                    • -
                                    • sortClass String, default: "sort"
                                      -What is the class of the sort buttons?

                                    • -
                                    • indexAsync Boolean, default: false
                                      -If there are already items in the list to which the -List.js-script is added, then should the indexing be done -in a asynchronous way? Good for large lists (> 500 items).

                                    • -
                                    • page Int, default: 200
                                      -Defines how many items that should be visible at the same time. This affects -performance.

                                    • -
                                    • i Int, default: 1
                                      -Which item should be shown as the first one.

                                    • -
                                    • pagination Boolean, default: undefined
                                      -Read more here.

                                    • -
                                    -
                                  • -
                                  • values Array of objects, default: undefined
                                    -Values to add to the list on initialization.

                                  • -
                                  - - -

                                  Properties

                                  - -
                                    -
                                  • -

                                    - listContainer - Element
                                    - The element node that contains the entire list area. -

                                    -
                                  • -
                                  • -

                                    - list - Element
                                    - The element containing all items. -

                                    -
                                  • -
                                  • -

                                    - items - Array
                                    - An Array of all Item-objects in the list. -

                                    -
                                  • -
                                  • -

                                    - visibleItems - Array
                                    - The currently visible items in the list -

                                    -
                                  • -
                                  • -

                                    - matchingItems - Array
                                    - The items matching the currently active filter and search. -

                                    -
                                  • -
                                  • -

                                    - searched - Boolean
                                    - Returns true if the list is searched. -

                                    -
                                  • -
                                  • -

                                    - filtered - Boolean
                                    - Returns true if there is an active filter. -

                                    -
                                  • -
                                  - -

                                  Methods

                                  - -
                                    -
                                  • -

                                    add(values, callback)
                                    - Adds one or more items to the list.

                                    - -
                                    listObj.add({ name: "Jonny", city: "Stockholm" });
                                    -
                                    -listObj.add([
                                    -{ name: "Gustaf", city: "Sundsvall" }
                                    -, { name: "Jonas", city: "Berlin" }
                                    -]);
                                    - -

                                    If callback is set then items are added to the list in a asynchronous way, and the - callback is called when all items are added. This is especially useful - when adding very many items (200+ or something), or if you just like the - asynchronous coding style.

                                    - -
                                    listObj.add(arrayWithManyManyItems, function(items) {
                                    -console.log('All ' + items.length + ' were added!');
                                    -});
                                    -
                                  • -
                                  • -

                                    remove(valueName, value)
                                    - Removes items from the list where the value named valueName has value value. - Returns the number of items that where removed.

                                    - -
                                    itemsInList = [
                                    -{ id: 1, name: "Jonny" }
                                    -, { id: 2, name "Gustaf" }
                                    -];
                                    -listObj.remove("id", 1); // return 1
                                    -
                                  • -
                                  • -

                                    get(valueName, value)
                                    - Returns values from the list where the value named valueName has value value.

                                    - -
                                    itemsInList = [
                                    -{ id: 1, name: "Jonny" }
                                    -, { id: 2, name "Gustaf" }
                                    -];
                                    -listObj.get("id", 2); // return { id: 2, name "Gustaf" }
                                    -
                                  • -
                                  • -

                                    sort(valueName, {
                                    -   order: 'desc',
                                    -   alphabet: undefined,
                                    -   insensitive: true,
                                    -   sortFunction: undefined
                                    - })

                                    - Sorts the list based on values the in the column named valueName. - The alphabet option is used when you have non-english alphabet - where which JavaScript don't know how to sort some characters by default.

                                    -

                                    The default sort function is found here - https://github.com/nwoltman/string-natural-compare, - if you want to use your own, read the code and - check out the tests.

                                    - -
                                    listObj.sort('name', { order: "asc" }); // Sorts the list in abc-order based on names
                                    -listObj.sort('name', { order: "desc" }); // Sorts the list in zxy-order based on names
                                    -
                                    -// Sort swedish characters correcly, case-insensitive.
                                    -listObj.sort('name', { alphabet: "ABCDEFGHIJKLMNOPQRSTUVXYZÅÄÖabcdefghijklmnopqrstuvxyzåäö" });
                                    -
                                    -// Sort swedish characters correcly, case-sensitive.
                                    -listObj.sort('name', { alphabet: "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvXxYyZzÅåÄäÖö" });
                                    -
                                    -// Alphabet could also be on the actual listObj via
                                    -listObj.alphabet = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvXxYyZzÅåÄäÖö";
                                    -
                                    - -
                                  • -
                                  • -

                                    search(searchString, columns, searchFunction)
                                    - Searches the list

                                    - -
                                    itemsInList = [
                                    -{ id: 1, name: "Jonny Stromberg", born: 1986 }
                                    -, { id: 2, name "Jonas Arnklint", born: 1985 }
                                    -, { id: 3, name "Martina Elm", born: 1986 }
                                    -, { id: 4, name "Gustaf Lindqvist", born: 1983 }
                                    -, { id: 5, name "Jonny Strandberg", born: 1990 }
                                    -];
                                    -
                                    -listObj.search('Jonny'); // Only items with name Jonny are shown (also returns these items)
                                    -
                                    -listObj.search(); // Show all items in list
                                    -
                                    -listObj.search('Jonny', ['name']); // Only search in the 'name' column
                                    - -

                                    Space-separated words match in any order using logical AND. Surround a phrase in quotes for exact matches:

                                    - -
                                    listObj.search('Jon 198'); // Items that match Jon AND 198
                                    -
                                    -listObj.search('"Jonny S" 1990'); // Items that match "Jonny S" AND 1990
                                    - -

                                    Optionally your own search function can be used:

                                    - -
                                    listObj.search('Jonny', searchFunction); // Custom search for Jonny
                                    -
                                    -listObj.search('Jonny', ['name'], searchFunction); // Custom search in the 'name' column
                                    -
                                    -function searchFunction(searchString, columns) {
                                    -  for (var k = 0, kl = listObj.items.length; k < kl; k++) {
                                    -     listObj.items[k].found = false;
                                    -     // Insert your custom search logic here, set found = true
                                    -
                                    -  }
                                    -};
                                    - -
                                  • -
                                  • -

                                    clear()
                                    - Removes all items from the list

                                    -
                                  • -
                                  • -

                                    filter(filterFunction)

                                    - -
                                    itemsInList = [
                                    -{ id: 1, name: "Jonny" }
                                    -, { id: 2, name "Gustaf" }
                                    -, { id: 3, name "Jonas" }
                                    -];
                                    -
                                    -listObj.filter(function(item) {
                                    -if (item.values().id > 1) {
                                    -   return true;
                                    -} else {
                                    -   return false;
                                    -}
                                    -}); // Only items with id > 1 are shown in list
                                    -
                                    -listObj.filter(); // Remove all filters
                                    - -
                                  • -
                                  • -

                                    size()
                                    - Returns the size of the list.

                                    -
                                  • -
                                  • -

                                    show(i, page)
                                    - Shows page number of items from i. Use for paging etc.

                                    - -
                                    itemsInList = [
                                    -{ id: 1, name: "Jonny" }
                                    -, { id: 2, name "Gustaf" }
                                    -, { id: 3, name "Jonas" }
                                    -, { id: 4, name "Egon" }
                                    -, { id: 5, name "Frank" }
                                    -, { id: 6, name "Ester" }
                                    -];
                                    -
                                    -listObj.show(4, 3); // Display item 4,5,6 
                                    - -
                                  • -
                                  • -

                                    update()
                                    - Updates the current state of the list. Meaning that if you for instance - hides some items with the itemObj.hide() method then you have to call listObj.update() - if you want the paging to update.

                                    -
                                  • -
                                  • -

                                    reIndex()
                                    - Re-index list from HTML. Good to use if the HTML has been changed by something - else than List.js.

                                    -
                                  • -
                                  • -

                                    fuzzySearch()
                                    - Read more here

                                    -
                                  • -
                                  • -

                                    on(event, callback)
                                    - Execute callback when list have been updated (triggered by update(), which is used by a lot of methods). Use updated as the event.

                                    -

                                    Avaliable events

                                    -
                                      -
                                    • updated
                                    • -
                                    • searchStart
                                    • -
                                    • searchComplete
                                    • -
                                    • filterStart
                                    • -
                                    • filterComplete
                                    • -
                                    • sortStart
                                    • -
                                    • sortComplete
                                    • -
                                    -
                                  • -
                                  diff --git a/docs/assets/css/style.scss b/docs/assets/css/style.scss deleted file mode 100644 index d856fbf2..00000000 --- a/docs/assets/css/style.scss +++ /dev/null @@ -1,554 +0,0 @@ ---- -# Only the main Sass file needs front matter (the dashes are enough) ---- - -$blue: #28a8e0; -$green: #6cd25e; -$grey: #555; -$orange: #f59621; -$lightGrey: #edf4f4; -$black: #2e2e2e; - -$menuWidth: 250px; - - -@import "normalize"; -@import "mixins"; -@import "vendor/highlight/xcode"; -@import "carbonads"; -@import "menu"; -@import "docs"; - -/* * * * * * * * * * * * * * * * * * * * * -* General -* * * * * * * * * * * * * * * * * * * * */ -html { - font-size: 62.5%; -} - -body { - background-color:#fff; - font-size:16px; - font:400 1.6rem/1.4 'source sans pro', 'helvetica neue', helvetica, arial; - color:$grey; - padding:0; //80px 0 150px; -} - -a { - color:$blue; - &:hover { - color:darken($blue, 10%); - } -} -p { - font-size: 16px; - font-size:1.6rem; - line-height:1.3; - strong, b { - color:darken($grey, 20%); - font-weight: 500; - } -} -h1 { - font-size: 50px; - font-size: 5rem; - color:$orange; - font-weight:400; - margin:0 0 30px; -} -h2 { - font-size: 30px; - font-size:3rem; - color:$black; - font-weight:400; -} -h3 { - font-weight:600; - font-size:2rem; - margin-bottom:10px; - color:$black; -} -h4 { - font-weight:600; - font-size: 16px; - font-size:1.6rem; - margin-bottom:10px; - color:$black; -} - -.btn { - font-size: 18px; - font-size: 1.8rem; - padding:8px 30px; - border-radius: 6px; - border:solid 2px $blue; - display:inline-block; - color:$blue; - text-decoration: none; - - &.btn-primary { - border-color:$blue; - background-color: $blue; - color:#fff; - font-weight: 500; - &:hover { - background-color: darken($blue, 10%); - color:#eee; - } - } -} -.btn:hover { - text-decoration: none; - color:darken($blue, 10%); - border-color:darken($blue, 10%); -} -.donate-form { - display:inline-block; - margin-left:5px; -} -.donate { - border:none; - background:none; - padding:0; - margin:0 10px 0 0; - float:left; - span { - // #gradient > .vertical(#fafafa, #eaeaea); - border: 1px solid #b7b7b7; - border-bottom-color: #888; - display:block; - padding: 2px 5px 2px 4px; - color: #111; - text-decoration: none; - text-shadow: 0 1px 0 #fff; - white-space: nowrap; - cursor: pointer; - border-radius: 3px; - font: bold 11px/14px "Helvetica Neue",Helvetica,Arial,sans-serif; - padding-left:20px; - position:relative; - &:hover { - color:#fff; - text-decoration: none; - background-color:$blue; - text-shadow: 0 1px 0 darken($blue, 20%); - background-image:none; - border-color:darken($blue, 10%); - } - &:before { - content:" "; - display: block; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjMyOUYyMjMyNTAzNDExRTM4RjkxRjY4OERCMDI3N0ZEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjMyOUYyMjMzNTAzNDExRTM4RjkxRjY4OERCMDI3N0ZEIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzI5RjIyMzA1MDM0MTFFMzhGOTFGNjg4REIwMjc3RkQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzI5RjIyMzE1MDM0MTFFMzhGOTFGNjg4REIwMjc3RkQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6BnPLgAAAENklEQVR42tRVTUxjVRT+3usr7WtLy//wV0YIIFBLJwYNkChOnGCMCZMYEo2uTMRodKFxdi5cqUwMKxdG3ao4sxuTyWAwJIoybQBxhkmGQAoMM/xJSynQn9f29fndpyXMj8bNLDzJyXt9997vnvOd75xKhmHgYZiMh2TKvR80TauOx+PuWCxWmclkLJIk5elWukpbLS8vX3Y6nZLFYkn9J+Ctra1HQ6HQe0tLSy+n05rHZrfDoapQHQ5YrVbIkgRJlpDP5zN2m22+qanpemtr65jL5brM44l7gSXBcTAYfH109LuvVKcLrS0tKCku5kIOei6FXCYBxWKF010Kt6cMqsuNREpDOBzmehb9/f3nvF7vyH3Aa2trJz45f36rvs4Lh5zByo0gbi0vIBb5A6mshlwuL7bBYpGh2uyoqj2J9s4n0P3M89AMBalkQvf7/V8uLi4u2Gy2+q6uri9qamrWpWAo9NTFCxd/jqzewOK1n2Dk09AJlaNYstm7q0w2TLfSVacHz734GvxPnsby8rK5J5Vihrnc7aGhoReUvJ5HW2sTLvxyGdE4QY2/DjNI6Lr5+Du3Y+/cY0nGMRsK4sTJdtR7vR+fHRj4TNf1V4aHh0fm5uYSCjnOO1wefPr51/j+0iVM/HAFG2thxON7BDIgGyYODAEsW1BWVomGphY8ffoMfIEAZmd/g+8xf5gFztO/kWV5JJvNHiqVlRWYn78Om13Fu++fw1tvv4M7t29hZWUVWlrD4T4vkGS43B4U2YrAQsGuOnBwcIjV1RVmleNlvA2IRiKRwObmJnp7e8sV6lJUB3t7e6A+4XIVo8PnR+epxykx2cybEiPfWSQSScRiu9jd3eX7ockpQdHY2HiHmZeNj4+fKaaiOjs70woXbtI/2tnZ+aC0tJTRSWYUQrtsAgg5siBgsyCZTJouLiGf5tPn84kLuiYmJl6amZl5dnBwcKCqqmrT1PHCwoI0PT291tzcXF9SUgI7m6OoqOgIWACwI80IC+AHBwdgMGhrawtTFdsbGxuRnp6eN/v6+jaPGkTY2NiYO51OX6muru51sNsURTkCFtEJYOHcQxoSJh288GpFRcWHHo8nzaCm6+rqNGZs3NXSHR0d6cnJyeT6+rrJG8UOVvgIuECHiDoajWJ/fx/t7e3XyOePTF0EYSWMo9De0vGxydY+Rb/KaO2MxKSkAC6iFZFub2+bVLDbRgOBwKsClBnaeUbl3t0HTrfu7u7fOdW6WIRfOYw84psoolCFoEA4h44A/bahoeENqkgmIPHkDD113xASxjRlFsyU3tTUlEpgC+eIypQbSMUjXNNra2unOdWi1LLMSA23281BZ9MInnzgdCsYAWzkSiv8ZrUlMZO5Ryef5kY2gRjMQjViJnOampb9V+DjxkvMNbpdzH9RbboAEsM/W6j+P5n0v/vP+1OAAQAqLhyT7hjz3gAAAABJRU5ErkJggg==); - - background-repeat: no-repeat; - background-size: 14px; - width:14px; - height:14px; - z-index: 1; - position: absolute; - left:3px; - top:3px; - } - } -} -.donate-pixel { - position: absolute; -} - -table { - border-collapse:collapse; - width:100%; - margin-bottom:10px; -} -th { - background-color:rgba(0,0,0,.1); - border:solid 1px rgba(255,255,255,.1); - padding:10px 10px; - text-align:left; - font-weight: bold; - color:#ddd -} -td { - padding:10px 10px; - border:solid 1px rgba(255,255,255,.1); -} - - -.example-header { - margin-bottom:15px; - h1 { - margin-bottom:0; - } - p { - margin-top:10px; - } -} - -.continue { - margin-top: 30px; - border-top: solid 1px #eee; - padding-top: 15px; - text-align: right; - font-weight: bold; - color: #222; -} - -.footer { - //position: fixed; - //bottom:0; - clear:both; - width:100%; - height:20px; - padding:20px 0; - background-color:#111; - text-align: center; - a { - color:#fff; - &:hover { - color:$lightGrey; - } - } - .misc-share-button { - display: inline-block; - height: 20px; - overflow: hidden; - } - .tweet { - width:100px; - } - .facebook { - width:90px; - .fb_iframe_widget span { - vertical-align: top !important; - } - } -} - -/* * * * * * * * * * * * * * * * * * * * * -* Start page -* * * * * * * * * * * * * * * * * * * * */ - -.intro { - @extend %clearfix; - margin:0 auto; - max-width: 900px; - padding:80px; - box-sizing: border-box; - .intro-logo { - text-align: center; - img { - max-width: 80%; - } - float: left; - width:30%; - } - .intro-text { - float: left; - width:70%; - h1 { - font-size: 72px; - font-size: 7.2rem; - margin: 0 0 1px; - small { - font-size: 30px; - font-size: 3rem; - color:lighten($grey, 20%); - } - } - h2 { - font-size: 25px; - font-size: 2.5rem; - font-weight: 300; - margin: 0 0 25px; - color:lighten($grey, 20%); - a { - font-weight: 500; - } - em { - color:darken($grey, 20%); - } - } - .btn { - margin-right:10px; - } - } -} - -.misc { - @extend %clearfix; - clear:both; - background-color:$lightGrey; - padding:30px; - margin:30px -30px; - color:#333; - h3 { - margin:0 0 5px; - } - .misc-share { - margin-bottom:5px; - } - .misc-author { - .misc-author-pic { - float:left; - margin-right:20px; - border-radius: 5px; - } - h4 { - margin-top:0; - margin-bottom: 4px; - } - p { - font-size: 14px; - font-size:1.4rem; - color:lighten($black, 10%); - margin-top:0; - margin-bottom: 10px; - } - } -} -// .loaded .misc-carbon:before & { -// content:"Everytime you hide an ad... An open source developer goes to go to bed instead of buying a coffee :'(\A <--- Cheat? Donate! :D"; -// white-space: pre-wrap; -// width:260px; -// display: block; -// text-align: center; -// left:20px; -// top:20px; -// position: relative; -// font-size: 12px; -// font-size:1.2rem; -// font-family: monaco, monospace; -// } - -.startpage-quotes { - @extend %clearfix; - padding:60px 0; - .startpage-quotes-quote { - width:33%; - float:left; - padding: 0 10px; - box-sizing: border-box; - } -} -.startpage-more-examples { - clear:both; - ul { - padding:0 !important; - margin:0; - } - li { - display:inline-block; - margin-right:15px; - } -} - -.startpage-examples { - .startpage-example { - @extend %clearfix; - display:none; - &.active { - display: block; - } - } -} - -.annotated-examples { - h3 { - margin-top:50px; - } -} -.columns { - overflow: hidden; - padding:0; - margin:0 -30px 5px; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - overflow: hidden; - - .column { - padding:20px 30px; - flex: 1; - background-color: $lightGrey; - &:last-child { - background-color: darken($lightGrey, 2%); - } - pre { - background-color: transparent; - margin:0; - padding:0; - } - } -} - -.annotated-list { - box-sizing: border-box; - @extend %clearfix; - .list { - padding-top:20px; - & > div { - padding:10px 0; - border-top:solid 1px rgba(255,255,255,.1); - } - } - .avatar { - max-width: 150px; - img { - max-width: 100%; - } - } - h3 { - font-size:16px; - font-size: 1.6rem; - margin:0 0 3px; - font-weight: bold; - //color:#fff; - } - p { - margin:0; - //color:#eee; - } - - input { - border-radius: 25px; - padding:7px 14px; - background-color: transparent; - border:solid 1px rgba(0,0,0,.2); - width:200px; - box-sizing: border-box; - color:$black; - margin-bottom:5px; - } - input:focus { - outline:none; - border-color:#aaa; - } - .sort { - font-size:12px; - font-size: 1.2rem; - padding:5px 15px; - border-radius: 25px; - border:none; - display:inline-block; - color:$black; - text-decoration: none; - background-color: rgba(0,0,0,.05); - margin:2px 0; - } - .sort:hover { - text-decoration: none; - background-color: rgba(0,0,0,.1); - } - .sort:focus { - outline:none; - } - .sort:after { - width: 0; - height: 0; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-bottom: 4px solid transparent; - content:""; - position: relative; - top:-10px; - right:-4px; - } - .sort.asc:after { - width: 0; - height: 0; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid $black; - content:""; - position: relative; - top:11px; - right:-4px; - } - .sort.desc:after { - width: 0; - height: 0; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-bottom: 4px solid $black; - content:""; - position: relative; - top:-9px; - right:-4px; - } -} - -/* * * * * * * * * * * * * * * * * * * * * -* Examples -* * * * * * * * * * * * * * * * * * * * */ -.nav-tabs { - .active a { - background-color: $lightGrey !important; - } -} - - - -/* * * * * * * * * * * * * * * * * * * * * -* Paging -* * * * * * * * * * * * * * * * * * * * */ -.paging { - padding-bottom:10px; - clear:both; - float:left; -} -.paging li { - display:block; - float:left; - padding:10px 15px; - border-radius:50%; -} -.paging li a { - color:#999; - text-decoration:none; - display:inline-block; - line-height:14px; -} -.paging li.active a { - font-weight:bold; - color:#eee; - font-size:18px; - margin:-1px; -} -.paging li a:hover { - color:#eee; -} - -code { - background-color: $lightGrey; - border: solid 1px darken($lightGrey, 5%); - border-radius: 5px; - padding: 1px 4px; -} -pre { - padding:30px; - margin:0; - line-height:1.7; - color:#666; -} -pre code { - padding:0; - border:none; - background-color: transparent; - border-radius: 0; -} - -pre, code { - font-family: monospace, 'monaco', sans-serif; - font-size: 12px; - font-size: 1.2rem; -} -pre code .annotation { - background-color: $orange; - color: #fff; - padding: 2px 6px; - border-radius: 11px; - cursor:help; - &:hover { - background-color:darken($orange, 10%); - } -} diff --git a/docs/assets/images/graphics/favicon.ico b/docs/assets/images/graphics/favicon.ico deleted file mode 100644 index 60055ebb8bfedd0c891d0d511195c518b9a1e74f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41787 zcmeFa2UJu`)+l_sp_?W*IYX1PBqfI?C`l9%5RoiVk)R}rP0kr5h$N9H0wz$&8375R zppv5~N=}0G<9IK#7$4p+_kJ_)`~T^+&Z??iJD)mLyQ(${01yBdKq7&?5(V(U0N?}w z04UV2ZAt)e*ndy~kpY!!LMy1pw^P{oaojiC}R* zPZ|C!iuLtyKF_zoJKP(U;iz601FB#~a)9Bt=shn`M~)TnV1MfYaSr1Ve32&kx9AS` zfw%{GfchTn|08vf2IK+SbP#{}eIE9=o`blcuRy;Xgn_j4ZP&4juT!w|?boprC1Tj= zN2=JRf%NZu58{G4R7Rj)9fX1OV0*k!;GgsWdF=P?L(NPC$6`?`Yo;4@uu@}KzZ(}QE|F#mzR0(pRV(@!+9UwR_; zp2&aLwoecG@2|c;a18vF@dMI>zrQkmf8p@Q^w=M_`!qk62fttN{p`P^Kl1(l$m{

                                  {a^BbVk4*n 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 UYicSKKXCxi*EZHF)xd}RANBl^O8@`> diff --git a/docs/assets/images/graphics/javve-coffee.jpg b/docs/assets/images/graphics/javve-coffee.jpg deleted file mode 100644 index 9c67cc5b28269f4f5101830dc8868075c1b07685..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4436 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 diff --git a/docs/assets/images/graphics/javve.jpg b/docs/assets/images/graphics/javve.jpg deleted file mode 100644 index 67f440c7661477735acf2e9fe4422541fc340d73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7363 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 B3|0UD diff --git a/docs/assets/images/graphics/listjs-logo.png b/docs/assets/images/graphics/listjs-logo.png deleted file mode 100644 index d946d8bd2b0c61a8aa706f456c52c6e6d74b234d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9780 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 N(i=6o(${9e{|B2mkaYk6 diff --git a/docs/assets/images/tests/boba.jpeg b/docs/assets/images/tests/boba.jpeg deleted file mode 100644 index 3003f7bfda3d0090578da1904e62d5c54dba057b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3271 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 REz>k->m4myyy)?#{{ZJ5(wYDO diff --git a/docs/assets/images/tests/darth.jpeg b/docs/assets/images/tests/darth.jpeg deleted file mode 100644 index f4ff609a0648f7a22ee13e936738f9137da5771b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2109 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 Fe*vF=e|Z1^ diff --git a/docs/assets/images/tests/rey.jpeg b/docs/assets/images/tests/rey.jpeg deleted file mode 100644 index a399b78b9782c83e931785b36b4164e079074c6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2281 zcmb7;dpy$%AIE>&%$T`MqjH%rVY9T@%#d4d8)i5wOi{Vta?7O)Ix40dg^4D)ESDkV zGDT79h>%-|yJGrThaNKq|qECCP*06@D3?2H15 zfT%D`1STvh0uzD5Ma9HrCB+d4ae0)CluN=g_FT`kN(g1V9t-Uv@1>QN{Z zRh;oLW3sufK1B}%hr`7Y;&PIba(Ze?YI^@SJ1qcG1PBLgAs`h1j08cDpq(~A9snSq ze*peP7zPyrL;jI^QUC}70Yjj|PzdzD9t4I60Z^p0vM|AP55qI`7EDF;NJ2i!%(1#v z=Jah@bEmMcyTQHxQ@NW3gCM&Cjoe+@Ee9a~&Vj&4WrC?Rgpt4V9zg6WFcN|Ui~&Kf z1qzCCzWayI$(4)dB!of1ebcM?&7wUoT})im<$rk`%?RYIm-pJ7>^^9(kr^Ve)e*Bc zuXr4ui^cByc-gPmRmT;Td?8ykd9$Jt-C$U25?|XK7Q^#nT2dL@jp?Plepkcrw#t!0 zqQtudl~uf-xt4k)Mqz97r$_V;xs{162+PRJU!!B@;Z#QiH%rl&puTJf6`n;gOc=Yb zQKNtLB}Ekx9{g7NgbIc*{#G|r-{XNHWR zE&|M}Ry?oWa^u@`sl$c*dz83Y|5wS{Y)nhydZO{!)XB>MUMD`IU@uHsD7Q*xuEc5U z*v9I7TA@Uv+m@G7{&tVGVKpX}?Fqg)U31wfHL)1d5;xrc0pgEM(;EQv0Hx?39?kndu)BGMqD|;4FK`s`S|g_eY(X!6OxemTV1vIO=%rsXf;6XE1YFQEMkl;N4SV ze3F|}|Ebp+`+{m$idhC~qKY=;eHCC6q4ao4Ut~3QYW%>j%5ReE7XsK8jq0;$^CR@= zgx5!F;h~;gSNcO&62K>z#f~E#j`SwjTaPG2lp|k?+w4AlH zG3;K=|Foo8#9p)>-7NBE3Ouj(c0?D6Ij$%r_Wy4H4~kerlrQ^6cq<(@-2SNr6K z5_K~Ja13T7Uljrgs$b{JG{5~@7OjL!g41u!y1Br)v~c%tU&xm4rrz@6`5BznO|3Nz z*ms=gB)>;YjAxZb44Vjn{zmuC3y7>o|QB-=kH{G{)2HPK)1~}b(_$X3+&EMXBThC72<=whX zNr;%%V;jx6k$c6#dEJKood50$9LgxQBDYgbz6n{veFm7CsAX%D?QfeV+JWCX_Pvz_}cH zGc^V&I9kVP>^!X_ReZSiXvgi;0fmc4i=wzri)Va>sCQ;LB+v03AeA5aSSwsMmK%BL z_7z31?~6Fd+8~ktyQqB@OVnXBmSg72!W`+;bR02z&P^*yXmBoC8;j6=lN5F+q&=pn z)Y?1;1Zz|^4h!&ReTeA1F6}k4@=OxX|BF38;Xa8|Zm2Ci^7hzZ=7H5J`|^pHTik(X z@vBk$kM=RpHhzB2*~(oavnzu0U)q(ZwPVFr^(L1CU(S0b%9KwVNUW?ejD196t!hcZ zN{OydyxK!ws*=y*vHHiaUHY)Kr2DY!@jysYG@F=y^VGExuUO2LDkhkU0yqA^EikD` zTmI~8f*P?&P5P9I_}OpU$SKl=esTLbf7&47Tki>H66anbooAV3#`DWIFkxV zbpa;=FaF7~DPW7kyPmmx9=aoTdJfqr9#4%#pzf`g1WVp3U<;k{N0?setTimeout((function(){e(r,n,s)}),1):(t.update(),n(s))}}},"./src/filter.js":function(t){t.exports=function(t){return t.handlers.filterStart=t.handlers.filterStart||[],t.handlers.filterComplete=t.handlers.filterComplete||[],function(e){if(t.trigger("filterStart"),t.i=1,t.reset.filter(),void 0===e)t.filtered=!1;else{t.filtered=!0;for(var r=t.items,n=0,s=r.length;nv.page,a=new g(t[s],void 0,n),v.items.push(a),r.push(a)}return v.update(),r}m(t.slice(0),e)}},this.show=function(t,e){return this.i=t,this.page=e,v.update(),v},this.remove=function(t,e,r){for(var n=0,s=0,i=v.items.length;s-1&&r.splice(n,1),v},this.trigger=function(t){for(var e=v.handlers[t].length;e--;)v.handlers[t][e](v);return v},this.reset={filter:function(){for(var t=v.items,e=t.length;e--;)t[e].filtered=!1;return v},search:function(){for(var t=v.items,e=t.length;e--;)t[e].found=!1;return v}},this.update=function(){var t=v.items,e=t.length;v.visibleItems=[],v.matchingItems=[],v.templater.clear();for(var r=0;r=v.i&&v.visibleItems.lengthe},innerWindow:function(t,e,r){return t>=e-r&&t<=e+r},dotted:function(t,e,r,n,s,i,a){return this.dottedLeft(t,e,r,n,s,i)||this.dottedRight(t,e,r,n,s,i,a)},dottedLeft:function(t,e,r,n,s,i){return e==r+1&&!this.innerWindow(e,s,i)&&!this.right(e,n)},dottedRight:function(t,e,r,n,s,i,a){return!t.items[a-1].values().dotted&&(e==n&&!this.innerWindow(e,s,i)&&!this.right(e,n))}};return function(e){var n=new i(t.listContainer.id,{listClass:e.paginationClass||"pagination",item:e.item||"

                                • ",valueNames:["page","dotted"],searchClass:"pagination-search-that-is-not-supposed-to-exist",sortClass:"pagination-sort-that-is-not-supposed-to-exist"});s.bind(n.listContainer,"click",(function(e){var r=e.target||e.srcElement,n=t.utils.getAttribute(r,"data-page"),s=t.utils.getAttribute(r,"data-i");s&&t.show((s-1)*n+1,n)})),t.on("updated",(function(){r(n,e)})),r(n,e)}}},"./src/parse.js":function(t,e,r){t.exports=function(t){var e=r("./src/item.js")(t),n=function(r,n){for(var s=0,i=r.length;s0?setTimeout((function(){e(r,s)}),1):(t.update(),t.trigger("parseComplete"))};return t.handlers.parseComplete=t.handlers.parseComplete||[],function(){var e=function(t){for(var e=t.childNodes,r=[],n=0,s=e.length;n]/g.exec(t)){var e=document.createElement("tbody");return e.innerHTML=t,e.firstElementChild}if(-1!==t.indexOf("<")){var r=document.createElement("div");return r.innerHTML=t,r.firstElementChild}}},a=function(e,r,n){var s=void 0,i=function(e){for(var r=0,n=t.valueNames.length;r=1;)t.list.removeChild(t.list.firstChild)},function(){var r;if("function"!=typeof t.item){if(!(r="string"==typeof t.item?-1===t.item.indexOf("<")?document.getElementById(t.item):i(t.item):s()))throw new Error("The list needs to have at least one item on init otherwise you'll have to add a template.");r=n(r,t.valueNames),e=function(){return r.cloneNode(!0)}}else e=function(e){var r=t.item(e);return i(r)}}()};t.exports=function(t){return new e(t)}},"./src/utils/classes.js":function(t,e,r){var n=r("./src/utils/index-of.js"),s=/\s+/;Object.prototype.toString;function i(t){if(!t||!t.nodeType)throw new Error("A DOM element reference is required");this.el=t,this.list=t.classList}t.exports=function(t){return new i(t)},i.prototype.add=function(t){if(this.list)return this.list.add(t),this;var e=this.array();return~n(e,t)||e.push(t),this.el.className=e.join(" "),this},i.prototype.remove=function(t){if(this.list)return this.list.remove(t),this;var e=this.array(),r=n(e,t);return~r&&e.splice(r,1),this.el.className=e.join(" "),this},i.prototype.toggle=function(t,e){return this.list?(void 0!==e?e!==this.list.toggle(t,e)&&this.list.toggle(t):this.list.toggle(t),this):(void 0!==e?e?this.add(t):this.remove(t):this.has(t)?this.remove(t):this.add(t),this)},i.prototype.array=function(){var t=(this.el.getAttribute("class")||"").replace(/^\s+|\s+$/g,"").split(s);return""===t[0]&&t.shift(),t},i.prototype.has=i.prototype.contains=function(t){return this.list?this.list.contains(t):!!~n(this.array(),t)}},"./src/utils/events.js":function(t,e,r){var n=window.addEventListener?"addEventListener":"attachEvent",s=window.removeEventListener?"removeEventListener":"detachEvent",i="addEventListener"!==n?"on":"",a=r("./src/utils/to-array.js");e.bind=function(t,e,r,s){for(var o=0,l=(t=a(t)).length;o32)return!1;var a=n,o=function(){var t,r={};for(t=0;t=p;b--){var j=o[t.charAt(b-1)];if(C[b]=0===m?(C[b+1]<<1|1)&j:(C[b+1]<<1|1)&j|(v[b+1]|v[b])<<1|1|v[b+1],C[b]&d){var x=l(m,b-1);if(x<=u){if(u=x,!((c=b-1)>a))break;p=Math.max(1,2*a-c)}}}if(l(m+1,a)>u)break;v=C}return!(c<0)}},"./src/utils/get-attribute.js":function(t){t.exports=function(t,e){var r=t.getAttribute&&t.getAttribute(e)||null;if(!r)for(var n=t.attributes,s=n.length,i=0;i=48&&t<=57}function i(t,e){for(var i=(t+="").length,a=(e+="").length,o=0,l=0;o=i&&l=a?-1:l>=a&&o=i?1:i-a}i.caseInsensitive=i.i=function(t,e){return i((""+t).toLowerCase(),(""+e).toLowerCase())},Object.defineProperties(i,{alphabet:{get:function(){return e},set:function(t){r=[];var s=0;if(e=t)for(;sFuzzy search - -

                                  - Note: The fuzzy search plugin is - deprecated since v1.5.0, it's now bundled into List.js. Read the - old docs here. -

                                  - -

                                  The difference between Fuzzy Search and List.js default search

                                  - -

                                  The default search will conduct a time efficient search for an exact match in the content searched, while the fuzzy search will render results depending on if they are included anywhere in the content.

                                  - -

                                  Basic example

                                  -
                                  var items = [
                                  -    { character: "Guybrush Threepwood", game: "The Secret of Monkey Island" },
                                  -    { character: "Manny Calavera", game: "Grim Fandango" },
                                  -    { character: "Bernard Bernoulli", game: "Maniac Mansion" }
                                  -];
                                  -
                                  -list.search('gu thre'); // return none
                                  -list.fuzzySearch('gu thre') // return 1 item
                                  -
                                  - - -

                                  Options

                                  -

                                  All options are optional. Simplest implementation is:

                                  -
                                  new List(id, { fuzzySearch: options });
                                  -
                                    -
                                  • - searchClass String, default: fuzzy-search
                                    - What is the class of the search field? -
                                  • -
                                  • - location Int, default: 0
                                    - Approximately where in the text is the pattern expected to be found? -
                                  • -
                                  • - distance Int, default: 100
                                    - Determines how close the match must be to the fuzzy location (specified above). An exact letter match which is ‘distance’ characters away from the fuzzy location would score as a complete mismatch. A distance of 0 requires the match be at the exact location specified, a threshold of 1000 would require a perfect match to be within 800 characters of the fuzzy location to be found using a 0.8 threshold. -
                                  • -
                                  • - threshold Int, default: 0.4
                                    - At what point does the match algorithm give up. A threshold of 0.0 requires a perfect match (of both letters and location), a threshold of 1.0 would match anything. -
                                  • -
                                  • - multiSearch Boolean, default: true
                                    - Subtract arguments from the searchString or put searchString as only argument -
                                  • -
                                  - -

                                  Implementation

                                  -
                                  <div id="list-id">
                                  -  <input class="fuzzy-search" />
                                  -  <ul class="list">
                                  -    / A bunch of items /
                                  -  </ul>
                                  -</div>
                                  -
                                  -<script>
                                  -
                                  -var options = {
                                  -  valueNames: [ 'name', 'category' ],
                                  -  fuzzySearch: {
                                  -    searchClass: "fuzzy-search",
                                  -    location: 0,
                                  -    distance: 100,
                                  -    threshold: 0.4,
                                  -    multiSearch: true
                                  -  }
                                  -};
                                  -
                                  -var listObj = new List('list-id', options);
                                  -
                                  -// Search manually
                                  -listObj.fuzzySearch('my search');
                                  -
                                  -// Search manually on specific columns
                                  -listObj.fuzzySearch('my search', [ 'name' ]);
                                  -
                                  -</script>
                                  -
                                  - -

                                  A big thanks to LuukvE who made a commit from which I could create this Fuzzy Search plugin.

                                  - - diff --git a/docs/docs/index.html b/docs/docs/index.html deleted file mode 100755 index 45632742..00000000 --- a/docs/docs/index.html +++ /dev/null @@ -1,168 +0,0 @@ ---- -layout: default -title: Really simple example ---- - -

                                  Really simple examples

                                  -

                                  You can use List.js on either existing HTML or create new with super simple templating.

                                  - - -

                                  Example 1: Using existing list

                                  -
                                  HTML
                                  - -
                                  <div id="hacker-list">
                                  -  <ul class="list">
                                  -    <li>
                                  -       <h3 class="name">Jonny</h3>
                                  -       <p class="city">Stockholm</p>
                                  -    </li>
                                  -    <li>
                                  -      <h3 class="name">Jonas</h3>
                                  -      <p class="city">Berlin</p>
                                  -    </li>
                                  -  </ul>
                                  -</div>
                                  - -
                                  JavaScript
                                  -
                                  var options = {
                                  -    valueNames: [ 'name', 'city' ]
                                  -};
                                  -
                                  -var hackerList = new List('hacker-list', options);
                                  - - -

                                  Example 2: Create list on initialization: Version 1

                                  - -
                                  HTML
                                  -
                                  <div id="hacker-list">
                                  -    <ul class="list"></ul>
                                  -</div>
                                  - -
                                  JavaScript
                                  -
                                  var options = {
                                  -  valueNames: [ 'name', 'city' ],
                                  -  item: '<li><h3 class="name"></h3><p class="city"></p></li>'
                                  -};
                                  -
                                  -var values = [
                                  -  { name: 'Jonny', city:'Stockholm' }
                                  -  , { name: 'Jonas', city:'Berlin' }
                                  -];
                                  -
                                  -var hackerList = new List('hacker-list', options, values);
                                  - -

                                  Example 3: Create list on initialization: Version 2

                                  - -
                                  HTML
                                  -
                                  <div id="hacker-list">
                                  -  <ul class="list"></ul>
                                  -</div>
                                  -
                                  -<div style="display:none;">
                                  -  <!-- A template element is needed when list is empty, TODO: needs a better solution -->
                                  -  <li id="hacker-item">
                                  -   <h3 class="name"></h3>
                                  -   <p class="city"></p>
                                  -  </li>
                                  -</div>
                                  - -
                                  JavaScript
                                  -
                                  var options = {
                                  -    item: 'hacker-item'
                                  -};
                                  -
                                  -var values = [
                                  -    { name: 'Jonny', city:'Stockholm' }
                                  -    , { name: 'Jonas', city:'Berlin' }
                                  -];
                                  -
                                  -var hackerList = new List('hacker-list', options, values);
                                  - -

                                  Example 4: Index existing list and then add

                                  - -
                                  HTML
                                  -
                                  <div id="hacker-list">
                                  -  <ul class="list">
                                  -   <li>
                                  -     <h3 class="name">Jonny</h3>
                                  -     <p class="city">Stockholm</p>
                                  -   </li>
                                  -  </ul>
                                  -</div>
                                  - -
                                  JavaScript
                                  -
                                  var options = {
                                  -  valueNames: ['name', 'city']
                                  -};
                                  -
                                  -var hackerList = new List('hacker-list', options);
                                  -
                                  -hackerList.add( { name: 'Jonas', city:'Berlin' } );
                                  - -

                                  Example 5: Add automagic search and sort inputs and buttons

                                  - -
                                  HTML
                                  -
                                  <div id="hacker-list">
                                  -
                                  -  <input class="search" />
                                  -  <span class="sort" data-sort="name">Sort by name</span>
                                  -  <span class="sort" data-sort="city">Sort by city</span>
                                  -
                                  -  <ul class="list">
                                  -   <li>
                                  -     <h3 class="name">Jonny</h3>
                                  -     <p class="city">Stockholm</p>
                                  -   </li>
                                  -   <li>
                                  -     <h3 class="name">Jonas</h3>
                                  -     <p class="city">Berlin</p>
                                  -   </li>
                                  -  </ul>
                                  -</div>
                                  - -
                                  JavaScript (nothing special)
                                  -
                                  var options = {
                                  -  valueNames: [ 'name', 'city' ]
                                  -};
                                  -
                                  -var hackerList = new List('hacker-list', options);
                                  - -

                                  Read more here

                                  - -

                                  Example 6: Using data attributes and other custom attributes (introduced in v1.2.0)

                                  - -
                                  HTML
                                  -
                                  <div id="hacker-list">
                                  -  <ul class="list">
                                  -   <li data-id="1">
                                  -     <a href="http://javve.com" class="link name">Jonny</a>
                                  -     <p class="born timestamp" data-timestamp="1234">1986</p>
                                  -     <img class="image" src="javve.jpg" />
                                  -   </li>
                                  -  </ul>
                                  -</div>
                                  - -
                                  JavaScript
                                  -
                                  var options = {
                                  -  valueNames: [
                                  -    'name',
                                  -    'born',
                                  -    { data: ['id'] },
                                  -    { name: 'timestamp', attr: 'data-timestamp' },
                                  -    { name: 'link', attr: 'href' },
                                  -    { name: 'image', attr: 'src' }
                                  -  ]
                                  -};
                                  -
                                  -var hackerList = new List('hacker-list', options);
                                  -
                                  -hackerList.add({
                                  -  name: 'Jonas',
                                  -  born: '1985',
                                  -  id: 2,
                                  -  timestamp: '1337',
                                  -  link: 'http://arnklint.com'
                                  -  image: 'jonas.gif'
                                  -});
                                  - -
                                  Next topic: Options ›
                                  diff --git a/docs/docs/item-api.html b/docs/docs/item-api.html deleted file mode 100644 index 2cadf428..00000000 --- a/docs/docs/item-api.html +++ /dev/null @@ -1,77 +0,0 @@ ---- -layout: default -title: Item API ---- - -

                                  -Item API

                                  - -

                                  These methods are available for all Items that are returned by -the list.

                                  - -

                                  -Properties

                                  - -
                                    -
                                  • - elm Element
                                    - The actual item DOM element -
                                  • -
                                  • - _values Array
                                    - Direct access to the item's values. Simplifies debugging. Note: Always use item.values() when interacting with the values. -
                                  • -
                                  - -

                                  Methods

                                  - -
                                    -
                                  • -

                                    values(newValues)

                                    -
                                      -
                                    • -

                                      - newValues optional
                                      - If variable newValues are present the new values replaces the current item values - and updates the list. - If newValues are not present, the function returns the current values. -

                                      -
                                      item.values() // { name: "Jonny", age: 24, city: "Umeå" }
                                      -  item.values({
                                      -      age: 25,
                                      -      city: "Stockholm"
                                      -  });
                                      -  item.values() // { name: "Jonny", age: 25, city: "Stockholm" }
                                      -  
                                      -
                                    • -
                                    -
                                  • -
                                  • -

                                    - show()
                                    - Shows the item -

                                    -
                                  • -
                                  • -

                                    - hide()
                                    - Hides the item (removes the element from the list, and then when its shown it's appended again. The element will thereby change position in the list. A bug, but a good solution is yet to be found.) -

                                    -
                                  • -
                                  • -

                                    - matching() Boolean
                                    - Returns boolean. True if the item matches the current filter and search. Visible items - always matches, but matching items are not always visible. -

                                    -
                                  • -
                                  • -

                                    - visible() Boolean
                                    - Returns boolean. True if the item is visible. Visible items - always matches, but matching items are not always visible. -

                                    -
                                  • -
                                  - - diff --git a/docs/docs/pagination.html b/docs/docs/pagination.html deleted file mode 100644 index f1554cf1..00000000 --- a/docs/docs/pagination.html +++ /dev/null @@ -1,120 +0,0 @@ ---- -layout: default -title: Pagination ---- - -

                                  Pagination

                                  - -

                                  - Note: The pagination plugin is - deprecated since v1.5.0, it's now bundled into List.js. Read the - old docs here. -

                                  - -

                                  Basic example

                                  -
                                  <div id="listId">
                                  -  <ul class="list">
                                  -      // A bunch of items
                                  -  </ul>
                                  -  <ul class="pagination"></ul>
                                  -</div>
                                  -
                                  -<script>
                                  -  var options = {
                                  -    valueNames: [ 'name', 'category' ],
                                  -    page: 3,
                                  -    pagination: true
                                  -  };
                                  -
                                  -  var listObj = new List('listId', options);
                                  -</script>
                                  -
                                  - - - -

                                  Options

                                  -
                                    -
                                  • - paginationClass String, default: “pagination”
                                    - The class that defines which ul that should contain the pagination (must be inside the list container) -
                                  • -
                                  • - innerWindow Int, default: 2
                                    - How many pages should be visible on each side of the current page.
                                    - innerWindow: 2 … 3 4 5 6 7 …
                                    - innerWindow: 1 … 4 5 6 … -
                                  • -
                                  • - outerWindow Int, default: 0
                                    - How many pages should be visible on from the beginning and from the end of the pagination.
                                    - outerWindow: 0 … 3 4 5 6 7…
                                    - outerWindow: 2 1 2 … 4 5 6 7 8 … 11 12 -
                                  • -
                                  • - left Int, default: 0
                                    - Same as outerWindow but only from left. - outerWindow: 2 and left: 1 1 … 4 5 6 7 8 … 11 12 -
                                  • -
                                  • - right Int, default: 0
                                    - Same as left but from right. -
                                  • -
                                  • - item String, default <li><a class='page' href='#'></a></li>
                                    - Template for the pagination items. -
                                  • -
                                  - -

                                  Notice

                                  -

                                  The number of items at each page are decided by the List.js own property page. To set this just add page: Number to the option object sent into the List.js constructor (as been done in both of the examples at this page).

                                  - -

                                  Generated output

                                  - -
                                  <div id="listId">
                                  -  <ul class="list">
                                  -      / A bunch of items /
                                  -  </ul>
                                  -  <ul class="pagination">
                                  -    <li>
                                  -      <a class="page active" href="javascript:function Z(){Z=""}Z()">1</a>
                                  -    </li>
                                  -    <li>
                                  -      <a class="page" href="javascript:function Z(){Z=""}Z()">2</a>
                                  -    </li>
                                  -    <li>
                                  -      …
                                  -    </li>
                                  -  </ul>
                                  -</div>
                                  -
                                  - -

                                  Double pagination

                                  - -
                                  <div id="listId">
                                  -  <ul class="paginationTop"></ul>
                                  -  <ul class="list">
                                  -    // A bunch of items
                                  -  </ul>
                                  -  <ul class="paginationBottom"></ul>
                                  -</div>
                                  -
                                  -<script>
                                  -  var listOptions = {
                                  -    valueNames: [ 'name', 'category' ],
                                  -    page: 3,
                                  -    pagination: [{
                                  -      name: "paginationTop",
                                  -      paginationClass: "paginationTop",
                                  -      outerWindow: 2
                                  -    }, {
                                  -      paginationClass: "paginationBottom",
                                  -      innerWindow: 3,
                                  -      left: 2,
                                  -      right: 4
                                  -    }]
                                  -  };
                                  -
                                  -  var listObj = new List('listId', listOptions);
                                  -</script>
                                  - - diff --git a/docs/docs/plugins/build.html b/docs/docs/plugins/build.html deleted file mode 100644 index 80ffad82..00000000 --- a/docs/docs/plugins/build.html +++ /dev/null @@ -1,50 +0,0 @@ ---- -layout: default -title: Build your own plugin ---- - -

                                  Build your own plugin

                                  - -

                                  A List.js plugin is basically a function/class which returns a object on initialization.

                                  - -

                                  A basic example plugin

                                  -

                                  The plugin code list.awesomething.js

                                  -
                                  function ListAwesomething() {
                                  -  options = options || {};
                                  -  return {
                                  -    init: function(list) {
                                  -      // This method is called on initialization
                                  -    },
                                  -    name: options.name || "awesomething",
                                  -    customMethod: function() {
                                  -      return "cowabunga";
                                  -    }
                                  -  };
                                  -};
                                  -
                                  - -

                                  Using the plugin

                                  -
                                  <script src="list.js"></script>
                                  -<script src="list.awesomething.js"></script>
                                  -<script>
                                  -  var myList = new List('my-list', {
                                  -    plugins: ListAwesomething()
                                  -  });
                                  -
                                  -  myList.awesomething.customMethod(); // cowabunga
                                  -</script>
                                  -
                                  -

                                  Requirements / Specifications

                                  -
                                    -
                                  • - A plugin namned Awesome Thing have to be in a JavaScript file namned list.awesomething.js (no dash, camelcase or anything) - and the function/class have to be namned ListAwesomeThing (camelcase but no dash anything else). -
                                  • -
                                  • The plugin object must contain an init method.
                                  • -
                                  • The plugin object must contain an name attribute that defaults to the plugin name.
                                  • -
                                  - -

                                  Live example

                                  -

                                  Check this out!

                                  - - <% locals.mediaTempleTerm = "plugin" %> diff --git a/docs/docs/plugins/fuzzysearch.html b/docs/docs/plugins/fuzzysearch.html deleted file mode 100644 index bd98eae5..00000000 --- a/docs/docs/plugins/fuzzysearch.html +++ /dev/null @@ -1,97 +0,0 @@ ---- -layout: default -title: Fuzzy search plugin ---- - -

                                  Fuzzy search plugin

                                  - -

                                  Note: The fuzzy search plugin is deprecated since v1.5.0, it's now bundled into List.js.

                                  - -

                                  To use the plugin you first need to download it:

                                  - -

                                  Via GitHub

                                  - Download list.fuzzysearch.js - -

                                  Via Bower

                                  -
                                  bower install list.fuzzysearch.js
                                  - -

                                  Via CDNJS

                                  -
                                  <script src="//cdnjs.cloudflare.com/ajax/libs/list.fuzzysearch.js/0.1.0/list.fuzzysearch.min.js"></script>
                                  - -

                                  The difference between Fuzzy Search and List.js default search

                                  - -

                                  The default search will conduct a time efficient search for an exact match in the content searched, while the fuzzy search will render results depending on if they are included anywhere in the content.

                                  - -

                                  Basic example

                                  -
                                  var items = [
                                  -    { character: "Guybrush Threepwood", game: "The Secret of Monkey Island" },
                                  -    { character: "Manny Calavera", game: "Grim Fandango" },
                                  -    { character: "Bernard Bernoulli", game: "Maniac Mansion" }
                                  -];
                                  -
                                  -list.search('gu thre'); // return none
                                  -list.fuzzySearch.search('gu thre') // return 1 item
                                  -
                                  - -

                                  Implementation

                                  -
                                  <div id="list-id">
                                  -  <input class="fuzzy-search" />
                                  -  <ul class="list">
                                  -    / A bunch of items /
                                  -  </ul>
                                  -</div>
                                  -
                                  -<script>
                                  -
                                  -var fuzzyOptions = {
                                  -  searchClass: "fuzzy-search",
                                  -  location: 0,
                                  -  distance: 100,
                                  -  threshold: 0.4,
                                  -    multiSearch: true
                                  -};
                                  -var options = {
                                  -  valueNames: [ 'name', 'category' ],
                                  -  plugins: [
                                  -    ListFuzzySearch(fuzzyOptions)
                                  -  ]
                                  -};
                                  -
                                  -var listObj = new List('list-id', options);
                                  -
                                  -// Search manually
                                  -listObj.fuzzySearch.search('my search');
                                  -
                                  -// Search manually on specific columns
                                  -listObj.fuzzySearch.search('my search', { name: true });
                                  -
                                  -</script>
                                  -
                                  - - - -

                                  Options

                                  -

                                  All options are optional. Simplest implementation is:

                                  -
                                  plugins: [ ListFuzzySearch() ]
                                  -
                                    -
                                  • - location Int, default: 0
                                    - Approximately where in the text is the pattern expected to be found? -
                                  • -
                                  • - distance Int, default: 100
                                    - Determines how close the match must be to the fuzzy location (specified above). An exact letter match which is ‘distance’ characters away from the fuzzy location would score as a complete mismatch. A distance of 0 requires the match be at the exact location specified, a threshold of 1000 would require a perfect match to be within 800 characters of the fuzzy location to be found using a 0.8 threshold. -
                                  • -
                                  • - threshold Int, default: 0.4
                                    - At what point does the match algorithm give up. A threshold of 0.0 requires a perfect match (of both letters and location), a threshold of 1.0 would match anything. -
                                  • -
                                  • - multiSearch Boolean, default: true
                                    - Subtract arguments from the searchString or put searchString as only argument -
                                  • -
                                  - -

                                  A big thanks to LuukvE who made a commit from which I could create this Fuzzy Search plugin.

                                  - - diff --git a/docs/docs/plugins/index.html b/docs/docs/plugins/index.html deleted file mode 100755 index 4e8c8910..00000000 --- a/docs/docs/plugins/index.html +++ /dev/null @@ -1,38 +0,0 @@ ---- -layout: default -title: Using Plugins ---- - -

                                  Using plugins

                                  - -

                                  Getting started

                                  -

                                  To use a plugin you need two things:

                                  -
                                    -
                                  1. Include the plugins .js-file at the page.
                                  2. -
                                  3. -

                                    Include it when you instantiate List.js

                                    -
                                    new List('list-id', {
                                    -  plugins: [ ListPagination(), NameOfOtherPlugin(options) ]
                                    -});
                                    -
                                  - - -

                                  Naming and accessing plugins

                                  -

                                  It is also possible to add options and load multiple instances of the same plugins (if the plugin itself allows it).

                                  -

                                  - If the property name is added in the plugin option parameter does the plugin become - accessible through listObj.namePropertyValue.This is useful when having multiple instances of the same plugin. -

                                  -
                                  var myList = new List('list-id', {
                                  -  plugins: [
                                  -    ListPagination({ name: "topPagination", paginationClass: "top-pagination" }),
                                  -    ListPagination({ name: "bottomPagination", paginationClass: "bottom-pagination" })
                                  -  ]
                                  -});
                                  -console.log(myList.topPagination);
                                  -console.log(myList.bottomPagination);
                                  - -

                                  Build your own plugin

                                  -

                                  Go to: /docs/plugins/build

                                  - - diff --git a/docs/docs/plugins/pagination.html b/docs/docs/plugins/pagination.html deleted file mode 100644 index 403cc04e..00000000 --- a/docs/docs/plugins/pagination.html +++ /dev/null @@ -1,135 +0,0 @@ ---- -layout: default -title: Pagination plugin ---- - -

                                  Pagination plugin

                                  - -

                                  Note: The pagination plugin is deprecated since v1.5.0, it's now bundled into List.js.

                                  - -

                                  To use the plugin you first need to download it:

                                  - -

                                  Via GitHub

                                  - Download List.pagination.js - -

                                  Via Bower

                                  -
                                  bower install list.pagination.js
                                  - -

                                  Via CDNJS

                                  -
                                  <script src="//cdnjs.cloudflare.com/ajax/libs/list.pagination.js/0.1.1/list.pagination.min.js"></script>
                                  - -

                                  Basic example

                                  -
                                  <div id="listId">
                                  -  <ul class="list">
                                  -      // A bunch of items
                                  -  </ul>
                                  -  <ul class="pagination"></ul>
                                  -</div>
                                  -
                                  -<script>
                                  -  var options = {
                                  -    valueNames: [ 'name', 'category' ],
                                  -    page: 3,
                                  -    plugins: [
                                  -      ListPagination({})
                                  -    ]
                                  -  };
                                  -
                                  -  var listObj = new List('listId', options);
                                  -</script>
                                  -
                                  - - - -

                                  Options

                                  -
                                    -
                                  • - name String, default: “pagination”
                                    - Default option for all plugins. Defines how to access the plugin from the list object listObj.pluginName. -
                                  • -
                                  • - paginationClass String, default: “pagination”
                                    - The class that defines which ul that should contain the pagination (must be inside the list container) -
                                  • -
                                  • - innerWindow Int, default: 2
                                    - How many pages should be visible on each side of the current page.
                                    - innerWindow: 2 … 3 4 5 6 7 …
                                    - innerWindow: 1 … 4 5 6 … -
                                  • -
                                  • - outerWindow Int, default: 0
                                    - How many pages should be visible on from the beginning and from the end of the pagination.
                                    - outerWindow: 0 … 3 4 5 6 7…
                                    - outerWindow: 2 1 2 … 4 5 6 7 8 … 11 12 -
                                  • -
                                  • - left Int, default: 0
                                    - Same as outerWindow but only from left. - outerWindow: 2 and left: 1 1 … 4 5 6 7 8 … 11 12 -
                                  • -
                                  • - right Int, default: 0
                                    - Same as left but from right. -
                                  • -
                                  - -

                                  Notice

                                  -

                                  The number of items at each page are decided by the List.js own property page. To set this just add page: Number to the option object sent into the List.js constructor (as been done in both of the examples at this page).

                                  - -

                                  Generated output

                                  - -
                                  <div id="listId">
                                  -  <ul class="list">
                                  -      / A bunch of items /
                                  -  </ul>
                                  -  <ul class="pagination">
                                  -    <li>
                                  -      <a class="page active" href="javascript:function Z(){Z=""}Z()">1</a>
                                  -    </li>
                                  -    <li>
                                  -      <a class="page" href="javascript:function Z(){Z=""}Z()">2</a>
                                  -    </li>
                                  -    <li>
                                  -      …
                                  -    </li>
                                  -  </ul>
                                  -</div>
                                  -
                                  - -

                                  Double pagination

                                  - -
                                  <div id="listId">
                                  -  <ul class="paginationTop"></ul>
                                  -  <ul class="list">
                                  -    // A bunch of items
                                  -  </ul>
                                  -  <ul class="paginationBottom"></ul>
                                  -</div>
                                  -
                                  -<script>
                                  -  var paginationTopOptions = {
                                  -    name: "paginationTop",
                                  -    paginationClass: "paginationTop",
                                  -    outerWindow: 2
                                  -  };
                                  -  var paginationBottomOptions = {
                                  -    name: "paginationBottom",
                                  -    paginationClass: "paginationBottom",
                                  -    innerWindow: 3,
                                  -    left: 2,
                                  -    right: 4
                                  -  };
                                  -  var listOptions = {
                                  -    valueNames: [ 'name', 'category' ],
                                  -    page: 3,
                                  -    plugins: [
                                  -        ListPagination(paginationTopOptions),
                                  -        ListPagination(paginationBottomOptions)
                                  -    ]
                                  -  };
                                  -
                                  -  var listObj = new List('listId', listOptions);
                                  -</script>
                                  - - diff --git a/docs/docs/search-sort.html b/docs/docs/search-sort.html deleted file mode 100755 index 7dbac087..00000000 --- a/docs/docs/search-sort.html +++ /dev/null @@ -1,91 +0,0 @@ ---- -layout: default -title: Automagical Searching + Sorting ---- - -

                                  -Automagical Searching + Sorting

                                  - -

                                  It is easy to add search input and sort buttons with just a few classes and attributes in your HTML. ‘Automagical’ because List.js registers the event handlers, searches/sorts and updates the list for you:

                                  - -

                                  -Searching

                                  - -
                                    -
                                  • -

                                    - class String. *required
                                    - The default class search is how List.js finds your writable search field. If you change it also set options.searchClass.

                                    -

                                    - Alternatively, using fuzzy-search here will switch to the Fuzzy Search function. -

                                    -
                                  • -
                                  • -

                                    - type String. *required
                                    - The default input type search is similar to using text, but web browsers may render it slightly differently: see https://developer.mozilla.org/.../input/search. Either type will work with List.js. -

                                    -
                                  • -
                                  - -
                                  
                                  -<input type="search" class="search" placeholder="normal search"> or
                                  -<input type="search" class="fuzzy-search" placeholder="fuzzy search!">
                                  -
                                  - -

                                  Sorting

                                  - -
                                    -
                                  • -

                                    class String. *required
                                    - The default class sort is how List.js finds clickable sort buttons. If you change it also set options.sortClass. -

                                    -
                                  • -
                                  • -

                                    - data-sort String. *required
                                    - This attribute on a clickable sort button should match the column name passed to List.js in options.valueNames. -

                                    -
                                  • -
                                  • -

                                    - data-order String
                                    - Set to asc or desc to enforce that sorting order for a column. The user won't be able to change the order, and any data-default-order attribute is ignored. -

                                    -
                                  • -
                                  • -

                                    - data-default-order String, default: "asc"
                                    - Set to desc to change the initial sorting order for a column. Subsequent clicks will toggle the sorting order between ascending/descending, as usual. -

                                    -
                                  • -
                                  • -

                                    - data-insensitive Boolean, default: true
                                    - Set to false for case-sensitive sorting of that column. -

                                    -
                                  • -
                                  - -
                                  
                                  -Sort by: 
                                  -<span class='sort' data-sort='name'>Name</span> or 
                                  -<span class='sort' data-sort='born' data-default-order='desc'>Born in Year</span> or 
                                  -<span class='sort' data-sort='city'>City</span>
                                  -
                                  - -

                                  The CSS classes asc and desc are added when a sort button is clicked on, so List.js can show which column is currently sorted. For example, using this CSS sets a yellow background with ⬆ or ⬇ added after the button text:

                                  - -
                                  
                                  -.sort.asc, .sort.desc {
                                  -  background-color: yellow;
                                  -  }
                                  -.sort.asc::after {
                                  -  content: "\002B06";
                                  -  padding-left: 3px;
                                  -  }
                                  -.sort.desc::after {
                                  -  content: "\002B07";
                                  -  padding-left: 3px
                                  -  }
                                  -
                                  diff --git a/docs/faq.html b/docs/faq.html deleted file mode 100644 index e26192ea..00000000 --- a/docs/faq.html +++ /dev/null @@ -1,25 +0,0 @@ ---- -layout: default -title: List FAQ ---- - -

                                  List FAQ

                                  - -

                                  Questions

                                  - -

                                  - -

                                  - - I want to have a search field outside the list container. -

                                  -
                                  <input id="search-field" />
                                  -<div id="container"> ... </div>
                                  -
                                  var listObj = new List('container', options);
                                  -
                                  -$('#search-field').on('keyup', function() {
                                  -  var searchString = $(this).val();
                                  -  listObj.search(searchString);
                                  -});
                                  diff --git a/docs/feed.xml b/docs/feed.xml deleted file mode 100644 index a6628bd8..00000000 --- a/docs/feed.xml +++ /dev/null @@ -1,30 +0,0 @@ ---- -layout: null ---- - - - - {{ site.title | xml_escape }} - {{ site.description | xml_escape }} - {{ site.url }}{{ site.baseurl }}/ - - {{ site.time | date_to_rfc822 }} - {{ site.time | date_to_rfc822 }} - Jekyll v{{ jekyll.version }} - {% for post in site.posts limit:10 %} - - {{ post.title | xml_escape }} - {{ post.content | xml_escape }} - {{ post.date | date_to_rfc822 }} - {{ post.url | prepend: site.baseurl | prepend: site.url }} - {{ post.url | prepend: site.baseurl | prepend: site.url }} - {% for tag in post.tags %} - {{ tag | xml_escape }} - {% endfor %} - {% for cat in post.categories %} - {{ cat | xml_escape }} - {% endfor %} - - {% endfor %} - - diff --git a/docs/index.html b/docs/index.html deleted file mode 100755 index 85f11214..00000000 --- a/docs/index.html +++ /dev/null @@ -1,44 +0,0 @@ ---- -layout: default -title: Search, sort, filters, flexibility to tables, list and more! ---- - -
                                  - -
                                  -

                                  List.js v{{site.data.pkg.version}}

                                  -

                                  - Tiny, invisible and simple, yet powerful and incredibly fast vanilla JavaScript - that adds search, sort, filters and flexibility - to plain HTML lists, tables, or anything. -

                                  -
                                  -
                                  - -{% include author.html %} - -{% include examples/annotated-example.html %} - -
                                  -

                                  More examples

                                  - -
                                  - - -
                                  -
                                  - -
                                  -
                                  - -
                                  -
                                  - -
                                  -
                                  diff --git a/docs/overview/changelog.html b/docs/overview/changelog.html deleted file mode 100644 index 4b6dea10..00000000 --- a/docs/overview/changelog.html +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: default -title: Read the changelog at Github ---- - -

                                  Changelog

                                  -

                                  Go to the changelog at GitHub

                                  diff --git a/docs/overview/contribute.html b/docs/overview/contribute.html deleted file mode 100644 index 7d4ac0da..00000000 --- a/docs/overview/contribute.html +++ /dev/null @@ -1,32 +0,0 @@ ---- -layout: default -title: Contribute ---- - -

                                  Setup environment

                                  -

                                  1. Install Node.js

                                  -

                                  Go to Nodejs.org

                                  - -

                                  2. Install dependencies

                                  -
                                  npm install
                                  - -

                                  Compile and test

                                  -

                                  Compile the script (webpack.config.js)

                                  -
                                  npx webpack
                                  - -

                                  Watch and recompile when files change

                                  -
                                  npx webpack --watch
                                  - -

                                  Run the test suite

                                  -
                                  npx jest
                                  -

                                  Run tests continuously when files change

                                  -
                                  npx jest --watch
                                  - -

                                  Guidelines for making pull requests

                                  -
                                    -
                                  • Add tests if applicable.
                                  • -
                                  • Make sure all tests run. Preferably in IE7+
                                  • -
                                  • Do not include dist/list.js or dist/list.min.js. That file is only update for each release.
                                  • -
                                  • ONE feature per pull request
                                  • -
                                  • List.js is used in a lot of different ways on a lot of places, so please have understanding if your new special feature is not accepted :)
                                  • -
                                  diff --git a/docs/overview/download.html b/docs/overview/download.html deleted file mode 100644 index fd543cc1..00000000 --- a/docs/overview/download.html +++ /dev/null @@ -1,20 +0,0 @@ ---- -layout: default -title: Download ---- - -

                                  Download

                                  - -

                                  The core thing in List.js have always been simplicity. It should require as little effort as possible to use the script and it's features.

                                  - -

                                  Via GitHub

                                  -Download compressed List.js   5KB with gzip
                                  -Download uncompressed List.js - -

                                  Via NPM

                                  -
                                  npm install list.js
                                  - -

                                  Via CDNJS

                                  -
                                  <script src="//cdnjs.cloudflare.com/ajax/libs/list.js/{{site.data.pkg.version}}/list.min.js"></script>
                                  - - diff --git a/docs/overview/index.html b/docs/overview/index.html deleted file mode 100644 index 8c9f161b..00000000 --- a/docs/overview/index.html +++ /dev/null @@ -1,36 +0,0 @@ ---- -layout: default -title: TL;DR / Features ---- - -

                                  TL;DR

                                  - -

                                  Perfect library for adding search, sort, filters and flexibility to tables, lists and various HTML elements. Built to be invisible and work on existing HTML.

                                  - -

                                  Core idea

                                  -
                                    -
                                  • Simple and invisible
                                  • -
                                  • Easy to apply to existing HTML
                                  • -
                                  • No dependencies
                                  • -
                                  • Fast
                                  • -
                                  • Tiny (5KB minified&gzip)
                                  • -
                                  • Handle thousands of items
                                  • -
                                  - -

                                  Features

                                  - - -

                                  Used by

                                  - diff --git a/docs/overview/press.html b/docs/overview/press.html deleted file mode 100644 index bbbfa89e..00000000 --- a/docs/overview/press.html +++ /dev/null @@ -1,18 +0,0 @@ -

                                  Press

                                  - -
                                  - - - - - - -
                                  -
                                  - - - - - -
                                  - From a00d8e4d5c3c1f8907a7449f172ab45119246467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonny=20Str=C3=B6mberg?= Date: Sun, 27 Apr 2025 23:43:53 +0900 Subject: [PATCH 41/41] Remove references to copying list.js files in package --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 89da3144..f3988006 100644 --- a/package.json +++ b/package.json @@ -58,8 +58,8 @@ "lint:fix": "eslint . --ext .js --fix", "build": "vite build", "watch": "vite build --watch", - "preversion": "npm test && npm run build && cp dist/list.min.js docs/assets/javascripts/list.min.js && cp dist/list.min.js.map docs/assets/javascripts/list.min.js.map && git add dist && git add docs/assets/javascripts", - "postversion": "git push --follow-tags origin master && cp package.json docs/_data/pkg.json && git add docs/_data/pkg.json && git commit -m \"pkg.json update\"" + "preversion": "npm test && npm run build", + "postversion": "git push --follow-tags origin master" }, "npmName": "list.js", "npmFileMap": [