diff --git a/.github/workflows/gh-pages-deploy.yml b/.github/workflows/gh-pages-deploy.yml
index c6164095..cd1d562d 100644
--- a/.github/workflows/gh-pages-deploy.yml
+++ b/.github/workflows/gh-pages-deploy.yml
@@ -23,4 +23,4 @@ jobs:
uses: JamesIves/github-pages-deploy-action@4.1.3
with:
branch: gh-pages
- folder: build/web
+ folder: dist/web
diff --git a/.gitignore b/.gitignore
index 08b8f9f2..ac9d0978 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
.DS_Store
-dev
-build
+dist
node_modules
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 4224d25f..7c06630e 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -60,7 +60,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
-kombiezombiefox@gmail.com
+kombiezombiefox@gmail.com.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
diff --git a/README.md b/README.md
index 33d321f4..75d3816c 100644
--- a/README.md
+++ b/README.md
@@ -1,48 +1,14 @@
-# NIGHTTAB
-A neutral new tab page accented with a chosen colour. Customise the layout, style, background and bookmarks in nightTab -- a custom start page.
+[![nightTab Demo](asset/banner/banner-1400-560.png)](https://zombiefox.github.io/nightTab/)
-[![nightTab Demo](assets/banner/banner-1400-560.png)](https://zombiefox.github.io/nightTab/)
+A neutral new tab page accented with a chosen colour. Customise the layout, style, background and bookmarks in nightTab -- a custom start page.
| [See the demo in action](https://zombiefox.github.io/nightTab/) | [Install nightTab Extension](https://chrome.google.com/webstore/detail/nighttab/hdpcadigjkbcpnlcpbcohpafiaefanki) | [Install nightTab Add On](https://addons.mozilla.org/en-GB/firefox/addon/nighttab/) | [Buy me a coffee](https://www.buymeacoffee.com/zombieFox/) |
|:-------------:|:-------------:|:-------------:|:-------------:|
-| [![nightTab](./src/icons/icon-48.png)](https://zombiefox.github.io/nightTab/) | [![Chrome](assets/logos/chrome-48x48.png)](https://chrome.google.com/webstore/detail/nighttab/hdpcadigjkbcpnlcpbcohpafiaefanki) | [![Firefox](assets/logos/firefox-48x48.png)](https://addons.mozilla.org/en-GB/firefox/addon/nighttab/) | [![coffee](assets/logos/bymeacoffee-48x48.png)](https://www.buymeacoffee.com/zombieFox/) |
+| [](https://zombiefox.github.io/nightTab/) | [![Chrome](asset/logo/chrome-48.png)](https://chrome.google.com/webstore/detail/nighttab/hdpcadigjkbcpnlcpbcohpafiaefanki) | [![Firefox](asset/logo/firefox-48.png)](https://addons.mozilla.org/en-GB/firefox/addon/nighttab/) | [![coffee](asset/logo/bymeacoffee-48.png)](https://www.buymeacoffee.com/zombieFox/) |
---
-### Features
-- Header
- - Greeting
- - Name, Style, Size
- - Clock
- - Hours, Minutes, Seconds, Separator, Meridiem, Hour/24, Size
- - Date
- - Day, Date, Month, Year, Separator, D/M or M/D format, Size
- - Search
- - Filter, Search engine, Size
- - Add and remove, Accent
-- Bookmarks
- - Drag and drop sort, sort by Letter, Icon, Name
- - Letter or icon, Names, URLs, Open in new tab, Size
-- Layout
- - Vertical and horizontal alignment, Padding, Gutter, Width, Title
-- Theme
- - Accent colour, Random accent colour, Light/Dark theme, Radius
-- Background
- - Image, Blur, Scale, Opacity, Grayscale, Accent colour
-- Saves data to local storage
-- Keyboard shortcuts
- - esc *to dismiss most things*
- - ctrl+alt+a *to add a new bookmark*
- - ctrl+alt+g *to add a new group*
- - ctrl+alt+m *to open menu*
- - ctrl+alt+e *to toggle edit state*
- - ctrl+alt+d *to toggle dark and light mode*
- - ctrl+alt+r *random theme if option is turned on in* `menu > layout > random Accent colour`
-- Responsive design
-
----
-
-### Wiki
+### Wiki & help
- [Recovering user settings and bookmarks](https://github.com/zombieFox/nightTab/wiki/Recovering-user-settings-and-bookmarks)
- [Setting nightTab as your Firefox homepage](https://github.com/zombieFox/nightTab/wiki/Setting-nightTab-as-your-Firefox-homepage)
@@ -52,27 +18,27 @@ A neutral new tab page accented with a chosen colour. Customise the layout, styl
### Development
When developing use:
-- `npm run dev`
+- `npm start`
-A Development copy will be created in `/dev/`. Open `/dev/index.html` in a browser to test. Make changes to files in the `/src/` directory and refresh browser to see changes.
+A development server will run on `http://localhost:5000/`
To build the project use:
- `npm run build`
-A web ready folder will be created in `/build/web/`.
-A browser addon/extension ready zip will be created in `/build/extension/`.
+A web ready folder will be created in `/dist/web/`.
+A browser addon/extension ready zip will be created in `/dist/extension/`.
---
-[![nightTab Demo](assets/screenshot/screenshot-001.png)](https://zombiefox.github.io/nightTab/)
-[![nightTab Demo](assets/screenshot/screenshot-002.png)](https://zombiefox.github.io/nightTab/)
-[![nightTab Demo](assets/screenshot/screenshot-003.png)](https://zombiefox.github.io/nightTab/)
-[![nightTab Demo](assets/screenshot/screenshot-004.png)](https://zombiefox.github.io/nightTab/)
-[![nightTab Demo](assets/screenshot/screenshot-005.png)](https://zombiefox.github.io/nightTab/)
-[![nightTab Demo](assets/screenshot/screenshot-006.png)](https://zombiefox.github.io/nightTab/)
-[![nightTab Demo](assets/screenshot/screenshot-007.png)](https://zombiefox.github.io/nightTab/)
-[![nightTab Demo](assets/screenshot/screenshot-008.png)](https://zombiefox.github.io/nightTab/)
-[![nightTab Demo](assets/screenshot/screenshot-009.gif)](https://zombiefox.github.io/nightTab/)
-[![nightTab Demo](assets/screenshot/screenshot-010.png)](https://zombiefox.github.io/nightTab/)
-[![nightTab Demo](assets/screenshot/screenshot-011.png)](https://zombiefox.github.io/nightTab/)
+[![nightTab Demo](asset/screenshot/screenshot-001.png)](https://zombiefox.github.io/nightTab/)
+[![nightTab Demo](asset/screenshot/screenshot-002.png)](https://zombiefox.github.io/nightTab/)
+[![nightTab Demo](asset/screenshot/screenshot-003.png)](https://zombiefox.github.io/nightTab/)
+[![nightTab Demo](asset/screenshot/screenshot-004.png)](https://zombiefox.github.io/nightTab/)
+[![nightTab Demo](asset/screenshot/screenshot-005.png)](https://zombiefox.github.io/nightTab/)
+[![nightTab Demo](asset/screenshot/screenshot-006.png)](https://zombiefox.github.io/nightTab/)
+[![nightTab Demo](asset/screenshot/screenshot-007.png)](https://zombiefox.github.io/nightTab/)
+[![nightTab Demo](asset/screenshot/screenshot-008.png)](https://zombiefox.github.io/nightTab/)
+[![nightTab Demo](asset/screenshot/screenshot-009.gif)](https://zombiefox.github.io/nightTab/)
+[![nightTab Demo](asset/screenshot/screenshot-010.png)](https://zombiefox.github.io/nightTab/)
+[![nightTab Demo](asset/screenshot/screenshot-011.png)](https://zombiefox.github.io/nightTab/)
diff --git a/assets/banner/banner-1400-560.png b/asset/banner/banner-1400-560.png
similarity index 100%
rename from assets/banner/banner-1400-560.png
rename to asset/banner/banner-1400-560.png
diff --git a/assets/banner/banner-440-280.png b/asset/banner/banner-440-280.png
similarity index 100%
rename from assets/banner/banner-440-280.png
rename to asset/banner/banner-440-280.png
diff --git a/assets/banner/banner-920-680.png b/asset/banner/banner-920-680.png
similarity index 100%
rename from assets/banner/banner-920-680.png
rename to asset/banner/banner-920-680.png
diff --git a/assets/logos/bymeacoffee-48x48.png b/asset/logo/bymeacoffee-48.png
similarity index 100%
rename from assets/logos/bymeacoffee-48x48.png
rename to asset/logo/bymeacoffee-48.png
diff --git a/assets/logos/chrome-48x48.png b/asset/logo/chrome-48.png
similarity index 100%
rename from assets/logos/chrome-48x48.png
rename to asset/logo/chrome-48.png
diff --git a/assets/logos/firefox-48x48.png b/asset/logo/firefox-48.png
similarity index 100%
rename from assets/logos/firefox-48x48.png
rename to asset/logo/firefox-48.png
diff --git a/asset/screenshot/screenshot-001.png b/asset/screenshot/screenshot-001.png
new file mode 100644
index 00000000..68f5c30a
Binary files /dev/null and b/asset/screenshot/screenshot-001.png differ
diff --git a/asset/screenshot/screenshot-002.png b/asset/screenshot/screenshot-002.png
new file mode 100644
index 00000000..a632d1c3
Binary files /dev/null and b/asset/screenshot/screenshot-002.png differ
diff --git a/asset/screenshot/screenshot-003.json b/asset/screenshot/screenshot-003.json
new file mode 100644
index 00000000..40ce6324
--- /dev/null
+++ b/asset/screenshot/screenshot-003.json
@@ -0,0 +1 @@
+{"nightTab":true,"version":"7.0.0","state":{"layout":{"area":{"header":{"width":100,"justify":"center"},"bookmark":{"width":100,"justify":"center"}},"alignment":"center-center","order":"header-bookmark","direction":"vertical","size":100,"width":80,"padding":40,"gutter":20,"breakpoint":"xl","scrollbar":"auto","title":"","overscroll":false},"header":{"item":{"justify":"left"},"greeting":{"show":false,"type":"good","custom":"","name":"","size":100,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":100,"newLine":false},"clock":{"hour":{"show":true,"display":"number"},"minute":{"show":true,"display":"number"},"second":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"meridiem":{"show":false},"hour24":{"show":true},"size":100,"newLine":false},"date":{"day":{"show":true,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"number","ordinal":true},"month":{"show":true,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"format":"date-month","size":100,"newLine":false},"search":{"show":true,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","custom":{"name":"","url":"","queryName":""}},"text":{"justify":"center"},"size":100,"newLine":false,"newTab":false},"order":["clock","date","search","toolbar"],"edit":false},"bookmark":{"size":100,"url":{"show":true},"line":{"show":true},"shadow":{"show":true},"hoverScale":{"show":true},"orientation":"bottom","style":"block","newTab":false,"edit":false,"add":false,"show":true,"item":{}},"group":{"area":{"justify":"left"},"name":{"size":100},"order":"header-body","openAll":{"size":100},"edit":false,"add":false},"toolbar":{"location":"header","position":"bottom-right","size":100,"accent":{"show":true},"add":{"show":true},"edit":{"show":true},"newLine":false},"theme":{"color":{"range":{"primary":{"h":221,"s":40}},"contrast":{"start":12,"end":50},"shades":14},"accent":{"hsl":{"h":236,"s":100,"l":50},"rgb":{"r":0,"g":17,"b":255},"random":{"active":false,"style":"any"},"cycle":{"active":false,"speed":300,"step":10}},"font":{"display":{"name":"Megrim","weight":400,"style":"normal"},"ui":{"name":"Lato","weight":400,"style":"normal"}},"background":{"type":"video","color":{"hsl":{"h":221,"s":47,"l":17},"rgb":{"r":23,"g":36,"b":64}},"gradient":{"angle":160,"start":{"hsl":{"h":206,"s":16,"l":40},"rgb":{"r":86,"g":104,"b":118}},"end":{"hsl":{"h":219,"s":28,"l":12},"rgb":{"r":22,"g":28,"b":39}}},"image":{"url":"","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":100,"vignette":{"opacity":0,"start":90,"end":70}},"video":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/videos/1626351787997.mp4?raw=true","blur":0,"grayscale":100,"scale":100,"accent":15,"opacity":30,"vignette":{"opacity":40,"start":90,"end":50}}},"opacity":{"general":0},"layout":{"divider":{"size":0}},"header":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"search":{"opacity":0}},"bookmark":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"item":{"border":0,"opacity":100}},"group":{"openAll":{"opacity":0}},"toolbar":{"opacity":0},"style":"dark","radius":50,"shadow":75,"shade":{"opacity":10,"blur":0},"custom":{"all":[],"edit":false}},"search":false,"modal":false,"menu":false,"autoSuggest":false},"bookmark":[{"name":{"text":"Cool stuff","show":false},"openAll":{"show":false},"items":[{"url":"https://zombiefox.github.io/awesomeSheet/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"awesomeSheet","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"AS"},"icon":{"name":"dice-d20","prefix":"fas","label":"Dice D20"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297988913},{"url":"https://www.amazon.co.uk/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Amazon","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"AZ"},"icon":{"name":"amazon","prefix":"fab","label":"Amazon"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297999213},{"url":"https://mail.google.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Gmail","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"GM"},"icon":{"name":"envelope","prefix":"fas","label":"Envelope"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298011293},{"url":"https://www.reddit.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Reddit","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"R"},"icon":{"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298017175},{"url":"https://www.netflix.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Netflix","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"N"},"icon":{"name":"film","prefix":"fas","label":"Film"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298022303},{"url":"https://drive.google.com/drive/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Drive","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"DR"},"icon":{"name":"google-drive","prefix":"fab","label":"Drive"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298028996},{"url":"https://devdocs.io/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Devdocs","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"DEV"},"icon":{"name":"code","prefix":"fas","label":"Code"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298034209},{"url":"https://github.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Github","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"GIT"},"icon":{"name":"github","prefix":"fab","label":"GitHub"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298038470}]}]}
diff --git a/asset/screenshot/screenshot-003.png b/asset/screenshot/screenshot-003.png
new file mode 100644
index 00000000..63e7d0e3
Binary files /dev/null and b/asset/screenshot/screenshot-003.png differ
diff --git a/asset/screenshot/screenshot-004.json b/asset/screenshot/screenshot-004.json
new file mode 100644
index 00000000..6ea27c28
--- /dev/null
+++ b/asset/screenshot/screenshot-004.json
@@ -0,0 +1 @@
+{"nightTab":true,"version":"7.0.0","state":{"layout":{"area":{"header":{"width":100,"justify":"center"},"bookmark":{"width":100,"justify":"center"}},"alignment":"center-center","order":"bookmark-header","direction":"vertical","size":100,"width":60,"padding":40,"gutter":20,"breakpoint":"lg","scrollbar":"auto","title":"","overscroll":false},"header":{"item":{"justify":"center"},"greeting":{"show":false,"type":"good","custom":"","name":"","size":100,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":100,"newLine":false},"clock":{"hour":{"show":true,"display":"word"},"minute":{"show":true,"display":"word"},"second":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"meridiem":{"show":false},"hour24":{"show":false},"size":100,"newLine":false},"date":{"day":{"show":true,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"word","ordinal":true},"month":{"show":true,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"format":"date-month","size":100,"newLine":false},"search":{"show":false,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","custom":{"name":"","url":"","queryName":""}},"text":{"justify":"center"},"size":100,"newLine":false,"newTab":false},"order":["clock","date","toolbar"],"edit":false},"bookmark":{"size":100,"url":{"show":true},"line":{"show":true},"shadow":{"show":true},"hoverScale":{"show":true},"orientation":"bottom","style":"list","newTab":false,"edit":false,"add":false,"show":true,"item":{}},"group":{"area":{"justify":"left"},"name":{"size":100},"order":"header-body","openAll":{"size":100},"edit":false,"add":false},"toolbar":{"location":"header","position":"bottom-right","size":100,"accent":{"show":false},"add":{"show":false},"edit":{"show":false},"newLine":false},"theme":{"color":{"range":{"primary":{"h":191,"s":80}},"contrast":{"start":7,"end":65},"shades":14},"accent":{"hsl":{"h":38,"s":100,"l":50},"rgb":{"r":255,"g":160,"b":0},"random":{"active":false,"style":"any"},"cycle":{"active":false,"speed":300,"step":10}},"font":{"display":{"name":"Life Savers","weight":400,"style":"normal"},"ui":{"name":"Oswald","weight":400,"style":"normal"}},"background":{"type":"theme","color":{"hsl":{"h":221,"s":47,"l":17},"rgb":{"r":23,"g":36,"b":64}},"gradient":{"angle":160,"start":{"hsl":{"h":206,"s":16,"l":40},"rgb":{"r":86,"g":104,"b":118}},"end":{"hsl":{"h":219,"s":28,"l":12},"rgb":{"r":22,"g":28,"b":39}}},"image":{"url":"","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":100,"vignette":{"opacity":0,"start":90,"end":70}},"video":{"url":"","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":100,"vignette":{"opacity":0,"start":90,"end":70}}},"opacity":{"general":0},"layout":{"divider":{"size":0}},"header":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"search":{"opacity":0}},"bookmark":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"item":{"border":0,"opacity":100}},"group":{"openAll":{"opacity":0}},"toolbar":{"opacity":0},"style":"dark","radius":50,"shadow":175,"shade":{"opacity":10,"blur":0},"custom":{"all":[],"edit":false}},"search":false,"modal":false,"menu":false,"autoSuggest":false},"bookmark":[{"name":{"text":"Cool stuff","show":false},"openAll":{"show":false},"items":[{"url":"https://zombiefox.github.io/awesomeSheet/","display":{"alignment":"center-left","direction":"horizontal","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"awesomeSheet","size":7},"visual":{"show":true,"type":"letter","size":15,"letter":{"text":"AS"},"icon":{"name":"dice-d20","prefix":"fas","label":"Dice D20"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297988913},{"url":"https://www.amazon.co.uk/","display":{"alignment":"center-left","direction":"horizontal","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Amazon","size":7},"visual":{"show":true,"type":"letter","size":15,"letter":{"text":"AZ"},"icon":{"name":"amazon","prefix":"fab","label":"Amazon"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297999213},{"url":"https://mail.google.com/","display":{"alignment":"center-left","direction":"horizontal","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Gmail","size":7},"visual":{"show":true,"type":"letter","size":15,"letter":{"text":"GM"},"icon":{"name":"envelope","prefix":"fas","label":"Envelope"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298011293},{"url":"https://www.reddit.com/","display":{"alignment":"center-left","direction":"horizontal","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Reddit","size":7},"visual":{"show":true,"type":"letter","size":15,"letter":{"text":"R"},"icon":{"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298017175},{"url":"https://www.netflix.com/","display":{"alignment":"center-left","direction":"horizontal","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Netflix","size":7},"visual":{"show":true,"type":"letter","size":15,"letter":{"text":"N"},"icon":{"name":"film","prefix":"fas","label":"Film"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298022303},{"url":"https://drive.google.com/drive/","display":{"alignment":"center-left","direction":"horizontal","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Drive","size":7},"visual":{"show":true,"type":"letter","size":15,"letter":{"text":"DR"},"icon":{"name":"google-drive","prefix":"fab","label":"Drive"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298028996},{"url":"https://devdocs.io/","display":{"alignment":"center-left","direction":"horizontal","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Devdocs","size":7},"visual":{"show":true,"type":"letter","size":15,"letter":{"text":"DEV"},"icon":{"name":"code","prefix":"fas","label":"Code"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298034209},{"url":"https://github.com/","display":{"alignment":"center-left","direction":"horizontal","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Github","size":7},"visual":{"show":true,"type":"letter","size":15,"letter":{"text":"GIT"},"icon":{"name":"github","prefix":"fab","label":"GitHub"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298038470}]}]}
diff --git a/asset/screenshot/screenshot-004.png b/asset/screenshot/screenshot-004.png
new file mode 100644
index 00000000..d77239d6
Binary files /dev/null and b/asset/screenshot/screenshot-004.png differ
diff --git a/asset/screenshot/screenshot-005.json b/asset/screenshot/screenshot-005.json
new file mode 100644
index 00000000..c7aa4e93
--- /dev/null
+++ b/asset/screenshot/screenshot-005.json
@@ -0,0 +1 @@
+{"nightTab":true,"version":"7.0.0","state":{"layout":{"area":{"header":{"width":100,"justify":"center"},"bookmark":{"width":100,"justify":"center"}},"alignment":"center-center","order":"header-bookmark","direction":"vertical","size":100,"width":90,"padding":40,"gutter":20,"breakpoint":"xs","scrollbar":"auto","title":"","overscroll":false},"header":{"item":{"justify":"center"},"greeting":{"show":false,"type":"good","custom":"","name":"","size":100,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":100,"newLine":false},"clock":{"hour":{"show":true,"display":"number"},"minute":{"show":true,"display":"number"},"second":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"meridiem":{"show":true},"hour24":{"show":false},"size":150,"newLine":false},"date":{"day":{"show":true,"display":"word","weekStart":"monday","length":"short"},"date":{"show":true,"display":"number","ordinal":false},"month":{"show":true,"display":"word","length":"short","ordinal":true},"year":{"show":true,"display":"number"},"separator":{"show":true,"text":""},"format":"date-month","size":150,"newLine":false},"search":{"show":false,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","custom":{"name":"","url":"","queryName":""}},"text":{"justify":"center"},"size":100,"newLine":false,"newTab":false},"order":["clock","date","toolbar"],"edit":false},"bookmark":{"size":100,"url":{"show":true},"line":{"show":true},"shadow":{"show":true},"hoverScale":{"show":true},"orientation":"bottom","style":"list","newTab":false,"edit":false,"add":false,"show":false,"item":{}},"group":{"area":{"justify":"left"},"name":{"size":100},"order":"header-body","openAll":{"size":100},"edit":false,"add":false},"toolbar":{"location":"header","position":"bottom-right","size":100,"accent":{"show":false},"add":{"show":false},"edit":{"show":false},"newLine":false},"theme":{"color":{"range":{"primary":{"h":0,"s":69}},"contrast":{"start":15,"end":80},"shades":14},"accent":{"hsl":{"h":35,"s":100,"l":50},"rgb":{"r":255,"g":150,"b":0},"random":{"active":false,"style":"any"},"cycle":{"active":false,"speed":300,"step":10}},"font":{"display":{"name":"Big Shoulders Display","weight":400,"style":"normal"},"ui":{"name":"Montserrat","weight":400,"style":"normal"}},"background":{"type":"image","color":{"hsl":{"h":221,"s":47,"l":17},"rgb":{"r":23,"g":36,"b":64}},"gradient":{"angle":30,"start":{"hsl":{"h":358,"s":100,"l":15},"rgb":{"r":77,"g":0,"b":3}},"end":{"hsl":{"h":9,"s":99,"l":40},"rgb":{"r":203,"g":31,"b":1}}},"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1628355202943.jpeg?raw=true","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":15,"vignette":{"opacity":25,"start":90,"end":35}},"video":{"url":"","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":100,"vignette":{"opacity":0,"start":90,"end":70}}},"opacity":{"general":10},"layout":{"divider":{"size":1}},"header":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"search":{"opacity":10}},"bookmark":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"item":{"border":0,"opacity":10}},"group":{"openAll":{"opacity":10}},"toolbar":{"opacity":10},"style":"dark","radius":60,"shadow":100,"shade":{"opacity":10,"blur":0},"custom":{"all":[],"edit":false}},"search":false,"modal":false,"menu":false,"autoSuggest":false},"bookmark":[]}
diff --git a/asset/screenshot/screenshot-005.png b/asset/screenshot/screenshot-005.png
new file mode 100644
index 00000000..212f50f2
Binary files /dev/null and b/asset/screenshot/screenshot-005.png differ
diff --git a/asset/screenshot/screenshot-006.json b/asset/screenshot/screenshot-006.json
new file mode 100644
index 00000000..13424f4a
--- /dev/null
+++ b/asset/screenshot/screenshot-006.json
@@ -0,0 +1 @@
+{"nightTab":true,"version":"7.0.0","state":{"layout":{"area":{"header":{"width":80,"justify":"center"},"bookmark":{"width":100,"justify":"center"}},"alignment":"center-center","order":"header-bookmark","direction":"horizontal","size":100,"width":80,"padding":40,"gutter":20,"breakpoint":"md","scrollbar":"auto","title":"","overscroll":false},"header":{"item":{"justify":"right"},"greeting":{"show":false,"type":"good","custom":"","name":"","size":100,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":100,"newLine":false},"clock":{"hour":{"show":true,"display":"number"},"minute":{"show":true,"display":"number"},"second":{"show":false,"display":"number"},"separator":{"show":false,"text":""},"meridiem":{"show":false},"hour24":{"show":true},"size":400,"newLine":true},"date":{"day":{"show":false,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"number","ordinal":false},"month":{"show":true,"display":"word","length":"short","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"format":"date-month","size":100,"newLine":true},"search":{"show":true,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","custom":{"name":"","url":"","queryName":""}},"text":{"justify":"center"},"size":100,"newLine":false,"newTab":false},"order":["clock","date","search","toolbar"],"edit":false},"bookmark":{"size":100,"url":{"show":true},"line":{"show":false},"shadow":{"show":false},"hoverScale":{"show":false},"orientation":"bottom","style":"block","newTab":false,"edit":false,"add":false,"show":true,"item":{}},"group":{"area":{"justify":"left"},"name":{"size":100},"order":"header-body","openAll":{"size":100},"edit":false,"add":false},"toolbar":{"location":"header","position":"bottom-right","size":100,"accent":{"show":true},"add":{"show":true},"edit":{"show":true},"newLine":true},"theme":{"color":{"range":{"primary":{"h":227,"s":52}},"contrast":{"start":20,"end":80},"shades":14},"accent":{"hsl":{"h":316,"s":100,"l":50},"rgb":{"r":255,"g":0,"b":187},"random":{"active":false,"style":"any"},"cycle":{"active":false,"speed":300,"step":10}},"font":{"display":{"name":"Major Mono Display","weight":400,"style":"normal"},"ui":{"name":"Roboto Condensed","weight":400,"style":"normal"}},"background":{"type":"image","color":{"hsl":{"h":221,"s":47,"l":17},"rgb":{"r":23,"g":36,"b":64}},"gradient":{"angle":160,"start":{"hsl":{"h":206,"s":16,"l":40},"rgb":{"r":86,"g":104,"b":118}},"end":{"hsl":{"h":219,"s":28,"l":12},"rgb":{"r":22,"g":28,"b":39}}},"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1626365114391.jpeg?raw=true","blur":0,"grayscale":0,"scale":100,"accent":60,"opacity":70,"vignette":{"opacity":0,"start":90,"end":70}},"video":{"url":"","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":100,"vignette":{"opacity":0,"start":90,"end":70}}},"opacity":{"general":100},"layout":{"divider":{"size":1}},"header":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"search":{"opacity":100}},"bookmark":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"item":{"border":0,"opacity":100}},"group":{"openAll":{"opacity":100}},"toolbar":{"opacity":0},"style":"dark","radius":25,"shadow":0,"shade":{"opacity":70,"blur":0},"custom":{"all":[],"edit":false}},"search":false,"modal":false,"menu":false,"autoSuggest":false},"bookmark":[{"name":{"text":"Cool stuff","show":false},"openAll":{"show":false},"items":[{"url":"https://zombiefox.github.io/awesomeSheet/","display":{"alignment":"bottom-right","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"awesomeSheet","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"AS"},"icon":{"name":"dice-d20","prefix":"fas","label":"Dice D20"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297988913},{"url":"https://www.amazon.co.uk/","display":{"alignment":"bottom-right","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Amazon","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"AZ"},"icon":{"name":"amazon","prefix":"fab","label":"Amazon"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297999213},{"url":"https://www.reddit.com/","display":{"alignment":"bottom-right","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Reddit","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"R"},"icon":{"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":true,"tall":true},"timestamp":1626298017175},{"url":"https://www.netflix.com/","display":{"alignment":"bottom-right","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Netflix","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"N"},"icon":{"name":"film","prefix":"fas","label":"Film"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":true},"timestamp":1626298022303},{"url":"https://mail.google.com/","display":{"alignment":"bottom-right","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Gmail","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"GM"},"icon":{"name":"envelope","prefix":"fas","label":"Envelope"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298011293},{"url":"https://drive.google.com/drive/","display":{"alignment":"bottom-right","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Drive","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"DR"},"icon":{"name":"google-drive","prefix":"fab","label":"Drive"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298028996},{"url":"https://devdocs.io/","display":{"alignment":"bottom-right","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Devdocs","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"DEV"},"icon":{"name":"code","prefix":"fas","label":"Code"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298034209},{"url":"https://github.com/","display":{"alignment":"bottom-right","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":true,"text":"Github","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"GIT"},"icon":{"name":"github","prefix":"fab","label":"GitHub"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298038470}]}]}
diff --git a/asset/screenshot/screenshot-006.png b/asset/screenshot/screenshot-006.png
new file mode 100644
index 00000000..27044583
Binary files /dev/null and b/asset/screenshot/screenshot-006.png differ
diff --git a/asset/screenshot/screenshot-007.json b/asset/screenshot/screenshot-007.json
new file mode 100644
index 00000000..b7f81372
--- /dev/null
+++ b/asset/screenshot/screenshot-007.json
@@ -0,0 +1 @@
+{"nightTab":true,"version":"7.0.0","state":{"layout":{"area":{"header":{"width":70,"justify":"center"},"bookmark":{"width":100,"justify":"center"}},"alignment":"center-center","order":"bookmark-header","direction":"horizontal","size":100,"width":90,"padding":40,"gutter":20,"breakpoint":"lg","scrollbar":"auto","title":"","overscroll":false},"header":{"item":{"justify":"center"},"greeting":{"show":false,"type":"good","custom":"","name":"","size":100,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":100,"newLine":false},"clock":{"hour":{"show":true,"display":"number"},"minute":{"show":true,"display":"number"},"second":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"meridiem":{"show":false},"hour24":{"show":true},"size":350,"newLine":true},"date":{"day":{"show":false,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"number","ordinal":true},"month":{"show":true,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"format":"date-month","size":100,"newLine":false},"search":{"show":false,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","custom":{"name":"","url":"","queryName":""}},"text":{"justify":"center"},"size":100,"newLine":false,"newTab":false},"order":["clock","date","toolbar"],"edit":false},"bookmark":{"size":100,"url":{"show":true},"line":{"show":false},"shadow":{"show":true},"hoverScale":{"show":false},"orientation":"bottom","style":"block","newTab":false,"edit":false,"add":false,"show":true,"item":{}},"group":{"area":{"justify":"left"},"name":{"size":100},"order":"header-body","openAll":{"size":100},"edit":false,"add":false},"toolbar":{"location":"header","position":"bottom-right","size":100,"accent":{"show":true},"add":{"show":true},"edit":{"show":true},"newLine":true},"theme":{"color":{"range":{"primary":{"h":228,"s":71}},"contrast":{"start":10,"end":60},"shades":14},"accent":{"hsl":{"h":180,"s":100,"l":50},"rgb":{"r":0,"g":255,"b":255},"random":{"active":false,"style":"any"},"cycle":{"active":false,"speed":300,"step":10}},"font":{"display":{"name":"Josefin Sans","weight":300,"style":"normal"},"ui":{"name":"Roboto Slab","weight":400,"style":"normal"}},"background":{"type":"theme","color":{"hsl":{"h":221,"s":47,"l":17},"rgb":{"r":23,"g":36,"b":64}},"gradient":{"angle":160,"start":{"hsl":{"h":206,"s":16,"l":40},"rgb":{"r":86,"g":104,"b":118}},"end":{"hsl":{"h":219,"s":28,"l":12},"rgb":{"r":22,"g":28,"b":39}}},"image":{"url":"","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":100,"vignette":{"opacity":0,"start":90,"end":70}},"video":{"url":"","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":100,"vignette":{"opacity":0,"start":90,"end":70}}},"opacity":{"general":100},"layout":{"divider":{"size":0}},"header":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"search":{"opacity":40}},"bookmark":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"item":{"border":0,"opacity":100}},"group":{"openAll":{"opacity":40}},"toolbar":{"opacity":0},"style":"dark","radius":50,"shadow":125,"shade":{"opacity":10,"blur":0},"custom":{"all":[],"edit":false}},"search":false,"modal":false,"menu":false,"autoSuggest":false},"bookmark":[{"name":{"text":"Cool stuff","show":false},"openAll":{"show":false},"items":[{"url":"https://zombiefox.github.io/awesomeSheet/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"awesomeSheet","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"AS"},"icon":{"name":"dice-d20","prefix":"fas","label":"Dice D20"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297988913},{"url":"https://www.amazon.co.uk/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Amazon","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"AZ"},"icon":{"name":"amazon","prefix":"fab","label":"Amazon"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297999213},{"url":"https://mail.google.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Gmail","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"GM"},"icon":{"name":"envelope","prefix":"fas","label":"Envelope"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298011293},{"url":"https://www.reddit.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Reddit","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"R"},"icon":{"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":true,"type":"image","opacity":75,"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1628355887802.jpeg?raw=true"},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":true},"timestamp":1626298017175},{"url":"https://github.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Github","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"GIT"},"icon":{"name":"github","prefix":"fab","label":"GitHub"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":true,"type":"image","opacity":50,"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1628355882811.jpeg?raw=true"},"video":{"url":""}},"border":0,"shape":{"wide":true,"tall":false},"timestamp":1626298038470},{"url":"https://www.netflix.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Netflix","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"N"},"icon":{"name":"film","prefix":"fas","label":"Film"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298022303},{"url":"https://drive.google.com/drive/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Drive","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"DR"},"icon":{"name":"google-drive","prefix":"fab","label":"Drive"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298028996},{"url":"https://devdocs.io/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Devdocs","size":7},"visual":{"show":true,"type":"letter","size":25,"letter":{"text":"DEV"},"icon":{"name":"code","prefix":"fas","label":"Code"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298034209}]}]}
diff --git a/asset/screenshot/screenshot-007.png b/asset/screenshot/screenshot-007.png
new file mode 100644
index 00000000..9927e88d
Binary files /dev/null and b/asset/screenshot/screenshot-007.png differ
diff --git a/asset/screenshot/screenshot-008.json b/asset/screenshot/screenshot-008.json
new file mode 100644
index 00000000..5cbaa623
--- /dev/null
+++ b/asset/screenshot/screenshot-008.json
@@ -0,0 +1 @@
+{"nightTab":true,"version":"7.0.0","state":{"layout":{"area":{"header":{"width":80,"justify":"center"},"bookmark":{"width":100,"justify":"center"}},"alignment":"center-center","order":"bookmark-header","direction":"horizontal","size":100,"width":80,"padding":80,"gutter":20,"breakpoint":"md","scrollbar":"auto","title":"","overscroll":false},"header":{"item":{"justify":"center"},"greeting":{"show":false,"type":"good","custom":"","name":"","size":100,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":100,"newLine":false},"clock":{"hour":{"show":true,"display":"number"},"minute":{"show":true,"display":"number"},"second":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"meridiem":{"show":false},"hour24":{"show":true},"size":260,"newLine":true},"date":{"day":{"show":true,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"number","ordinal":false},"month":{"show":true,"display":"word","length":"long","ordinal":true},"year":{"show":true,"display":"number"},"separator":{"show":true,"text":""},"format":"date-month","size":100,"newLine":true},"search":{"show":false,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","custom":{"name":"","url":"","queryName":""}},"text":{"justify":"center"},"size":100,"newLine":false,"newTab":false},"order":["clock","date","toolbar"],"edit":false},"bookmark":{"size":100,"url":{"show":true},"line":{"show":false},"shadow":{"show":false},"hoverScale":{"show":false},"orientation":"bottom","style":"block","newTab":false,"edit":false,"add":false,"show":true,"item":{}},"group":{"area":{"justify":"left"},"name":{"size":100},"order":"header-body","openAll":{"size":100},"edit":false,"add":false},"toolbar":{"location":"header","position":"bottom-right","size":100,"accent":{"show":true},"add":{"show":true},"edit":{"show":true},"newLine":false},"theme":{"color":{"range":{"primary":{"h":212,"s":23}},"contrast":{"start":54,"end":100},"shades":14},"accent":{"hsl":{"h":210,"s":40,"l":30},"rgb":{"r":51,"g":85,"b":119},"random":{"active":false,"style":"any"},"cycle":{"active":false,"speed":300,"step":10}},"font":{"display":{"name":"Abel","weight":400,"style":"normal"},"ui":{"name":"Raleway","weight":400,"style":"normal"}},"background":{"type":"image","color":{"rgb":{"r":255,"g":255,"b":255},"hsl":{"h":0,"s":0,"l":0}},"gradient":{"angle":160,"start":{"hsl":{"h":206,"s":16,"l":40},"rgb":{"r":86,"g":104,"b":118}},"end":{"hsl":{"h":219,"s":28,"l":12},"rgb":{"r":22,"g":28,"b":39}}},"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1626366863277.jpeg?raw=true","blur":0,"grayscale":0,"opacity":40,"scale":100,"accent":0,"vignette":{"opacity":0,"start":90,"end":70}},"video":{"url":"","blur":0,"grayscale":0,"opacity":50,"scale":100,"accent":0,"vignette":{"opacity":0,"start":90,"end":70}}},"opacity":{"general":0},"layout":{"divider":{"size":1}},"header":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"search":{"opacity":0}},"bookmark":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"item":{"border":0,"opacity":0}},"group":{"openAll":{"opacity":0}},"toolbar":{"opacity":0},"style":"light","radius":0,"shadow":0,"shade":{"opacity":50,"blur":5},"custom":{"all":[],"edit":false}},"search":false,"modal":false,"menu":false,"autoSuggest":false},"bookmark":[{"name":{"text":"Cool stuff","show":false},"openAll":{"show":false},"items":[{"url":"https://zombiefox.github.io/awesomeSheet/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"awesomeSheet","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"AS"},"icon":{"name":"dice-d20","prefix":"fas","label":"Dice D20"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297988913},{"url":"https://www.amazon.co.uk/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Amazon","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"AZ"},"icon":{"name":"amazon","prefix":"fab","label":"Amazon"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297999213},{"url":"https://mail.google.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Gmail","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"GM"},"icon":{"name":"envelope","prefix":"fas","label":"Envelope"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298011293},{"url":"https://www.reddit.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Reddit","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"R"},"icon":{"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298017175},{"url":"https://www.netflix.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Netflix","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"N"},"icon":{"name":"film","prefix":"fas","label":"Film"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298022303},{"url":"https://drive.google.com/drive/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Drive","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"DR"},"icon":{"name":"google-drive","prefix":"fab","label":"Drive"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298028996},{"url":"https://devdocs.io/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Devdocs","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"DEV"},"icon":{"name":"code","prefix":"fas","label":"Code"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298034209},{"url":"https://github.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Github","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"GIT"},"icon":{"name":"github","prefix":"fab","label":"GitHub"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298038470}]}]}
diff --git a/asset/screenshot/screenshot-008.png b/asset/screenshot/screenshot-008.png
new file mode 100644
index 00000000..567e4261
Binary files /dev/null and b/asset/screenshot/screenshot-008.png differ
diff --git a/assets/screenshot/screenshot-009.gif b/asset/screenshot/screenshot-009.gif
similarity index 56%
rename from assets/screenshot/screenshot-009.gif
rename to asset/screenshot/screenshot-009.gif
index d9df0ac1..f2389982 100644
Binary files a/assets/screenshot/screenshot-009.gif and b/asset/screenshot/screenshot-009.gif differ
diff --git a/asset/screenshot/screenshot-009.json b/asset/screenshot/screenshot-009.json
new file mode 100644
index 00000000..96294a44
--- /dev/null
+++ b/asset/screenshot/screenshot-009.json
@@ -0,0 +1 @@
+{"nightTab":true,"version":"7.0.0","state":{"layout":{"area":{"header":{"width":100,"justify":"center"},"bookmark":{"width":100,"justify":"center"}},"alignment":"center-center","order":"header-bookmark","direction":"vertical","size":100,"width":100,"padding":40,"gutter":20,"breakpoint":"xs","scrollbar":"auto","title":"","overscroll":false},"header":{"item":{"justify":"right"},"greeting":{"show":false,"type":"good","custom":"","name":"","size":100,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":100,"newLine":false},"clock":{"hour":{"show":true,"display":"number"},"minute":{"show":true,"display":"number"},"second":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"meridiem":{"show":false},"hour24":{"show":true},"size":100,"newLine":false},"date":{"day":{"show":true,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"number","ordinal":true},"month":{"show":true,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"format":"date-month","size":100,"newLine":false},"search":{"show":false,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","custom":{"name":"","url":"","queryName":""}},"text":{"justify":"center"},"size":100,"newLine":false,"newTab":false},"order":["clock","date","toolbar"],"edit":false},"bookmark":{"size":100,"url":{"show":true},"line":{"show":true},"shadow":{"show":true},"hoverScale":{"show":true},"orientation":"bottom","style":"block","newTab":false,"edit":false,"add":false,"show":false,"item":{}},"group":{"area":{"justify":"left"},"name":{"size":100},"order":"header-body","openAll":{"size":100},"edit":false,"add":false},"toolbar":{"location":"header","position":"bottom-right","size":100,"accent":{"show":false},"add":{"show":false},"edit":{"show":false},"newLine":false},"theme":{"color":{"range":{"primary":{"h":200,"s":27}},"contrast":{"start":11,"end":77},"shades":14},"accent":{"hsl":{"h":180,"s":100,"l":50},"rgb":{"r":0,"g":255,"b":255},"random":{"active":false,"style":"any"},"cycle":{"active":false,"speed":300,"step":10}},"font":{"display":{"name":"Unica One","weight":400,"style":"normal"},"ui":{"name":"Inria Sans","weight":400,"style":"normal"}},"background":{"type":"video","color":{"rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"gradient":{"angle":160,"start":{"hsl":{"h":206,"s":16,"l":40},"rgb":{"r":86,"g":104,"b":118}},"end":{"hsl":{"h":219,"s":28,"l":12},"rgb":{"r":22,"g":28,"b":39}}},"image":{"url":"","blur":0,"grayscale":0,"scale":100,"accent":10,"opacity":60,"vignette":{"opacity":0,"start":90,"end":70}},"video":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/videos/1626342605376.mp4?raw=true","blur":0,"grayscale":0,"scale":100,"accent":20,"opacity":80,"vignette":{"opacity":70,"start":90,"end":25}}},"opacity":{"general":0},"layout":{"divider":{"size":1}},"header":{"color":{"by":"custom","opacity":20,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"search":{"opacity":0}},"bookmark":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"item":{"border":0,"opacity":0}},"group":{"openAll":{"opacity":0}},"toolbar":{"opacity":0},"style":"dark","radius":25,"shadow":50,"shade":{"opacity":2,"blur":0},"custom":{"all":[],"edit":false}},"search":false,"modal":false,"menu":false,"autoSuggest":false},"bookmark":[]}
diff --git a/asset/screenshot/screenshot-009.png b/asset/screenshot/screenshot-009.png
new file mode 100644
index 00000000..96ea2425
Binary files /dev/null and b/asset/screenshot/screenshot-009.png differ
diff --git a/asset/screenshot/screenshot-010.json b/asset/screenshot/screenshot-010.json
new file mode 100644
index 00000000..e46ee87a
--- /dev/null
+++ b/asset/screenshot/screenshot-010.json
@@ -0,0 +1 @@
+{"nightTab":true,"version":"7.0.0","state":{"layout":{"area":{"header":{"width":100,"justify":"center"},"bookmark":{"width":100,"justify":"center"}},"alignment":"center-center","order":"bookmark-header","direction":"vertical","size":100,"width":70,"padding":40,"gutter":20,"breakpoint":"xl","scrollbar":"auto","title":"","overscroll":false},"header":{"item":{"justify":"left"},"greeting":{"show":false,"type":"good","custom":"","name":"","size":100,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":100,"newLine":false},"clock":{"hour":{"show":false,"display":"number"},"minute":{"show":false,"display":"number"},"second":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"meridiem":{"show":false},"hour24":{"show":true},"size":100,"newLine":false},"date":{"day":{"show":false,"display":"word","weekStart":"monday","length":"long"},"date":{"show":false,"display":"number","ordinal":true},"month":{"show":false,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"format":"date-month","size":100,"newLine":false},"search":{"show":false,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","custom":{"name":"","url":"","queryName":""}},"text":{"justify":"center"},"size":100,"newLine":false,"newTab":false},"order":["toolbar"],"edit":false},"bookmark":{"size":100,"url":{"show":true},"line":{"show":false},"shadow":{"show":false},"hoverScale":{"show":false},"orientation":"bottom","style":"block","newTab":false,"edit":false,"add":false,"show":true,"item":{}},"group":{"area":{"justify":"left"},"name":{"size":100},"order":"header-body","openAll":{"size":100},"edit":false,"add":false},"toolbar":{"location":"header","position":"bottom-right","size":100,"accent":{"show":false},"add":{"show":true},"edit":{"show":true},"newLine":false},"theme":{"color":{"range":{"primary":{"h":222,"s":14}},"contrast":{"start":8,"end":88},"shades":14},"accent":{"hsl":{"h":30,"s":100,"l":50},"rgb":{"r":255,"g":128,"b":0},"random":{"active":false,"style":"any"},"cycle":{"active":false,"speed":300,"step":10}},"font":{"display":{"name":"Fira Sans","weight":400,"style":"normal"},"ui":{"name":"Noto Sans","weight":400,"style":"normal"}},"background":{"type":"image","color":{"hsl":{"h":221,"s":47,"l":17},"rgb":{"r":23,"g":36,"b":64}},"gradient":{"angle":160,"start":{"hsl":{"h":206,"s":16,"l":40},"rgb":{"r":86,"g":104,"b":118}},"end":{"hsl":{"h":219,"s":28,"l":12},"rgb":{"r":22,"g":28,"b":39}}},"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1626472271306.jpeg?raw=true","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":20,"vignette":{"opacity":20,"start":90,"end":40}},"video":{"url":"","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":100,"vignette":{"opacity":0,"start":90,"end":70}}},"opacity":{"general":0},"layout":{"divider":{"size":0}},"header":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"search":{"opacity":0}},"bookmark":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"item":{"border":1,"opacity":0}},"group":{"openAll":{"opacity":0}},"toolbar":{"opacity":0},"style":"dark","radius":50,"shadow":75,"shade":{"opacity":0,"blur":10},"custom":{"all":[],"edit":false}},"search":false,"modal":false,"menu":false,"autoSuggest":false},"bookmark":[{"name":{"text":"Cool stuff","show":false},"openAll":{"show":false},"items":[{"url":"https://devdocs.io/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Devdocs","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"DEV"},"icon":{"name":"code","prefix":"fas","label":"Code"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"custom","hsl":{"h":203,"s":100,"l":60},"rgb":{"r":51,"g":177,"b":255}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":1,"shape":{"wide":false,"tall":false},"timestamp":1626298034209},{"url":"https://www.reddit.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Reddit","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"R"},"icon":{"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"custom","hsl":{"h":25,"s":100,"l":50},"rgb":{"r":255,"g":106,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":1,"shape":{"wide":true,"tall":false},"timestamp":1626298017175},{"url":"https://github.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Github","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"GIT"},"icon":{"name":"github","prefix":"fab","label":"GitHub"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"custom","hsl":{"h":0,"s":0,"l":100},"rgb":{"r":255,"g":255,"b":255}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":1,"shape":{"wide":false,"tall":true},"timestamp":1626298038470},{"url":"https://zombiefox.github.io/awesomeSheet/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"awesomeSheet","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"AS"},"icon":{"name":"dice-d20","prefix":"fas","label":"Dice D20"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"custom","hsl":{"h":227,"s":52,"l":41},"rgb":{"r":50,"g":74,"b":159}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":1,"shape":{"wide":false,"tall":false},"timestamp":1626297988913},{"url":"https://www.amazon.co.uk/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Amazon","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"AZ"},"icon":{"name":"amazon","prefix":"fab","label":"Amazon"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"custom","hsl":{"h":46,"s":100,"l":50},"rgb":{"r":255,"g":195,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":1,"shape":{"wide":false,"tall":false},"timestamp":1626297999213},{"url":"https://www.netflix.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Netflix","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"N"},"icon":{"name":"film","prefix":"fas","label":"Film"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"custom","hsl":{"h":9,"s":100,"l":40},"rgb":{"r":204,"g":31,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":1,"shape":{"wide":false,"tall":false},"timestamp":1626298022303},{"url":"https://drive.google.com/drive/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Drive","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"DR"},"icon":{"name":"google-drive","prefix":"fab","label":"Drive"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"custom","hsl":{"h":151,"s":100,"l":38},"rgb":{"r":0,"g":194,"b":100}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":1,"shape":{"wide":false,"tall":false},"timestamp":1626298028996},{"url":"https://mail.google.com/","display":{"alignment":"center-center","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Gmail","size":7},"visual":{"show":true,"type":"icon","size":25,"letter":{"text":"GM"},"icon":{"name":"envelope","prefix":"fas","label":"Envelope"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"custom","hsl":{"h":0,"s":100,"l":53},"rgb":{"r":255,"g":15,"b":15}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"background":{"show":false,"type":"image","opacity":100,"image":{"url":""},"video":{"url":""}},"border":1,"shape":{"wide":false,"tall":false},"timestamp":1626298011293}]}]}
diff --git a/asset/screenshot/screenshot-010.png b/asset/screenshot/screenshot-010.png
new file mode 100644
index 00000000..5186342a
Binary files /dev/null and b/asset/screenshot/screenshot-010.png differ
diff --git a/asset/screenshot/screenshot-011.json b/asset/screenshot/screenshot-011.json
new file mode 100644
index 00000000..83edd57a
--- /dev/null
+++ b/asset/screenshot/screenshot-011.json
@@ -0,0 +1 @@
+{"nightTab":true,"version":"7.0.0","state":{"layout":{"area":{"header":{"width":100,"justify":"center"},"bookmark":{"width":100,"justify":"center"}},"alignment":"center-center","order":"bookmark-header","direction":"vertical","size":100,"width":80,"padding":40,"gutter":20,"breakpoint":"xl","scrollbar":"auto","title":"","overscroll":false},"header":{"item":{"justify":"left"},"greeting":{"show":false,"type":"good","custom":"","name":"","size":100,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":100,"newLine":false},"clock":{"hour":{"show":true,"display":"number"},"minute":{"show":true,"display":"number"},"second":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"meridiem":{"show":false},"hour24":{"show":true},"size":100,"newLine":false},"date":{"day":{"show":true,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"number","ordinal":true},"month":{"show":true,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"format":"date-month","size":100,"newLine":false},"search":{"show":true,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","custom":{"name":"","url":"","queryName":""}},"text":{"justify":"center"},"size":100,"newLine":false,"newTab":false},"order":["clock","date","search","toolbar"],"edit":false},"bookmark":{"size":115,"url":{"show":false},"line":{"show":false},"shadow":{"show":true},"hoverScale":{"show":true},"orientation":"bottom","style":"block","newTab":false,"edit":false,"add":false,"show":true,"item":{}},"group":{"area":{"justify":"left"},"name":{"size":100},"order":"header-body","openAll":{"size":100},"edit":false,"add":false},"toolbar":{"location":"header","position":"bottom-right","size":100,"accent":{"show":true},"add":{"show":true},"edit":{"show":true},"newLine":false},"theme":{"color":{"range":{"primary":{"h":186,"s":4}},"contrast":{"start":19,"end":80},"shades":14},"accent":{"hsl":{"h":0,"s":0,"l":100},"rgb":{"r":255,"g":255,"b":255},"random":{"active":false,"style":"any"},"cycle":{"active":false,"speed":300,"step":10}},"font":{"display":{"name":"Abel","weight":400,"style":"normal"},"ui":{"name":"Raleway","weight":400,"style":"normal"}},"background":{"type":"theme","color":{"hsl":{"h":221,"s":47,"l":17},"rgb":{"r":23,"g":36,"b":64}},"gradient":{"angle":160,"start":{"hsl":{"h":206,"s":16,"l":40},"rgb":{"r":86,"g":104,"b":118}},"end":{"hsl":{"h":219,"s":28,"l":12},"rgb":{"r":22,"g":28,"b":39}}},"image":{"url":"","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":100,"vignette":{"opacity":0,"start":90,"end":70}},"video":{"url":"","blur":0,"grayscale":0,"scale":100,"accent":0,"opacity":100,"vignette":{"opacity":0,"start":90,"end":70}}},"opacity":{"general":100},"layout":{"divider":{"size":0}},"header":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"search":{"opacity":100}},"bookmark":{"color":{"by":"theme","opacity":10,"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"item":{"border":0,"opacity":100}},"group":{"openAll":{"opacity":100}},"toolbar":{"opacity":100},"style":"dark","radius":30,"shadow":250,"shade":{"opacity":30,"blur":0},"custom":{"all":[],"edit":false}},"search":false,"modal":false,"menu":false,"autoSuggest":false},"bookmark":[{"name":{"text":"Cool stuff","show":false},"openAll":{"show":false},"items":[{"url":"https://www.reddit.com/","display":{"alignment":"bottom-left","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Reddit","size":7},"visual":{"show":true,"type":"icon","size":18,"letter":{"text":"R"},"icon":{"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":true,"type":"image","opacity":100,"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1628356476895.jpeg?raw=true"},"video":{"url":""}},"border":0,"shape":{"wide":true,"tall":false},"timestamp":1626298017175},{"url":"https://devdocs.io/","display":{"alignment":"bottom-left","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Devdocs","size":7},"visual":{"show":true,"type":"icon","size":18,"letter":{"text":"DEV"},"icon":{"name":"code","prefix":"fas","label":"Code"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":true,"type":"image","opacity":100,"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1628356473243.jpeg?raw=true"},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298034209},{"url":"https://github.com/","display":{"alignment":"bottom-left","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Github","size":7},"visual":{"show":true,"type":"icon","size":18,"letter":{"text":"GIT"},"icon":{"name":"github","prefix":"fab","label":"GitHub"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":true,"type":"image","opacity":100,"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1628356480756.jpeg?raw=true"},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":true},"timestamp":1626298038470},{"url":"https://www.amazon.co.uk/","display":{"alignment":"bottom-left","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Amazon","size":7},"visual":{"show":true,"type":"icon","size":18,"letter":{"text":"AZ"},"icon":{"name":"amazon","prefix":"fab","label":"Amazon"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":true,"type":"image","opacity":100,"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1628356484751.jpeg?raw=true"},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297999213},{"url":"https://zombiefox.github.io/awesomeSheet/","display":{"alignment":"bottom-left","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"awesomeSheet","size":7},"visual":{"show":true,"type":"icon","size":18,"letter":{"text":"AS"},"icon":{"name":"dice-d20","prefix":"fas","label":"Dice D20"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":true,"type":"image","opacity":100,"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1628356492462.jpeg?raw=true"},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626297988913},{"url":"https://mail.google.com/","display":{"alignment":"bottom-left","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Gmail","size":7},"visual":{"show":true,"type":"icon","size":18,"letter":{"text":"GM"},"icon":{"name":"envelope","prefix":"fas","label":"Envelope"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":true,"type":"image","opacity":100,"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1628356467972.jpeg?raw=true"},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298011293},{"url":"https://drive.google.com/drive/","display":{"alignment":"bottom-left","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Drive","size":7},"visual":{"show":true,"type":"icon","size":18,"letter":{"text":"DR"},"icon":{"name":"google-drive","prefix":"fab","label":"Drive"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":true,"type":"image","opacity":100,"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1628356488371.jpeg?raw=true"},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298028996},{"url":"https://www.netflix.com/","display":{"alignment":"bottom-left","direction":"vertical","order":"visual-name","rotate":0,"translate":{"x":0,"y":0},"gutter":25,"name":{"show":false,"text":"Netflix","size":7},"visual":{"show":true,"type":"icon","size":18,"letter":{"text":"N"},"icon":{"name":"film","prefix":"fas","label":"Film"},"image":{"url":""},"shadow":{"size":0}}},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":100},"background":{"show":true,"type":"image","opacity":100,"image":{"url":"https://github.com/zombieFox/nightTabAssets/blob/main/images/1628356462367.jpeg?raw=true"},"video":{"url":""}},"border":0,"shape":{"wide":false,"tall":false},"timestamp":1626298022303}]}]}
diff --git a/asset/screenshot/screenshot-011.png b/asset/screenshot/screenshot-011.png
new file mode 100644
index 00000000..89116138
Binary files /dev/null and b/asset/screenshot/screenshot-011.png differ
diff --git a/assets/banner/banner.psd b/assets/banner/banner.psd
deleted file mode 100644
index 8cf30345..00000000
Binary files a/assets/banner/banner.psd and /dev/null differ
diff --git a/assets/demo/demo-001.gif b/assets/demo/demo-001.gif
deleted file mode 100644
index 8562d407..00000000
Binary files a/assets/demo/demo-001.gif and /dev/null differ
diff --git a/assets/demo/demo-002.gif b/assets/demo/demo-002.gif
deleted file mode 100644
index 772ff61d..00000000
Binary files a/assets/demo/demo-002.gif and /dev/null differ
diff --git a/assets/demo/demo-003.gif b/assets/demo/demo-003.gif
deleted file mode 100644
index ce2e3538..00000000
Binary files a/assets/demo/demo-003.gif and /dev/null differ
diff --git a/assets/demo/demo-004.gif b/assets/demo/demo-004.gif
deleted file mode 100644
index fcffbba1..00000000
Binary files a/assets/demo/demo-004.gif and /dev/null differ
diff --git a/assets/demo/demo-005.gif b/assets/demo/demo-005.gif
deleted file mode 100644
index 0fef5d4d..00000000
Binary files a/assets/demo/demo-005.gif and /dev/null differ
diff --git a/assets/demo/demo-006.gif b/assets/demo/demo-006.gif
deleted file mode 100644
index da2568fa..00000000
Binary files a/assets/demo/demo-006.gif and /dev/null differ
diff --git a/assets/demo/demo-007.gif b/assets/demo/demo-007.gif
deleted file mode 100644
index fbe55529..00000000
Binary files a/assets/demo/demo-007.gif and /dev/null differ
diff --git a/assets/icon/icon.psd b/assets/icon/icon.psd
deleted file mode 100644
index 1c30c17c..00000000
Binary files a/assets/icon/icon.psd and /dev/null differ
diff --git a/assets/screenshot/screenshot-001.png b/assets/screenshot/screenshot-001.png
deleted file mode 100644
index c282e976..00000000
Binary files a/assets/screenshot/screenshot-001.png and /dev/null differ
diff --git a/assets/screenshot/screenshot-002.png b/assets/screenshot/screenshot-002.png
deleted file mode 100644
index 5593e03b..00000000
Binary files a/assets/screenshot/screenshot-002.png and /dev/null differ
diff --git a/assets/screenshot/screenshot-003.json b/assets/screenshot/screenshot-003.json
deleted file mode 100644
index 861badde..00000000
--- a/assets/screenshot/screenshot-003.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nighttab":true,"version":"6.0.0","state":{"header":{"area":{"width":100,"justify":"center","align":"center"},"item":{"justify":"left"},"clock":{"hours":{"show":true,"display":"number"},"minutes":{"show":true,"display":"number"},"seconds":{"show":false,"display":"number"},"separator":{"show":true,"text":":"},"meridiem":{"show":true},"hour24":{"show":false},"size":1,"newLine":false},"date":{"day":{"show":true,"display":"word","weekStart":"monday","length":"short"},"date":{"show":true,"display":"number","ordinal":true},"month":{"show":true,"display":"word","length":"short","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":"/"},"format":"datemonth","size":1,"newLine":false},"search":{"show":false,"width":{"by":"custom","size":100},"focus":false,"engine":{"selected":"google","google":{"url":"https://www.google.com/search","name":"Google"},"duckduckgo":{"url":"https://duckduckgo.com/","name":"DuckDuckGo"},"youtube":{"url":"https://www.youtube.com/results?search_query=","name":"YouTube"},"giphy":{"url":"https://giphy.com/search/","name":"Giphy"},"bing":{"url":"https://www.bing.com/search?q=","name":"Bing"},"custom":{"url":"","name":"","queryName":""}},"text":{"justify":"center"},"size":1,"newLine":false,"newTab":false,"opacity":1},"border":{"top":0,"bottom":0},"greeting":{"show":false,"type":"good","name":"","size":1,"newLine":false},"transitional":{"show":true,"type":"its","size":1,"newLine":false},"position":"sticky","radius":false,"color":{"show":true,"style":"scroll","opacity":0.95,"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"order":["greeting","transitional","clock","date","search","editAdd","colorAccent","menu"],"menu":{"show":true,"size":1,"newLine":false,"opacity":0},"editAdd":{"show":true,"size":1,"newLine":false,"opacity":0},"colorAccent":{"dot":{"show":false},"show":true,"size":1,"newLine":false,"opacity":0}},"link":{"area":{"width":100,"justify":"center","direction":"ltr"},"item":{"color":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1,"by":"theme"},"display":{"name":{"show":true,"size":0.7},"gutter":2,"direction":"vertical","order":"visualname","alignment":"bottomleft","rotate":0,"translate":{"x":0,"y":0},"visual":{"letter":{"size":2},"icon":{"size":2},"image":{"size":2},"shadow":{"size":0}}},"url":{"show":true},"line":{"show":true},"shadow":{"show":true},"hoverScale":{"show":true},"newTab":false,"size":1,"border":0,"accent":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"by":"theme"},"background":{"opacity":1}},"show":true,"add":false,"edit":false,"style":"block","orientation":"bottom","breakpoint":"xl"},"group":{"area":{"justify":"left"},"name":{"size":1},"border":0,"order":"headerbody","add":false,"edit":false,"openAll":{"size":1,"opacity":0}},"layout":{"alignment":"centercenter","order":"headerlink","padding":6,"gutter":2,"size":1,"width":80,"scrollPastEnd":false,"title":"New Tab","scrollbars":"auto","direction":"vertical"},"theme":{"accent":{"random":{"active":false,"style":"any"},"rgb":{"r":0,"g":17,"b":255},"cycle":{"active":false,"speed":200,"step":10},"hsl":{"h":236,"s":100,"l":50}},"color":{"hsl":{"h":221,"s":40,"l":48},"rgb":{"r":73,"g":104,"b":171},"contrast":{"light":4,"dark":3.5},"generated":{"negative":{"1":{"r":68,"g":96,"b":158},"2":{"r":62,"g":89,"b":146},"3":{"r":57,"g":81,"b":133},"4":{"r":52,"g":74,"b":121},"5":{"r":46,"g":66,"b":108},"6":{"r":41,"g":58,"b":96},"7":{"r":36,"g":51,"b":83},"8":{"r":30,"g":43,"b":71},"9":{"r":25,"g":36,"b":58},"10":{"r":20,"g":28,"b":46}},"positive":{"1":{"r":83,"g":114,"b":182},"2":{"r":97,"g":126,"b":188},"3":{"r":111,"g":137,"b":194},"4":{"r":126,"g":149,"b":200},"5":{"r":140,"g":161,"b":206},"6":{"r":154,"g":173,"b":212},"7":{"r":169,"g":184,"b":218},"8":{"r":183,"g":196,"b":224},"9":{"r":197,"g":208,"b":230},"10":{"r":212,"g":219,"b":236}}}},"font":{"display":{"name":"Megrim","weight":400,"style":"normal"},"ui":{"name":"Lato","weight":400,"style":"normal"}},"style":"dark","radius":0.5,"custom":{"all":[],"edit":false},"shadow":0.75,"shade":{"opacity":0.1}},"background":{"color":{"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"visual":{"show":false,"type":"video","image":{"type":"file","file":{"name":"","data":""},"url":""},"video":{"url":""},"blur":0,"scale":1,"opacity":1,"grayscale":0,"accent":0,"vignette":{"opacity":0,"start":90,"end":70}}},"edit":false,"pagelock":true,"shade":true,"edge":false,"search":false,"menu":true,"modal":false,"dropdown":false,"autoSuggest":false},"bookmarks":[{"name":{"show":true,"text":"Cool stuff"},"items":[{"display":{"direction":"vertical","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"AS"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"dice-d20","prefix":"fas","label":"Dice D20"},"shadow":{"size":0}},"name":{"show":true,"text":"awesomeSheet","size":0.7}},"url":"https://zombiefox.github.io/awesomeSheet/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104010,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"AZ"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"amazon","prefix":"fab","label":"Amazon"},"shadow":{"size":0}},"name":{"show":true,"text":"Amazon","size":0.7}},"url":"https://www.amazon.co.uk/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453107633,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"GM"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"envelope","prefix":"fas","label":"Envelope"},"shadow":{"size":0}},"name":{"show":true,"text":"Gmail","size":0.7}},"url":"https://mail.google.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453110265,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"R"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"shadow":{"size":0}},"name":{"show":true,"text":"Reddit","size":0.7}},"url":"https://www.reddit.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111491,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"N"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"film","prefix":"fas","label":"Film"},"shadow":{"size":0}},"name":{"show":true,"text":"Netflix","size":0.7}},"url":"https://www.netflix.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104460,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"DR"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"","prefix":"","label":""},"shadow":{"size":0}},"name":{"show":true,"text":"Drive","size":0.7}},"url":"https://drive.google.com/drive/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111953,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}}],"openAll":{"show":true}},{"name":{"show":true,"text":"Dev Sites"},"items":[{"display":{"direction":"vertical","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"DEV"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"code","prefix":"fas","label":"Code"},"shadow":{"size":0}},"name":{"show":true,"text":"Devdocs","size":0.7}},"url":"http://devdocs.io/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453101749,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"GIT"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"github","prefix":"fab","label":"GitHub"},"shadow":{"size":0}},"name":{"show":true,"text":"Github","size":0.7}},"url":"https://github.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453108926,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}}],"openAll":{"show":true}}]}
diff --git a/assets/screenshot/screenshot-003.png b/assets/screenshot/screenshot-003.png
deleted file mode 100644
index 1007bd69..00000000
Binary files a/assets/screenshot/screenshot-003.png and /dev/null differ
diff --git a/assets/screenshot/screenshot-004.json b/assets/screenshot/screenshot-004.json
deleted file mode 100644
index ae1f5c59..00000000
--- a/assets/screenshot/screenshot-004.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nighttab":true,"version":"6.0.0","state":{"header":{"area":{"width":100,"justify":"center","align":"center"},"item":{"justify":"center"},"clock":{"hours":{"show":true,"display":"word"},"minutes":{"show":true,"display":"word"},"seconds":{"show":false,"display":"number"},"separator":{"show":true,"text":":"},"meridiem":{"show":false},"hour24":{"show":false},"size":1,"newLine":false},"date":{"day":{"show":true,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"word","ordinal":true},"month":{"show":true,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":"/"},"format":"datemonth","size":1,"newLine":false},"search":{"show":false,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","google":{"url":"https://www.google.com/search","name":"Google"},"duckduckgo":{"url":"https://duckduckgo.com/","name":"DuckDuckGo"},"youtube":{"url":"https://www.youtube.com/results?search_query=","name":"YouTube"},"giphy":{"url":"https://giphy.com/search/","name":"Giphy"},"bing":{"url":"https://www.bing.com/search?q=","name":"Bing"},"custom":{"url":"","name":"","queryName":""}},"text":{"justify":"center"},"size":1,"newLine":false,"newTab":false,"opacity":1},"border":{"top":0,"bottom":0},"greeting":{"show":false,"type":"good","name":"","size":1,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":1,"newLine":false},"position":"sticky","radius":false,"color":{"show":true,"style":"scroll","opacity":0.95,"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"order":["greeting","transitional","clock","date","search","editAdd","colorAccent","menu"],"menu":{"show":true,"size":1,"newLine":false,"opacity":0},"editAdd":{"show":false,"size":1,"newLine":false,"opacity":0},"colorAccent":{"dot":{"show":true},"show":false,"size":1,"newLine":false,"opacity":0}},"link":{"area":{"width":100,"justify":"center","direction":"ltr"},"item":{"color":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1,"by":"theme"},"display":{"name":{"show":true,"size":0.9},"gutter":4,"direction":"horizontal","order":"visualname","alignment":"centerleft","rotate":0,"translate":{"x":0,"y":0},"visual":{"letter":{"size":1.7},"icon":{"size":3},"image":{"size":3},"shadow":{"size":0}}},"url":{"show":true},"line":{"show":false},"shadow":{"show":true},"hoverScale":{"show":true},"newTab":false,"size":1,"border":0,"accent":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"by":"theme"},"background":{"opacity":1}},"show":true,"add":false,"edit":false,"style":"list","orientation":"bottom","breakpoint":"md"},"group":{"area":{"justify":"left"},"name":{"size":1},"border":0,"order":"headerbody","add":false,"edit":false,"openAll":{"size":1,"opacity":1}},"layout":{"alignment":"centercenter","order":"linkheader","padding":4,"gutter":2,"size":1,"width":52,"scrollPastEnd":false,"title":"New Tab","scrollbars":"auto","direction":"vertical"},"theme":{"accent":{"random":{"active":false,"style":"any"},"rgb":{"r":255,"g":160,"b":0},"cycle":{"active":false,"speed":200,"step":10},"hsl":{"h":37.64705882352941,"s":100,"l":50}},"color":{"hsl":{"h":191,"s":73,"l":48},"rgb":{"r":33,"g":178,"b":211},"contrast":{"light":5,"dark":4},"generated":{"negative":{"1":{"r":30,"g":163,"b":193},"2":{"r":27,"g":148,"b":176},"3":{"r":25,"g":133,"b":158},"4":{"r":22,"g":118,"b":140},"5":{"r":19,"g":104,"b":123},"6":{"r":16,"g":89,"b":105},"7":{"r":14,"g":74,"b":88},"8":{"r":11,"g":59,"b":70},"9":{"r":8,"g":44,"b":52},"10":{"r":5,"g":29,"b":35}},"positive":{"1":{"r":47,"g":190,"b":222},"2":{"r":69,"g":197,"b":226},"3":{"r":91,"g":204,"b":229},"4":{"r":113,"g":211,"b":233},"5":{"r":135,"g":218,"b":236},"6":{"r":157,"g":224,"b":240},"7":{"r":179,"g":231,"b":243},"8":{"r":201,"g":238,"b":247},"9":{"r":223,"g":245,"b":250},"10":{"r":245,"g":252,"b":254}}}},"font":{"display":{"name":"Life Savers","weight":400,"style":"normal"},"ui":{"name":"Oswald","weight":400,"style":"normal"}},"style":"dark","radius":0.5,"custom":{"all":[],"edit":false},"shadow":1.75,"shade":{"opacity":0.1}},"background":{"color":{"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"visual":{"show":false,"type":"video","image":{"type":"file","file":{"name":"","data":""},"url":""},"video":{"url":""},"blur":0,"scale":1,"opacity":1,"grayscale":0,"accent":0,"vignette":{"opacity":0,"start":90,"end":70}}},"edit":false,"pagelock":false,"shade":false,"edge":false,"search":false,"menu":false,"modal":false,"dropdown":false,"autoSuggest":false},"bookmarks":[{"name":{"show":false,"text":"Cool stuff"},"items":[{"display":{"direction":"horizontal","order":"visualname","alignment":"centerleft","gutter":4,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":1.7,"text":"AS"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"dice-d20","prefix":"fas","label":"Dice D20"},"shadow":{"size":0}},"name":{"show":true,"text":"awesomeSheet","size":0.9}},"url":"https://zombiefox.github.io/awesomeSheet/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104010,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"horizontal","order":"visualname","alignment":"centerleft","gutter":4,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":1.7,"text":"AZ"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"amazon","prefix":"fab","label":"Amazon"},"shadow":{"size":0}},"name":{"show":true,"text":"Amazon","size":0.9}},"url":"https://www.amazon.co.uk/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453107633,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"horizontal","order":"visualname","alignment":"centerleft","gutter":4,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":1.7,"text":"GM"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"envelope","prefix":"fas","label":"Envelope"},"shadow":{"size":0}},"name":{"show":true,"text":"Gmail","size":0.9}},"url":"https://mail.google.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453110265,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"horizontal","order":"visualname","alignment":"centerleft","gutter":4,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":1.7,"text":"R"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"shadow":{"size":0}},"name":{"show":true,"text":"Reddit","size":0.9}},"url":"https://www.reddit.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111491,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"horizontal","order":"visualname","alignment":"centerleft","gutter":4,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":1.7,"text":"N"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"film","prefix":"fas","label":"Film"},"shadow":{"size":0}},"name":{"show":true,"text":"Netflix","size":0.9}},"url":"https://www.netflix.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104460,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"horizontal","order":"visualname","alignment":"centerleft","gutter":4,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":1.7,"text":"DR"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"","prefix":"","label":""},"shadow":{"size":0}},"name":{"show":true,"text":"Drive","size":0.9}},"url":"https://drive.google.com/drive/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111953,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"horizontal","order":"visualname","alignment":"centerleft","gutter":4,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":1.7,"text":"DEV"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"code","prefix":"fas","label":"Code"},"shadow":{"size":0}},"name":{"show":true,"text":"Devdocs","size":0.9}},"url":"http://devdocs.io/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453101749,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"horizontal","order":"visualname","alignment":"centerleft","gutter":4,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":1.7,"text":"GIT"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"github","prefix":"fab","label":"GitHub"},"shadow":{"size":0}},"name":{"show":true,"text":"Github","size":0.9}},"url":"https://github.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453108926,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}}],"openAll":{"show":false}}]}
diff --git a/assets/screenshot/screenshot-004.png b/assets/screenshot/screenshot-004.png
deleted file mode 100644
index 57c9d441..00000000
Binary files a/assets/screenshot/screenshot-004.png and /dev/null differ
diff --git a/assets/screenshot/screenshot-005.json b/assets/screenshot/screenshot-005.json
deleted file mode 100644
index aa79dfb5..00000000
--- a/assets/screenshot/screenshot-005.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nighttab":true,"version":"6.0.0","state":{"header":{"area":{"width":100,"justify":"center","align":"center"},"item":{"justify":"center"},"clock":{"hours":{"show":true,"display":"number"},"minutes":{"show":true,"display":"number"},"seconds":{"show":false,"display":"number"},"separator":{"show":true,"text":":"},"meridiem":{"show":true},"hour24":{"show":false},"size":1.5,"newLine":false},"date":{"day":{"show":true,"display":"word","weekStart":"monday","length":"short"},"date":{"show":true,"display":"number","ordinal":true},"month":{"show":true,"display":"word","length":"short","ordinal":true},"year":{"show":true,"display":"number"},"separator":{"show":true,"text":"/"},"format":"datemonth","size":1.5,"newLine":false},"search":{"show":false,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","google":{"url":"https://www.google.com/search","name":"Google"},"duckduckgo":{"url":"https://duckduckgo.com/","name":"DuckDuckGo"},"youtube":{"url":"https://www.youtube.com/results?search_query=","name":"YouTube"},"giphy":{"url":"https://giphy.com/search/","name":"Giphy"},"bing":{"url":"https://www.bing.com/search?q=","name":"Bing"},"custom":{"url":"","name":"","queryName":""}},"text":{"justify":"center"},"size":1,"newLine":false,"newTab":false,"opacity":1},"border":{"top":0,"bottom":1},"greeting":{"show":false,"type":"good","name":"","size":1,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":1,"newLine":false},"position":"sticky","radius":false,"color":{"show":true,"style":"scroll","opacity":0.95,"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"order":["greeting","transitional","clock","date","search","editAdd","colorAccent","menu"],"menu":{"show":true,"size":1,"newLine":false,"opacity":0},"editAdd":{"show":false,"size":1,"newLine":false,"opacity":0},"colorAccent":{"dot":{"show":true},"show":false,"size":1,"newLine":false,"opacity":0}},"link":{"area":{"width":100,"justify":"center","direction":"ltr"},"item":{"color":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1,"by":"theme"},"display":{"name":{"show":false,"size":0.9},"gutter":2,"direction":"vertical","order":"visualname","alignment":"centercenter","rotate":0,"translate":{"x":0,"y":0.4},"visual":{"letter":{"size":3},"icon":{"size":3},"image":{"size":3},"shadow":{"size":0}}},"url":{"show":true},"line":{"show":false},"shadow":{"show":true},"hoverScale":{"show":true},"newTab":false,"size":1,"border":0,"accent":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"by":"theme"},"background":{"opacity":1}},"show":false,"add":false,"edit":false,"style":"block","orientation":"bottom","breakpoint":"xl"},"group":{"area":{"justify":"left"},"name":{"size":1},"border":0,"order":"headerbody","add":false,"edit":false,"openAll":{"size":1,"opacity":1}},"layout":{"alignment":"centercenter","order":"headerlink","padding":4,"gutter":2,"size":1,"width":100,"scrollPastEnd":false,"title":"New Tab","scrollbars":"auto","direction":"vertical"},"theme":{"accent":{"random":{"active":false,"style":"any"},"rgb":{"r":255,"g":150,"b":0},"cycle":{"active":false,"speed":200,"step":10},"hsl":{"h":35,"s":100,"l":50}},"color":{"hsl":{"h":0,"s":69,"l":62},"rgb":{"r":224,"g":91,"b":91},"contrast":{"light":3.5,"dark":4.5},"generated":{"negative":{"1":{"r":220,"g":72,"b":72},"2":{"r":217,"g":52,"b":52},"3":{"r":207,"g":39,"b":39},"4":{"r":188,"g":35,"b":35},"5":{"r":168,"g":32,"b":32},"6":{"r":149,"g":28,"b":28},"7":{"r":130,"g":25,"b":25},"8":{"r":111,"g":21,"b":21},"9":{"r":91,"g":17,"b":17},"10":{"r":72,"g":14,"b":14}},"positive":{"1":{"r":227,"g":106,"b":106},"2":{"r":230,"g":121,"b":121},"3":{"r":233,"g":136,"b":136},"4":{"r":235,"g":151,"b":151},"5":{"r":238,"g":166,"b":166},"6":{"r":241,"g":181,"b":181},"7":{"r":244,"g":196,"b":196},"8":{"r":247,"g":211,"b":211},"9":{"r":250,"g":226,"b":226},"10":{"r":252,"g":241,"b":241}}}},"font":{"display":{"name":"Big Shoulders Display","weight":400,"style":"normal"},"ui":{"name":"Montserrat","weight":400,"style":"normal"}},"style":"dark","radius":0.6,"custom":{"all":[],"edit":false},"shadow":1,"shade":{"opacity":0.1}},"background":{"color":{"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"visual":{"show":true,"type":"image","image":{"type":"url","file":{"name":"","data":""},"url":"https://source.unsplash.com/AU1rKyKPJco"},"video":{"url":""},"blur":2,"scale":1,"opacity":0.14,"grayscale":1,"accent":0.01,"vignette":{"opacity":0,"start":90,"end":70}}},"edit":false,"pagelock":true,"shade":true,"edge":false,"search":false,"menu":true,"modal":false,"dropdown":false,"autoSuggest":false},"bookmarks":[{"name":{"show":false,"text":"Cool stuff"},"items":[{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"AS"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"dice-d20","prefix":"fas","label":"Dice D20"},"shadow":{"size":0}},"name":{"show":false,"text":"awesomeSheet","size":0.9}},"url":"https://zombiefox.github.io/awesomeSheet/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104010,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"AZ"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"amazon","prefix":"fab","label":"Amazon"},"shadow":{"size":0}},"name":{"show":false,"text":"Amazon","size":0.9}},"url":"https://www.amazon.co.uk/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453107633,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"GM"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"envelope","prefix":"fas","label":"Envelope"},"shadow":{"size":0}},"name":{"show":false,"text":"Gmail","size":0.9}},"url":"https://mail.google.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453110265,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"R"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"shadow":{"size":0}},"name":{"show":false,"text":"Reddit","size":0.9}},"url":"https://www.reddit.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111491,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"N"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"film","prefix":"fas","label":"Film"},"shadow":{"size":0}},"name":{"show":false,"text":"Netflix","size":0.9}},"url":"https://www.netflix.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104460,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"DR"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"","prefix":"","label":""},"shadow":{"size":0}},"name":{"show":false,"text":"Drive","size":0.9}},"url":"https://drive.google.com/drive/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111953,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"DEV"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"code","prefix":"fas","label":"Code"},"shadow":{"size":0}},"name":{"show":false,"text":"Devdocs","size":0.9}},"url":"http://devdocs.io/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453101749,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"GIT"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"github","prefix":"fab","label":"GitHub"},"shadow":{"size":0}},"name":{"show":false,"text":"Github","size":0.9}},"url":"https://github.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453108926,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}}],"openAll":{"show":false}}]}
diff --git a/assets/screenshot/screenshot-005.png b/assets/screenshot/screenshot-005.png
deleted file mode 100644
index edd265a1..00000000
Binary files a/assets/screenshot/screenshot-005.png and /dev/null differ
diff --git a/assets/screenshot/screenshot-006.json b/assets/screenshot/screenshot-006.json
deleted file mode 100644
index d19ee320..00000000
--- a/assets/screenshot/screenshot-006.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nighttab":true,"version":"6.0.0","state":{"header":{"area":{"width":82,"justify":"center","align":"center"},"item":{"justify":"right"},"clock":{"hours":{"show":true,"display":"number"},"minutes":{"show":true,"display":"number"},"seconds":{"show":false,"display":"number"},"separator":{"show":false,"text":":"},"meridiem":{"show":true},"hour24":{"show":true},"size":4,"newLine":true},"date":{"day":{"show":false,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"number","ordinal":true},"month":{"show":true,"display":"word","length":"short","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":"/"},"format":"datemonth","size":1.7,"newLine":false},"search":{"show":true,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","google":{"url":"https://www.google.com/search","name":"Google"},"duckduckgo":{"url":"https://duckduckgo.com/","name":"DuckDuckGo"},"youtube":{"url":"https://www.youtube.com/results?search_query=","name":"YouTube"},"giphy":{"url":"https://giphy.com/search/","name":"Giphy"},"bing":{"url":"https://www.bing.com/search?q=","name":"Bing"},"custom":{"url":"","name":"","queryName":""}},"text":{"justify":"center"},"size":1,"newLine":true,"newTab":false,"opacity":1},"border":{"top":0,"bottom":0},"greeting":{"show":false,"type":"good","name":"","size":1,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":1,"newLine":false},"position":"sticky","radius":false,"color":{"show":true,"style":"scroll","opacity":0.95,"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"order":["greeting","transitional","clock","date","search","editAdd","colorAccent","menu"],"menu":{"show":true,"size":1,"newLine":false,"opacity":0},"editAdd":{"show":true,"size":1,"newLine":false,"opacity":0},"colorAccent":{"dot":{"show":true},"show":true,"size":1,"newLine":false,"opacity":0}},"link":{"area":{"width":100,"justify":"center","direction":"ltr"},"item":{"color":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1,"by":"theme"},"display":{"name":{"show":true,"size":0.7},"gutter":2,"direction":"vertical","order":"visualname","alignment":"bottomright","rotate":0,"translate":{"x":0,"y":0},"visual":{"letter":{"size":2},"icon":{"size":2},"image":{"size":2},"shadow":{"size":0}}},"url":{"show":true},"line":{"show":false},"shadow":{"show":true},"hoverScale":{"show":false},"newTab":false,"size":1,"border":0,"accent":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"by":"theme"},"background":{"opacity":1}},"show":true,"add":false,"edit":false,"style":"block","orientation":"bottom","breakpoint":"md"},"group":{"area":{"justify":"left"},"name":{"size":1},"border":0,"order":"headerbody","add":false,"edit":false,"openAll":{"size":1,"opacity":1}},"layout":{"alignment":"centercenter","order":"headerlink","padding":4,"gutter":2,"size":1,"width":83,"scrollPastEnd":false,"title":"New Tab","scrollbars":"auto","direction":"horizontal"},"theme":{"accent":{"random":{"active":false,"style":"any"},"rgb":{"r":255,"g":0,"b":187},"cycle":{"active":false,"speed":200,"step":10},"hsl":{"h":316,"s":100,"l":50}},"color":{"hsl":{"h":227,"s":52,"l":55},"rgb":{"r":80,"g":106,"b":199},"contrast":{"light":4,"dark":4},"generated":{"negative":{"1":{"r":65,"g":93,"b":194},"2":{"r":58,"g":85,"b":180},"3":{"r":53,"g":77,"b":165},"4":{"r":48,"g":70,"b":150},"5":{"r":43,"g":63,"b":134},"6":{"r":38,"g":56,"b":119},"7":{"r":33,"g":48,"b":103},"8":{"r":28,"g":41,"b":88},"9":{"r":23,"g":34,"b":72},"10":{"r":18,"g":27,"b":57}},"positive":{"1":{"r":95,"g":119,"b":204},"2":{"r":111,"g":132,"b":209},"3":{"r":126,"g":145,"b":214},"4":{"r":142,"g":159,"b":219},"5":{"r":157,"g":172,"b":224},"6":{"r":173,"g":185,"b":229},"7":{"r":188,"g":198,"b":234},"8":{"r":204,"g":211,"b":239},"9":{"r":219,"g":224,"b":244},"10":{"r":235,"g":238,"b":248}}}},"font":{"display":{"name":"Major Mono Display","weight":400,"style":"normal"},"ui":{"name":"Roboto Condensed","weight":400,"style":"normal"}},"style":"dark","radius":0.25,"custom":{"all":[],"edit":false},"shadow":0,"shade":{"opacity":0.7}},"background":{"color":{"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"visual":{"show":true,"type":"image","image":{"type":"url","file":{"name":"","data":""},"url":"https://source.unsplash.com/4u2U8EO9OzY"},"video":{"url":""},"blur":0,"scale":1,"opacity":0.26,"grayscale":0,"accent":0.36,"vignette":{"opacity":0,"start":90,"end":70}}},"edit":false,"pagelock":false,"shade":false,"edge":false,"search":false,"menu":false,"modal":true,"dropdown":false,"autoSuggest":false},"bookmarks":[{"name":{"show":false,"text":"Cool stuff"},"items":[{"display":{"direction":"vertical","order":"visualname","alignment":"bottomright","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"AS"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"dice-d20","prefix":"fas","label":"Dice D20"},"shadow":{"size":0}},"name":{"show":true,"text":"awesomeSheet","size":0.7}},"url":"https://zombiefox.github.io/awesomeSheet/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104010,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomright","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"AZ"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"amazon","prefix":"fab","label":"Amazon"},"shadow":{"size":0}},"name":{"show":true,"text":"Amazon","size":0.7}},"url":"https://www.amazon.co.uk/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453107633,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomright","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"R"},"image":{"size":2,"url":""},"icon":{"size":3,"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"shadow":{"size":0}},"name":{"show":true,"text":"Reddit","size":0.9}},"url":"https://www.reddit.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":true,"tall":true,"searchMatch":false,"timeStamp":1546453111491,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomright","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"N"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"film","prefix":"fas","label":"Film"},"shadow":{"size":0}},"name":{"show":true,"text":"Netflix","size":0.7}},"url":"https://www.netflix.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":true,"searchMatch":false,"timeStamp":1546453104460,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomright","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"GM"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"envelope","prefix":"fas","label":"Envelope"},"shadow":{"size":0}},"name":{"show":true,"text":"Gmail","size":0.7}},"url":"https://mail.google.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453110265,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomright","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"DR"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"","prefix":"","label":""},"shadow":{"size":0}},"name":{"show":true,"text":"Drive","size":0.7}},"url":"https://drive.google.com/drive/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111953,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomright","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":2,"text":"DEV"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"code","prefix":"fas","label":"Code"},"shadow":{"size":0}},"name":{"show":true,"text":"Devdocs","size":0.7}},"url":"http://devdocs.io/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453101749,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"bottomright","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"GIT"},"image":{"size":2,"url":""},"icon":{"size":2,"name":"github","prefix":"fab","label":"GitHub"},"shadow":{"size":0}},"name":{"show":true,"text":"Github","size":0.7}},"url":"https://github.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453108926,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}}],"openAll":{"show":false}}]}
diff --git a/assets/screenshot/screenshot-006.png b/assets/screenshot/screenshot-006.png
deleted file mode 100644
index 2255270e..00000000
Binary files a/assets/screenshot/screenshot-006.png and /dev/null differ
diff --git a/assets/screenshot/screenshot-007.json b/assets/screenshot/screenshot-007.json
deleted file mode 100644
index ef2fd158..00000000
--- a/assets/screenshot/screenshot-007.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nighttab":true,"version":"6.0.0","state":{"header":{"area":{"width":47,"justify":"center","align":"center"},"item":{"justify":"center"},"clock":{"hours":{"show":true,"display":"number"},"minutes":{"show":true,"display":"number"},"seconds":{"show":false,"display":"number"},"separator":{"show":true,"text":":"},"meridiem":{"show":false},"hour24":{"show":false},"size":3,"newLine":true},"date":{"day":{"show":false,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"number","ordinal":true},"month":{"show":true,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":"/"},"format":"datemonth","size":1,"newLine":true},"search":{"show":false,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","google":{"url":"https://www.google.com/search","name":"Google"},"duckduckgo":{"url":"https://duckduckgo.com/","name":"DuckDuckGo"},"youtube":{"url":"https://www.youtube.com/results?search_query=","name":"YouTube"},"giphy":{"url":"https://giphy.com/search/","name":"Giphy"},"bing":{"url":"https://www.bing.com/search?q=","name":"Bing"},"custom":{"url":"","name":"","queryName":""}},"text":{"justify":"center"},"size":1,"newLine":false,"newTab":false,"opacity":1},"border":{"top":0,"bottom":0},"greeting":{"show":false,"type":"good","name":"","size":1,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":1,"newLine":false},"position":"sticky","radius":false,"color":{"show":true,"style":"scroll","opacity":0.95,"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"order":["greeting","transitional","clock","date","search","editAdd","colorAccent","menu"],"menu":{"show":true,"size":1,"newLine":true,"opacity":0},"editAdd":{"show":true,"size":1,"newLine":true,"opacity":0},"colorAccent":{"dot":{"show":false},"show":true,"size":1,"newLine":true,"opacity":0}},"link":{"area":{"width":100,"justify":"center","direction":"ltr"},"item":{"color":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1,"by":"theme"},"display":{"name":{"show":false,"size":0.9},"gutter":2,"direction":"vertical","order":"visualname","alignment":"centercenter","rotate":0,"translate":{"x":0,"y":0.4},"visual":{"letter":{"size":3},"icon":{"size":3},"image":{"size":3},"shadow":{"size":0}}},"url":{"show":true},"line":{"show":false},"shadow":{"show":true},"hoverScale":{"show":false},"newTab":false,"size":1,"border":0,"accent":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"by":"theme"},"background":{"opacity":1}},"show":true,"add":false,"edit":false,"style":"block","orientation":"bottom","breakpoint":"lg"},"group":{"area":{"justify":"left"},"name":{"size":1},"border":0,"order":"headerbody","add":false,"edit":false,"openAll":{"size":1,"opacity":1}},"layout":{"alignment":"centercenter","order":"linkheader","padding":3,"gutter":3,"size":1,"width":80,"scrollPastEnd":false,"title":"New Tab","scrollbars":"auto","direction":"horizontal"},"theme":{"accent":{"random":{"active":false,"style":"any"},"rgb":{"r":0,"g":255,"b":255},"cycle":{"active":false,"speed":200,"step":10},"hsl":{"h":180,"s":100,"l":50}},"color":{"hsl":{"h":228,"s":71,"l":50},"rgb":{"r":36,"g":73,"b":218},"contrast":{"light":4.2,"dark":3.9},"generated":{"negative":{"1":{"r":33,"g":67,"b":201},"2":{"r":30,"g":62,"b":184},"3":{"r":28,"g":56,"b":167},"4":{"r":25,"g":50,"b":150},"5":{"r":22,"g":44,"b":133},"6":{"r":19,"g":39,"b":116},"7":{"r":16,"g":33,"b":99},"8":{"r":13,"g":27,"b":81},"9":{"r":11,"g":22,"b":64},"10":{"r":8,"g":16,"b":47}},"positive":{"1":{"r":54,"g":88,"b":222},"2":{"r":72,"g":103,"b":225},"3":{"r":90,"g":118,"b":228},"4":{"r":109,"g":134,"b":231},"5":{"r":127,"g":149,"b":234},"6":{"r":146,"g":164,"b":237},"7":{"r":164,"g":179,"b":240},"8":{"r":182,"g":195,"b":243},"9":{"r":201,"g":210,"b":246},"10":{"r":219,"g":225,"b":249}}}},"font":{"display":{"name":"Josefin Sans","weight":300,"style":"normal"},"ui":{"name":"Roboto Slab","weight":400,"style":"normal"}},"style":"dark","radius":0.5,"custom":{"all":[],"edit":false},"shadow":1.25,"shade":{"opacity":0.1}},"background":{"color":{"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"visual":{"show":false,"type":"video","image":{"type":"file","file":{"name":"","data":""},"url":""},"video":{"url":""},"blur":2,"scale":1,"opacity":0.05,"grayscale":0,"accent":0,"vignette":{"opacity":0,"start":90,"end":70}}},"edit":false,"pagelock":false,"shade":false,"edge":false,"search":false,"menu":false,"modal":true,"dropdown":false,"autoSuggest":false},"bookmarks":[{"name":{"show":false,"text":"Cool stuff"},"items":[{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"AS"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"dice-d20","prefix":"fas","label":"Dice D20"},"shadow":{"size":0}},"name":{"show":false,"text":"awesomeSheet","size":0.9}},"url":"https://zombiefox.github.io/awesomeSheet/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104010,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"AZ"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"amazon","prefix":"fab","label":"Amazon"},"shadow":{"size":0}},"name":{"show":false,"text":"Amazon","size":0.9}},"url":"https://www.amazon.co.uk/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453107633,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"GM"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"envelope","prefix":"fas","label":"Envelope"},"shadow":{"size":0}},"name":{"show":false,"text":"Gmail","size":0.9}},"url":"https://mail.google.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453110265,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"R"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"shadow":{"size":0}},"name":{"show":false,"text":"Reddit","size":0.9}},"url":"https://www.reddit.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":true,"searchMatch":false,"timeStamp":1546453111491,"background":{"show":true,"type":"image","opacity":0.8,"image":{"url":"https://images.unsplash.com/photo-1509641498745-13c26fd1ed89?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=934&q=80"},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"N"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"film","prefix":"fas","label":"Film"},"shadow":{"size":0}},"name":{"show":false,"text":"Netflix","size":0.9}},"url":"https://www.netflix.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104460,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"GIT"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"github","prefix":"fab","label":"GitHub"},"shadow":{"size":0}},"name":{"show":false,"text":"Github","size":0.9}},"url":"https://github.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":true,"tall":false,"searchMatch":false,"timeStamp":1546453108926,"background":{"show":true,"type":"image","opacity":0.5,"image":{"url":"https://images.unsplash.com/photo-1578070181910-f1e514afdd08?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2304&q=80"},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"DR"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"","prefix":"","label":""},"shadow":{"size":0}},"name":{"show":false,"text":"Drive","size":0.9}},"url":"https://drive.google.com/drive/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111953,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0.4},"visual":{"show":true,"type":"letter","letter":{"size":3,"text":"DEV"},"image":{"size":3,"url":""},"icon":{"size":3,"name":"code","prefix":"fas","label":"Code"},"shadow":{"size":0}},"name":{"show":false,"text":"Devdocs","size":0.9}},"url":"http://devdocs.io/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453101749,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}}],"openAll":{"show":false}}]}
diff --git a/assets/screenshot/screenshot-007.png b/assets/screenshot/screenshot-007.png
deleted file mode 100644
index 49fbe637..00000000
Binary files a/assets/screenshot/screenshot-007.png and /dev/null differ
diff --git a/assets/screenshot/screenshot-008.json b/assets/screenshot/screenshot-008.json
deleted file mode 100644
index 9fa5a66a..00000000
--- a/assets/screenshot/screenshot-008.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nighttab":true,"version":"6.0.0","state":{"header":{"area":{"width":74,"justify":"center","align":"center"},"clock":{"hours":{"show":true,"display":"number"},"minutes":{"show":true,"display":"number"},"seconds":{"show":false,"display":"number"},"separator":{"show":true,"text":":"},"meridiem":{"show":true},"hour24":{"show":true},"size":1,"newLine":false},"date":{"day":{"show":true,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"number","ordinal":true},"month":{"show":true,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":"/"},"format":"datemonth","size":1,"newLine":false},"search":{"show":false,"width":{"by":"auto","size":36},"focus":false,"engine":{"selected":"giphy","google":{"url":"https://www.google.com/search","name":"Google"},"duckduckgo":{"url":"https://duckduckgo.com/","name":"DuckDuckGo"},"youtube":{"url":"https://www.youtube.com/results?search_query=","name":"YouTube"},"giphy":{"url":"https://giphy.com/search/","name":"Giphy"},"custom":{"url":"","name":"","queryName":""},"bing":{"url":"https://www.bing.com/search?q=","name":"Bing"}},"text":{"justify":"center"},"size":1,"newLine":false,"newTab":false,"opacity":1},"greeting":{"show":false,"type":"hi","name":"zomFox!","size":1,"newLine":false},"transitional":{"show":false,"type":"its","size":1,"newLine":false},"padding":{"top":0,"bottom":0},"border":{"top":0,"bottom":0},"item":{"justify":"center"},"position":"sticky","color":{"show":true,"style":"scroll","opacity":0.95,"radius":false,"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"order":["greeting","transitional","clock","date","search","editAdd","colorAccent","menu"],"menu":{"show":true,"size":1,"newLine":false,"opacity":0},"editAdd":{"show":true,"size":1,"newLine":false,"opacity":0},"colorAccent":{"dot":{"show":false},"show":true,"size":1,"newLine":false,"opacity":0}},"link":{"area":{"width":100,"gap":2,"justify":"center","direction":"ltr"},"show":true,"edit":false,"style":"block","item":{"size":1,"display":{"alignment":"centercenter","rotate":0,"translate":{"x":0,"y":0},"name":{"show":false,"size":0.9},"order":"namevisual","direction":"vertical","gutter":2,"visual":{"letter":{"size":4},"icon":{"size":4},"image":{"size":4},"shadow":{"size":0}}},"url":{"show":true},"line":{"show":false},"hoverScale":{"show":false},"newTab":false,"border":0,"shadow":{"show":false},"color":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0,"by":"theme"},"accent":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"by":"theme"},"background":{"opacity":1}},"add":false,"orientation":"bottom","breakpoint":"sm"},"layout":{"alignment":"centercenter","width":80,"scrollPastEnd":false,"title":"New Tab","padding":4,"gutter":4,"order":"linkheader","size":0.9,"scrollbars":"auto","direction":"horizontal"},"theme":{"accent":{"random":{"active":false,"style":"any"},"rgb":{"r":51,"g":85,"b":119},"cycle":{"active":false,"speed":200,"step":10},"hsl":{"h":210,"s":40,"l":33.333333333333336}},"style":"light","radius":0,"color":{"hsl":{"h":220,"s":23,"l":43},"rgb":{"r":85,"g":102,"b":136},"contrast":{"light":5.6,"dark":3.5},"generated":{"negative":{"1":{"r":78,"g":94,"b":125},"2":{"r":71,"g":86,"b":114},"3":{"r":64,"g":77,"b":103},"4":{"r":58,"g":69,"b":92},"5":{"r":51,"g":61,"b":81},"6":{"r":44,"g":53,"b":70},"7":{"r":37,"g":44,"b":59},"8":{"r":30,"g":36,"b":48},"9":{"r":23,"g":28,"b":37},"10":{"r":16,"g":20,"b":26}},"positive":{"1":{"r":96,"g":115,"b":154},"2":{"r":112,"g":130,"b":166},"3":{"r":130,"g":146,"b":177},"4":{"r":147,"g":161,"b":188},"5":{"r":165,"g":176,"b":199},"6":{"r":183,"g":192,"b":210},"7":{"r":200,"g":207,"b":221},"8":{"r":218,"g":222,"b":232},"9":{"r":235,"g":238,"b":243},"10":{"r":253,"g":253,"b":254}}}},"font":{"display":{"name":"Abel","weight":400,"style":"normal"},"ui":{"name":"Raleway","weight":400,"style":"normal"}},"custom":{"all":[{"name":"Fresh","style":"light","font":{"display":{"name":"Abel","weight":400,"style":"normal"},"ui":{"name":"Raleway","weight":400,"style":"normal"}},"color":{"hsl":{"h":220,"s":23,"l":43},"rgb":{"r":85,"g":102,"b":136},"contrast":{"light":5.6,"dark":3.5}},"accent":{"rgb":{"r":51,"g":85,"b":119},"hsl":{"h":210,"s":40,"l":33}},"radius":0,"timestamp":1578554260345,"shadow":0.25}],"edit":false},"shadow":0.25,"shade":{"opacity":0.53}},"background":{"color":{"by":"custom","rgb":{"r":255,"g":255,"b":255},"hsl":{"h":0,"s":0,"l":0}},"visual":{"show":true,"type":"image","image":{"type":"url","file":{"name":"","data":""},"url":"https://images.unsplash.com/photo-1501769214405-5e5ee5125a02"},"video":{"url":""},"blur":0,"scale":1,"opacity":0.5,"grayscale":0,"accent":0,"vignette":{"opacity":0,"start":90,"end":70}}},"edge":false,"search":false,"menu":true,"modal":true,"autoSuggest":false,"pagelock":true,"shade":true,"group":{"area":{"justify":"left"},"name":{"size":1},"border":1,"order":"headerbody","add":false,"edit":false,"openAll":{"size":1,"opacity":1}},"dropdown":false,"edit":false},"bookmarks":[{"name":{"show":false,"text":"Cool stuff"},"items":[{"display":{"direction":"vertical","order":"namevisual","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":4,"text":"AS"},"image":{"size":4,"url":""},"icon":{"size":4,"name":"dice-d20","prefix":"fas","label":"Dice D20"},"shadow":{"size":0}},"name":{"show":false,"text":"awesomeSheet","size":0.9}},"url":"https://zombiefox.github.io/awesomeSheet/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104010,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"namevisual","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":4,"text":"AZ"},"image":{"size":4,"url":""},"icon":{"size":4,"name":"amazon","prefix":"fab","label":"Amazon"},"shadow":{"size":0}},"name":{"show":false,"text":"Amazon","size":0.9}},"url":"https://www.amazon.co.uk/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453107633,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"namevisual","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":4,"text":"GM"},"image":{"size":4,"url":""},"icon":{"size":4,"name":"envelope","prefix":"fas","label":"Envelope"},"shadow":{"size":0}},"name":{"show":false,"text":"Gmail","size":0.9}},"url":"https://mail.google.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453110265,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"namevisual","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":4,"text":"R"},"image":{"size":4,"url":""},"icon":{"size":4,"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"shadow":{"size":0}},"name":{"show":false,"text":"Reddit","size":0.9}},"url":"https://www.reddit.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111491,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"namevisual","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":4,"text":"N"},"image":{"size":4,"url":""},"icon":{"size":4,"name":"film","prefix":"fas","label":"Film"},"shadow":{"size":0}},"name":{"show":false,"text":"Netflix","size":0.9}},"url":"https://www.netflix.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104460,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"namevisual","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":4,"text":"DR"},"image":{"size":4,"url":""},"icon":{"size":4,"name":"google-drive","prefix":"fab","label":"Google Drive"},"shadow":{"size":0}},"name":{"show":false,"text":"Drive","size":0.9}},"url":"https://drive.google.com/drive/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111953,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}}],"openAll":{"show":false}},{"name":{"show":false,"text":"Dev sites"},"items":[{"display":{"direction":"vertical","order":"namevisual","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":4,"text":"DEV"},"image":{"size":4,"url":""},"icon":{"size":4,"name":"code","prefix":"fas","label":"Code"},"shadow":{"size":0}},"name":{"show":false,"text":"Devdocs","size":0.9}},"url":"http://devdocs.io/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453101749,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"namevisual","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":4,"text":"GIT"},"image":{"size":4,"url":""},"icon":{"size":4,"name":"github","prefix":"fab","label":"GitHub"},"shadow":{"size":0}},"name":{"show":false,"text":"Github","size":0.9}},"url":"https://github.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453108926,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}}],"openAll":{"show":false}}]}
diff --git a/assets/screenshot/screenshot-008.png b/assets/screenshot/screenshot-008.png
deleted file mode 100644
index 0155ebc1..00000000
Binary files a/assets/screenshot/screenshot-008.png and /dev/null differ
diff --git a/assets/screenshot/screenshot-009.json b/assets/screenshot/screenshot-009.json
deleted file mode 100644
index 1f8ab099..00000000
--- a/assets/screenshot/screenshot-009.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nighttab":true,"version":"6.0.0","state":{"header":{"area":{"width":100,"justify":"center","align":"center"},"item":{"justify":"right"},"clock":{"hours":{"show":true,"display":"number"},"minutes":{"show":true,"display":"number"},"seconds":{"show":false,"display":"number"},"separator":{"show":true,"text":":"},"meridiem":{"show":true},"hour24":{"show":true},"size":1.2,"newLine":false},"date":{"day":{"show":true,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"number","ordinal":true},"month":{"show":true,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":"/"},"format":"datemonth","size":1.2,"newLine":false},"search":{"show":false,"width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","google":{"url":"https://www.google.com/search","name":"Google"},"duckduckgo":{"url":"https://duckduckgo.com/","name":"DuckDuckGo"},"youtube":{"url":"https://www.youtube.com/results?search_query=","name":"YouTube"},"giphy":{"url":"https://giphy.com/search/","name":"Giphy"},"custom":{"url":"","name":"","queryName":""},"bing":{"url":"https://www.bing.com/search?q=","name":"Bing"}},"text":{"justify":"center"},"size":1,"newLine":false,"newTab":false,"opacity":1},"border":{"top":0,"bottom":0},"greeting":{"show":false,"type":"good","name":"","size":1,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":1,"newLine":false},"radius":false,"position":"sticky","color":{"show":true,"style":"always","opacity":0.67,"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"order":["greeting","transitional","clock","date","search","editAdd","colorAccent","menu"],"menu":{"show":true,"size":1,"newLine":false,"opacity":0},"editAdd":{"show":false,"size":1,"newLine":false,"opacity":0},"colorAccent":{"dot":{"show":true},"show":false,"size":1,"newLine":false,"opacity":0}},"link":{"area":{"width":100,"justify":"center","direction":"ltr"},"item":{"display":{"alignment":"bottomright","rotate":0,"translate":{"x":0,"y":0},"name":{"show":true,"size":0.9},"order":"visualname","direction":"vertical","gutter":2,"visual":{"letter":{"size":3},"icon":{"size":3},"image":{"size":3},"shadow":{"size":0}}},"url":{"show":true},"size":1,"line":{"show":false},"hoverScale":{"show":true},"newTab":false,"border":0,"shadow":{"show":true},"color":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1,"by":"theme"},"accent":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"by":"theme"},"background":{"opacity":1}},"show":false,"edit":false,"style":"block","add":false,"orientation":"bottom","breakpoint":"xl"},"layout":{"alignment":"centercenter","padding":4,"gutter":2,"width":100,"scrollPastEnd":false,"title":"New Tab","order":"headerlink","size":1,"scrollbars":"auto","direction":"vertical"},"theme":{"accent":{"random":{"active":false,"style":"any"},"rgb":{"r":0,"g":255,"b":255},"cycle":{"active":false,"speed":300,"step":10},"hsl":{"h":180,"s":100,"l":50}},"style":"dark","radius":0.25,"color":{"hsl":{"h":215,"s":18,"l":32},"rgb":{"r":67,"g":79,"b":96},"contrast":{"light":2,"dark":2},"generated":{"negative":{"1":{"r":63,"g":74,"b":90},"2":{"r":59,"g":69,"b":84},"3":{"r":54,"g":64,"b":78},"4":{"r":50,"g":59,"b":72},"5":{"r":46,"g":54,"b":66},"6":{"r":42,"g":49,"b":60},"7":{"r":38,"g":44,"b":54},"8":{"r":33,"g":39,"b":48},"9":{"r":29,"g":35,"b":42},"10":{"r":25,"g":30,"b":36}},"positive":{"1":{"r":71,"g":84,"b":102},"2":{"r":75,"g":89,"b":108},"3":{"r":80,"g":94,"b":114},"4":{"r":84,"g":99,"b":120},"5":{"r":88,"g":104,"b":126},"6":{"r":92,"g":109,"b":132},"7":{"r":96,"g":114,"b":138},"8":{"r":101,"g":119,"b":144},"9":{"r":105,"g":123,"b":150},"10":{"r":111,"g":129,"b":154}}}},"font":{"display":{"name":"Unica One","weight":400,"style":"normal"},"ui":{"name":"Inria Sans","weight":400,"style":"normal"}},"custom":{"all":[],"edit":false},"shadow":0.5,"shade":{"opacity":0.02}},"background":{"color":{"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"visual":{"show":true,"type":"video","image":{"type":"url","file":{"name":"","data":""},"url":""},"video":{"url":"https://pixabay.com/videos/download/video-40581_large.mp4"},"blur":0,"scale":1,"opacity":0.6,"grayscale":0,"accent":0.1,"vignette":{"opacity":23,"start":90,"end":17}}},"edge":true,"search":false,"menu":true,"modal":false,"autoSuggest":false,"pagelock":true,"shade":true,"group":{"area":{"justify":"left"},"name":{"size":1},"border":0,"order":"headerbody","add":false,"edit":false,"openAll":{"size":1,"opacity":1}},"dropdown":false,"edit":true},"bookmarks":[{"name":{"show":true,"text":"Group 1"},"items":[],"openAll":{"show":true}}]}
diff --git a/assets/screenshot/screenshot-010.json b/assets/screenshot/screenshot-010.json
deleted file mode 100644
index 6febf0d1..00000000
--- a/assets/screenshot/screenshot-010.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nighttab":true,"version":"6.0.0","state":{"header":{"area":{"width":100,"justify":"center","align":"center"},"item":{"justify":"left"},"greeting":{"show":false,"type":"good","name":"","size":1,"newLine":false},"clock":{"hours":{"show":true,"display":"number"},"minutes":{"show":true,"display":"number"},"seconds":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"meridiem":{"show":true},"hour24":{"show":true},"size":1,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":1,"newLine":false},"date":{"day":{"show":false,"display":"word","weekStart":"monday","length":"long"},"date":{"show":true,"display":"number","ordinal":true},"month":{"show":true,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"format":"datemonth","size":1,"newLine":false},"search":{"show":true,"style":"box","width":{"by":"auto","size":30},"focus":false,"engine":{"selected":"google","google":{"url":"https://www.google.com/search","name":"Google"},"duckduckgo":{"url":"https://duckduckgo.com/","name":"DuckDuckGo"},"youtube":{"url":"https://www.youtube.com/results?search_query=","name":"YouTube"},"giphy":{"url":"https://giphy.com/search/","name":"Giphy"},"bing":{"url":"https://www.bing.com/search?q=","name":"Bing"},"custom":{"url":"","name":"","queryName":""}},"text":{"justify":"center"},"size":1,"opacity":1,"newLine":false,"newTab":false},"editAdd":{"show":true,"size":1,"opacity":1,"newLine":false},"colorAccent":{"dot":{"show":true},"show":true,"size":1,"opacity":1,"newLine":false},"menu":{"show":true,"size":1,"opacity":1,"newLine":false},"order":["greeting","transitional","clock","date","search","editAdd","colorAccent","menu"],"border":{"top":0,"bottom":0},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"style":"scroll","opacity":0.95,"show":false,"newLine":false},"position":"inline","radius":false},"link":{"area":{"width":100,"direction":"ltr","justify":"center"},"item":{"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"background":{"opacity":1},"display":{"visual":{"letter":{"size":1.4},"icon":{"size":1.4},"image":{"size":1.4},"shadow":{"size":0}},"name":{"show":true,"size":0.9},"gutter":2,"direction":"horizontal","order":"visualname","alignment":"bottomleft","rotate":0,"translate":{"x":0,"y":0}},"url":{"show":false},"line":{"show":false},"shadow":{"show":true},"hoverScale":{"show":true},"newTab":false,"size":1.4,"border":0},"show":true,"add":false,"edit":false,"style":"block","orientation":"bottom","breakpoint":"xl"},"group":{"area":{"justify":"left"},"name":{"show":true,"size":1},"openAll":{"show":true,"size":1,"opacity":1},"border":0,"order":"headerbody","add":false,"edit":false},"layout":{"alignment":"centercenter","order":"headerlink","direction":"vertical","padding":4,"gutter":2,"size":1,"width":90,"scrollPastEnd":false,"scrollbars":"auto","title":""},"theme":{"accent":{"hsl":{"h":0,"s":0,"l":90},"rgb":{"r":230,"g":230,"b":230},"random":{"active":false,"style":"any"},"cycle":{"active":false,"speed":300,"step":10}},"color":{"hsl":{"h":201,"s":7,"l":66},"rgb":{"r":162,"g":170,"b":174},"contrast":{"light":2.6,"dark":4},"generated":{"negative":{"1":{"r":151,"g":160,"b":165},"2":{"r":140,"g":150,"b":155},"3":{"r":129,"g":140,"b":146},"4":{"r":118,"g":130,"b":136},"5":{"r":109,"g":120,"b":125},"6":{"r":99,"g":109,"b":114},"7":{"r":90,"g":99,"b":103},"8":{"r":80,"g":88,"b":92},"9":{"r":71,"g":78,"b":81},"10":{"r":61,"g":68,"b":71}},"positive":{"1":{"r":169,"g":176,"b":180},"2":{"r":176,"g":183,"b":186},"3":{"r":183,"g":189,"b":193},"4":{"r":190,"g":196,"b":199},"5":{"r":197,"g":202,"b":205},"6":{"r":205,"g":209,"b":211},"7":{"r":212,"g":215,"b":217},"8":{"r":219,"g":222,"b":223},"9":{"r":226,"g":228,"b":230},"10":{"r":233,"g":235,"b":236}}}},"font":{"display":{"name":"","weight":400,"style":"normal"},"ui":{"name":"","weight":400,"style":"normal"}},"style":"dark","radius":0.25,"shadow":2,"shade":{"opacity":0.2},"custom":{"all":[],"edit":false}},"background":{"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"visual":{"show":false,"type":"video","image":{"type":"file","file":{"name":"","data":""},"url":""},"video":{"url":""},"blur":0,"scale":1,"opacity":1,"grayscale":0,"accent":0,"vignette":{"opacity":0,"start":90,"end":70}}},"edit":false,"pagelock":true,"shade":true,"edge":false,"search":false,"menu":true,"modal":false,"dropdown":false,"autoSuggest":false},"bookmarks":[{"name":{"text":"Cool stuff","show":false},"openAll":{"show":false},"items":[{"display":{"direction":"horizontal","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":1.4,"text":"R"},"image":{"size":1.4,"url":""},"icon":{"size":1.4,"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"shadow":{"size":0}},"name":{"show":false,"text":"Reddit","size":0.9}},"url":"https://www.reddit.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"background":{"show":true,"type":"image","opacity":1,"image":{"url":"https://images.unsplash.com/photo-1584098113770-a5922198255a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2250&q=80"},"video":{"url":""}},"wide":true,"tall":false,"searchMatch":false,"timeStamp":1546453111491},{"display":{"direction":"horizontal","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":1.4,"text":"DEV"},"image":{"size":1.4,"url":""},"icon":{"size":1.4,"name":"code","prefix":"fas","label":"Code"},"shadow":{"size":0}},"name":{"show":false,"text":"Devdocs","size":0.9}},"url":"http://devdocs.io/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"background":{"show":true,"type":"image","opacity":1,"image":{"url":"https://images.unsplash.com/photo-1504384171965-be2509a826af?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=80"},"video":{"url":""}},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453101749},{"display":{"direction":"horizontal","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":1.4,"text":"GIT"},"image":{"size":1.4,"url":""},"icon":{"size":1.4,"name":"github","prefix":"fab","label":"GitHub"},"shadow":{"size":0}},"name":{"show":false,"text":"Github","size":0.9}},"url":"https://github.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"background":{"show":true,"type":"image","opacity":1,"image":{"url":"https://images.unsplash.com/photo-1527049979667-990f1d0d8e7f?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80"},"video":{"url":""}},"wide":false,"tall":true,"searchMatch":false,"timeStamp":1546453108926},{"display":{"direction":"horizontal","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":1.4,"text":"AZ"},"image":{"size":1.4,"url":""},"icon":{"size":1.4,"name":"amazon","prefix":"fab","label":"Amazon"},"shadow":{"size":0}},"name":{"show":false,"text":"Amazon","size":0.9}},"url":"https://www.amazon.co.uk/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"background":{"show":true,"type":"image","opacity":1,"image":{"url":"https://images.unsplash.com/photo-1586982469023-9f3e18321fc7?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=80"},"video":{"url":""}},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453107633},{"display":{"direction":"horizontal","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":1.4,"text":"AS"},"image":{"size":1.4,"url":""},"icon":{"size":1.4,"name":"dice-d20","prefix":"fas","label":"Dice D20"},"shadow":{"size":0}},"name":{"show":false,"text":"awesomeSheet","size":0.9}},"url":"https://zombiefox.github.io/awesomeSheet/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"background":{"show":true,"type":"image","opacity":1,"image":{"url":"https://images.unsplash.com/photo-1594201272716-9ad78d16848b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=80"},"video":{"url":""}},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104010},{"display":{"direction":"horizontal","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":1.4,"text":"GM"},"image":{"size":1.4,"url":""},"icon":{"size":1.4,"name":"envelope","prefix":"fas","label":"Envelope"},"shadow":{"size":0}},"name":{"show":false,"text":"Gmail","size":0.9}},"url":"https://mail.google.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"background":{"show":true,"type":"image","opacity":1,"image":{"url":"https://images.unsplash.com/photo-1499382926300-90a93d2d9990?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80"},"video":{"url":""}},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453110265},{"display":{"direction":"horizontal","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"letter","letter":{"size":1.4,"text":"DR"},"image":{"size":1.4,"url":""},"icon":{"size":1.4,"name":"","prefix":"","label":""},"shadow":{"size":0}},"name":{"show":false,"text":"Drive","size":0.9}},"url":"https://drive.google.com/drive/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"background":{"show":true,"type":"image","opacity":1,"image":{"url":"https://images.unsplash.com/photo-1500043204644-768d20653f32?ixlib=rb-1.2.1&auto=format&fit=crop&w=500&q=80"},"video":{"url":""}},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111953},{"display":{"direction":"horizontal","order":"visualname","alignment":"bottomleft","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":1.4,"text":"N"},"image":{"size":1.4,"url":""},"icon":{"size":1.4,"name":"film","prefix":"fas","label":"Film"},"shadow":{"size":0}},"name":{"show":false,"text":"Netflix","size":0.9}},"url":"https://www.netflix.com/","accent":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":1},"background":{"show":true,"type":"image","opacity":1,"image":{"url":"https://images.unsplash.com/photo-1497100022365-1a3688dc53ec?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1846&q=80"},"video":{"url":""}},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104460}]}]}
diff --git a/assets/screenshot/screenshot-010.png b/assets/screenshot/screenshot-010.png
deleted file mode 100644
index 5b919eb1..00000000
Binary files a/assets/screenshot/screenshot-010.png and /dev/null differ
diff --git a/assets/screenshot/screenshot-011.json b/assets/screenshot/screenshot-011.json
deleted file mode 100644
index 83b7f08e..00000000
--- a/assets/screenshot/screenshot-011.json
+++ /dev/null
@@ -1 +0,0 @@
-{"nighttab":true,"version":"6.0.0","state":{"header":{"clock":{"hours":{"show":false,"display":"number"},"minutes":{"show":false,"display":"number"},"seconds":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"meridiem":{"show":false},"hour24":{"show":false},"size":1,"newLine":false},"date":{"day":{"show":false,"display":"word","weekStart":"monday","length":"long"},"date":{"show":false,"display":"number","ordinal":false},"month":{"show":false,"display":"word","length":"long","ordinal":true},"year":{"show":false,"display":"number"},"separator":{"show":true,"text":""},"format":"datemonth","size":1,"newLine":false},"search":{"show":false,"focus":false,"engine":{"selected":"giphy","google":{"url":"https://www.google.com/search","name":"Google"},"duckduckgo":{"url":"https://duckduckgo.com/","name":"DuckDuckGo"},"giphy":{"url":"https://giphy.com/search/","name":"Giphy"},"custom":{"url":"","name":"","queryName":""},"youtube":{"url":"https://www.youtube.com/results?search_query=","name":"YouTube"},"bing":{"url":"https://www.bing.com/search?q=","name":"Bing"}},"width":{"by":"auto","size":26},"text":{"justify":"center"},"size":1,"newLine":false,"newTab":false,"opacity":0},"greeting":{"show":false,"type":"good","name":"","size":1,"newLine":false},"transitional":{"show":false,"type":"timeanddate","size":1,"newLine":false},"area":{"width":100,"justify":"center","align":"center"},"border":{"top":0,"bottom":0},"item":{"justify":"left"},"radius":false,"position":"inline","color":{"show":true,"style":"scroll","opacity":0.95,"by":"theme","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"order":["greeting","transitional","clock","date","editAdd","colorAccent","menu","search"],"menu":{"show":true,"size":1,"newLine":false,"opacity":0},"editAdd":{"show":true,"size":1,"newLine":false,"opacity":0},"colorAccent":{"dot":{"show":true},"show":false,"size":1,"newLine":false,"opacity":0}},"layout":{"width":72,"scrollPastEnd":false,"title":"","alignment":"centercenter","padding":6,"gutter":2,"order":"linkheader","size":1,"scrollbars":"none","direction":"vertical"},"background":{"color":{"by":"custom","rgb":{"r":0,"g":0,"b":0},"hsl":{"h":0,"s":0,"l":0}},"visual":{"show":true,"type":"image","image":{"type":"url","file":{"name":"","data":""},"url":"https://images.unsplash.com/photo-1472803828399-39d4ac53c6e5?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=3442&q=80"},"video":{"url":""},"blur":2,"scale":1,"opacity":0.5,"grayscale":0,"accent":0,"vignette":{"opacity":30,"start":90,"end":70}}},"search":false,"menu":true,"modal":false,"theme":{"accent":{"random":{"active":false,"style":"light"},"rgb":{"r":0,"g":255,"b":252},"cycle":{"active":false,"speed":1000,"step":60},"hsl":{"h":179,"s":100,"l":50}},"style":"dark","radius":0.5,"color":{"hsl":{"h":0,"s":0,"l":63},"rgb":{"r":161,"g":161,"b":161},"contrast":{"light":5,"dark":5},"generated":{"negative":{"1":{"r":148,"g":148,"b":148},"2":{"r":136,"g":136,"b":136},"3":{"r":123,"g":123,"b":123},"4":{"r":110,"g":110,"b":110},"5":{"r":97,"g":97,"b":97},"6":{"r":84,"g":84,"b":84},"7":{"r":72,"g":72,"b":72},"8":{"r":59,"g":59,"b":59},"9":{"r":46,"g":46,"b":46},"10":{"r":33,"g":33,"b":33}},"positive":{"1":{"r":174,"g":174,"b":174},"2":{"r":186,"g":186,"b":186},"3":{"r":199,"g":199,"b":199},"4":{"r":212,"g":212,"b":212},"5":{"r":225,"g":225,"b":225},"6":{"r":237,"g":237,"b":237},"7":{"r":250,"g":250,"b":250},"8":{"r":255,"g":255,"b":255},"9":{"r":255,"g":255,"b":255},"10":{"r":255,"g":255,"b":255}}}},"font":{"display":{"name":"Baloo 2","weight":400,"style":"normal"},"ui":{"name":"","weight":400,"style":"normal"}},"custom":{"all":[],"edit":false},"shadow":0.25,"shade":{"opacity":0.1}},"autoSuggest":false,"link":{"edit":false,"style":"block","area":{"width":100,"justify":"center","direction":"ltr"},"show":true,"item":{"size":1,"display":{"alignment":"centercenter","rotate":0,"translate":{"x":0,"y":0},"name":{"show":true,"size":0.6},"order":"visualname","direction":"vertical","gutter":1,"visual":{"letter":{"size":2},"icon":{"size":3},"image":{"size":2},"shadow":{"size":0}}},"url":{"show":true},"line":{"show":false},"hoverScale":{"show":false},"newTab":false,"border":2,"shadow":{"show":false},"color":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0,"by":"theme"},"accent":{"hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"by":"theme"},"background":{"opacity":1}},"add":false,"orientation":"bottom","breakpoint":"lg"},"edge":false,"pagelock":true,"shade":true,"group":{"area":{"justify":"left"},"name":{"size":1},"border":0,"order":"headerbody","add":false,"edit":false,"openAll":{"size":1,"opacity":1}},"dropdown":false,"edit":false},"bookmarks":[{"name":{"show":false,"text":"Cool stuff"},"items":[{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"DEV"},"image":{"size":2,"url":""},"icon":{"size":3,"name":"code","prefix":"fas","label":"Code"},"shadow":{"size":0}},"name":{"show":false,"text":"Devdocs","size":0.7}},"url":"http://devdocs.io/","accent":{"by":"custom","hsl":{"h":207,"s":34,"l":50},"rgb":{"r":84,"g":132,"b":171}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453101749,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"R"},"image":{"size":2,"url":""},"icon":{"size":3,"name":"reddit-alien","prefix":"fab","label":"reddit Alien"},"shadow":{"size":0}},"name":{"show":false,"text":"Reddit","size":0.7}},"url":"https://www.reddit.com/","accent":{"by":"custom","hsl":{"h":27,"s":100,"l":50},"rgb":{"r":255,"g":115,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":true,"tall":false,"searchMatch":false,"timeStamp":1546453111491,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"GIT"},"image":{"size":2,"url":""},"icon":{"size":3,"name":"github","prefix":"fab","label":"GitHub"},"shadow":{"size":0}},"name":{"show":false,"text":"Github","size":0.7}},"url":"https://github.com/","accent":{"by":"custom","hsl":{"h":0,"s":0,"l":100},"rgb":{"r":255,"g":255,"b":255}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":true,"searchMatch":false,"timeStamp":1546453108926,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"AS"},"image":{"size":2,"url":""},"icon":{"size":3,"name":"dice-d20","prefix":"fas","label":"Dice D20"},"shadow":{"size":0}},"name":{"show":false,"text":"awesomeSheet","size":0.7}},"url":"https://zombiefox.github.io/awesomeSheet/","accent":{"by":"custom","hsl":{"h":218,"s":49,"l":42},"rgb":{"r":55,"g":93,"b":160}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104010,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"AZ"},"image":{"size":2,"url":""},"icon":{"size":3,"name":"amazon","prefix":"fab","label":"Amazon"},"shadow":{"size":0}},"name":{"show":false,"text":"Amazon","size":0.7}},"url":"https://www.amazon.co.uk/","accent":{"by":"custom","hsl":{"h":45,"s":100,"l":50},"rgb":{"r":255,"g":191,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453107633,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"N"},"image":{"size":2,"url":""},"icon":{"size":3,"name":"film","prefix":"fas","label":"Film"},"shadow":{"size":0}},"name":{"show":false,"text":"Netflix","size":0.7}},"url":"https://www.netflix.com/","accent":{"by":"custom","hsl":{"h":5,"s":100,"l":50},"rgb":{"r":255,"g":21,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453104460,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"DR"},"image":{"size":2,"url":""},"icon":{"size":3,"name":"google-drive","prefix":"fab","label":"Google Drive"},"shadow":{"size":0}},"name":{"show":false,"text":"Drive","size":0.7}},"url":"https://drive.google.com/drive/","accent":{"by":"custom","hsl":{"h":144,"s":100,"l":50},"rgb":{"r":0,"g":255,"b":102}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453111953,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}},{"display":{"direction":"vertical","order":"visualname","alignment":"centercenter","gutter":2,"rotate":0,"translate":{"x":0,"y":0},"visual":{"show":true,"type":"icon","letter":{"size":2,"text":"GM"},"image":{"size":2,"url":""},"icon":{"size":3,"name":"envelope","prefix":"fas","label":"Envelope"},"shadow":{"size":0}},"name":{"show":false,"text":"Gmail","size":0.7}},"url":"https://mail.google.com/","accent":{"by":"custom","hsl":{"h":0,"s":100,"l":50},"rgb":{"r":255,"g":0,"b":0}},"color":{"by":"theme","hsl":{"h":0,"s":0,"l":0},"rgb":{"r":0,"g":0,"b":0},"opacity":0},"wide":false,"tall":false,"searchMatch":false,"timeStamp":1546453110265,"background":{"show":false,"type":"image","opacity":1,"image":{"url":""},"video":{"url":""}}}],"openAll":{"show":false}}]}
diff --git a/assets/screenshot/screenshot-011.png b/assets/screenshot/screenshot-011.png
deleted file mode 100644
index 39896d3c..00000000
Binary files a/assets/screenshot/screenshot-011.png and /dev/null differ
diff --git a/gulpfile.js b/gulpfile.js
deleted file mode 100644
index 393a4355..00000000
--- a/gulpfile.js
+++ /dev/null
@@ -1,233 +0,0 @@
-const {
- src,
- dest,
- parallel
-} = require('gulp');
-
-const fileinclude = require('gulp-file-include');
-
-const csso = require('gulp-csso');
-
-const concat = require('gulp-concat');
-
-const uglify = require('gulp-uglify');
-
-const uglifycss = require('gulp-uglifycss');
-
-const replace = require('gulp-replace');
-
-const htmlmin = require('gulp-htmlmin');
-
-const minifyinline = require('gulp-minify-inline');
-
-const watch = require('gulp-watch');
-
-const filter = require('gulp-filter');
-
-const path = {
- src: 'src',
- dev: 'dev',
- build: 'build/web',
- nodeModules: 'node_modules',
-}
-
-const filename = {
- css: 'nighttab.min.css',
- js: 'nighttab.min.js'
-}
-
-const jsDependencies = [
- path.nodeModules + '/html5sortable/dist/html5sortable.min.js',
- path.nodeModules + '/moment/min/moment.min.js',
- path.nodeModules + '/webfontloader/webfontloader.js'
-]
-
-const cssFiles = [
- path.src + '/css/reset.css',
- path.src + '/css/variables.css',
- path.src + '/css/utilities.css',
- path.src + '/css/base.css',
- path.src + '/css/layout.css',
- path.src + '/css/edge.css',
- path.src + '/css/animation.css',
- path.src + '/css/fonts.css',
- path.src + '/css/icons.css',
- path.src + '/css/state.css',
- path.src + '/css/typography.css',
- path.src + '/css/spacing.css',
- path.src + '/css/button.css',
- path.src + '/css/form.css',
- path.src + '/css/shade.css',
- path.src + '/css/modal.css',
- path.src + '/css/tip.css',
- path.src + '/css/menu.css',
- path.src + '/css/header.css',
- path.src + '/css/date.css',
- path.src + '/css/clock.css',
- path.src + '/css/greeting.css',
- path.src + '/css/transitional.css',
- path.src + '/css/search.css',
- path.src + '/css/background.css',
- path.src + '/css/group.css',
- path.src + '/css/link.css',
- path.src + '/css/theme.css',
- path.src + '/css/auto-suggest.css',
- path.src + '/css/coffee.css',
- path.src + '/css/fontawesome.css'
-]
-
-const jsFiles = [
- path.src + '/js/helper.js',
- path.src + '/js/data.js',
- path.src + '/js/ready.js',
- path.src + '/js/fontawesome.js',
- path.src + '/js/update.js',
- path.src + '/js/state.js',
- path.src + '/js/bookmarks.js',
- path.src + '/js/control.js',
- path.src + '/js/menu.js',
- path.src + '/js/header.js',
- path.src + '/js/modal.js',
- path.src + '/js/tip.js',
- path.src + '/js/shade.js',
- path.src + '/js/theme.js',
- path.src + '/js/date.js',
- path.src + '/js/greeting.js',
- path.src + '/js/transitional.js',
- path.src + '/js/clock.js',
- path.src + '/js/search.js',
- path.src + '/js/link.js',
- path.src + '/js/version.js',
- path.src + '/js/keyboard.js',
- path.src + '/js/background.js',
- path.src + '/js/layout.js',
- path.src + '/js/auto-suggest.js',
- path.src + '/js/pagelock.js',
- path.src + '/js/edge.js',
- path.src + '/js/dropdown.js',
- path.src + '/js/init.js'
-]
-
-const build = {
- manifest: function() {
- return src(path.src + '/manifest.json')
- .pipe(dest(path.build))
- },
- html: function() {
- return src(path.src + '/index.html')
- .pipe(fileinclude({
- prefix: '@@',
- basepath: '@file'
- }))
- .pipe(replace(/\<\!\-\-\ css\-block\ \-\-\>([\s\S]*)\<\!\-\-\ end\-css\-block\ \-\-\>/mg, ''))
- .pipe(replace(/\<\!\-\-\ js\-block\ \-\-\>([\s\S]*)\<\!\-\-\ end\-js\-block\ \-\-\>/mg, ''))
- .pipe(htmlmin({
- collapseWhitespace: true
- }))
- .pipe(minifyinline())
- .pipe(dest(path.build))
- },
- fonts: function() {
- return src(path.src + '/fonts/**/*.*')
- .pipe(dest(path.build + '/fonts'))
- },
- icons: function() {
- return src(path.src + '/icons/**/*.*')
- .pipe(dest(path.build + '/icons'))
- },
- css: function() {
- return src(cssFiles)
- .pipe(concat(filename.css))
- .pipe(csso())
- .pipe(uglifycss({
- "uglyComments": true
- }))
- .pipe(dest(path.build + '/css'))
- },
- js: function() {
- const noVendors = filter(jsFiles, {
- restore: true
- });
- return src(jsDependencies.concat(jsFiles), {
- sourcemaps: true
- })
- .pipe(noVendors)
- .pipe(uglify())
- .pipe(noVendors.restore)
- .pipe(concat(filename.js))
- .pipe(dest(path.build + '/js', {
- sourcemaps: '.'
- }))
- },
- initialBackground: function() {
- return src(path.src + '/js/initial-background.js')
- .pipe(uglify())
- .pipe(dest(path.build + '/js'))
- }
-}
-
-const dev = {
- manifest: function() {
- watch(path.src + '/manifest.json', {
- ignoreInitial: false
- }, function() {
- return src(path.src + '/manifest.json')
- .pipe(dest(path.dev))
- })
- },
- html: function() {
- watch(path.src + '/**/*.html', {
- ignoreInitial: false
- }, function() {
- return src(path.src + '/index.html')
- .pipe(fileinclude({
- prefix: '@@',
- basepath: '@file'
- }))
- .pipe(dest(path.dev))
- })
- },
- fonts: function() {
- watch(path.src + '/fonts/**/*.*', {
- ignoreInitial: false
- }, function() {
- return src(path.src + '/fonts/**/*.*')
- .pipe(dest(path.dev + '/fonts'))
- })
- },
- icons: function() {
- watch(path.src + '/icons/**/*.*', {
- ignoreInitial: false
- }, function() {
- return src(path.src + '/icons/**/*.*')
- .pipe(dest(path.dev + '/icons'))
- })
- },
- css: function() {
- watch(cssFiles, {
- ignoreInitial: false
- }, function() {
- return src(cssFiles)
- .pipe(dest(path.dev + '/css'))
- })
- },
- js: function() {
- watch(jsFiles, {
- ignoreInitial: false
- }, function() {
- return src(jsFiles)
- .pipe(dest(path.dev + '/js'))
- })
- },
- initialBackground: function() {
- watch(path.src + '/js/initial-background.js', {
- ignoreInitial: false
- }, function() {
- return src(path.src + '/js/initial-background.js')
- .pipe(dest(path.dev + '/js'))
- })
- }
-}
-
-exports.dev = parallel(dev.manifest, dev.html, dev.fonts, dev.icons, dev.css, dev.js, dev.initialBackground)
-exports.build = parallel(build.manifest, build.html, build.fonts, build.icons, build.css, build.js, build.initialBackground)
diff --git a/package-lock.json b/package-lock.json
index fc40acc6..da938203 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,229 +1,8149 @@
{
"name": "nightTab",
- "version": "6.6.0",
- "lockfileVersion": 1,
+ "version": "7.0.0",
+ "lockfileVersion": 2,
"requires": true,
+ "packages": {
+ "": {
+ "version": "7.0.0",
+ "license": "GPL-3",
+ "devDependencies": {
+ "copy-webpack-plugin": "^6.4.1",
+ "css-loader": "^5.2.5",
+ "css-minimizer-webpack-plugin": "^3.0.0",
+ "file-loader": "^6.2.0",
+ "html-webpack-plugin": "^5.3.1",
+ "mini-css-extract-plugin": "^1.6.0",
+ "moment": "^2.29.1",
+ "sortablejs": "^1.13.0",
+ "style-loader": "^2.0.0",
+ "webfontloader": "^1.6.28",
+ "webpack": "^5.37.1",
+ "webpack-cli": "^4.7.0",
+ "webpack-dev-server": "^3.11.2",
+ "zip-webpack-plugin": "^4.0.1"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
+ "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.12.13"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz",
+ "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==",
+ "dev": true
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz",
+ "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.14.0",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "node_modules/@discoveryjs/json-ext": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz",
+ "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz",
+ "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.4",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz",
+ "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz",
+ "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.4",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@npmcli/move-file": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+ "dev": true,
+ "dependencies": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@npmcli/move-file/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/@trysound/sax": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz",
+ "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@types/eslint": {
+ "version": "7.2.10",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz",
+ "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz",
+ "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==",
+ "dev": true,
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "0.0.47",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz",
+ "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==",
+ "dev": true
+ },
+ "node_modules/@types/glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
+ "dev": true,
+ "dependencies": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/html-minifier-terser": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
+ "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==",
+ "dev": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
+ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
+ "dev": true
+ },
+ "node_modules/@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "14.10.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.10.0.tgz",
+ "integrity": "sha512-SOIyrdADB4cq6eY1F+9iU48iIomFAPltu11LCvA9PKcyEwHadjCFzNVPotAR+oEJA0bCP4Xvvgy+vwu1ZjVh8g==",
+ "dev": true
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
+ "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz",
+ "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz",
+ "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz",
+ "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz",
+ "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.11.0",
+ "@webassemblyjs/helper-api-error": "1.11.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz",
+ "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz",
+ "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-buffer": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/wasm-gen": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz",
+ "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==",
+ "dev": true,
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz",
+ "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==",
+ "dev": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz",
+ "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==",
+ "dev": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz",
+ "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-buffer": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/helper-wasm-section": "1.11.0",
+ "@webassemblyjs/wasm-gen": "1.11.0",
+ "@webassemblyjs/wasm-opt": "1.11.0",
+ "@webassemblyjs/wasm-parser": "1.11.0",
+ "@webassemblyjs/wast-printer": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz",
+ "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/ieee754": "1.11.0",
+ "@webassemblyjs/leb128": "1.11.0",
+ "@webassemblyjs/utf8": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz",
+ "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-buffer": "1.11.0",
+ "@webassemblyjs/wasm-gen": "1.11.0",
+ "@webassemblyjs/wasm-parser": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz",
+ "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-api-error": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/ieee754": "1.11.0",
+ "@webassemblyjs/leb128": "1.11.0",
+ "@webassemblyjs/utf8": "1.11.0"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz",
+ "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==",
+ "dev": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webpack-cli/configtest": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz",
+ "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==",
+ "dev": true
+ },
+ "node_modules/@webpack-cli/info": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz",
+ "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==",
+ "dev": true,
+ "dependencies": {
+ "envinfo": "^7.7.3"
+ }
+ },
+ "node_modules/@webpack-cli/serve": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz",
+ "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==",
+ "dev": true
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true
+ },
+ "node_modules/accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "dependencies": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.2.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz",
+ "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "node_modules/ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+ "dev": true
+ },
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true
+ },
+ "node_modules/alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
+ },
+ "node_modules/ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true,
+ "engines": [
+ "node >= 0.8.0"
+ ],
+ "bin": {
+ "ansi-html": "bin/ansi-html"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "dependencies": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "node_modules/anymatch/node_modules/braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "dependencies": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/braces/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/fill-range/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch/node_modules/to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "dev": true
+ },
+ "node_modules/array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "dependencies": {
+ "array-uniq": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "node_modules/async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+ "dev": true
+ },
+ "node_modules/async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
+ "node_modules/atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true,
+ "bin": {
+ "atob": "bin/atob.js"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "node_modules/base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "dependencies": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
+ "node_modules/big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
+ "node_modules/body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "dependencies": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/body-parser/node_modules/bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/body-parser/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "dependencies": {
+ "array-flatten": "^2.1.0",
+ "deep-equal": "^1.0.1",
+ "dns-equal": "^1.0.0",
+ "dns-txt": "^2.0.2",
+ "multicast-dns": "^6.0.1",
+ "multicast-dns-service-types": "^1.1.0"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "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.16.6",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
+ "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
+ "dev": true,
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001219",
+ "colorette": "^1.2.2",
+ "electron-to-chromium": "^1.3.723",
+ "escalade": "^3.1.1",
+ "node-releases": "^1.1.71"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "node_modules/buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
+ "node_modules/bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/cacache": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.1.0.tgz",
+ "integrity": "sha512-mfx0C+mCfWjD1PnwQ9yaOrwG1ou9FkKnx0SvzUHWdFt7r7GaRtzT+9M8HAvLu62zIHtnpQ/1m93nWNDCckJGXQ==",
+ "dev": true,
+ "dependencies": {
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/cacache/node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cacache/node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "dependencies": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camel-case": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
+ "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
+ "dev": true,
+ "dependencies": {
+ "pascal-case": "^3.1.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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.30001228",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz",
+ "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==",
+ "dev": true
+ },
+ "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/chalk/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/chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ },
+ "optionalDependencies": {
+ "fsevents": "^1.2.7"
+ }
+ },
+ "node_modules/chokidar/node_modules/braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "dependencies": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/chokidar/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/chokidar/node_modules/fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent/node_modules/is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/chokidar/node_modules/is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/chokidar/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/chokidar/node_modules/to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/clean-css": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
+ "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
+ "dev": true,
+ "dependencies": {
+ "source-map": "~0.6.0"
+ },
+ "engines": {
+ "node": ">= 4.0"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "dependencies": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "node_modules/colord": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-1.7.2.tgz",
+ "integrity": "sha512-/sQCxy6PEhZbrAn1+NVRRefy3k4jkWQGxk7mo2o0CoNA24jq4ujDc2jXzJ5uXphm/TwfdGOP0w8U+H+9ys4Peg==",
+ "dev": true
+ },
+ "node_modules/colorette": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
+ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
+ "dev": true
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "node_modules/component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "node_modules/compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": ">= 1.43.0 < 2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "dev": true,
+ "dependencies": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/compression/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/compression/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "node_modules/connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-disposition/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "node_modules/copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/copy-webpack-plugin": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz",
+ "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==",
+ "dev": true,
+ "dependencies": {
+ "cacache": "^15.0.5",
+ "fast-glob": "^3.2.4",
+ "find-cache-dir": "^3.3.1",
+ "glob-parent": "^5.1.1",
+ "globby": "^11.0.1",
+ "loader-utils": "^2.0.0",
+ "normalize-path": "^3.0.0",
+ "p-limit": "^3.0.2",
+ "schema-utils": "^3.0.0",
+ "serialize-javascript": "^5.0.1",
+ "webpack-sources": "^1.4.3"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/globby": {
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz",
+ "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "node_modules/cosmiconfig": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
+ "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
+ "dev": true,
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "dependencies": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "engines": {
+ "node": ">=4.8"
+ }
+ },
+ "node_modules/cross-spawn/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/css-color-names": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz",
+ "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/css-declaration-sorter": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz",
+ "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==",
+ "dev": true,
+ "dependencies": {
+ "timsort": "^0.3.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/css-loader": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.5.tgz",
+ "integrity": "sha512-bH6QQacvSRtLX0lycAOs43S173n+lfXxB5cx4FjVkTLw5tAEwk5bxNLbkt5K1iETd5KxazRx70GpqOxsuwKiFA==",
+ "dev": true,
+ "dependencies": {
+ "icss-utils": "^5.1.0",
+ "loader-utils": "^2.0.0",
+ "postcss": "^8.2.15",
+ "postcss-modules-extract-imports": "^3.0.0",
+ "postcss-modules-local-by-default": "^4.0.0",
+ "postcss-modules-scope": "^3.0.0",
+ "postcss-modules-values": "^4.0.0",
+ "postcss-value-parser": "^4.1.0",
+ "schema-utils": "^3.0.0",
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/css-loader/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "node_modules/css-loader/node_modules/postcss": {
+ "version": "8.2.15",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz",
+ "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==",
+ "dev": true,
+ "dependencies": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/css-loader/node_modules/schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/css-loader/node_modules/semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/css-minimizer-webpack-plugin": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.0.tgz",
+ "integrity": "sha512-yIrqG0pPphR1RoNx2wDxYmxRf2ubRChLDXxv7ccipEm5bRKsZRYp8n+2peeXehtTF5s3yNxlqsdz3WQOsAgUkw==",
+ "dev": true,
+ "dependencies": {
+ "cssnano": "^5.0.0",
+ "jest-worker": "^26.3.0",
+ "p-limit": "^3.0.2",
+ "postcss": "^8.2.9",
+ "schema-utils": "^3.0.0",
+ "serialize-javascript": "^5.0.1",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">= 12.13.0"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
+ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^3.2.1",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz",
+ "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "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": "5.0.3",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.3.tgz",
+ "integrity": "sha512-Ga/a+IA6U0F9+MNmqrXgwn1A3btY5jFkla2iurL7i9PTmQmMu2Kc99W9a8KSxT8iLV0aoI+Q5Q9i3SpVAVNnrQ==",
+ "dev": true,
+ "dependencies": {
+ "cosmiconfig": "^7.0.0",
+ "cssnano-preset-default": "^5.1.0",
+ "is-resolvable": "^1.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/cssnano-preset-default": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.0.tgz",
+ "integrity": "sha512-VTO0WAlrEsU0u+A4RwALRs5zSVnD23WgYO8Np3HowBMZTqWIP1GvIWWzs9zZmjNgeL8U+70megRZymb+1yGg/w==",
+ "dev": true,
+ "dependencies": {
+ "css-declaration-sorter": "^6.0.3",
+ "cssnano-utils": "^2.0.1",
+ "postcss-calc": "^8.0.0",
+ "postcss-colormin": "^5.1.0",
+ "postcss-convert-values": "^5.0.1",
+ "postcss-discard-comments": "^5.0.1",
+ "postcss-discard-duplicates": "^5.0.1",
+ "postcss-discard-empty": "^5.0.1",
+ "postcss-discard-overridden": "^5.0.1",
+ "postcss-merge-longhand": "^5.0.2",
+ "postcss-merge-rules": "^5.0.1",
+ "postcss-minify-font-values": "^5.0.1",
+ "postcss-minify-gradients": "^5.0.1",
+ "postcss-minify-params": "^5.0.1",
+ "postcss-minify-selectors": "^5.1.0",
+ "postcss-normalize-charset": "^5.0.1",
+ "postcss-normalize-display-values": "^5.0.1",
+ "postcss-normalize-positions": "^5.0.1",
+ "postcss-normalize-repeat-style": "^5.0.1",
+ "postcss-normalize-string": "^5.0.1",
+ "postcss-normalize-timing-functions": "^5.0.1",
+ "postcss-normalize-unicode": "^5.0.1",
+ "postcss-normalize-url": "^5.0.1",
+ "postcss-normalize-whitespace": "^5.0.1",
+ "postcss-ordered-values": "^5.0.1",
+ "postcss-reduce-initial": "^5.0.1",
+ "postcss-reduce-transforms": "^5.0.1",
+ "postcss-svgo": "^5.0.1",
+ "postcss-unique-selectors": "^5.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/cssnano-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz",
+ "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/csso": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+ "dev": true,
+ "dependencies": {
+ "css-tree": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/debug/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+ "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+ "dev": true,
+ "dependencies": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ }
+ },
+ "node_modules/default-gateway": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^1.0.0",
+ "ip-regex": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "dependencies": {
+ "object-keys": "^1.0.12"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-property/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-property/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-property/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/glob": "^7.1.1",
+ "globby": "^6.1.0",
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "node_modules/detect-node": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
+ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
+ "dev": true
+ },
+ "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/dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "node_modules/dns-packet": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
+ "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
+ "dev": true,
+ "dependencies": {
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "dependencies": {
+ "buffer-indexof": "^1.0.0"
+ }
+ },
+ "node_modules/dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+ "dev": true,
+ "dependencies": {
+ "utila": "~0.4"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ }
+ },
+ "node_modules/dom-serializer/node_modules/domelementtype": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
+ "dev": true
+ },
+ "node_modules/domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+ "dev": true
+ },
+ "node_modules/domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "node_modules/dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.3.734",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.734.tgz",
+ "integrity": "sha512-iQF2mjPZ6zNNq45kbJ6MYZYCBNdv2JpGiJC/lVx4tGJWi9MNg73KkL9sWGN4X4I/CP2SBLWsT8nPADZZpAHIyw==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "node_modules/emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz",
+ "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
+ "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==",
+ "dev": true
+ },
+ "node_modules/envinfo": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
+ "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
+ "dev": true,
+ "bin": {
+ "envinfo": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+ "dev": true,
+ "dependencies": {
+ "prr": "~1.0.1"
+ },
+ "bin": {
+ "errno": "cli.js"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz",
+ "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
+ "dev": true
+ },
+ "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-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "dev": true
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/eventsource": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz",
+ "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==",
+ "dev": true,
+ "dependencies": {
+ "original": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "dependencies": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "dev": true,
+ "dependencies": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/express/node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "node_modules/express/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/express/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extend-shallow/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "dependencies": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz",
+ "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.0",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.2",
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fastest-levenshtein": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
+ "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz",
+ "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/faye-websocket": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+ "dev": true,
+ "dependencies": {
+ "websocket-driver": ">=0.5.1"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/file-loader": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
+ "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
+ "dev": true,
+ "dependencies": {
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/file-loader/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "node_modules/file-loader/node_modules/schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "dev": true,
+ "optional": true
+ },
+ "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/finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/finalhandler/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/find-cache-dir": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+ "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz",
+ "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "dependencies": {
+ "map-cache": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "dependencies": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1"
+ },
+ "engines": {
+ "node": ">= 4.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-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "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/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true
+ },
+ "node_modules/globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/globby/node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
+ "dev": true
+ },
+ "node_modules/handle-thing": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
+ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
+ "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": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
+ "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "dependencies": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
+ "dev": true
+ },
+ "node_modules/hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "obuf": "^1.0.0",
+ "readable-stream": "^2.0.1",
+ "wbuf": "^1.1.0"
+ }
+ },
+ "node_modules/hpack.js/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/hpack.js/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/hpack.js/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+ "dev": true
+ },
+ "node_modules/hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+ "dev": true
+ },
+ "node_modules/html-entities": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz",
+ "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==",
+ "dev": true
+ },
+ "node_modules/html-minifier-terser": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
+ "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
+ "dev": true,
+ "dependencies": {
+ "camel-case": "^4.1.1",
+ "clean-css": "^4.2.3",
+ "commander": "^4.1.1",
+ "he": "^1.2.0",
+ "param-case": "^3.0.3",
+ "relateurl": "^0.2.7",
+ "terser": "^4.6.3"
+ },
+ "bin": {
+ "html-minifier-terser": "cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/html-webpack-plugin": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz",
+ "integrity": "sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/html-minifier-terser": "^5.0.0",
+ "html-minifier-terser": "^5.0.1",
+ "lodash": "^4.17.20",
+ "pretty-error": "^2.1.1",
+ "tapable": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/html-webpack-plugin/node_modules/tapable": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
+ "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/htmlparser2": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+ "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^1.3.1",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.1.1"
+ }
+ },
+ "node_modules/htmlparser2/node_modules/entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ },
+ "node_modules/http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "node_modules/http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/http-errors/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "node_modules/http-parser-js": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz",
+ "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==",
+ "dev": true
+ },
+ "node_modules/http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dev": true,
+ "dependencies": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/http-proxy-middleware": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+ "dev": true,
+ "dependencies": {
+ "http-proxy": "^1.17.0",
+ "is-glob": "^4.0.0",
+ "lodash": "^4.17.11",
+ "micromatch": "^3.1.10"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/http-proxy-middleware/node_modules/braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "dependencies": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/http-proxy-middleware/node_modules/fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/http-proxy-middleware/node_modules/is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/http-proxy-middleware/node_modules/micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/http-proxy-middleware/node_modules/to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/icss-utils": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
+ "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >= 14"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.1.8",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/import-fresh/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+ "dev": true,
+ "dependencies": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/import-local/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/import-local/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/import-local/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/import-local/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/import-local/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/import-local/node_modules/pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "node_modules/infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "dev": true
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "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/internal-ip": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
+ "dev": true,
+ "dependencies": {
+ "default-gateway": "^4.2.0",
+ "ipaddr.js": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/interpret": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
+ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "node_modules/ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-accessor-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-arguments": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz",
+ "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "node_modules/is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "node_modules/is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+ "dev": true,
+ "dependencies": {
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^1.0.0"
+ }
+ },
+ "node_modules/is-color-stop/node_modules/css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
+ "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ }
+ },
+ "node_modules/is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-data-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
+ "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-descriptor/node_modules/kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
+ "dev": true,
+ "dependencies": {
+ "is-path-inside": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "dependencies": {
+ "path-is-inside": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
+ "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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/json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json3": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/killable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+ "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
+ "dev": true
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+ "dev": true
+ },
+ "node_modules/loader-runner": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
+ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
+ "node_modules/loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "dependencies": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ },
+ "engines": {
+ "node": ">=8.9.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "node_modules/loglevel": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz",
+ "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/lower-case": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
+ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "dependencies": {
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "dev": true
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "dev": true,
+ "dependencies": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "node_modules/memory-fs/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/memory-fs/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/memory-fs/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "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/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "1.44.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mini-css-extract-plugin": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz",
+ "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==",
+ "dev": true,
+ "dependencies": {
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^3.0.0",
+ "webpack-sources": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/mini-css-extract-plugin/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "node_modules/mini-css-extract-plugin/node_modules/schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "node_modules/minipass": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+ "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "dependencies": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/moment": {
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
+ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+ "dev": true,
+ "dependencies": {
+ "dns-packet": "^1.3.1",
+ "thunky": "^1.0.2"
+ },
+ "bin": {
+ "multicast-dns": "cli.js"
+ }
+ },
+ "node_modules/multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
+ "node_modules/nan": {
+ "version": "2.14.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.1.23",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
+ "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node_modules/no-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
+ "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
+ "dev": true,
+ "dependencies": {
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/node-forge": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+ "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "1.1.72",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz",
+ "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==",
+ "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/normalize-url": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
+ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "dependencies": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+ "dev": true
+ },
+ "node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/opn": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+ "dev": true,
+ "dependencies": {
+ "is-wsl": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/original": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
+ "dev": true,
+ "dependencies": {
+ "url-parse": "^1.4.3"
+ }
+ },
+ "node_modules/p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+ "dev": true,
+ "dependencies": {
+ "retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/param-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
+ "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
+ "dev": true,
+ "dependencies": {
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/pascal-case": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
+ "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
+ "dev": true,
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
+ }
+ },
+ "node_modules/pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "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/picomatch": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
+ "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/portfinder": {
+ "version": "1.0.28",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
+ "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
+ "dev": true,
+ "dependencies": {
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.5"
+ },
+ "engines": {
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/portfinder/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/portfinder/node_modules/mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/portfinder/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz",
+ "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==",
+ "dev": true,
+ "dependencies": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map-js": "^0.6.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-calc": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz",
+ "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "node_modules/postcss-colormin": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.1.0.tgz",
+ "integrity": "sha512-5s+VNfQ5CsR6yvBc6Tc8NK9cxb/c8sA547zy+8ofL04gs/GygmOcVZt2s6jJn7TvntAw0Bp6MDpq4bd51EPwdw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.16.0",
+ "colord": "^1.7.0",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-convert-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz",
+ "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-discard-comments": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz",
+ "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-discard-duplicates": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz",
+ "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-discard-empty": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz",
+ "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-discard-overridden": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz",
+ "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-merge-longhand": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz",
+ "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==",
+ "dev": true,
+ "dependencies": {
+ "css-color-names": "^1.0.1",
+ "postcss-value-parser": "^4.1.0",
+ "stylehacks": "^5.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-merge-rules": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.1.tgz",
+ "integrity": "sha512-UR6R5Ph0c96QB9TMBH3ml8/kvPCThPHepdhRqAbvMRDRHQACPC8iM5NpfIC03+VRMZTGXy4L/BvFzcDFCgb+fA==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.16.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-utils": "^2.0.1",
+ "postcss-selector-parser": "^6.0.5",
+ "vendors": "^1.0.3"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-minify-font-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz",
+ "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-minify-gradients": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz",
+ "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^2.0.1",
+ "is-color-stop": "^1.1.0",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-minify-params": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz",
+ "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.2",
+ "browserslist": "^4.16.0",
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0",
+ "uniqs": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-minify-selectors": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz",
+ "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.2",
+ "postcss-selector-parser": "^6.0.5"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-modules-extract-imports": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
+ "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >= 14"
+ }
+ },
+ "node_modules/postcss-modules-local-by-default": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz",
+ "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==",
+ "dev": true,
+ "dependencies": {
+ "icss-utils": "^5.0.0",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >= 14"
+ }
+ },
+ "node_modules/postcss-modules-scope": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
+ "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
+ "dev": true,
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.4"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >= 14"
+ }
+ },
+ "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-modules-values": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+ "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+ "dev": true,
+ "dependencies": {
+ "icss-utils": "^5.0.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >= 14"
+ }
+ },
+ "node_modules/postcss-normalize-charset": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz",
+ "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==",
+ "dev": true,
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-normalize-display-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz",
+ "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-normalize-positions": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz",
+ "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-normalize-repeat-style": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz",
+ "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-normalize-string": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz",
+ "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-normalize-timing-functions": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz",
+ "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-normalize-unicode": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz",
+ "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.16.0",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-normalize-url": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.1.tgz",
+ "integrity": "sha512-hkbG0j58Z1M830/CJ73VsP7gvlG1yF+4y7Fd1w4tD2c7CaA2Psll+pQ6eQhth9y9EaqZSLzamff/D0MZBMbYSg==",
+ "dev": true,
+ "dependencies": {
+ "is-absolute-url": "^3.0.3",
+ "normalize-url": "^4.5.0",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-normalize-whitespace": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz",
+ "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-ordered-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.1.tgz",
+ "integrity": "sha512-6mkCF5BQ25HvEcDfrMHCLLFHlraBSlOXFnQMHYhSpDO/5jSR1k8LdEXOkv+7+uzW6o6tBYea1Km0wQSRkPJkwA==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-reduce-initial": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz",
+ "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.16.0",
+ "caniuse-api": "^3.0.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-reduce-transforms": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz",
+ "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==",
+ "dev": true,
+ "dependencies": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-svgo": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.1.tgz",
+ "integrity": "sha512-cD7DFo6tF9i5eWvwtI4irKOHCpmASFS0xvZ5EQIgEdA1AWfM/XiHHY/iss0gcKHhkqwgYmuo2M0KhJLd5Us6mg==",
+ "dev": true,
+ "dependencies": {
+ "postcss-value-parser": "^4.1.0",
+ "svgo": "^2.3.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-unique-selectors": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz",
+ "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==",
+ "dev": true,
+ "dependencies": {
+ "alphanum-sort": "^1.0.2",
+ "postcss-selector-parser": "^6.0.5",
+ "uniqs": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
+ "dev": true
+ },
+ "node_modules/pretty-error": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
+ "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.20",
+ "renderkid": "^2.0.4"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "node_modules/promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
+ "dev": true
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+ "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "dev": true,
+ "dependencies": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "dev": true
+ },
+ "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
+ },
+ "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/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "dependencies": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/readdirp/node_modules/braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "dependencies": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/braces/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/fill-range/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readdirp/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/readdirp/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/readdirp/node_modules/to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rechoir": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz",
+ "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.9.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz",
+ "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "node_modules/renderkid": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz",
+ "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==",
+ "dev": true,
+ "dependencies": {
+ "css-select": "^2.0.2",
+ "dom-converter": "^0.2",
+ "htmlparser2": "^3.10.1",
+ "lodash": "^4.17.20",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "node_modules/repeat-element": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "node_modules/resolve": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "node_modules/ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "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/rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+ "dev": true
+ },
+ "node_modules/rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+ "dev": true
+ },
+ "node_modules/rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "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,
+ "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
+ },
+ "node_modules/safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "dependencies": {
+ "ret": "~0.1.10"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "node_modules/schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/schema-utils/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "node_modules/select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "node_modules/selfsigned": {
+ "version": "1.10.11",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz",
+ "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==",
+ "dev": true,
+ "dependencies": {
+ "node-forge": "^0.10.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/send/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "node_modules/serialize-javascript": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+ "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "dependencies": {
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/serve-index/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/serve-index/node_modules/http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "dependencies": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/serve-index/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "node_modules/serve-index/node_modules/setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ },
+ "node_modules/serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "node_modules/set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/set-value/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "node_modules/shallow-clone": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "dev": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "dependencies": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sockjs": {
+ "version": "0.3.21",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz",
+ "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==",
+ "dev": true,
+ "dependencies": {
+ "faye-websocket": "^0.11.3",
+ "uuid": "^3.4.0",
+ "websocket-driver": "^0.7.4"
+ }
+ },
+ "node_modules/sockjs-client": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz",
+ "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.6",
+ "eventsource": "^1.0.7",
+ "faye-websocket": "^0.11.3",
+ "inherits": "^2.0.4",
+ "json3": "^3.3.3",
+ "url-parse": "^1.5.1"
+ }
+ },
+ "node_modules/sockjs-client/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/sockjs-client/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/sortablejs": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.13.0.tgz",
+ "integrity": "sha512-RBJirPY0spWCrU5yCmWM1eFs/XgX2J5c6b275/YyxFRgnzPhKl/TDeU2hNR8Dt7ITq66NRPM4UlOt+e5O4CFHg==",
+ "dev": true
+ },
+ "node_modules/source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+ "dev": true
+ },
+ "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": "0.6.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+ "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "dev": true,
+ "dependencies": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-url": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
+ "dev": true
+ },
+ "node_modules/spdy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
+ "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.0",
+ "handle-thing": "^2.0.0",
+ "http-deceiver": "^1.2.7",
+ "select-hose": "^2.0.0",
+ "spdy-transport": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/spdy-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.0",
+ "detect-node": "^2.0.4",
+ "hpack.js": "^2.1.6",
+ "obuf": "^1.1.2",
+ "readable-stream": "^3.0.6",
+ "wbuf": "^1.7.3"
+ }
+ },
+ "node_modules/split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+ "dev": true,
+ "dependencies": {
+ "minipass": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "dev": true
+ },
+ "node_modules/static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/style-loader": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz",
+ "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==",
+ "dev": true,
+ "dependencies": {
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/stylehacks": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz",
+ "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.16.0",
+ "postcss-selector-parser": "^6.0.4"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14.0"
+ }
+ },
+ "node_modules/stylehacks/node_modules/postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/svgo": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz",
+ "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==",
+ "dev": true,
+ "dependencies": {
+ "@trysound/sax": "0.1.1",
+ "chalk": "^4.1.0",
+ "commander": "^7.1.0",
+ "css-select": "^3.1.2",
+ "css-tree": "^1.1.2",
+ "csso": "^4.2.0",
+ "stable": "^0.1.8"
+ },
+ "bin": {
+ "svgo": "bin/svgo"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/svgo/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"
+ }
+ },
+ "node_modules/svgo/node_modules/chalk": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/svgo/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/svgo/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/svgo/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/svgo/node_modules/css-select": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz",
+ "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^4.0.0",
+ "domhandler": "^4.0.0",
+ "domutils": "^2.4.3",
+ "nth-check": "^2.0.0"
+ }
+ },
+ "node_modules/svgo/node_modules/css-what": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz",
+ "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/svgo/node_modules/dom-serializer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
+ "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "node_modules/svgo/node_modules/domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+ "dev": true
+ },
+ "node_modules/svgo/node_modules/domhandler": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
+ "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
+ "dev": true,
+ "dependencies": {
+ "domelementtype": "^2.2.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/svgo/node_modules/domutils": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz",
+ "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ }
+ },
+ "node_modules/svgo/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/svgo/node_modules/nth-check": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
+ "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "node_modules/svgo/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/tapable": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
+ "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tar": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz",
+ "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==",
+ "dev": true,
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/terser": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
+ "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz",
+ "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==",
+ "dev": true,
+ "dependencies": {
+ "jest-worker": "^26.6.2",
+ "p-limit": "^3.1.0",
+ "schema-utils": "^3.0.0",
+ "serialize-javascript": "^5.0.1",
+ "source-map": "^0.6.1",
+ "terser": "^5.7.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/terser-webpack-plugin/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/terser-webpack-plugin/node_modules/terser": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz",
+ "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^2.20.0",
+ "source-map": "~0.7.2",
+ "source-map-support": "~0.5.19"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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/thunky": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+ "dev": true
+ },
+ "node_modules/timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
+ },
+ "node_modules/to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-object-path/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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/toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
+ "dev": true
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "node_modules/uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "node_modules/unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "dev": true,
+ "dependencies": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "node_modules/unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "dev": true,
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "dependencies": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "dependencies": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "dependencies": {
+ "isarray": "1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4",
+ "yarn": "*"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
+ "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "node_modules/url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "dependencies": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ }
+ },
+ "node_modules/url-parse": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz",
+ "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==",
+ "dev": true,
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "node_modules/url/node_modules/punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ },
+ "node_modules/use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "node_modules/utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+ "dev": true
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true,
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/vendors": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
+ "dev": true
+ },
+ "node_modules/watchpack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz",
+ "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==",
+ "dev": true,
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/wbuf": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+ "dev": true,
+ "dependencies": {
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "node_modules/webfontloader": {
+ "version": "1.6.28",
+ "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz",
+ "integrity": "sha1-23hhKSU8tujq5UwvsF+HCvZnW64=",
+ "dev": true
+ },
+ "node_modules/webpack": {
+ "version": "5.37.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.37.1.tgz",
+ "integrity": "sha512-btZjGy/hSjCAAVHw+cKG+L0M+rstlyxbO2C+BOTaQ5/XAnxkDrP5sVbqWhXgo4pL3X2dcOib6rqCP20Zr9PLow==",
+ "dev": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.0",
+ "@types/estree": "^0.0.47",
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/wasm-edit": "1.11.0",
+ "@webassemblyjs/wasm-parser": "1.11.0",
+ "acorn": "^8.2.1",
+ "browserslist": "^4.14.5",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.8.0",
+ "es-module-lexer": "^0.4.0",
+ "eslint-scope": "^5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.4",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.0.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.1.1",
+ "watchpack": "^2.0.0",
+ "webpack-sources": "^2.1.1"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack-cli": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz",
+ "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==",
+ "dev": true,
+ "dependencies": {
+ "@discoveryjs/json-ext": "^0.5.0",
+ "@webpack-cli/configtest": "^1.0.3",
+ "@webpack-cli/info": "^1.2.4",
+ "@webpack-cli/serve": "^1.4.0",
+ "colorette": "^1.2.1",
+ "commander": "^7.0.0",
+ "execa": "^5.0.0",
+ "fastest-levenshtein": "^1.0.12",
+ "import-local": "^3.0.2",
+ "interpret": "^2.2.0",
+ "rechoir": "^0.7.0",
+ "v8-compile-cache": "^2.2.0",
+ "webpack-merge": "^5.7.3"
+ },
+ "bin": {
+ "webpack-cli": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack-cli/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/webpack-cli/node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/execa": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz",
+ "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/import-local": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
+ "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+ "dev": true,
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/webpack-cli/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/webpack-dev-middleware": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
+ "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==",
+ "dev": true,
+ "dependencies": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.4.4",
+ "mkdirp": "^0.5.1",
+ "range-parser": "^1.2.1",
+ "webpack-log": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/webpack-dev-middleware/node_modules/mime": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
+ "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/webpack-dev-middleware/node_modules/mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/webpack-dev-server": {
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz",
+ "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-html": "0.0.7",
+ "bonjour": "^3.5.0",
+ "chokidar": "^2.1.8",
+ "compression": "^1.7.4",
+ "connect-history-api-fallback": "^1.6.0",
+ "debug": "^4.1.1",
+ "del": "^4.1.1",
+ "express": "^4.17.1",
+ "html-entities": "^1.3.1",
+ "http-proxy-middleware": "0.19.1",
+ "import-local": "^2.0.0",
+ "internal-ip": "^4.3.0",
+ "ip": "^1.1.5",
+ "is-absolute-url": "^3.0.3",
+ "killable": "^1.0.1",
+ "loglevel": "^1.6.8",
+ "opn": "^5.5.0",
+ "p-retry": "^3.0.1",
+ "portfinder": "^1.0.26",
+ "schema-utils": "^1.0.0",
+ "selfsigned": "^1.10.8",
+ "semver": "^6.3.0",
+ "serve-index": "^1.9.1",
+ "sockjs": "^0.3.21",
+ "sockjs-client": "^1.5.0",
+ "spdy": "^4.0.2",
+ "strip-ansi": "^3.0.1",
+ "supports-color": "^6.1.0",
+ "url": "^0.11.0",
+ "webpack-dev-middleware": "^3.7.2",
+ "webpack-log": "^2.0.0",
+ "ws": "^6.2.1",
+ "yargs": "^13.3.2"
+ },
+ "bin": {
+ "webpack-dev-server": "bin/webpack-dev-server.js"
+ },
+ "engines": {
+ "node": ">= 6.11.5"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/webpack-merge": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz",
+ "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==",
+ "dev": true,
+ "dependencies": {
+ "clone-deep": "^4.0.1",
+ "wildcard": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "dev": true,
+ "dependencies": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/webpack/node_modules/webpack-sources": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz",
+ "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==",
+ "dev": true,
+ "dependencies": {
+ "source-list-map": "^2.0.1",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/websocket-driver": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
+ "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
+ "dev": true,
+ "dependencies": {
+ "http-parser-js": ">=0.5.1",
+ "safe-buffer": ">=5.1.0",
+ "websocket-extensions": ">=0.1.1"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/websocket-extensions": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
+ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "node_modules/wildcard": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
+ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "node_modules/ws": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+ "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+ "dev": true,
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "node_modules/yargs/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/yazl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
+ "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
+ "dev": true,
+ "dependencies": {
+ "buffer-crc32": "~0.2.3"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/zip-webpack-plugin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/zip-webpack-plugin/-/zip-webpack-plugin-4.0.1.tgz",
+ "integrity": "sha512-G041Q4qUaog44Ynit6gs4o+o3JIv0WWfOLvc8Q3IxvPfuqd2KBHhpJWAXUB9Cm1JcWHTIOp9vS3oGMWa1p1Ehw==",
+ "dev": true,
+ "dependencies": {
+ "yazl": "^2.5.1"
+ }
+ }
+ },
"dependencies": {
"@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
+ "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.10.4"
+ "@babel/highlight": "^7.12.13"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
- "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz",
+ "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==",
"dev": true
},
"@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz",
+ "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
+ "@babel/helper-validator-identifier": "^7.14.0",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
- "@babel/polyfill": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz",
- "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==",
- "dev": true,
- "requires": {
- "core-js": "^2.6.5",
- "regenerator-runtime": "^0.13.4"
- }
- },
- "@babel/runtime": {
- "version": "7.12.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
- "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
- "dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.4"
- }
- },
- "@cliqz-oss/firefox-client": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@cliqz-oss/firefox-client/-/firefox-client-0.3.1.tgz",
- "integrity": "sha512-RO+Tops/wGnBzWoZYkCraqyh2JqOejqJq5/a4b54HhmjTNSKdUPwAOK17EGg/zPb0nWqkuB7QyZsI9bo+ev8Kw==",
- "dev": true,
- "requires": {
- "colors": "0.5.x",
- "js-select": "~0.6.0"
- }
- },
- "@cliqz-oss/node-firefox-connect": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@cliqz-oss/node-firefox-connect/-/node-firefox-connect-1.2.1.tgz",
- "integrity": "sha512-O/IyiB5pfztCdmxQZg0/xeq5w+YiP3gtJz8d4We2EpLPKzbDVjOrtfLKYgVfm6Ya6mbvDge1uLkSRwaoVCWKnA==",
- "dev": true,
- "requires": {
- "@cliqz-oss/firefox-client": "0.3.1",
- "es6-promise": "^2.0.1"
- }
- },
- "@devicefarmer/adbkit": {
- "version": "2.11.3",
- "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-2.11.3.tgz",
- "integrity": "sha512-rsgWREAvSRQjdP9/3GoAV6Tq+o97haywgbTfCgt5yUqiDpaaq3hlH9FTo9XsdG8x+Jd0VQ9nTC2IXsDu8JGRSA==",
- "dev": true,
- "requires": {
- "@devicefarmer/adbkit-logcat": "^1.1.0",
- "@devicefarmer/adbkit-monkey": "~1.0.1",
- "bluebird": "~2.9.24",
- "commander": "^2.3.0",
- "debug": "~2.6.3",
- "node-forge": "^0.10.0",
- "split": "~0.3.3"
- }
- },
- "@devicefarmer/adbkit-logcat": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-1.1.0.tgz",
- "integrity": "sha512-K90P5gUXM/w+yzLvJIRQ+tJooNU6ipUPPQkljtPJ0laR66TGtpt4Gqsjm0n9dPHK1W5KGgU1R5wnCd6RTSlPNA==",
+ "@discoveryjs/json-ext": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz",
+ "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==",
"dev": true
},
- "@devicefarmer/adbkit-monkey": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-monkey/-/adbkit-monkey-1.0.1.tgz",
- "integrity": "sha512-HilPrVrCosYWqSyjfpDtaaN1kJwdlBpS+IAflP3z+e7nsEgk3JGJf1Vg0NgHJooTf5HDfXSyZqMVg+5jvXCK0g==",
+ "@nodelib/fs.scandir": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz",
+ "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==",
"dev": true,
"requires": {
- "async": "~0.2.9"
- },
- "dependencies": {
- "async": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
- "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
- "dev": true
- }
+ "@nodelib/fs.stat": "2.0.4",
+ "run-parallel": "^1.1.9"
}
},
- "@eslint/eslintrc": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz",
- "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "lodash": "^4.17.19",
- "minimatch": "^3.0.4",
- "strip-json-comments": "^3.1.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
- }
- },
- "@fortawesome/fontawesome-free": {
- "version": "5.14.0",
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.14.0.tgz",
- "integrity": "sha512-OfdMsF+ZQgdKHP9jUbmDcRrP0eX90XXrsXIdyjLbkmSBzmMXPABB8eobUJtivaupucYaByz6WNe1PI1JuYm3qA==",
+ "@nodelib/fs.stat": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz",
+ "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==",
"dev": true
},
- "@mdn/browser-compat-data": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-2.0.7.tgz",
- "integrity": "sha512-GeeM827DlzFFidn1eKkMBiqXFD2oLsnZbaiGhByPl0vcapsRzUL+t9hDoov1swc9rB2jw64R+ihtzC8qOE9wXw==",
+ "@nodelib/fs.walk": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz",
+ "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==",
"dev": true,
"requires": {
- "extend": "3.0.2"
+ "@nodelib/fs.scandir": "2.1.4",
+ "fastq": "^1.6.0"
}
},
- "@sindresorhus/is": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
- "dev": true
- },
- "@szmarczak/http-timer": {
+ "@npmcli/move-file": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
"dev": true,
"requires": {
- "defer-to-connect": "^1.0.1"
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
}
},
+ "@trysound/sax": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz",
+ "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==",
+ "dev": true
+ },
+ "@types/eslint": {
+ "version": "7.2.10",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz",
+ "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "@types/eslint-scope": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz",
+ "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==",
+ "dev": true,
+ "requires": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.47",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz",
+ "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==",
+ "dev": true
+ },
+ "@types/glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
+ "dev": true,
+ "requires": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/html-minifier-terser": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
+ "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==",
+ "dev": true
+ },
+ "@types/json-schema": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
+ "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
+ "dev": true
+ },
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@@ -231,271 +8151,222 @@
"dev": true
},
"@types/node": {
- "version": "14.14.22",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz",
- "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==",
+ "version": "14.10.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.10.0.tgz",
+ "integrity": "sha512-SOIyrdADB4cq6eY1F+9iU48iIomFAPltu11LCvA9PKcyEwHadjCFzNVPotAR+oEJA0bCP4Xvvgy+vwu1ZjVh8g==",
"dev": true
},
- "@types/yauzl": {
- "version": "2.9.1",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz",
- "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==",
+ "@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
+ "dev": true
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
+ "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==",
"dev": true,
"requires": {
- "@types/node": "*"
+ "@webassemblyjs/helper-numbers": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0"
}
},
- "JSONSelect": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz",
- "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=",
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz",
+ "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==",
"dev": true
},
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz",
+ "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz",
+ "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-numbers": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz",
+ "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/floating-point-hex-parser": "1.11.0",
+ "@webassemblyjs/helper-api-error": "1.11.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz",
+ "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==",
+ "dev": true
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz",
+ "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-buffer": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/wasm-gen": "1.11.0"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz",
+ "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==",
+ "dev": true,
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz",
+ "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==",
+ "dev": true,
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz",
+ "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==",
+ "dev": true
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz",
+ "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-buffer": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/helper-wasm-section": "1.11.0",
+ "@webassemblyjs/wasm-gen": "1.11.0",
+ "@webassemblyjs/wasm-opt": "1.11.0",
+ "@webassemblyjs/wasm-parser": "1.11.0",
+ "@webassemblyjs/wast-printer": "1.11.0"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz",
+ "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/ieee754": "1.11.0",
+ "@webassemblyjs/leb128": "1.11.0",
+ "@webassemblyjs/utf8": "1.11.0"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz",
+ "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-buffer": "1.11.0",
+ "@webassemblyjs/wasm-gen": "1.11.0",
+ "@webassemblyjs/wasm-parser": "1.11.0"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz",
+ "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/helper-api-error": "1.11.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+ "@webassemblyjs/ieee754": "1.11.0",
+ "@webassemblyjs/leb128": "1.11.0",
+ "@webassemblyjs/utf8": "1.11.0"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz",
+ "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==",
+ "dev": true,
+ "requires": {
+ "@webassemblyjs/ast": "1.11.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webpack-cli/configtest": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz",
+ "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==",
+ "dev": true
+ },
+ "@webpack-cli/info": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz",
+ "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==",
+ "dev": true,
+ "requires": {
+ "envinfo": "^7.7.3"
+ }
+ },
+ "@webpack-cli/serve": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz",
+ "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==",
+ "dev": true
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true
+ },
+ "@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
"acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "version": "8.2.4",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz",
+ "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==",
"dev": true
},
- "acorn-jsx": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
- "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
- "dev": true
- },
- "addons-linter": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.13.1.tgz",
- "integrity": "sha512-OWMuABpZRNeru38oOjn7QYOF0JOXJQXG9c3r4ILTRwTBeSu3LtfgCh9/7zLVgTYPbTs7Qy6h23u4Sel65uSnUQ==",
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
"dev": true,
"requires": {
- "@babel/runtime": "7.12.5",
- "@mdn/browser-compat-data": "2.0.7",
- "addons-scanner-utils": "4.0.0",
- "ajv": "6.12.6",
- "ajv-merge-patch": "4.1.0",
- "chalk": "4.1.0",
- "cheerio": "1.0.0-rc.3",
- "columnify": "1.5.4",
- "common-tags": "1.8.0",
- "deepmerge": "4.2.2",
- "dispensary": "0.59.0",
- "eslint": "7.14.0",
- "eslint-plugin-no-unsanitized": "3.1.4",
- "eslint-visitor-keys": "2.0.0",
- "espree": "7.3.0",
- "esprima": "4.0.1",
- "fluent-syntax": "0.13.0",
- "fsevents": "2.2.1",
- "glob": "7.1.6",
- "is-mergeable-object": "1.1.1",
- "jed": "1.1.1",
- "os-locale": "5.0.0",
- "pino": "6.7.0",
- "postcss": "8.1.10",
- "probe-image-size": "5.0.0",
- "relaxed-json": "1.0.3",
- "semver": "7.3.2",
- "source-map-support": "0.5.19",
- "tosource": "1.0.0",
- "upath": "2.0.1",
- "whatwg-url": "8.4.0",
- "yargs": "16.1.1",
- "yauzl": "2.10.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "fsevents": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz",
- "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==",
- "dev": true,
- "optional": true
- },
- "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
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "invert-kv": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz",
- "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "lcid": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz",
- "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==",
- "dev": true,
- "requires": {
- "invert-kv": "^3.0.0"
- }
- },
- "os-locale": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz",
- "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==",
- "dev": true,
- "requires": {
- "execa": "^4.0.0",
- "lcid": "^3.0.0",
- "mem": "^5.0.0"
- }
- },
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "upath": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
- "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
- "dev": true
- },
- "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,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
- "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
- "dev": true
- },
- "yargs": {
- "version": "16.1.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz",
- "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true
- }
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
}
},
- "addons-scanner-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/addons-scanner-utils/-/addons-scanner-utils-4.0.0.tgz",
- "integrity": "sha512-+BfePzqoo/7Nhum9LONGsga2xhNJYb+6k6j819pzcd2tqaaqDUJu+3lz4CQQYFcD8QoolB3ksfZcCPymleFq0A==",
- "dev": true,
- "requires": {
- "@types/yauzl": "2.9.1",
- "common-tags": "1.8.0",
- "first-chunk-stream": "3.0.0",
- "strip-bom-stream": "4.0.0",
- "upath": "2.0.1",
- "yauzl": "2.10.0"
- },
- "dependencies": {
- "first-chunk-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz",
- "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==",
- "dev": true
- },
- "strip-bom-stream": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-4.0.0.tgz",
- "integrity": "sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==",
- "dev": true,
- "requires": {
- "first-chunk-stream": "^3.0.0",
- "strip-bom-buf": "^2.0.0"
- }
- },
- "upath": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
- "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
- "dev": true
- }
- }
- },
- "adm-zip": {
- "version": "0.4.16",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
- "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==",
- "dev": true
- },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -508,82 +8379,35 @@
"uri-js": "^4.2.2"
}
},
- "ajv-merge-patch": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ajv-merge-patch/-/ajv-merge-patch-4.1.0.tgz",
- "integrity": "sha512-0mAYXMSauA8RZ7r+B4+EAOYcZEcO9OK5EiQCR7W7Cv4E44pJj56ZnkKLJ9/PAcOc0dT+LlV9fdDcq2TxVJfOYw==",
- "dev": true,
- "requires": {
- "fast-json-patch": "^2.0.6",
- "json-merge-patch": "^0.2.3"
- }
+ "ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+ "dev": true
},
- "ansi-align": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
- "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
- "dev": true,
- "requires": {
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
+ "ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true
+ },
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+ "dev": true
},
"ansi-colors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
- "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
- "dev": true,
- "requires": {
- "ansi-wrap": "^0.1.0"
- }
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
+ "dev": true
},
- "ansi-gray": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
- "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
- "dev": true,
- "requires": {
- "ansi-wrap": "0.1.0"
- }
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true
},
"ansi-regex": {
"version": "2.1.1",
@@ -592,26 +8416,14 @@
"dev": true
},
"ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "^2.0.1"
+ "color-convert": "^1.9.0"
}
},
- "ansi-wrap": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
- "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
- "dev": true
- },
- "any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
- "dev": true
- },
"anymatch": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
@@ -620,218 +8432,146 @@
"requires": {
"micromatch": "^3.1.4",
"normalize-path": "^2.1.1"
- }
- },
- "append-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
- "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=",
- "dev": true,
- "requires": {
- "buffer-equal": "^1.0.0"
- }
- },
- "archiver": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz",
- "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==",
- "dev": true,
- "requires": {
- "archiver-utils": "^2.1.0",
- "async": "^3.2.0",
- "buffer-crc32": "^0.2.1",
- "readable-stream": "^3.6.0",
- "readdir-glob": "^1.0.0",
- "tar-stream": "^2.1.4",
- "zip-stream": "^4.0.0"
},
"dependencies": {
- "async": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
- "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
- "dev": true
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
}
}
}
},
- "archiver-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz",
- "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==",
- "dev": true,
- "requires": {
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.0",
- "lazystream": "^1.0.0",
- "lodash.defaults": "^4.2.0",
- "lodash.difference": "^4.5.0",
- "lodash.flatten": "^4.4.0",
- "lodash.isplainobject": "^4.0.6",
- "lodash.union": "^4.6.0",
- "normalize-path": "^3.0.0",
- "readable-stream": "^2.0.0"
- },
- "dependencies": {
- "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
- }
- }
- },
- "archy": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
- "dev": true
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
"arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
"integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
"dev": true
},
- "arr-filter": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
- "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=",
- "dev": true,
- "requires": {
- "make-iterator": "^1.0.0"
- }
- },
"arr-flatten": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
"dev": true
},
- "arr-map": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
- "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=",
- "dev": true,
- "requires": {
- "make-iterator": "^1.0.0"
- }
- },
"arr-union": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
"dev": true
},
- "array-differ": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
- "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
+ "array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
"dev": true
},
- "array-each": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
- "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
- "dev": true
- },
- "array-filter": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
- "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
- "dev": true
- },
- "array-initial": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
- "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=",
- "dev": true,
- "requires": {
- "array-slice": "^1.0.0",
- "is-number": "^4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "dev": true
- }
- }
- },
- "array-last": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
- "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
- "dev": true,
- "requires": {
- "is-number": "^4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "dev": true
- }
- }
- },
- "array-map": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
- "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
- "dev": true
- },
- "array-reduce": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
- "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
- "dev": true
- },
- "array-slice": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
- "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
- "dev": true
- },
- "array-sort": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
- "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
- "dev": true,
- "requires": {
- "default-compare": "^1.0.0",
- "get-value": "^2.0.6",
- "kind-of": "^5.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
"array-union": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
@@ -853,39 +8593,12 @@
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
},
- "arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- },
"assign-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
"dev": true
},
- "astral-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
- "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
- "dev": true
- },
"async": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
@@ -895,43 +8608,16 @@
"lodash": "^4.17.14"
}
},
- "async-done": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz",
- "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.2",
- "process-nextick-args": "^2.0.0",
- "stream-exhaust": "^1.0.1"
- }
- },
"async-each": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
"integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
"dev": true
},
- "async-settle": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
- "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=",
- "dev": true,
- "requires": {
- "async-done": "^1.2.2"
- }
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"dev": true
},
"atob": {
@@ -940,41 +8626,6 @@
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true
},
- "atomic-sleep": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
- "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
- },
- "aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
- "dev": true
- },
- "bach": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
- "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=",
- "dev": true,
- "requires": {
- "arr-filter": "^1.1.1",
- "arr-flatten": "^1.0.1",
- "arr-map": "^2.0.0",
- "array-each": "^1.0.0",
- "array-initial": "^1.0.0",
- "array-last": "^1.1.1",
- "async-done": "^1.2.2",
- "async-settle": "^1.0.0",
- "now-and-later": "^2.0.0"
- }
- },
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -1036,20 +8687,17 @@
}
}
},
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
"dev": true
},
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
},
"binary-extensions": {
"version": "1.13.1",
@@ -1057,12 +8705,6 @@
"integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
"dev": true
},
- "binaryextensions": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.2.tgz",
- "integrity": "sha512-xVNN69YGDghOqCCtA6FI7avYrr02mTJjOgB0/f1VPD3pJC8QEvjTKWc4epDx8AqxxA75NI0QpVM2gPJXUbE4Tg==",
- "dev": true
- },
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
@@ -1073,35 +8715,54 @@
"file-uri-to-path": "1.0.0"
}
},
- "bl": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz",
- "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==",
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
"dev": true,
"requires": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
},
"dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "ms": "2.0.0"
}
}
}
},
- "bluebird": {
- "version": "2.9.34",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz",
- "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=",
- "dev": true
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "^2.1.0",
+ "deep-equal": "^1.0.1",
+ "dns-equal": "^1.0.0",
+ "dns-txt": "^2.0.2",
+ "multicast-dns": "^6.0.1",
+ "multicast-dns-service-types": "^1.1.0"
+ }
},
"boolbase": {
"version": "1.0.0",
@@ -1109,72 +8770,6 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
"dev": true
},
- "boxen": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
- "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
- "dev": true,
- "requires": {
- "ansi-align": "^3.0.0",
- "camelcase": "^5.3.1",
- "chalk": "^3.0.0",
- "cli-boxes": "^2.2.0",
- "string-width": "^4.1.0",
- "term-size": "^2.1.0",
- "type-fest": "^0.8.1",
- "widest-line": "^3.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1186,42 +8781,25 @@
}
},
"braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "fill-range": "^7.0.1"
}
},
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "browserslist": {
+ "version": "4.16.6",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz",
+ "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==",
"dev": true,
"requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
+ "caniuse-lite": "^1.0.30001219",
+ "colorette": "^1.2.2",
+ "electron-to-chromium": "^1.3.723",
+ "escalade": "^3.1.1",
+ "node-releases": "^1.1.71"
}
},
"buffer-crc32": {
@@ -1230,34 +8808,67 @@
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
"dev": true
},
- "buffer-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
- "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
- "dev": true
- },
- "buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=",
- "dev": true
- },
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
"dev": true
},
- "bunyan": {
- "version": "1.8.14",
- "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.14.tgz",
- "integrity": "sha512-LlahJUxXzZLuw/hetUQJmRgZ1LF6+cr5TPpRj6jf327AsiIq2jhYEH4oqUUkVKTor+9w2BT3oxVwhzE5lw9tcg==",
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cacache": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.1.0.tgz",
+ "integrity": "sha512-mfx0C+mCfWjD1PnwQ9yaOrwG1ou9FkKnx0SvzUHWdFt7r7GaRtzT+9M8HAvLu62zIHtnpQ/1m93nWNDCckJGXQ==",
"dev": true,
"requires": {
- "dtrace-provider": "~0.8",
- "moment": "^2.19.3",
- "mv": "~2",
- "safe-json-stringify": "~1"
+ "@npmcli/move-file": "^1.0.1",
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "glob": "^7.1.4",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^6.0.0",
+ "minipass": "^3.1.1",
+ "minipass-collect": "^1.0.2",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.2",
+ "mkdirp": "^1.0.3",
+ "p-map": "^4.0.0",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^3.0.2",
+ "ssri": "^8.0.1",
+ "tar": "^6.0.2",
+ "unique-filename": "^1.1.1"
+ },
+ "dependencies": {
+ "p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
}
},
"cache-base": {
@@ -1277,35 +8888,6 @@
"unset-value": "^1.0.0"
}
},
- "cacheable-request": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
- "dev": true,
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
- },
- "dependencies": {
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "dev": true
- },
- "normalize-url": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
- "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
- "dev": true
- }
- }
- },
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -1323,49 +8905,59 @@
"dev": true
},
"camel-case": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
- "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
+ "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
"dev": true,
"requires": {
- "no-case": "^2.2.0",
- "upper-case": "^1.1.1"
+ "pascal-case": "^3.1.2",
+ "tslib": "^2.0.3"
}
},
"camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "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,
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001228",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz",
+ "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==",
"dev": true
},
"chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "cheerio": {
- "version": "1.0.0-rc.3",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
- "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
- "dev": true,
- "requires": {
- "css-select": "~1.2.0",
- "dom-serializer": "~0.1.1",
- "entities": "~1.1.1",
- "htmlparser2": "^3.9.1",
- "lodash": "^4.15.0",
- "parse5": "^3.0.1"
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
"chokidar": {
@@ -1388,52 +8980,106 @@
"upath": "^1.1.1"
},
"dependencies": {
- "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
- }
- }
- },
- "chrome-launcher": {
- "version": "0.13.4",
- "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz",
- "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "escape-string-regexp": "^1.0.5",
- "is-wsl": "^2.2.0",
- "lighthouse-logger": "^1.0.0",
- "mkdirp": "^0.5.3",
- "rimraf": "^3.0.2"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
- "minimist": "^1.2.5"
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
}
},
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
- "glob": "^7.1.3"
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
}
}
}
},
- "ci-info": {
+ "chownr": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "dev": true
+ },
+ "chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
"dev": true
},
"class-utils": {
@@ -1460,92 +9106,57 @@
}
},
"clean-css": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
- "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
+ "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
"dev": true,
"requires": {
"source-map": "~0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
}
},
- "cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
"dev": true
},
"cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
"dev": true,
"requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
}
},
- "clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
- "dev": true
- },
- "clone-buffer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
- "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
- "dev": true
- },
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
"requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "clone-stats": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
- "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
- "dev": true
- },
- "cloneable-readable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
- "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "process-nextick-args": "^2.0.0",
- "readable-stream": "^2.3.5"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "collection-map": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz",
- "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=",
- "dev": true,
- "requires": {
- "arr-map": "^2.0.2",
- "for-own": "^1.0.0",
- "make-iterator": "^1.0.0"
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
}
},
"collection-visit": {
@@ -1559,67 +9170,36 @@
}
},
"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==",
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "color-name": "1.1.3"
}
},
"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==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "colord": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/colord/-/colord-1.7.2.tgz",
+ "integrity": "sha512-/sQCxy6PEhZbrAn1+NVRRefy3k4jkWQGxk7mo2o0CoNA24jq4ujDc2jXzJ5uXphm/TwfdGOP0w8U+H+9ys4Peg==",
"dev": true
},
"colorette": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
- "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
+ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
"dev": true
},
- "colors": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz",
- "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=",
- "dev": true
- },
- "columnify": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz",
- "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=",
- "dev": true,
- "requires": {
- "strip-ansi": "^3.0.0",
- "wcwidth": "^1.0.0"
- }
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
"commander": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
- "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
- "dev": true
- },
- "common-tags": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
- "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
"dev": true
},
"commondir": {
@@ -1634,34 +9214,44 @@
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
"dev": true
},
- "compress-commons": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.2.tgz",
- "integrity": "sha512-qhd32a9xgzmpfoga1VQEiLEwdKZ6Plnpx5UCgIsf89FSolyJ7WnifY4Gtjgv5WR6hWAyRaHxC5MiEhU/38U70A==",
+ "compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
"dev": true,
"requires": {
- "buffer-crc32": "^0.2.13",
- "crc32-stream": "^4.0.1",
- "normalize-path": "^3.0.0",
- "readable-stream": "^3.6.0"
+ "mime-db": ">= 1.43.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
},
"dependencies": {
- "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
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "ms": "2.0.0"
}
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
}
}
},
@@ -1671,57 +9261,46 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
+ "connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+ "dev": true
},
- "concat-with-sourcemaps": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz",
- "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==",
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
"dev": true,
"requires": {
- "source-map": "^0.6.1"
+ "safe-buffer": "5.1.2"
},
"dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
}
}
},
- "configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "dev": true,
- "requires": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- }
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
},
- "convert-source-map": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
- "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
},
"copy-descriptor": {
"version": "0.1.1",
@@ -1729,166 +9308,315 @@
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
"dev": true
},
- "copy-props": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz",
- "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==",
+ "copy-webpack-plugin": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz",
+ "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==",
"dev": true,
"requires": {
- "each-props": "^1.3.0",
- "is-plain-object": "^2.0.1"
+ "cacache": "^15.0.5",
+ "fast-glob": "^3.2.4",
+ "find-cache-dir": "^3.3.1",
+ "glob-parent": "^5.1.1",
+ "globby": "^11.0.1",
+ "loader-utils": "^2.0.0",
+ "normalize-path": "^3.0.0",
+ "p-limit": "^3.0.2",
+ "schema-utils": "^3.0.0",
+ "serialize-javascript": "^5.0.1",
+ "webpack-sources": "^1.4.3"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "globby": {
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz",
+ "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
+ "slash": "^3.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ }
}
},
- "core-js": {
- "version": "2.6.12",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
- "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
- "dev": true
- },
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
- "crc-32": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
- "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
+ "cosmiconfig": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
+ "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
"dev": true,
"requires": {
- "exit-on-epipe": "~1.0.1",
- "printj": "~1.1.0"
- }
- },
- "crc32-stream": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.1.tgz",
- "integrity": "sha512-FN5V+weeO/8JaXsamelVYO1PHyeCsuL3HcG4cqsj0ceARcocxalaShCsohZMSAF+db7UYFwBy1rARK/0oFItUw==",
- "dev": true,
- "requires": {
- "crc-32": "^1.2.0",
- "readable-stream": "^3.4.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
}
},
"cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
},
"dependencies": {
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
- "dev": true
- },
- "css-select": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
- "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
- "dev": true,
- "requires": {
- "boolbase": "~1.0.0",
- "css-what": "2.1",
- "domutils": "1.5.1",
- "nth-check": "~1.0.1"
- }
- },
- "css-tree": {
- "version": "1.0.0-alpha.39",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz",
- "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==",
- "dev": true,
- "requires": {
- "mdn-data": "2.0.6",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
}
}
},
+ "css-color-names": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz",
+ "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==",
+ "dev": true
+ },
+ "css-declaration-sorter": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz",
+ "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==",
+ "dev": true,
+ "requires": {
+ "timsort": "^0.3.0"
+ }
+ },
+ "css-loader": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.5.tgz",
+ "integrity": "sha512-bH6QQacvSRtLX0lycAOs43S173n+lfXxB5cx4FjVkTLw5tAEwk5bxNLbkt5K1iETd5KxazRx70GpqOxsuwKiFA==",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^5.1.0",
+ "loader-utils": "^2.0.0",
+ "postcss": "^8.2.15",
+ "postcss-modules-extract-imports": "^3.0.0",
+ "postcss-modules-local-by-default": "^4.0.0",
+ "postcss-modules-scope": "^3.0.0",
+ "postcss-modules-values": "^4.0.0",
+ "postcss-value-parser": "^4.1.0",
+ "schema-utils": "^3.0.0",
+ "semver": "^7.3.5"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "postcss": {
+ "version": "8.2.15",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz",
+ "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==",
+ "dev": true,
+ "requires": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map": "^0.6.1"
+ }
+ },
+ "schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "css-minimizer-webpack-plugin": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.0.0.tgz",
+ "integrity": "sha512-yIrqG0pPphR1RoNx2wDxYmxRf2ubRChLDXxv7ccipEm5bRKsZRYp8n+2peeXehtTF5s3yNxlqsdz3WQOsAgUkw==",
+ "dev": true,
+ "requires": {
+ "cssnano": "^5.0.0",
+ "jest-worker": "^26.3.0",
+ "p-limit": "^3.0.2",
+ "postcss": "^8.2.9",
+ "schema-utils": "^3.0.0",
+ "serialize-javascript": "^5.0.1",
+ "source-map": "^0.6.1"
+ }
+ },
+ "css-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
+ "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^3.2.1",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "css-tree": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ }
+ },
"css-what": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
- "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz",
+ "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==",
+ "dev": true
+ },
+ "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
+ },
+ "cssnano": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.3.tgz",
+ "integrity": "sha512-Ga/a+IA6U0F9+MNmqrXgwn1A3btY5jFkla2iurL7i9PTmQmMu2Kc99W9a8KSxT8iLV0aoI+Q5Q9i3SpVAVNnrQ==",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^7.0.0",
+ "cssnano-preset-default": "^5.1.0",
+ "is-resolvable": "^1.1.0"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.0.tgz",
+ "integrity": "sha512-VTO0WAlrEsU0u+A4RwALRs5zSVnD23WgYO8Np3HowBMZTqWIP1GvIWWzs9zZmjNgeL8U+70megRZymb+1yGg/w==",
+ "dev": true,
+ "requires": {
+ "css-declaration-sorter": "^6.0.3",
+ "cssnano-utils": "^2.0.1",
+ "postcss-calc": "^8.0.0",
+ "postcss-colormin": "^5.1.0",
+ "postcss-convert-values": "^5.0.1",
+ "postcss-discard-comments": "^5.0.1",
+ "postcss-discard-duplicates": "^5.0.1",
+ "postcss-discard-empty": "^5.0.1",
+ "postcss-discard-overridden": "^5.0.1",
+ "postcss-merge-longhand": "^5.0.2",
+ "postcss-merge-rules": "^5.0.1",
+ "postcss-minify-font-values": "^5.0.1",
+ "postcss-minify-gradients": "^5.0.1",
+ "postcss-minify-params": "^5.0.1",
+ "postcss-minify-selectors": "^5.1.0",
+ "postcss-normalize-charset": "^5.0.1",
+ "postcss-normalize-display-values": "^5.0.1",
+ "postcss-normalize-positions": "^5.0.1",
+ "postcss-normalize-repeat-style": "^5.0.1",
+ "postcss-normalize-string": "^5.0.1",
+ "postcss-normalize-timing-functions": "^5.0.1",
+ "postcss-normalize-unicode": "^5.0.1",
+ "postcss-normalize-url": "^5.0.1",
+ "postcss-normalize-whitespace": "^5.0.1",
+ "postcss-ordered-values": "^5.0.1",
+ "postcss-reduce-initial": "^5.0.1",
+ "postcss-reduce-transforms": "^5.0.1",
+ "postcss-svgo": "^5.0.1",
+ "postcss-unique-selectors": "^5.0.1"
+ }
+ },
+ "cssnano-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz",
+ "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==",
"dev": true
},
"csso": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz",
- "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+ "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
"dev": true,
"requires": {
- "css-tree": "1.0.0-alpha.39"
+ "css-tree": "^1.1.2"
}
},
- "d": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
- "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
- "dev": true,
- "requires": {
- "es5-ext": "^0.10.50",
- "type": "^1.0.1"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debounce": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz",
- "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==",
- "dev": true
- },
"debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
}
},
"decamelize": {
@@ -1903,15 +9631,6 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true
},
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
"deep-equal": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
@@ -1926,79 +9645,16 @@
"regexp.prototype.flags": "^1.2.0"
}
},
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
- "dev": true
- },
- "deepcopy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz",
- "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==",
+ "default-gateway": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
"dev": true,
"requires": {
- "type-detect": "^4.0.8"
+ "execa": "^1.0.0",
+ "ip-regex": "^2.1.0"
}
},
- "deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "dev": true
- },
- "default-compare": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
- "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==",
- "dev": true,
- "requires": {
- "kind-of": "^5.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "default-resolution": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
- "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=",
- "dev": true
- },
- "defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
- "dev": true,
- "requires": {
- "clone": "^1.0.2"
- },
- "dependencies": {
- "clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
- "dev": true
- }
- }
- },
- "defer-to-connect": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
- "dev": true
- },
"define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@@ -2049,145 +9705,98 @@
}
}
},
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
- "detect-file": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
- "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
- "dev": true
- },
- "dispensary": {
- "version": "0.59.0",
- "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.59.0.tgz",
- "integrity": "sha512-JSnh4AhtYgwoyUHtunZbAhklkD9IeNacK1IDlrAJSZjzBMGFoTp9+Nggg+ITJ+F1geXc04DZ55ixnjFr5Ozknw==",
+ "del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
"dev": true,
"requires": {
- "async": "~3.2.0",
- "natural-compare-lite": "~1.4.0",
- "pino": "~6.7.0",
- "request": "~2.88.0",
- "sha.js": "~2.4.4",
- "source-map-support": "~0.5.4",
- "yargs": "~16.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "async": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
- "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==",
- "dev": true
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
- "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
- "dev": true
- },
- "yargs": {
- "version": "16.1.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz",
- "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true
- }
+ "@types/glob": "^7.1.1",
+ "globby": "^6.1.0",
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
}
},
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-node": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
+ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
+ "dev": true
+ },
+ "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,
"requires": {
- "esutils": "^2.0.2"
+ "path-type": "^4.0.0"
+ }
+ },
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
+ "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
+ "dev": true,
+ "requires": {
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "requires": {
+ "buffer-indexof": "^1.0.0"
+ }
+ },
+ "dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+ "dev": true,
+ "requires": {
+ "utila": "~0.4"
}
},
"dom-serializer": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
- "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
"dev": true,
"requires": {
- "domelementtype": "^1.3.0",
- "entities": "^1.1.1"
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
+ "dev": true
+ }
}
},
"domelementtype": {
@@ -2206,131 +9815,95 @@
}
},
"domutils": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
- "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
"dev": true,
"requires": {
"dom-serializer": "0",
"domelementtype": "1"
}
},
- "dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
"dev": true,
"requires": {
- "is-obj": "^2.0.0"
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
}
},
- "dtrace-provider": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz",
- "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==",
- "dev": true,
- "optional": true,
- "requires": {
- "nan": "^2.14.0"
- }
- },
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
"dev": true
},
- "duplexify": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
- "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "each-props": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
- "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.1",
- "object.defaults": "^1.1.0"
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "ecdsa-sig-formatter": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "editions": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz",
- "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==",
- "dev": true
- },
- "email-addresses": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz",
- "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==",
+ "electron-to-chromium": {
+ "version": "1.3.734",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.734.tgz",
+ "integrity": "sha512-iQF2mjPZ6zNNq45kbJ6MYZYCBNdv2JpGiJC/lVx4tGJWi9MNg73KkL9sWGN4X4I/CP2SBLWsT8nPADZZpAHIyw==",
"dev": true
},
"emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
"dev": true
},
"end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
"requires": {
"once": "^1.4.0"
}
},
- "enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "enhanced-resolve": {
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz",
+ "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==",
"dev": true,
"requires": {
- "ansi-colors": "^4.1.1"
- },
- "dependencies": {
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- }
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
}
},
"entities": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
- "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
+ "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==",
"dev": true
},
+ "envinfo": {
+ "version": "7.8.1",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
+ "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==",
+ "dev": true
+ },
+ "errno": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+ "dev": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -2340,78 +9913,22 @@
"is-arrayish": "^0.2.1"
}
},
- "es5-ext": {
- "version": "0.10.50",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz",
- "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==",
- "dev": true,
- "requires": {
- "es6-iterator": "~2.0.3",
- "es6-symbol": "~3.1.1",
- "next-tick": "^1.0.0"
- }
- },
- "es6-error": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
- "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+ "es-module-lexer": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz",
+ "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
"dev": true
},
- "es6-iterator": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
- "dev": true,
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
- }
- },
- "es6-promise": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz",
- "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=",
- "dev": true
- },
- "es6-promisify": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz",
- "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==",
- "dev": true
- },
- "es6-symbol": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
- "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
- "dev": true,
- "requires": {
- "d": "1",
- "es5-ext": "~0.10.14"
- }
- },
- "es6-weak-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
- "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
- "dev": true,
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.46",
- "es6-iterator": "^2.0.3",
- "es6-symbol": "^3.1.1"
- }
- },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true
},
- "escape-goat": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
- "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
"dev": true
},
"escape-string-regexp": {
@@ -2420,107 +9937,6 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true
},
- "eslint": {
- "version": "7.14.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz",
- "integrity": "sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@eslint/eslintrc": "^0.2.1",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.0",
- "esquery": "^1.2.0",
- "esutils": "^2.0.2",
- "file-entry-cache": "^5.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.0.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash": "^4.17.19",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
- "strip-json-comments": "^3.1.0",
- "table": "^5.2.3",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
- "eslint-plugin-no-unsanitized": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.4.tgz",
- "integrity": "sha512-WF1+eZo2Sh+bQNjZuVNwT0dA61zuJORsLh+1Sww7+O6GOPw+WPWIIRfTWNqrmaXaDMhM4SXAqYPcNlhRMiH13g==",
- "dev": true
- },
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -2531,71 +9947,6 @@
"estraverse": "^4.1.1"
}
},
- "eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
- }
- },
- "eslint-visitor-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
- "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
- "dev": true
- },
- "espree": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz",
- "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==",
- "dev": true,
- "requires": {
- "acorn": "^7.4.0",
- "acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.3.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esquery": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
- "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true
- }
- }
- },
"esrecurse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
@@ -2619,40 +9970,47 @@
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
"dev": true
},
- "event-to-promise": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.8.0.tgz",
- "integrity": "sha1-S4TxF3K28l93Uvx02XFTGsb1tiY=",
+ "eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
"dev": true
},
- "execa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
- "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+ "events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true
+ },
+ "eventsource": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz",
+ "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==",
"dev": true,
"requires": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
+ "original": "^1.0.0"
}
},
- "exit-on-epipe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
- "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==",
- "dev": true
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
},
"expand-brackets": {
"version": "2.1.4",
@@ -2669,6 +10027,15 @@
"to-regex": "^3.0.1"
},
"dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
@@ -2689,72 +10056,67 @@
}
}
},
- "expand-range": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
"dev": true,
"requires": {
- "fill-range": "^2.1.0"
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
},
"dependencies": {
- "fill-range": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
- "is-number": "^2.1.0",
- "isobject": "^2.0.0",
- "randomatic": "^3.0.0",
- "repeat-element": "^1.1.2",
- "repeat-string": "^1.5.2"
+ "ms": "2.0.0"
}
},
- "is-number": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
}
}
},
- "expand-tilde": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
- "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1"
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
"extend-shallow": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
@@ -2841,45 +10203,24 @@
}
}
},
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "dev": true
- },
- "fancy-log": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
- "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
- "dev": true,
- "requires": {
- "ansi-gray": "^0.1.1",
- "color-support": "^1.1.3",
- "parse-node-version": "^1.0.0",
- "time-stamp": "^1.0.0"
- }
- },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
- "fast-json-patch": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz",
- "integrity": "sha512-4j5uBaTnsYAV5ebkidvxiLUYOwjQ+JSFljeqfTxCrH9bDmlCQaOJFS84oDJ2rAXZq2yskmk3ORfoP9DCwqFNig==",
+ "fast-glob": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz",
+ "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==",
"dev": true,
"requires": {
- "fast-deep-equal": "^2.0.1"
- },
- "dependencies": {
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
- "dev": true
- }
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.0",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.2",
+ "picomatch": "^2.2.1"
}
},
"fast-json-stable-stringify": {
@@ -2888,40 +10229,63 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "fastest-levenshtein": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
+ "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
"dev": true
},
- "fast-redact": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.0.tgz",
- "integrity": "sha512-a/S/Hp6aoIjx7EmugtzLqXmcNsyFszqbt6qQ99BdG61QjBZF6shNis0BYR6TsZOQ1twYc0FN2Xdhwwbv6+KD0w==",
- "dev": true
- },
- "fast-safe-stringify": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
- "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==",
- "dev": true
- },
- "fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "fastq": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz",
+ "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==",
"dev": true,
"requires": {
- "pend": "~1.2.0"
+ "reusify": "^1.0.4"
}
},
- "file-entry-cache": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
- "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+ "faye-websocket": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
"dev": true,
"requires": {
- "flat-cache": "^2.0.1"
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "file-loader": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
+ "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^3.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ }
}
},
"file-uri-to-path": {
@@ -2931,58 +10295,37 @@
"dev": true,
"optional": true
},
- "filename-regex": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
- "dev": true
- },
- "filename-reserved-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz",
- "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=",
- "dev": true
- },
- "filenamify": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz",
- "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=",
- "dev": true,
- "requires": {
- "filename-reserved-regex": "^1.0.0",
- "strip-outer": "^1.0.0",
- "trim-repeated": "^1.0.0"
- }
- },
- "filenamify-url": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/filenamify-url/-/filenamify-url-1.0.0.tgz",
- "integrity": "sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A=",
- "dev": true,
- "requires": {
- "filenamify": "^1.0.0",
- "humanize-url": "^1.0.0"
- }
- },
"fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
},
"dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "ms": "2.0.0"
}
}
}
@@ -3008,164 +10351,24 @@
"path-exists": "^4.0.0"
}
},
- "findup-sync": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
- "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
- "dev": true,
- "requires": {
- "detect-file": "^1.0.0",
- "is-glob": "^4.0.0",
- "micromatch": "^3.0.4",
- "resolve-dir": "^1.0.1"
- }
- },
- "fined": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
- "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.2",
- "is-plain-object": "^2.0.3",
- "object.defaults": "^1.1.0",
- "object.pick": "^1.2.0",
- "parse-filepath": "^1.0.1"
- }
- },
- "firefox-profile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.0.0.tgz",
- "integrity": "sha512-Vw31AsjfLDbcApMDwwnhZcz3tWjV6lxB9BNf84FaV44rZXtU87cVbFMBzPEtrJdUDbwPYiuYzprp6yksYGwjSw==",
- "dev": true,
- "requires": {
- "adm-zip": "~0.4.x",
- "archiver": "~5.0.2",
- "async": "~2.5.0",
- "fs-extra": "~4.0.2",
- "ini": "~1.3.3",
- "jetpack-id": "1.0.0",
- "lazystream": "~1.0.0",
- "lodash": "~4.17.2",
- "minimist": "^1.1.1",
- "uuid": "^3.0.0",
- "xml2js": "~0.4.4"
- },
- "dependencies": {
- "async": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz",
- "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==",
- "dev": true,
- "requires": {
- "lodash": "^4.14.0"
- }
- },
- "fs-extra": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
- "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- }
- }
- },
- "first-chunk-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz",
- "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.2"
- }
- },
- "flagged-respawn": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
- "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+ "follow-redirects": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz",
+ "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==",
"dev": true
},
- "flat-cache": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
- "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
- "dev": true,
- "requires": {
- "flatted": "^2.0.0",
- "rimraf": "2.6.3",
- "write": "1.0.3"
- }
- },
- "flatnest": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/flatnest/-/flatnest-1.0.0.tgz",
- "integrity": "sha1-IEIa0FtGxjytMO8UqOxiX4az8cU=",
- "dev": true
- },
- "flatstr": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz",
- "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==",
- "dev": true
- },
- "flatted": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
- "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
- "dev": true
- },
- "fluent-syntax": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/fluent-syntax/-/fluent-syntax-0.13.0.tgz",
- "integrity": "sha512-0Bk1AsliuYB550zr4JV9AYhsETsD3ELXUQzdXGJfIc1Ni/ukAfBdQInDhVMYJUaT2QxoamNslwkYF7MlOrPUwg==",
- "dev": true
- },
- "flush-write-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
- "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.3.6"
- }
- },
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
"dev": true
},
- "for-own": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
- "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
- "dev": true,
- "requires": {
- "for-in": "^1.0.1"
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
"dev": true
},
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
"fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
@@ -3175,31 +10378,19 @@
"map-cache": "^0.2.2"
}
},
- "fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
"dev": true
},
- "fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
"dev": true,
"requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "fs-mkdirp-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
- "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "through2": "^2.0.3"
+ "minipass": "^3.0.0"
}
},
"fs.realpath": {
@@ -3209,554 +10400,14 @@
"dev": true
},
"fsevents": {
- "version": "1.2.12",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz",
- "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==",
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+ "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"dev": true,
"optional": true,
"requires": {
"bindings": "^1.5.0",
- "nan": "^2.12.1",
- "node-pre-gyp": "*"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "3.2.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-walk": {
- "version": "3.0.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.9.0"
- }
- },
- "mkdirp": {
- "version": "0.5.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "ms": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.3.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^3.2.6",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.14.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4.4.2"
- }
- },
- "nopt": {
- "version": "4.0.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1",
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "semver": {
- "version": "5.7.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.13",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "yallist": {
- "version": "3.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- }
+ "nan": "^2.12.1"
}
},
"function-bind": {
@@ -3765,112 +10416,30 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "fx-runner": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.0.13.tgz",
- "integrity": "sha512-Ces2bm+LNuXehkvmN1/Z+oEDkI/jHBp9xdyBtBy7hcgvF18/pv/D8F6A6kQgNkMZsnBgLEv+VvdDxyqkfkYycw==",
- "dev": true,
- "requires": {
- "commander": "2.9.0",
- "shell-quote": "1.6.1",
- "spawn-sync": "1.0.15",
- "when": "3.7.7",
- "which": "1.2.4",
- "winreg": "0.0.12"
- },
- "dependencies": {
- "commander": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
- "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
- "dev": true,
- "requires": {
- "graceful-readlink": ">= 1.0.0"
- }
- },
- "is-absolute": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz",
- "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=",
- "dev": true,
- "requires": {
- "is-relative": "^0.1.0"
- }
- },
- "is-relative": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz",
- "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=",
- "dev": true
- },
- "isexe": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz",
- "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=",
- "dev": true
- },
- "which": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz",
- "integrity": "sha1-FVf5YIBgTlsRs1meufRbUKnv1yI=",
- "dev": true,
- "requires": {
- "is-absolute": "^0.1.7",
- "isexe": "^1.1.1"
- }
- }
- }
- },
"get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "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
},
"get-intrinsic": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.0.tgz",
- "integrity": "sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1"
- },
- "dependencies": {
- "has-symbols": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
- "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
- "dev": true
- }
}
},
"get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"dev": true,
"requires": {
"pump": "^3.0.0"
- },
- "dependencies": {
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
}
},
"get-value": {
@@ -3879,34 +10448,10 @@
"integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
"dev": true
},
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "gh-pages": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.1.0.tgz",
- "integrity": "sha512-3b1rly9kuf3/dXsT8+ZxP0UhNLOo1CItj+3e31yUVcaph/yDsJ9RzD7JOw5o5zpBTJVQLlJAASNkUfepi9fe2w==",
- "dev": true,
- "requires": {
- "async": "^2.6.1",
- "commander": "^2.18.0",
- "email-addresses": "^3.0.1",
- "filenamify-url": "^1.0.0",
- "find-cache-dir": "^3.3.1",
- "fs-extra": "^8.1.0",
- "globby": "^6.1.0"
- }
- },
"glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -3917,144 +10462,20 @@
"path-is-absolute": "^1.0.0"
}
},
- "glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "requires": {
- "glob-parent": "^2.0.0",
- "is-glob": "^2.0.0"
- },
- "dependencies": {
- "glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "requires": {
- "is-glob": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- }
- }
- },
"glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
+ "is-glob": "^4.0.1"
}
},
- "glob-stream": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
- "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
- "dev": true,
- "requires": {
- "extend": "^3.0.0",
- "glob": "^7.1.1",
- "glob-parent": "^3.1.0",
- "is-negated-glob": "^1.0.0",
- "ordered-read-streams": "^1.0.0",
- "pumpify": "^1.3.5",
- "readable-stream": "^2.1.5",
- "remove-trailing-separator": "^1.0.1",
- "to-absolute-glob": "^2.0.0",
- "unique-stream": "^2.0.2"
- }
- },
- "glob-watcher": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz",
- "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==",
- "dev": true,
- "requires": {
- "anymatch": "^2.0.0",
- "async-done": "^1.2.0",
- "chokidar": "^2.0.0",
- "is-negated-glob": "^1.0.0",
- "just-debounce": "^1.0.0",
- "object.defaults": "^1.1.0"
- }
- },
- "global-dirs": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz",
- "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==",
- "dev": true,
- "requires": {
- "ini": "1.3.7"
- },
- "dependencies": {
- "ini": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
- "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==",
- "dev": true
- }
- }
- },
- "global-modules": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
- "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
- "dev": true,
- "requires": {
- "global-prefix": "^1.0.1",
- "is-windows": "^1.0.1",
- "resolve-dir": "^1.0.0"
- }
- },
- "global-prefix": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
- "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.2",
- "homedir-polyfill": "^1.0.1",
- "ini": "^1.3.4",
- "is-windows": "^1.0.1",
- "which": "^1.2.14"
- }
- },
- "globals": {
- "version": "12.4.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
- "dev": true,
- "requires": {
- "type-fest": "^0.8.1"
- }
+ "glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true
},
"globby": {
"version": "6.1.0",
@@ -4067,529 +10488,28 @@
"object-assign": "^4.0.1",
"pify": "^2.0.0",
"pinkie-promise": "^2.0.0"
- }
- },
- "glogg": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
- "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
- "dev": true,
- "requires": {
- "sparkles": "^1.0.0"
- }
- },
- "got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "dev": true,
- "requires": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
},
"dependencies": {
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
}
}
},
"graceful-fs": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
- "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
"dev": true
},
- "graceful-readlink": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "handle-thing": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
+ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
"dev": true
},
- "growly": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
- "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
- "dev": true
- },
- "gulp": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
- "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
- "dev": true,
- "requires": {
- "glob-watcher": "^5.0.3",
- "gulp-cli": "^2.2.0",
- "undertaker": "^1.2.1",
- "vinyl-fs": "^3.0.0"
- }
- },
- "gulp-cli": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz",
- "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==",
- "dev": true,
- "requires": {
- "ansi-colors": "^1.0.1",
- "archy": "^1.0.0",
- "array-sort": "^1.0.0",
- "color-support": "^1.1.3",
- "concat-stream": "^1.6.0",
- "copy-props": "^2.0.1",
- "fancy-log": "^1.3.2",
- "gulplog": "^1.0.0",
- "interpret": "^1.4.0",
- "isobject": "^3.0.1",
- "liftoff": "^3.1.0",
- "matchdep": "^2.0.0",
- "mute-stdout": "^1.0.0",
- "pretty-hrtime": "^1.0.0",
- "replace-homedir": "^1.0.0",
- "semver-greatest-satisfied-range": "^1.1.0",
- "v8flags": "^3.2.0",
- "yargs": "^7.1.0"
- }
- },
- "gulp-concat": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz",
- "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=",
- "dev": true,
- "requires": {
- "concat-with-sourcemaps": "^1.0.0",
- "through2": "^2.0.0",
- "vinyl": "^2.0.0"
- }
- },
- "gulp-csso": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/gulp-csso/-/gulp-csso-4.0.1.tgz",
- "integrity": "sha512-Kg8gqmd6XcUlMTdBbqdCEcpHumc8ytc4khgm9AXeCjl8eHx7b6tC11y8haizFI+Zw/cSHL6HCj7GwGLwxxBUFQ==",
- "dev": true,
- "requires": {
- "csso": "^4.0.0",
- "plugin-error": "^1.0.0",
- "vinyl-sourcemaps-apply": "^0.2.1"
- }
- },
- "gulp-file-include": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/gulp-file-include/-/gulp-file-include-2.2.2.tgz",
- "integrity": "sha512-AOrENB4sYXOC1aeJ04pq0UW/VC4EEQHDDjVfTpGGxuKS7Js0SSGZ0darlbk+e7gWJItfxibpRhVu3tFwOdmSiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-stream": "^2.0.0",
- "extend": "^3.0.2",
- "flatnest": "^1.0.0",
- "json5": "^2.1.3",
- "plugin-error": "^1.0.1",
- "through2": "^3.0.1",
- "vinyl": "^2.2.0"
- },
- "dependencies": {
- "concat-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
- "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.0.2",
- "typedarray": "^0.0.6"
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "through2": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
- "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "2 || 3"
- }
- }
- }
- },
- "gulp-filter": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-6.0.0.tgz",
- "integrity": "sha512-veQFW93kf6jBdWdF/RxMEIlDK2mkjHyPftM381DID2C9ImTVngwYpyyThxm4/EpgcNOT37BLefzMOjEKbyYg0Q==",
- "dev": true,
- "requires": {
- "multimatch": "^4.0.0",
- "plugin-error": "^1.0.1",
- "streamfilter": "^3.0.0"
- },
- "dependencies": {
- "plugin-error": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
- "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
- "dev": true,
- "requires": {
- "ansi-colors": "^1.0.1",
- "arr-diff": "^4.0.0",
- "arr-union": "^3.1.0",
- "extend-shallow": "^3.0.2"
- }
- }
- }
- },
- "gulp-htmlmin": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/gulp-htmlmin/-/gulp-htmlmin-5.0.1.tgz",
- "integrity": "sha512-ASlyDPZOSKjHYUifYV0rf9JPDflN9IRIb8lw2vRqtYMC4ljU3zAmnnaVXwFQ3H+CfXxZSUesZ2x7jrnPJu93jA==",
- "dev": true,
- "requires": {
- "html-minifier": "^3.5.20",
- "plugin-error": "^1.0.1",
- "through2": "^2.0.3"
- },
- "dependencies": {
- "plugin-error": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
- "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
- "dev": true,
- "requires": {
- "ansi-colors": "^1.0.1",
- "arr-diff": "^4.0.0",
- "arr-union": "^3.1.0",
- "extend-shallow": "^3.0.2"
- }
- }
- }
- },
- "gulp-minify-inline": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/gulp-minify-inline/-/gulp-minify-inline-1.1.0.tgz",
- "integrity": "sha512-IutppVUofY55ksWM8win53tz9KhNZ0XeO48tTMhyvecWotozeIfzUn8LsGoXMAqo4hPb2a86GIdPAnXGJVQyhQ==",
- "dev": true,
- "requires": {
- "cheerio": "^0.22.0",
- "clean-css": "^4.2.1",
- "plugin-error": "^1.0.1",
- "terser": "^3.14.1",
- "through2": "^3.0.0"
- },
- "dependencies": {
- "cheerio": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
- "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
- "dev": true,
- "requires": {
- "css-select": "~1.2.0",
- "dom-serializer": "~0.1.0",
- "entities": "~1.1.1",
- "htmlparser2": "^3.9.1",
- "lodash.assignin": "^4.0.9",
- "lodash.bind": "^4.1.4",
- "lodash.defaults": "^4.0.1",
- "lodash.filter": "^4.4.0",
- "lodash.flatten": "^4.2.0",
- "lodash.foreach": "^4.3.0",
- "lodash.map": "^4.4.0",
- "lodash.merge": "^4.4.0",
- "lodash.pick": "^4.2.1",
- "lodash.reduce": "^4.4.0",
- "lodash.reject": "^4.4.0",
- "lodash.some": "^4.4.0"
- }
- },
- "plugin-error": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
- "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
- "dev": true,
- "requires": {
- "ansi-colors": "^1.0.1",
- "arr-diff": "^4.0.0",
- "arr-union": "^3.1.0",
- "extend-shallow": "^3.0.2"
- }
- },
- "through2": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz",
- "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "2 || 3"
- }
- }
- }
- },
- "gulp-replace": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.0.0.tgz",
- "integrity": "sha512-lgdmrFSI1SdhNMXZQbrC75MOl1UjYWlOWNbNRnz+F/KHmgxt3l6XstBoAYIdadwETFyG/6i+vWUSCawdC3pqOw==",
- "dev": true,
- "requires": {
- "istextorbinary": "2.2.1",
- "readable-stream": "^2.0.1",
- "replacestream": "^4.0.0"
- }
- },
- "gulp-uglify": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz",
- "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==",
- "dev": true,
- "requires": {
- "array-each": "^1.0.1",
- "extend-shallow": "^3.0.2",
- "gulplog": "^1.0.0",
- "has-gulplog": "^0.1.0",
- "isobject": "^3.0.1",
- "make-error-cause": "^1.1.1",
- "safe-buffer": "^5.1.2",
- "through2": "^2.0.0",
- "uglify-js": "^3.0.5",
- "vinyl-sourcemaps-apply": "^0.2.0"
- }
- },
- "gulp-uglifycss": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/gulp-uglifycss/-/gulp-uglifycss-1.1.0.tgz",
- "integrity": "sha512-O2VDBPdS16SO3BPSCsHDnsvdCx1B/WgH2qvJaUOD+r1d8v87UjeqEtfmqR2eJ171D0F4shw8/oW5ezA6pqVXEQ==",
- "dev": true,
- "requires": {
- "plugin-error": "^1.0.1",
- "through2": "^2.0.3",
- "uglifycss": "^0.0.25",
- "vinyl": "^2.1.0"
- },
- "dependencies": {
- "plugin-error": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
- "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
- "dev": true,
- "requires": {
- "ansi-colors": "^1.0.1",
- "arr-diff": "^4.0.0",
- "arr-union": "^3.1.0",
- "extend-shallow": "^3.0.2"
- }
- }
- }
- },
- "gulp-watch": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/gulp-watch/-/gulp-watch-5.0.1.tgz",
- "integrity": "sha512-HnTSBdzAOFIT4wmXYPDUn783TaYAq9bpaN05vuZNP5eni3z3aRx0NAKbjhhMYtcq76x4R1wf4oORDGdlrEjuog==",
- "dev": true,
- "requires": {
- "ansi-colors": "1.1.0",
- "anymatch": "^1.3.0",
- "chokidar": "^2.0.0",
- "fancy-log": "1.3.2",
- "glob-parent": "^3.0.1",
- "object-assign": "^4.1.0",
- "path-is-absolute": "^1.0.1",
- "plugin-error": "1.0.1",
- "readable-stream": "^2.2.2",
- "slash": "^1.0.0",
- "vinyl": "^2.1.0",
- "vinyl-file": "^2.0.0"
- },
- "dependencies": {
- "anymatch": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
- "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
- "dev": true,
- "requires": {
- "micromatch": "^2.1.5",
- "normalize-path": "^2.0.0"
- }
- },
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1"
- }
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "dev": true,
- "requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
- }
- },
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
- },
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "fancy-log": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
- "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
- "dev": true,
- "requires": {
- "ansi-gray": "^0.1.1",
- "color-support": "^1.1.3",
- "time-stamp": "^1.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- },
- "micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
- "requires": {
- "arr-diff": "^2.0.0",
- "array-unique": "^0.2.1",
- "braces": "^1.8.2",
- "expand-brackets": "^0.1.4",
- "extglob": "^0.3.1",
- "filename-regex": "^2.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.1",
- "kind-of": "^3.0.2",
- "normalize-path": "^2.0.1",
- "object.omit": "^2.0.0",
- "parse-glob": "^3.0.4",
- "regex-cache": "^0.4.2"
- }
- },
- "plugin-error": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
- "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
- "dev": true,
- "requires": {
- "ansi-colors": "^1.0.1",
- "arr-diff": "^4.0.0",
- "arr-union": "^3.1.0",
- "extend-shallow": "^3.0.2"
- },
- "dependencies": {
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- }
- }
- }
- }
- },
- "gulplog": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
- "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
- "dev": true,
- "requires": {
- "glogg": "^1.0.0"
- }
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -4600,24 +10520,15 @@
}
},
"has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
- "has-gulplog": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
- "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
- "dev": true,
- "requires": {
- "sparkles": "^1.0.0"
- }
- },
"has-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
- "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
+ "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
"dev": true
},
"has-value": {
@@ -4641,6 +10552,26 @@
"kind-of": "^4.0.0"
},
"dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"kind-of": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
@@ -4652,62 +10583,116 @@
}
}
},
- "has-yarn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
- "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
- "dev": true
- },
"he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
},
- "homedir-polyfill": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
- "dev": true,
- "requires": {
- "parse-passwd": "^1.0.0"
- }
- },
- "hosted-git-info": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
- "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
+ "hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==",
"dev": true
},
- "html-minifier": {
- "version": "3.5.21",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
- "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
"dev": true,
"requires": {
- "camel-case": "3.0.x",
- "clean-css": "4.2.x",
- "commander": "2.17.x",
- "he": "1.2.x",
- "param-case": "2.1.x",
- "relateurl": "0.2.x",
- "uglify-js": "3.4.x"
+ "inherits": "^2.0.1",
+ "obuf": "^1.0.0",
+ "readable-stream": "^2.0.1",
+ "wbuf": "^1.1.0"
},
"dependencies": {
- "commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
}
}
},
- "html5sortable": {
- "version": "0.9.18",
- "resolved": "https://registry.npmjs.org/html5sortable/-/html5sortable-0.9.18.tgz",
- "integrity": "sha512-5O0toaQ/rG9rI7weESyCOQ4SPnR+1qXYqkPmMEd4vMYmrYiDhLdV1wYHZ+w22AhSKQdccRgNMjfR4HeJh2alpw==",
+ "hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
"dev": true
},
+ "hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+ "dev": true
+ },
+ "html-entities": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz",
+ "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==",
+ "dev": true
+ },
+ "html-minifier-terser": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
+ "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
+ "dev": true,
+ "requires": {
+ "camel-case": "^4.1.1",
+ "clean-css": "^4.2.3",
+ "commander": "^4.1.1",
+ "he": "^1.2.0",
+ "param-case": "^3.0.3",
+ "relateurl": "^0.2.7",
+ "terser": "^4.6.3"
+ }
+ },
+ "html-webpack-plugin": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz",
+ "integrity": "sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ==",
+ "dev": true,
+ "requires": {
+ "@types/html-minifier-terser": "^5.0.0",
+ "html-minifier-terser": "^5.0.1",
+ "lodash": "^4.17.20",
+ "pretty-error": "^2.1.1",
+ "tapable": "^2.0.0"
+ },
+ "dependencies": {
+ "tapable": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
+ "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
+ "dev": true
+ }
+ }
+ },
"htmlparser2": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
@@ -4722,62 +10707,200 @@
"readable-stream": "^3.1.1"
},
"dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ }
+ }
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "http-parser-js": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz",
+ "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==",
+ "dev": true
+ },
+ "http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+ "dev": true,
+ "requires": {
+ "http-proxy": "^1.17.0",
+ "is-glob": "^4.0.0",
+ "lodash": "^4.17.11",
+ "micromatch": "^3.1.10"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
}
}
}
},
- "http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
- "dev": true
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
"human-signals": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true
},
- "humanize-url": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz",
- "integrity": "sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8=",
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
- "normalize-url": "^1.0.0",
- "strip-url-auth": "^1.0.0"
+ "safer-buffer": ">= 2.1.2 < 3"
}
},
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "icss-utils": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
+ "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
"dev": true
},
"ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "version": "5.1.8",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
"dev": true
},
"import-fresh": {
@@ -4788,13 +10911,79 @@
"requires": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ }
}
},
- "import-lazy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
- "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
- "dev": true
+ "import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ }
+ }
},
"imurmurhash": {
"version": "0.1.4",
@@ -4802,6 +10991,24 @@
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+ "dev": true
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "dev": true
+ },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -4818,34 +11025,46 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
- "ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
- },
- "interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "dev": true
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
- },
- "is-absolute": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
- "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "internal-ip": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
"dev": true,
"requires": {
- "is-relative": "^1.0.0",
- "is-windows": "^1.0.1"
+ "default-gateway": "^4.2.0",
+ "ipaddr.js": "^1.9.0"
}
},
+ "interpret": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
+ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
+ "dev": true
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true
+ },
+ "is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
+ "dev": true
+ },
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
@@ -4896,13 +11115,35 @@
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
},
- "is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+ "is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
"dev": true,
"requires": {
- "ci-info": "^2.0.0"
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^1.0.0"
+ },
+ "dependencies": {
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
+ "dev": true
+ }
+ }
+ },
+ "is-core-module": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
+ "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
}
},
"is-data-descriptor": {
@@ -4926,9 +11167,9 @@
}
},
"is-date-object": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
- "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
+ "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==",
"dev": true
},
"is-descriptor": {
@@ -4950,27 +11191,6 @@
}
}
},
- "is-docker": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
- "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
- "dev": true
- },
- "is-dotfile": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true
- },
- "is-equal-shallow": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
- "dev": true,
- "requires": {
- "is-primitive": "^2.0.0"
- }
- },
"is-extendable": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
@@ -4984,13 +11204,10 @@
"dev": true
},
"is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
},
"is-glob": {
"version": "4.0.1",
@@ -5001,71 +11218,35 @@
"is-extglob": "^2.1.1"
}
},
- "is-installed-globally": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
- "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
- "dev": true,
- "requires": {
- "global-dirs": "^2.0.1",
- "is-path-inside": "^3.0.1"
- }
- },
- "is-mergeable-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz",
- "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==",
- "dev": true
- },
- "is-negated-glob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
- "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=",
- "dev": true
- },
- "is-npm": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz",
- "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==",
- "dev": true
- },
"is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "is-path-inside": "^2.1.0"
}
},
- "is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "dev": true
- },
"is-path-inside": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
- "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
- "dev": true
- },
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
- "dev": true
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.2"
+ }
},
"is-plain-object": {
"version": "2.0.4",
@@ -5076,75 +11257,26 @@
"isobject": "^3.0.1"
}
},
- "is-posix-bracket": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
- "dev": true
- },
- "is-primitive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
- "dev": true
- },
"is-regex": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz",
- "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
+ "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
"dev": true,
"requires": {
- "has-symbols": "^1.0.1"
- },
- "dependencies": {
- "has-symbols": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
- "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
- "dev": true
- }
+ "call-bind": "^1.0.2",
+ "has-symbols": "^1.0.2"
}
},
- "is-relative": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
- "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
- "dev": true,
- "requires": {
- "is-unc-path": "^1.0.0"
- }
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
},
"is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
- "dev": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "is-unc-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
- "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
- "dev": true,
- "requires": {
- "unc-path-regex": "^0.1.2"
- }
- },
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
- "dev": true
- },
- "is-valid-glob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
- "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
"is-windows": {
@@ -5154,18 +11286,9 @@
"dev": true
},
"is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "requires": {
- "is-docker": "^2.0.0"
- }
- },
- "is-yarn-global": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
- "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
"dev": true
},
"isarray": {
@@ -5186,43 +11309,32 @@
"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true
},
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
- "istextorbinary": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz",
- "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==",
+ "jest-worker": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
+ "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
"dev": true,
"requires": {
- "binaryextensions": "2",
- "editions": "^1.3.3",
- "textextensions": "2"
- }
- },
- "jed": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz",
- "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=",
- "dev": true
- },
- "jetpack-id": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/jetpack-id/-/jetpack-id-1.0.0.tgz",
- "integrity": "sha1-LPn7rkbYB0/Ba33gBxyO/rykc6Y=",
- "dev": true
- },
- "js-select": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/js-select/-/js-select-0.6.0.tgz",
- "integrity": "sha1-woTiKCTVknrsli3N8kcXSu+w0ZA=",
- "dev": true,
- "requires": {
- "JSONSelect": "0.2.1",
- "traverse": "0.4.x"
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "dependencies": {
+ "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
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
"js-tokens": {
@@ -5231,47 +11343,16 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true
- },
- "json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
- "dev": true
- },
- "json-merge-patch": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-0.2.3.tgz",
- "integrity": "sha1-+ixrWvh9p3uuKWalidUuI+2B/kA=",
- "dev": true,
- "requires": {
- "deep-equal": "^1.0.0"
- }
- },
"json-parse-better-errors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true
},
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
},
"json-schema-traverse": {
@@ -5280,16 +11361,10 @@
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "json3": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==",
"dev": true
},
"json5": {
@@ -5301,209 +11376,39 @@
"minimist": "^1.2.5"
}
},
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsonify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "killable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+ "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
"dev": true
},
- "jsonwebtoken": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
- "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
- "dev": true,
- "requires": {
- "jws": "^3.2.2",
- "lodash.includes": "^4.3.0",
- "lodash.isboolean": "^3.0.3",
- "lodash.isinteger": "^4.0.4",
- "lodash.isnumber": "^3.0.3",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.once": "^4.0.0",
- "ms": "^2.1.1",
- "semver": "^5.6.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- }
- }
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "jszip": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz",
- "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=",
- "dev": true,
- "requires": {
- "pako": "~1.0.2"
- }
- },
- "just-debounce": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz",
- "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=",
- "dev": true
- },
- "jwa": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "dev": true,
- "requires": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "dev": true,
- "requires": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "dev": true,
- "requires": {
- "json-buffer": "3.0.0"
- }
- },
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
},
- "last-run": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
- "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=",
- "dev": true,
- "requires": {
- "default-resolution": "^2.0.0",
- "es6-weak-map": "^2.0.1"
- }
- },
- "latest-version": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
- "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
- "dev": true,
- "requires": {
- "package-json": "^6.3.0"
- }
- },
- "lazystream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
- "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.5"
- }
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "lead": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
- "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
- "dev": true,
- "requires": {
- "flush-write-stream": "^1.0.2"
- }
- },
- "levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "liftoff": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
- "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
- "dev": true,
- "requires": {
- "extend": "^3.0.0",
- "findup-sync": "^3.0.0",
- "fined": "^1.0.1",
- "flagged-respawn": "^1.0.0",
- "is-plain-object": "^2.0.4",
- "object.map": "^1.0.0",
- "rechoir": "^0.6.2",
- "resolve": "^1.1.7"
- }
- },
- "lighthouse-logger": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz",
- "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==",
- "dev": true,
- "requires": {
- "debug": "^2.6.8",
- "marky": "^1.2.0"
- }
- },
"lines-and-columns": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
"dev": true
},
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "loader-runner": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
+ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
}
},
"locate-path": {
@@ -5516,154 +11421,37 @@
}
},
"lodash": {
- "version": "4.17.19",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
- "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
- "lodash.assignin": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
- "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
"dev": true
},
- "lodash.bind": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
- "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
- "dev": true
- },
- "lodash.defaults": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
- "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
- "dev": true
- },
- "lodash.difference": {
+ "lodash.uniq": {
"version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz",
- "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
"dev": true
},
- "lodash.filter": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
- "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=",
- "dev": true
- },
- "lodash.flatten": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
- "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
- "dev": true
- },
- "lodash.foreach": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
- "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
- "dev": true
- },
- "lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=",
- "dev": true
- },
- "lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=",
- "dev": true
- },
- "lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=",
- "dev": true
- },
- "lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=",
- "dev": true
- },
- "lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
- "dev": true
- },
- "lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=",
- "dev": true
- },
- "lodash.map": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
- "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=",
- "dev": true
- },
- "lodash.pick": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
- "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
- "dev": true
- },
- "lodash.reduce": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
- "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=",
- "dev": true
- },
- "lodash.reject": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
- "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=",
- "dev": true
- },
- "lodash.some": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
- "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
- "dev": true
- },
- "lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
- "dev": true
- },
- "lodash.union": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
- "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=",
+ "loglevel": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz",
+ "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==",
"dev": true
},
"lower-case": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
- "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
- "dev": true
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "dev": true
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
+ "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.0.3"
+ }
},
"lru-cache": {
"version": "6.0.0",
@@ -5681,47 +11469,6 @@
"dev": true,
"requires": {
"semver": "^6.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "make-error": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
- "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==",
- "dev": true
- },
- "make-error-cause": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz",
- "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=",
- "dev": true,
- "requires": {
- "make-error": "^1.2.0"
- }
- },
- "make-iterator": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
- "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.2"
- }
- },
- "map-age-cleaner": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
- "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
- "dev": true,
- "requires": {
- "p-defer": "^1.0.0"
}
},
"map-cache": {
@@ -5739,110 +11486,113 @@
"object-visit": "^1.0.0"
}
},
- "marky": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz",
- "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==",
+ "mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
"dev": true
},
- "matchdep": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
- "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=",
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
"dev": true,
"requires": {
- "findup-sync": "^2.0.0",
- "micromatch": "^3.0.4",
- "resolve": "^1.4.0",
- "stack-trace": "0.0.10"
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
},
"dependencies": {
- "findup-sync": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
- "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"dev": true,
"requires": {
- "detect-file": "^1.0.0",
- "is-glob": "^3.1.0",
- "micromatch": "^3.0.4",
- "resolve-dir": "^1.0.1"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "is-extglob": "^2.1.0"
+ "safe-buffer": "~5.1.0"
}
}
}
},
- "math-random": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
- "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
"dev": true
},
- "mdn-data": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz",
- "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==",
- "dev": true
- },
- "mem": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz",
- "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==",
- "dev": true,
- "requires": {
- "map-age-cleaner": "^0.1.3",
- "mimic-fn": "^2.1.0",
- "p-is-promise": "^2.1.0"
- }
- },
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
"micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
"dev": true,
"requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
}
},
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ },
"mime-db": {
- "version": "1.45.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
- "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==",
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
"dev": true
},
"mime-types": {
- "version": "2.1.28",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
- "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
"dev": true,
"requires": {
- "mime-db": "1.45.0"
+ "mime-db": "1.44.0"
}
},
"mimic-fn": {
@@ -5851,10 +11601,46 @@
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
- "mimic-response": {
+ "mini-css-extract-plugin": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz",
+ "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^3.0.0",
+ "webpack-sources": "^1.1.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ }
+ }
+ },
+ "minimalistic-assert": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
"dev": true
},
"minimatch": {
@@ -5872,6 +11658,52 @@
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
+ "minipass": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+ "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "minipass-collect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "dev": true,
+ "requires": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ }
+ },
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -5900,9 +11732,9 @@
"dev": true
},
"moment": {
- "version": "2.27.0",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz",
- "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==",
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
+ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
"dev": true
},
"ms": {
@@ -5911,103 +11743,33 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
- "multimatch": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
- "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==",
+ "multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
"dev": true,
"requires": {
- "@types/minimatch": "^3.0.3",
- "array-differ": "^3.0.0",
- "array-union": "^2.1.0",
- "arrify": "^2.0.1",
- "minimatch": "^3.0.4"
- },
- "dependencies": {
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- }
+ "dns-packet": "^1.3.1",
+ "thunky": "^1.0.2"
}
},
- "mute-stdout": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
- "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==",
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
"dev": true
},
- "mv": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
- "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
- "dev": true,
- "optional": true,
- "requires": {
- "mkdirp": "~0.5.1",
- "ncp": "~2.0.0",
- "rimraf": "~2.4.0"
- },
- "dependencies": {
- "glob": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
- "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
- "dev": true,
- "optional": true,
- "requires": {
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "2 || 3",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "rimraf": {
- "version": "2.4.5",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
- "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^6.0.1"
- }
- }
- }
- },
- "mz": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dev": true,
- "requires": {
- "any-promise": "^1.0.0",
- "object-assign": "^4.0.1",
- "thenify-all": "^1.0.0"
- }
- },
"nan": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
- "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+ "version": "2.14.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
"dev": true,
"optional": true
},
"nanoid": {
- "version": "3.1.20",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
- "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==",
+ "version": "3.1.23",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
+ "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==",
"dev": true
},
"nanomatch": {
@@ -6029,44 +11791,32 @@
"to-regex": "^3.0.1"
}
},
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
"dev": true
},
- "natural-compare-lite": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
- "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=",
- "dev": true
- },
- "ncp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
- "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
- "dev": true,
- "optional": true
- },
"neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
- "next-tick": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
"no-case": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
- "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
+ "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
"dev": true,
"requires": {
- "lower-case": "^1.1.1"
+ "lower-case": "^2.0.2",
+ "tslib": "^2.0.3"
}
},
"node-forge": {
@@ -6075,95 +11825,31 @@
"integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
"dev": true
},
- "node-notifier": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz",
- "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==",
- "dev": true,
- "requires": {
- "growly": "^1.3.0",
- "is-wsl": "^2.2.0",
- "semver": "^7.3.2",
- "shellwords": "^0.1.1",
- "uuid": "^8.3.0",
- "which": "^2.0.2"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
+ "node-releases": {
+ "version": "1.1.72",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz",
+ "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==",
+ "dev": true
},
"normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
},
"normalize-url": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
- "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
- "dev": true,
- "requires": {
- "object-assign": "^4.0.1",
- "prepend-http": "^1.0.0",
- "query-string": "^4.1.0",
- "sort-keys": "^1.0.0"
- }
- },
- "now-and-later": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
- "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
- "dev": true,
- "requires": {
- "once": "^1.3.2"
- }
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
+ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
+ "dev": true
},
"npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
"dev": true,
"requires": {
- "path-key": "^3.0.0"
+ "path-key": "^2.0.0"
}
},
"nth-check": {
@@ -6175,18 +11861,6 @@
"boolbase": "~1.0.0"
}
},
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true
- },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -6225,12 +11899,12 @@
}
},
"object-is": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz",
- "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
"dev": true,
"requires": {
- "call-bind": "^1.0.0",
+ "call-bind": "^1.0.2",
"define-properties": "^1.1.3"
}
},
@@ -6249,61 +11923,6 @@
"isobject": "^3.0.0"
}
},
- "object.assign": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
- "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.0",
- "object-keys": "^1.0.11"
- }
- },
- "object.defaults": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
- "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
- "dev": true,
- "requires": {
- "array-each": "^1.0.1",
- "array-slice": "^1.0.0",
- "for-own": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "object.map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
- "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
- "dev": true,
- "requires": {
- "for-own": "^1.0.0",
- "make-iterator": "^1.0.0"
- }
- },
- "object.omit": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
- "dev": true,
- "requires": {
- "for-own": "^0.1.4",
- "is-extendable": "^0.1.1"
- },
- "dependencies": {
- "for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
- "dev": true,
- "requires": {
- "for-in": "^1.0.1"
- }
- }
- }
- },
"object.pick": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
@@ -6313,16 +11932,27 @@
"isobject": "^3.0.1"
}
},
- "object.reduce": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
- "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=",
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
"dev": true,
"requires": {
- "for-own": "^1.0.0",
- "make-iterator": "^1.0.0"
+ "ee-first": "1.1.1"
}
},
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "dev": true
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -6341,79 +11971,37 @@
"mimic-fn": "^2.1.0"
}
},
- "open": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz",
- "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==",
+ "opn": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
"dev": true,
"requires": {
- "is-docker": "^2.0.0",
- "is-wsl": "^2.1.1"
+ "is-wsl": "^1.1.0"
}
},
- "optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "original": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
"dev": true,
"requires": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
+ "url-parse": "^1.4.3"
}
},
- "ordered-read-streams": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
- "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.1"
- }
- },
- "os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "dev": true,
- "requires": {
- "lcid": "^1.0.0"
- }
- },
- "os-shim": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz",
- "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=",
- "dev": true
- },
- "p-cancelable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
- "dev": true
- },
- "p-defer": {
+ "p-finally": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
- "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
- "dev": true
- },
- "p-is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
- "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
"dev": true
},
"p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"requires": {
- "p-try": "^2.0.0"
+ "yocto-queue": "^0.1.0"
}
},
"p-locate": {
@@ -6423,6 +12011,32 @@
"dev": true,
"requires": {
"p-limit": "^2.2.0"
+ },
+ "dependencies": {
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ }
+ }
+ },
+ "p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "dev": true
+ },
+ "p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+ "dev": true,
+ "requires": {
+ "retry": "^0.12.0"
}
},
"p-try": {
@@ -6431,39 +12045,14 @@
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
- "package-json": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
- "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
- "dev": true,
- "requires": {
- "got": "^9.6.0",
- "registry-auth-token": "^4.0.0",
- "registry-url": "^5.0.0",
- "semver": "^6.2.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "dev": true
- },
"param-case": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
- "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
+ "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
"dev": true,
"requires": {
- "no-case": "^2.2.0"
+ "dot-case": "^3.0.4",
+ "tslib": "^2.0.3"
}
},
"parent-module": {
@@ -6475,74 +12064,32 @@
"callsites": "^3.0.0"
}
},
- "parse-filepath": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
- "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
- "dev": true,
- "requires": {
- "is-absolute": "^1.0.0",
- "map-cache": "^0.2.0",
- "path-root": "^0.1.1"
- }
- },
- "parse-glob": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
- "dev": true,
- "requires": {
- "glob-base": "^0.3.0",
- "is-dotfile": "^1.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.0"
- },
- "dependencies": {
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- }
- }
- },
"parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"requires": {
- "error-ex": "^1.2.0"
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
}
},
- "parse-node-version": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
- "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"dev": true
},
- "parse-passwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
- "dev": true
- },
- "parse5": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
- "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
+ "pascal-case": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
+ "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
"dev": true,
"requires": {
- "@types/node": "*"
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
}
},
"pascalcase": {
@@ -6569,10 +12116,16 @@
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
"path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true
},
"path-parse": {
@@ -6581,55 +12134,28 @@
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
- "path-root": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
- "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
- "dev": true,
- "requires": {
- "path-root-regex": "^0.1.0"
- }
- },
- "path-root-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
- "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
"dev": true
},
"path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
- "dev": true
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
},
"picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
- "dev": true,
- "optional": true
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz",
+ "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==",
+ "dev": true
},
"pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true
},
"pinkie": {
@@ -6647,26 +12173,6 @@
"pinkie": "^2.0.0"
}
},
- "pino": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/pino/-/pino-6.7.0.tgz",
- "integrity": "sha512-vPXJ4P9rWCwzlTJt+f0Ni4THc3DWyt8iDDCO4edQ8narTu6hnpzdXu8FqeSJCGndl1W6lfbYQUQihUO54y66Lw==",
- "dev": true,
- "requires": {
- "fast-redact": "^3.0.0",
- "fast-safe-stringify": "^2.0.7",
- "flatstr": "^1.0.12",
- "pino-std-serializers": "^2.4.2",
- "quick-format-unescaped": "^4.0.1",
- "sonic-boom": "^1.0.2"
- }
- },
- "pino-std-serializers": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz",
- "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==",
- "dev": true
- },
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -6676,16 +12182,41 @@
"find-up": "^4.0.0"
}
},
- "plugin-error": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
- "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
+ "portfinder": {
+ "version": "1.0.28",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
+ "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
"dev": true,
"requires": {
- "ansi-colors": "^1.0.1",
- "arr-diff": "^4.0.0",
- "arr-union": "^3.1.0",
- "extend-shallow": "^3.0.2"
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ }
}
},
"posix-character-classes": {
@@ -6695,66 +12226,380 @@
"dev": true
},
"postcss": {
- "version": "8.1.10",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.1.10.tgz",
- "integrity": "sha512-iBXEV5VTTYaRRdxiFYzTtuv2lGMQBExqkZKSzkJe+Fl6rvQrA/49UVGKqB+LG54hpW/TtDBMGds8j33GFNW7pg==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.0.tgz",
+ "integrity": "sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==",
"dev": true,
"requires": {
- "colorette": "^1.2.1",
- "nanoid": "^3.1.18",
- "source-map": "^0.6.1",
- "vfile-location": "^3.2.0"
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map-js": "^0.6.2"
+ }
+ },
+ "postcss-calc": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz",
+ "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "postcss-colormin": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.1.0.tgz",
+ "integrity": "sha512-5s+VNfQ5CsR6yvBc6Tc8NK9cxb/c8sA547zy+8ofL04gs/GygmOcVZt2s6jJn7TvntAw0Bp6MDpq4bd51EPwdw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.0",
+ "colord": "^1.7.0",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz",
+ "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz",
+ "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==",
+ "dev": true
+ },
+ "postcss-discard-duplicates": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz",
+ "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==",
+ "dev": true
+ },
+ "postcss-discard-empty": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz",
+ "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==",
+ "dev": true
+ },
+ "postcss-discard-overridden": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz",
+ "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==",
+ "dev": true
+ },
+ "postcss-merge-longhand": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz",
+ "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==",
+ "dev": true,
+ "requires": {
+ "css-color-names": "^1.0.1",
+ "postcss-value-parser": "^4.1.0",
+ "stylehacks": "^5.0.1"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.1.tgz",
+ "integrity": "sha512-UR6R5Ph0c96QB9TMBH3ml8/kvPCThPHepdhRqAbvMRDRHQACPC8iM5NpfIC03+VRMZTGXy4L/BvFzcDFCgb+fA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-utils": "^2.0.1",
+ "postcss-selector-parser": "^6.0.5",
+ "vendors": "^1.0.3"
},
"dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
+ "postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
}
}
},
- "prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true
- },
- "prepend-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
- "dev": true
- },
- "preserve": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
- "dev": true
- },
- "pretty-hrtime": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
- "dev": true
- },
- "printj": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
- "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==",
- "dev": true
- },
- "probe-image-size": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-5.0.0.tgz",
- "integrity": "sha512-V6uBYw5eBc5UVIE7MUZD6Nxg0RYuGDWLDenEn0B1WC6PcTvn1xdQ6HLDDuznefsiExC6rNrCz7mFRBo0f3Xekg==",
+ "postcss-minify-font-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz",
+ "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==",
"dev": true,
"requires": {
- "deepmerge": "^4.0.0",
- "inherits": "^2.0.3",
- "next-tick": "^1.0.0",
- "request": "^2.83.0",
- "stream-parser": "~0.3.1"
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz",
+ "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "is-color-stop": "^1.1.0",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz",
+ "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "browserslist": "^4.16.0",
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz",
+ "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "postcss-selector-parser": "^6.0.5"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ }
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
+ "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
+ "dev": true
+ },
+ "postcss-modules-local-by-default": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz",
+ "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^5.0.0",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
+ "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
+ "dev": true,
+ "requires": {
+ "postcss-selector-parser": "^6.0.4"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ }
+ }
+ },
+ "postcss-modules-values": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+ "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+ "dev": true,
+ "requires": {
+ "icss-utils": "^5.0.0"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz",
+ "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==",
+ "dev": true
+ },
+ "postcss-normalize-display-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz",
+ "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz",
+ "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz",
+ "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz",
+ "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz",
+ "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz",
+ "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.0",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.1.tgz",
+ "integrity": "sha512-hkbG0j58Z1M830/CJ73VsP7gvlG1yF+4y7Fd1w4tD2c7CaA2Psll+pQ6eQhth9y9EaqZSLzamff/D0MZBMbYSg==",
+ "dev": true,
+ "requires": {
+ "is-absolute-url": "^3.0.3",
+ "normalize-url": "^4.5.0",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz",
+ "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.1.tgz",
+ "integrity": "sha512-6mkCF5BQ25HvEcDfrMHCLLFHlraBSlOXFnQMHYhSpDO/5jSR1k8LdEXOkv+7+uzW6o6tBYea1Km0wQSRkPJkwA==",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz",
+ "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.0",
+ "caniuse-api": "^3.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz",
+ "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==",
+ "dev": true,
+ "requires": {
+ "cssnano-utils": "^2.0.1",
+ "postcss-value-parser": "^4.1.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.1.tgz",
+ "integrity": "sha512-cD7DFo6tF9i5eWvwtI4irKOHCpmASFS0xvZ5EQIgEdA1AWfM/XiHHY/iss0gcKHhkqwgYmuo2M0KhJLd5Us6mg==",
+ "dev": true,
+ "requires": {
+ "postcss-value-parser": "^4.1.0",
+ "svgo": "^2.3.0"
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz",
+ "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==",
+ "dev": true,
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "postcss-selector-parser": "^6.0.5",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "dev": true,
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ }
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
+ "dev": true
+ },
+ "pretty-error": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
+ "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.20",
+ "renderkid": "^2.0.4"
}
},
"process-nextick-args": {
@@ -6763,179 +12608,112 @@
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
"dev": true
},
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "proxy-addr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+ "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "dev": true,
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
"dev": true
},
"pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
- "pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- }
- },
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
- "pupa": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
- "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
- "dev": true,
- "requires": {
- "escape-goat": "^2.0.0"
- }
- },
"qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
"dev": true
},
- "query-string": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
- "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
- "dev": true,
- "requires": {
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
- }
- },
- "quick-format-unescaped": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz",
- "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==",
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
"dev": true
},
- "randomatic": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
- "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+ "querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "dev": true
+ },
+ "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
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"requires": {
- "is-number": "^4.0.0",
- "kind-of": "^6.0.0",
- "math-random": "^1.0.1"
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
},
"dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
"dev": true
}
}
},
- "rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dev": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "dev": true
- }
- }
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "dev": true,
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "dev": true,
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- }
- }
- },
"readable-stream": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"dev": true,
"requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "readdir-glob": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz",
- "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==",
- "dev": true,
- "requires": {
- "minimatch": "^3.0.4"
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
}
},
"readdirp": {
@@ -6947,30 +12725,150 @@
"graceful-fs": "^4.1.11",
"micromatch": "^3.1.10",
"readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ }
}
},
"rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz",
+ "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==",
"dev": true,
"requires": {
- "resolve": "^1.1.6"
- }
- },
- "regenerator-runtime": {
- "version": "0.13.7",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
- "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
- "dev": true
- },
- "regex-cache": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
- "dev": true,
- "requires": {
- "is-equal-shallow": "^0.1.3"
+ "resolve": "^1.9.0"
}
},
"regex-not": {
@@ -6993,129 +12891,35 @@
"define-properties": "^1.1.3"
}
},
- "regexpp": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
- "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
- "dev": true
- },
- "registry-auth-token": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz",
- "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==",
- "dev": true,
- "requires": {
- "rc": "^1.2.8"
- }
- },
- "registry-url": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
- "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
- "dev": true,
- "requires": {
- "rc": "^1.2.8"
- }
- },
"relateurl": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
"integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
"dev": true
},
- "relaxed-json": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.3.tgz",
- "integrity": "sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "commander": "^2.6.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "remove-bom-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
- "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5",
- "is-utf8": "^0.2.1"
- }
- },
- "remove-bom-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
- "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=",
- "dev": true,
- "requires": {
- "remove-bom-buffer": "^3.0.0",
- "safe-buffer": "^5.1.0",
- "through2": "^2.0.3"
- }
- },
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
"dev": true
},
+ "renderkid": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz",
+ "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==",
+ "dev": true,
+ "requires": {
+ "css-select": "^2.0.2",
+ "dom-converter": "^0.2",
+ "htmlparser2": "^3.10.1",
+ "lodash": "^4.17.20",
+ "strip-ansi": "^3.0.0"
+ }
+ },
"repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
"dev": true
},
"repeat-string": {
@@ -7124,62 +12928,6 @@
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
"dev": true
},
- "replace-ext": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
- "dev": true
- },
- "replace-homedir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
- "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1",
- "is-absolute": "^1.0.0",
- "remove-trailing-separator": "^1.1.0"
- }
- },
- "replacestream": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz",
- "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.3",
- "object-assign": "^4.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- }
- },
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -7187,87 +12935,101 @@
"dev": true
},
"require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
"dev": true
},
"resolve": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
- "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"dev": true,
"requires": {
+ "is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
}
},
- "resolve-dir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
- "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
"dev": true,
"requires": {
- "expand-tilde": "^2.0.0",
- "global-modules": "^1.0.0"
+ "resolve-from": "^3.0.0"
}
},
"resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
"dev": true
},
- "resolve-options": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
- "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=",
- "dev": true,
- "requires": {
- "value-or-function": "^3.0.0"
- }
- },
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
"dev": true
},
- "responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "dev": true,
- "requires": {
- "lowercase-keys": "^1.0.0"
- }
- },
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"dev": true
},
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+ "dev": true
+ },
+ "rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+ "dev": true
+ },
"rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
},
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "safe-json-stringify": {
+ "run-parallel": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
- "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
- "optional": true
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "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
},
"safe-regex": {
"version": "1.1.0",
@@ -7284,42 +13046,167 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
- "sax": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "semver-diff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
- "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
+ "schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
"dev": true,
"requires": {
- "semver": "^6.3.0"
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
},
"dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ }
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selfsigned": {
+ "version": "1.10.11",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz",
+ "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==",
+ "dev": true,
+ "requires": {
+ "node-forge": "^0.10.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
}
}
},
- "semver-greatest-satisfied-range": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz",
- "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=",
+ "serialize-javascript": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+ "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
"dev": true,
"requires": {
- "sver-compat": "^1.5.0"
+ "randombytes": "^2.1.0"
+ }
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
}
},
"set-blocking": {
@@ -7351,75 +13238,36 @@
}
}
},
- "sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "shallow-clone": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
+ "kind-of": "^6.0.2"
}
},
"shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": {
- "shebang-regex": "^3.0.0"
+ "shebang-regex": "^1.0.0"
}
},
"shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
- "shell-quote": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
- "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
- "dev": true,
- "requires": {
- "array-filter": "~0.0.0",
- "array-map": "~0.0.0",
- "array-reduce": "~0.0.0",
- "jsonify": "~0.0.0"
- }
- },
- "shellwords": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
- "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
- "dev": true
- },
- "sign-addon": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-3.1.0.tgz",
- "integrity": "sha512-zZ7nKc5/3QWM3skYBosGDvYQf2jkKhW2u8BELrZoN1wgCSOnwsV9T47Vx9uaNbA3CyZ+V9XSA0tDVHoV1QfVPw==",
- "dev": true,
- "requires": {
- "common-tags": "1.8.0",
- "core-js": "3.6.5",
- "deepcopy": "2.1.0",
- "es6-error": "4.1.1",
- "es6-promisify": "6.1.1",
- "jsonwebtoken": "8.5.1",
- "mz": "2.7.0",
- "request": "2.88.2",
- "source-map-support": "0.5.19",
- "stream-to-promise": "3.0.0"
- },
- "dependencies": {
- "core-js": {
- "version": "3.6.5",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
- "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==",
- "dev": true
- }
- }
- },
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
@@ -7427,54 +13275,11 @@
"dev": true
},
"slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
- "slice-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
- "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "astral-regex": "^1.0.0",
- "is-fullwidth-code-point": "^2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- }
- }
- },
"snapdragon": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@@ -7491,6 +13296,15 @@
"use": "^3.1.0"
},
"dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
@@ -7508,6 +13322,12 @@
"requires": {
"is-extendable": "^0.1.0"
}
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
}
}
},
@@ -7582,38 +13402,79 @@
}
}
},
- "sonic-boom": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.0.tgz",
- "integrity": "sha512-4nX6OYvOYr6R76xfQKi6cZpTO3YSWe/vd+QdIfoH0lBy0MnPkeAbb2rRWgmgADkXUeCKPwO1FZAKlAVWAadELw==",
+ "sockjs": {
+ "version": "0.3.21",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz",
+ "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==",
"dev": true,
"requires": {
- "atomic-sleep": "^1.0.0",
- "flatstr": "^1.0.12"
+ "faye-websocket": "^0.11.3",
+ "uuid": "^3.4.0",
+ "websocket-driver": "^0.7.4"
}
},
- "sort-keys": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
- "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "sockjs-client": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz",
+ "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==",
"dev": true,
"requires": {
- "is-plain-obj": "^1.0.0"
+ "debug": "^3.2.6",
+ "eventsource": "^1.0.7",
+ "faye-websocket": "^0.11.3",
+ "inherits": "^2.0.4",
+ "json3": "^3.3.3",
+ "url-parse": "^1.5.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ }
}
},
+ "sortablejs": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.13.0.tgz",
+ "integrity": "sha512-RBJirPY0spWCrU5yCmWM1eFs/XgX2J5c6b275/YyxFRgnzPhKl/TDeU2hNR8Dt7ITq66NRPM4UlOt+e5O4CFHg==",
+ "dev": true
+ },
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+ "dev": true
+ },
"source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-js": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+ "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
"dev": true
},
"source-map-resolve": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
- "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
"dev": true,
"requires": {
- "atob": "^2.1.1",
+ "atob": "^2.1.2",
"decode-uri-component": "^0.2.0",
"resolve-url": "^0.2.1",
"source-map-url": "^0.4.0",
@@ -7628,77 +13489,39 @@
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
}
},
"source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
"dev": true
},
- "sparkles": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
- "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
- "dev": true
- },
- "spawn-sync": {
- "version": "1.0.15",
- "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz",
- "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=",
+ "spdy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
+ "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
"dev": true,
"requires": {
- "concat-stream": "^1.4.7",
- "os-shim": "^0.1.2"
+ "debug": "^4.1.0",
+ "handle-thing": "^2.0.0",
+ "http-deceiver": "^1.2.7",
+ "select-hose": "^2.0.0",
+ "spdy-transport": "^3.0.0"
}
},
- "spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "spdy-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
"dev": true,
"requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
- "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
- "dev": true
- },
- "split": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
- "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
- "dev": true,
- "requires": {
- "through": "2"
+ "debug": "^4.1.0",
+ "detect-node": "^2.0.4",
+ "hpack.js": "^2.1.6",
+ "obuf": "^1.1.2",
+ "readable-stream": "^3.0.6",
+ "wbuf": "^1.7.3"
}
},
"split-string": {
@@ -7710,33 +13533,19 @@
"extend-shallow": "^3.0.0"
}
},
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "ssri": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
"dev": true,
"requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
+ "minipass": "^3.1.1"
}
},
- "stack-trace": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
"dev": true
},
"static-extend": {
@@ -7760,188 +13569,30 @@
}
}
},
- "stream-exhaust": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
- "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==",
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
"dev": true
},
- "stream-parser": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
- "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=",
- "dev": true,
- "requires": {
- "debug": "2"
- }
- },
- "stream-shift": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
- "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
- "dev": true
- },
- "stream-to-array": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
- "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=",
- "dev": true,
- "requires": {
- "any-promise": "^1.1.0"
- }
- },
- "stream-to-promise": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-3.0.0.tgz",
- "integrity": "sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==",
- "dev": true,
- "requires": {
- "any-promise": "~1.3.0",
- "end-of-stream": "~1.4.1",
- "stream-to-array": "~2.3.0"
- }
- },
- "streamfilter": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-3.0.0.tgz",
- "integrity": "sha512-kvKNfXCmUyC8lAXSSHCIXBUlo/lhsLcCU/OmzACZYpRUdtKIH68xYhm/+HI15jFJYtNJGYtCgn2wmIiExY1VwA==",
- "dev": true,
- "requires": {
- "readable-stream": "^3.0.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
- "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
- }
- },
- "strict-uri-encode": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
- "dev": true
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
"string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "~5.2.0"
}
},
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "dev": true,
- "requires": {
- "is-utf8": "^0.2.0"
- }
- },
- "strip-bom-buf": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz",
- "integrity": "sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==",
- "dev": true,
- "requires": {
- "is-utf8": "^0.2.1"
- }
- },
- "strip-bom-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz",
- "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=",
- "dev": true,
- "requires": {
- "first-chunk-stream": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "strip-outer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
- "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.2"
- }
- },
- "strip-url-auth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-url-auth/-/strip-url-auth-1.0.1.tgz",
- "integrity": "sha1-IrD6OkE4WzO+PzMVUbu4N/oM164=",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "sver-compat": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz",
- "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=",
- "dev": true,
- "requires": {
- "es6-iterator": "^2.0.1",
- "es6-symbol": "^3.1.1"
- }
- },
- "table": {
- "version": "5.4.6",
- "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
- "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
- "dev": true,
- "requires": {
- "ajv": "^6.10.2",
- "lodash": "^4.17.14",
- "slice-ansi": "^2.1.0",
- "string-width": "^3.0.0"
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
},
"dependencies": {
"ansi-regex": {
@@ -7950,29 +13601,6 @@
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -7984,148 +13612,296 @@
}
}
},
- "tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
+ "style-loader": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz",
+ "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==",
+ "dev": true,
+ "requires": {
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^3.0.0"
+ }
+ },
+ "stylehacks": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz",
+ "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.16.0",
+ "postcss-selector-parser": "^6.0.4"
},
"dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
"dev": true,
"requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
}
}
}
},
- "term-size": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
- "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
- "dev": true
- },
- "terser": {
- "version": "3.17.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz",
- "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==",
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"dev": true,
"requires": {
- "commander": "^2.19.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.10"
+ "has-flag": "^3.0.0"
+ }
+ },
+ "svgo": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz",
+ "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==",
+ "dev": true,
+ "requires": {
+ "@trysound/sax": "0.1.1",
+ "chalk": "^4.1.0",
+ "commander": "^7.1.0",
+ "css-select": "^3.1.2",
+ "css-tree": "^1.1.2",
+ "csso": "^4.2.0",
+ "stable": "^0.1.8"
},
"dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+ "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "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
+ },
+ "css-select": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz",
+ "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^4.0.0",
+ "domhandler": "^4.0.0",
+ "domutils": "^2.4.3",
+ "nth-check": "^2.0.0"
+ }
+ },
+ "css-what": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz",
+ "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==",
+ "dev": true
+ },
+ "dom-serializer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
+ "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz",
+ "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^2.2.0"
+ }
+ },
+ "domutils": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz",
+ "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ }
+ },
+ "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
+ },
+ "nth-check": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
+ "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==",
+ "dev": true,
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "tapable": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
+ "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
+ "dev": true
+ },
+ "tar": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz",
+ "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==",
+ "dev": true,
+ "requires": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^3.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ }
+ },
+ "terser": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
+ "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
+ "dev": true,
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ },
+ "dependencies": {
+ "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
}
}
},
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "textextensions": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.5.0.tgz",
- "integrity": "sha512-1IkVr355eHcomgK7fgj1Xsokturx6L5S2JRT5WcRdA6v5shk9sxWuO/w/VbpQexwkXJMQIa/j1dBi3oo7+HhcA==",
- "dev": true
- },
- "thenify": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
- "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "terser-webpack-plugin": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz",
+ "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==",
"dev": true,
"requires": {
- "any-promise": "^1.0.0"
- }
- },
- "thenify-all": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
- "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
- "dev": true,
- "requires": {
- "thenify": ">= 3.1.0 < 4"
- }
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "through2-filter": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
- "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
- "dev": true,
- "requires": {
- "through2": "~2.0.0",
- "xtend": "~4.0.0"
- }
- },
- "time-stamp": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
- "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
- "dev": true
- },
- "tmp": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
- "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
- "dev": true,
- "requires": {
- "rimraf": "^3.0.0"
+ "jest-worker": "^26.6.2",
+ "p-limit": "^3.1.0",
+ "schema-utils": "^3.0.0",
+ "serialize-javascript": "^5.0.1",
+ "source-map": "^0.6.1",
+ "terser": "^5.7.0"
},
"dependencies": {
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "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
+ },
+ "terser": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz",
+ "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==",
"dev": true,
"requires": {
- "glob": "^7.1.3"
+ "commander": "^2.20.0",
+ "source-map": "~0.7.2",
+ "source-map-support": "~0.5.19"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "dev": true
+ }
}
}
}
},
- "to-absolute-glob": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
- "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=",
- "dev": true,
- "requires": {
- "is-absolute": "^1.0.0",
- "is-negated-glob": "^1.0.0"
- }
+ "thunky": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+ "dev": true
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+ "dev": true
},
"to-object-path": {
"version": "0.3.0",
@@ -8147,12 +13923,6 @@
}
}
},
- "to-readable-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
- "dev": true
- },
"to-regex": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
@@ -8166,180 +13936,36 @@
}
},
"to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
+ "is-number": "^7.0.0"
}
},
- "to-through": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
- "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=",
- "dev": true,
- "requires": {
- "through2": "^2.0.3"
- }
- },
- "tosource": {
+ "toidentifier": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz",
- "integrity": "sha1-QtiN0RZhi88A1hBt1URvNCeQL/E=",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
"dev": true
},
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "tslib": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"dev": true,
"requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
}
},
- "tr46": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz",
- "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.1"
- }
- },
- "traverse": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.4.6.tgz",
- "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=",
- "dev": true
- },
- "trim-repeated": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
- "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.2"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true
- },
- "type": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz",
- "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==",
- "dev": true
- },
- "type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
- },
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "uglify-js": {
- "version": "3.4.10",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
- "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
- "dev": true,
- "requires": {
- "commander": "~2.19.0",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "commander": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
- "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "uglifycss": {
- "version": "0.0.25",
- "resolved": "https://registry.npmjs.org/uglifycss/-/uglifycss-0.0.25.tgz",
- "integrity": "sha1-vqcr9JeerO8TowLPR7LRrz80QZc=",
- "dev": true
- },
- "unc-path-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
- "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
- "dev": true
- },
- "undertaker": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz",
- "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1",
- "arr-map": "^2.0.0",
- "bach": "^1.0.0",
- "collection-map": "^1.0.0",
- "es6-weak-map": "^2.0.1",
- "last-run": "^1.1.0",
- "object.defaults": "^1.0.0",
- "object.reduce": "^1.0.0",
- "undertaker-registry": "^1.0.0"
- }
- },
- "undertaker-registry": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz",
- "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=",
- "dev": true
- },
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -8352,29 +13978,40 @@
"set-value": "^2.0.1"
}
},
- "unique-stream": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
- "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
- "dev": true,
- "requires": {
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "through2-filter": "^3.0.0"
- }
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
},
- "unique-string": {
+ "uniqs": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+ "dev": true
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
"dev": true,
"requires": {
- "crypto-random-string": "^2.0.0"
+ "unique-slug": "^2.0.0"
}
},
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
"dev": true
},
"unset-value": {
@@ -8418,54 +14055,15 @@
}
},
"upath": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
- "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
- "dev": true
- },
- "update-notifier": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz",
- "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==",
- "dev": true,
- "requires": {
- "boxen": "^4.2.0",
- "chalk": "^4.1.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.3.1",
- "is-npm": "^5.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.0.0",
- "pupa": "^2.0.1",
- "semver": "^7.3.2",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "upper-case": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
- "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
"dev": true
},
"uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
+ "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
"dev": true,
"requires": {
"punycode": "^2.1.0"
@@ -8477,23 +14075,34 @@
"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
"dev": true
},
- "url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
"dev": true,
"requires": {
- "prepend-http": "^2.0.0"
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
},
"dependencies": {
- "prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
"dev": true
}
}
},
+ "url-parse": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz",
+ "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==",
+ "dev": true,
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -8506,6 +14115,18 @@
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
+ "utila": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
@@ -8513,546 +14134,40 @@
"dev": true
},
"v8-compile-cache": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
- "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
"dev": true
},
- "v8flags": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
- "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1"
- }
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "value-or-function": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
- "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=",
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
"dev": true
},
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "vfile-location": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz",
- "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==",
+ "vendors": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
+ "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
"dev": true
},
- "vinyl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
- "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
- "dev": true,
- "requires": {
- "clone": "^2.1.1",
- "clone-buffer": "^1.0.0",
- "clone-stats": "^1.0.0",
- "cloneable-readable": "^1.0.0",
- "remove-trailing-separator": "^1.0.1",
- "replace-ext": "^1.0.0"
- }
- },
- "vinyl-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz",
- "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.3.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0",
- "strip-bom-stream": "^2.0.0",
- "vinyl": "^1.1.0"
- },
- "dependencies": {
- "clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
- "dev": true
- },
- "clone-stats": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
- "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
- "dev": true
- },
- "replace-ext": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
- "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
- "dev": true
- },
- "vinyl": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
- "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
- "dev": true,
- "requires": {
- "clone": "^1.0.0",
- "clone-stats": "^0.0.1",
- "replace-ext": "0.0.1"
- }
- }
- }
- },
- "vinyl-fs": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
- "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
- "dev": true,
- "requires": {
- "fs-mkdirp-stream": "^1.0.0",
- "glob-stream": "^6.1.0",
- "graceful-fs": "^4.0.0",
- "is-valid-glob": "^1.0.0",
- "lazystream": "^1.0.0",
- "lead": "^1.0.0",
- "object.assign": "^4.0.4",
- "pumpify": "^1.3.5",
- "readable-stream": "^2.3.3",
- "remove-bom-buffer": "^3.0.0",
- "remove-bom-stream": "^1.2.0",
- "resolve-options": "^1.1.0",
- "through2": "^2.0.0",
- "to-through": "^2.0.0",
- "value-or-function": "^3.0.0",
- "vinyl": "^2.0.0",
- "vinyl-sourcemap": "^1.1.0"
- }
- },
- "vinyl-sourcemap": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
- "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=",
- "dev": true,
- "requires": {
- "append-buffer": "^1.0.2",
- "convert-source-map": "^1.5.0",
- "graceful-fs": "^4.1.6",
- "normalize-path": "^2.1.1",
- "now-and-later": "^2.0.0",
- "remove-bom-buffer": "^3.0.0",
- "vinyl": "^2.0.0"
- }
- },
- "vinyl-sourcemaps-apply": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
- "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
- "dev": true,
- "requires": {
- "source-map": "^0.5.1"
- }
- },
"watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz",
+ "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==",
"dev": true,
"requires": {
- "chokidar": "^3.4.1",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0",
- "watchpack-chokidar2": "^2.0.1"
- },
- "dependencies": {
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "dev": true,
- "optional": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "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,
- "optional": true
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "optional": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "chokidar": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
- "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
- "dev": true,
- "optional": true,
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "fsevents": "~2.3.1",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.5.0"
- }
- },
- "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,
- "optional": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "fsevents": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz",
- "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==",
- "dev": true,
- "optional": true
- },
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "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,
- "optional": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "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,
- "optional": true
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "optional": true
- },
- "readdirp": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
- "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "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,
- "optional": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- }
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
}
},
- "watchpack-chokidar2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
- "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
- "dev": true,
- "optional": true,
- "requires": {
- "chokidar": "^2.1.8"
- }
- },
- "wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "wbuf": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
"dev": true,
"requires": {
- "defaults": "^1.0.3"
- }
- },
- "web-ext": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-5.5.0.tgz",
- "integrity": "sha512-f+NHiYwbTS0X6eSLkBDWoCYkkIJweVazGf4MD8S+kRX/5z40WsYsnRdVWG+p34Z6rCyNvlHHrnO2S1W8WWg7Tw==",
- "dev": true,
- "requires": {
- "@babel/polyfill": "7.12.1",
- "@babel/runtime": "7.12.5",
- "@cliqz-oss/firefox-client": "0.3.1",
- "@cliqz-oss/node-firefox-connect": "1.2.1",
- "@devicefarmer/adbkit": "2.11.3",
- "addons-linter": "2.13.1",
- "bunyan": "1.8.14",
- "camelcase": "6.0.0",
- "chrome-launcher": "0.13.4",
- "debounce": "1.2.0",
- "decamelize": "4.0.0",
- "es6-error": "4.1.1",
- "event-to-promise": "0.8.0",
- "firefox-profile": "4.0.0",
- "fs-extra": "9.0.1",
- "fx-runner": "1.0.13",
- "import-fresh": "3.3.0",
- "mkdirp": "1.0.4",
- "multimatch": "4.0.0",
- "mz": "2.7.0",
- "node-notifier": "8.0.1",
- "open": "7.3.0",
- "parse-json": "5.0.1",
- "sign-addon": "3.1.0",
- "source-map-support": "0.5.19",
- "strip-bom": "4.0.0",
- "strip-json-comments": "3.1.1",
- "tmp": "0.2.1",
- "update-notifier": "5.0.0",
- "watchpack": "1.7.5",
- "ws": "7.4.2",
- "yargs": "15.4.1",
- "zip-dir": "1.0.2"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "camelcase": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz",
- "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==",
- "dev": true
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- },
- "fs-extra": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
- "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
- "dev": true,
- "requires": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^1.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- },
- "dependencies": {
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true
- }
- }
- },
- "parse-json": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz",
- "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1",
- "lines-and-columns": "^1.1.6"
- }
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
- },
- "universalify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
- "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
- "dev": true
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
- "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
- "dev": true
- },
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "dependencies": {
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- }
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- }
- }
- }
+ "minimalistic-assert": "^1.0.0"
}
},
"webfontloader": {
@@ -9061,27 +14176,311 @@
"integrity": "sha1-23hhKSU8tujq5UwvsF+HCvZnW64=",
"dev": true
},
- "webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true
- },
- "whatwg-url": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz",
- "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==",
+ "webpack": {
+ "version": "5.37.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.37.1.tgz",
+ "integrity": "sha512-btZjGy/hSjCAAVHw+cKG+L0M+rstlyxbO2C+BOTaQ5/XAnxkDrP5sVbqWhXgo4pL3X2dcOib6rqCP20Zr9PLow==",
"dev": true,
"requires": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^2.0.2",
- "webidl-conversions": "^6.1.0"
+ "@types/eslint-scope": "^3.7.0",
+ "@types/estree": "^0.0.47",
+ "@webassemblyjs/ast": "1.11.0",
+ "@webassemblyjs/wasm-edit": "1.11.0",
+ "@webassemblyjs/wasm-parser": "1.11.0",
+ "acorn": "^8.2.1",
+ "browserslist": "^4.14.5",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.8.0",
+ "es-module-lexer": "^0.4.0",
+ "eslint-scope": "^5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.4",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.0.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.1.1",
+ "watchpack": "^2.0.0",
+ "webpack-sources": "^2.1.1"
+ },
+ "dependencies": {
+ "webpack-sources": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz",
+ "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==",
+ "dev": true,
+ "requires": {
+ "source-list-map": "^2.0.1",
+ "source-map": "^0.6.1"
+ }
+ }
}
},
- "when": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz",
- "integrity": "sha1-q6A/w7tzbWyIsJHQE9io5ZDYRxg=",
+ "webpack-cli": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz",
+ "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==",
+ "dev": true,
+ "requires": {
+ "@discoveryjs/json-ext": "^0.5.0",
+ "@webpack-cli/configtest": "^1.0.3",
+ "@webpack-cli/info": "^1.2.4",
+ "@webpack-cli/serve": "^1.4.0",
+ "colorette": "^1.2.1",
+ "commander": "^7.0.0",
+ "execa": "^5.0.0",
+ "fastest-levenshtein": "^1.0.12",
+ "import-local": "^3.0.2",
+ "interpret": "^2.2.0",
+ "rechoir": "^0.7.0",
+ "v8-compile-cache": "^2.2.0",
+ "webpack-merge": "^5.7.3"
+ },
+ "dependencies": {
+ "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
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "execa": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz",
+ "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
+ },
+ "import-local": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
+ "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+ "dev": true,
+ "requires": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ }
+ },
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.0.0"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^5.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
+ "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==",
+ "dev": true,
+ "requires": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.4.4",
+ "mkdirp": "^0.5.1",
+ "range-parser": "^1.2.1",
+ "webpack-log": "^2.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
+ "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ }
+ }
+ },
+ "webpack-dev-server": {
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz",
+ "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==",
+ "dev": true,
+ "requires": {
+ "ansi-html": "0.0.7",
+ "bonjour": "^3.5.0",
+ "chokidar": "^2.1.8",
+ "compression": "^1.7.4",
+ "connect-history-api-fallback": "^1.6.0",
+ "debug": "^4.1.1",
+ "del": "^4.1.1",
+ "express": "^4.17.1",
+ "html-entities": "^1.3.1",
+ "http-proxy-middleware": "0.19.1",
+ "import-local": "^2.0.0",
+ "internal-ip": "^4.3.0",
+ "ip": "^1.1.5",
+ "is-absolute-url": "^3.0.3",
+ "killable": "^1.0.1",
+ "loglevel": "^1.6.8",
+ "opn": "^5.5.0",
+ "p-retry": "^3.0.1",
+ "portfinder": "^1.0.26",
+ "schema-utils": "^1.0.0",
+ "selfsigned": "^1.10.8",
+ "semver": "^6.3.0",
+ "serve-index": "^1.9.1",
+ "sockjs": "^0.3.21",
+ "sockjs-client": "^1.5.0",
+ "spdy": "^4.0.2",
+ "strip-ansi": "^3.0.1",
+ "supports-color": "^6.1.0",
+ "url": "^0.11.0",
+ "webpack-dev-middleware": "^3.7.2",
+ "webpack-log": "^2.0.0",
+ "ws": "^6.2.1",
+ "yargs": "^13.3.2"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "webpack-merge": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz",
+ "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==",
+ "dev": true,
+ "requires": {
+ "clone-deep": "^4.0.1",
+ "wildcard": "^2.0.0"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "dev": true,
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
+ "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
+ "dev": true,
+ "requires": {
+ "http-parser-js": ">=0.5.1",
+ "safe-buffer": ">=5.1.0",
+ "websocket-extensions": ">=0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
+ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
"dev": true
},
"which": {
@@ -9094,74 +14493,43 @@
}
},
"which-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
- "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
- "widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dev": true,
- "requires": {
- "string-width": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
- "winreg": {
- "version": "0.0.12",
- "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz",
- "integrity": "sha1-BxBVVLoanQiXklHRKUdb/64wBrc=",
- "dev": true
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "wildcard": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
+ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
"dev": true
},
"wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
"dev": true,
"requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
}
},
"wrappy": {
@@ -9170,76 +14538,19 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
- "write": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
- "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
- "dev": true,
- "requires": {
- "mkdirp": "^0.5.1"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- }
- }
- },
- "write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
"ws": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz",
- "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==",
- "dev": true
- },
- "xdg-basedir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
- "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
- "dev": true
- },
- "xml2js": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
- "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+ "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
"dev": true,
"requires": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~11.0.0"
+ "async-limiter": "~1.0.0"
}
},
- "xmlbuilder": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
- "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
- "dev": true
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
- },
"y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
"dev": true
},
"yallist": {
@@ -9248,87 +14559,107 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true
+ },
"yargs": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz",
- "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==",
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
"dev": true,
"requires": {
- "camelcase": "^3.0.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
+ "require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
- "string-width": "^1.0.2",
- "which-module": "^1.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "5.0.0-security.0"
- }
- },
- "yargs-parser": {
- "version": "5.0.0-security.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz",
- "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0",
- "object.assign": "^4.1.0"
- }
- },
- "yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
- "dev": true,
- "requires": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- },
- "zip-dir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-1.0.2.tgz",
- "integrity": "sha1-JT+QeurWKiGs2HIdi4gDKyQRwFE=",
- "dev": true,
- "requires": {
- "async": "^1.5.2",
- "jszip": "^2.4.0"
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
},
"dependencies": {
- "async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
}
}
},
- "zip-stream": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.4.tgz",
- "integrity": "sha512-a65wQ3h5gcQ/nQGWV1mSZCEzCML6EK/vyVPcrPNynySP1j3VBbQKh3nhC8CbORb+jfl2vXvh56Ul5odP1bAHqw==",
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"dev": true,
"requires": {
- "archiver-utils": "^2.1.0",
- "compress-commons": "^4.0.2",
- "readable-stream": "^3.6.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "yazl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
+ "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "~0.2.3"
+ }
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ },
+ "zip-webpack-plugin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/zip-webpack-plugin/-/zip-webpack-plugin-4.0.1.tgz",
+ "integrity": "sha512-G041Q4qUaog44Ynit6gs4o+o3JIv0WWfOLvc8Q3IxvPfuqd2KBHhpJWAXUB9Cm1JcWHTIOp9vS3oGMWa1p1Ehw==",
+ "dev": true,
+ "requires": {
+ "yazl": "^2.5.1"
}
}
}
diff --git a/package.json b/package.json
index 76161404..a7977e58 100644
--- a/package.json
+++ b/package.json
@@ -1,61 +1,29 @@
{
"name": "nightTab",
- "version": "6.6.0",
- "description": "A neutral new tab page accented with a chosen colour. Customise the layout, style, background and bookmarks in nightTab.",
+ "version": "7.0.0",
+ "description": "",
"main": "index.js",
"scripts": {
- "test": "echo \"Error: no test specified\" && exit 1",
- "dev": "npm run clean-dev; gulp dev",
- "build": "npm run clean-build; npm run build-web; npm run build-extension",
- "build-web": "gulp build",
- "build-extension": "web-ext build -s build/web -a build/extension",
- "lint": "npm run lint-extension",
- "lint-extension": "web-ext lint -s build/web",
- "clean": "npm run clean-dev; npm run clean-build",
- "clean-dev": "rm -rf dev",
- "clean-build": "rm -rf build",
- "deploy-gh-pages": "npm run clean-build; gulp build; gh-pages -d build/web"
+ "start": "webpack serve --mode=development",
+ "build": "webpack --mode=production"
},
- "repository": {
- "type": "git",
- "url": "git+https://github.com/zombieFox/nightTab.git"
- },
- "keywords": [
- "startpage",
- "start-page",
- "newtabpage",
- "new-tab-page",
- "tab",
- "chrome-extension",
- "extension",
- "bookmarks",
- "links"
- ],
- "author": "zombieFox",
+ "keywords": [],
+ "author": "",
"license": "GPL-3",
- "bugs": {
- "url": "https://github.com/zombieFox/nightTab/issues"
- },
- "homepage": "https://github.com/zombieFox/nightTab#readme",
"devDependencies": {
- "@fortawesome/fontawesome-free": "^5.14.0",
- "gh-pages": "^3.1.0",
- "gulp": "^4.0.2",
- "gulp-cli": "^2.3.0",
- "gulp-concat": "^2.6.1",
- "gulp-csso": "^4.0.1",
- "gulp-file-include": "^2.2.2",
- "gulp-filter": "^6.0.0",
- "gulp-htmlmin": "^5.0.1",
- "gulp-minify-inline": "^1.1.0",
- "gulp-replace": "^1.0.0",
- "gulp-uglify": "^3.0.2",
- "gulp-uglifycss": "^1.1.0",
- "gulp-watch": "^5.0.1",
- "html5sortable": "^0.9.18",
- "moment": "^2.27.0",
- "web-ext": "^5.5.0",
- "webfontloader": "^1.6.28"
- },
- "dependencies": {}
+ "copy-webpack-plugin": "^6.4.1",
+ "css-loader": "^5.2.5",
+ "css-minimizer-webpack-plugin": "^3.0.0",
+ "file-loader": "^6.2.0",
+ "html-webpack-plugin": "^5.3.1",
+ "mini-css-extract-plugin": "^1.6.0",
+ "moment": "^2.29.1",
+ "sortablejs": "^1.13.0",
+ "style-loader": "^2.0.0",
+ "webfontloader": "^1.6.28",
+ "webpack": "^5.37.1",
+ "webpack-cli": "^4.7.0",
+ "webpack-dev-server": "^3.11.2",
+ "zip-webpack-plugin": "^4.0.1"
+ }
}
diff --git a/src/component/accentPreset/index.js b/src/component/accentPreset/index.js
new file mode 100644
index 00000000..8e263cfe
--- /dev/null
+++ b/src/component/accentPreset/index.js
@@ -0,0 +1,99 @@
+const accentPreset = {};
+
+accentPreset.get = () => {
+ return [
+ { name: 'Grey', prefix: 'Super extra light', type: 'grey', hsl: { h: 0, s: 0, l: 90 } },
+ { name: 'Grey', prefix: 'Extra light', type: 'grey', hsl: { h: 0, s: 0, l: 77 } },
+ { name: 'Grey', prefix: 'Light', type: 'grey', hsl: { h: 0, s: 0, l: 63 } },
+ { name: 'Grey', prefix: false, type: 'grey', hsl: { h: 0, s: 0, l: 50 } },
+ { name: 'Grey', prefix: 'Dark', type: 'grey', hsl: { h: 0, s: 0, l: 37 } },
+ { name: 'Grey', prefix: 'Extra dark', type: 'grey', hsl: { h: 0, s: 0, l: 23 } },
+ { name: 'Grey', prefix: 'Super extra dark', type: 'grey', hsl: { h: 0, s: 0, l: 10 } },
+ { name: 'Red', prefix: 'Super extra light', type: 'primary', hsl: { h: 0, s: 40, l: 90 } },
+ { name: 'Red', prefix: 'Extra light', type: 'primary', hsl: { h: 0, s: 60, l: 77 } },
+ { name: 'Red', prefix: 'Light', type: 'primary', hsl: { h: 0, s: 80, l: 63 } },
+ { name: 'Red', prefix: false, type: 'primary', hsl: { h: 0, s: 100, l: 50 } },
+ { name: 'Red', prefix: 'Dark', type: 'primary', hsl: { h: 0, s: 80, l: 37 } },
+ { name: 'Red', prefix: 'Extra dark', type: 'primary', hsl: { h: 0, s: 60, l: 23 } },
+ { name: 'Red', prefix: 'Super extra dark', type: 'primary', hsl: { h: 0, s: 40, l: 10 } },
+ { name: 'Orange', prefix: 'Super extra light', type: 'secondary', hsl: { h: 30, s: 40, l: 90 } },
+ { name: 'Orange', prefix: 'Extra light', type: 'secondary', hsl: { h: 30, s: 60, l: 77 } },
+ { name: 'Orange', prefix: 'Light', type: 'secondary', hsl: { h: 30, s: 80, l: 63 } },
+ { name: 'Orange', prefix: false, type: 'secondary', hsl: { h: 30, s: 100, l: 50 } },
+ { name: 'Orange', prefix: 'Dark', type: 'secondary', hsl: { h: 30, s: 80, l: 37 } },
+ { name: 'Orange', prefix: 'Extra dark', type: 'secondary', hsl: { h: 30, s: 60, l: 23 } },
+ { name: 'Orange', prefix: 'Super extra dark', type: 'secondary', hsl: { h: 30, s: 40, l: 10 } },
+ { name: 'Yellow', prefix: 'Super extra light', type: 'primary', hsl: { h: 60, s: 40, l: 90 } },
+ { name: 'Yellow', prefix: 'Extra light', type: 'primary', hsl: { h: 60, s: 60, l: 77 } },
+ { name: 'Yellow', prefix: 'Light', type: 'primary', hsl: { h: 60, s: 80, l: 63 } },
+ { name: 'Yellow', prefix: false, type: 'primary', hsl: { h: 60, s: 100, l: 50 } },
+ { name: 'Yellow', prefix: 'Dark', type: 'primary', hsl: { h: 60, s: 80, l: 37 } },
+ { name: 'Yellow', prefix: 'Extra dark', type: 'primary', hsl: { h: 60, s: 60, l: 23 } },
+ { name: 'Yellow', prefix: 'Super extra dark', type: 'primary', hsl: { h: 60, s: 40, l: 10 } },
+ { name: 'Lime', prefix: 'Super extra light', type: 'secondary', hsl: { h: 90, s: 40, l: 90 } },
+ { name: 'Lime', prefix: 'Extra light', type: 'secondary', hsl: { h: 90, s: 60, l: 77 } },
+ { name: 'Lime', prefix: 'Light', type: 'secondary', hsl: { h: 90, s: 80, l: 63 } },
+ { name: 'Lime', prefix: false, type: 'secondary', hsl: { h: 90, s: 100, l: 50 } },
+ { name: 'Lime', prefix: 'Dark', type: 'secondary', hsl: { h: 90, s: 80, l: 37 } },
+ { name: 'Lime', prefix: 'Extra dark', type: 'secondary', hsl: { h: 90, s: 60, l: 23 } },
+ { name: 'Lime', prefix: 'Super extra dark', type: 'secondary', hsl: { h: 90, s: 40, l: 10 } },
+ { name: 'Green', prefix: 'Super extra light', type: 'primary', hsl: { h: 120, s: 40, l: 90 } },
+ { name: 'Green', prefix: 'Extra light', type: 'primary', hsl: { h: 120, s: 60, l: 77 } },
+ { name: 'Green', prefix: 'Light', type: 'primary', hsl: { h: 120, s: 80, l: 63 } },
+ { name: 'Green', prefix: false, type: 'primary', hsl: { h: 120, s: 100, l: 50 } },
+ { name: 'Green', prefix: 'Dark', type: 'primary', hsl: { h: 120, s: 80, l: 37 } },
+ { name: 'Green', prefix: 'Extra dark', type: 'primary', hsl: { h: 120, s: 60, l: 23 } },
+ { name: 'Green', prefix: 'Super extra dark', type: 'primary', hsl: { h: 120, s: 40, l: 10 } },
+ { name: 'Aqua', prefix: 'Super extra light', type: 'secondary', hsl: { h: 150, s: 40, l: 90 } },
+ { name: 'Aqua', prefix: 'Extra light', type: 'secondary', hsl: { h: 150, s: 60, l: 77 } },
+ { name: 'Aqua', prefix: 'Light', type: 'secondary', hsl: { h: 150, s: 80, l: 63 } },
+ { name: 'Aqua', prefix: false, type: 'secondary', hsl: { h: 150, s: 100, l: 50 } },
+ { name: 'Aqua', prefix: 'Dark', type: 'secondary', hsl: { h: 150, s: 80, l: 37 } },
+ { name: 'Aqua', prefix: 'Extra dark', type: 'secondary', hsl: { h: 150, s: 60, l: 23 } },
+ { name: 'Aqua', prefix: 'Super extra dark', type: 'secondary', hsl: { h: 150, s: 40, l: 10 } },
+ { name: 'Cyan', prefix: 'Super extra light', type: 'primary', hsl: { h: 180, s: 40, l: 90 } },
+ { name: 'Cyan', prefix: 'Extra light', type: 'primary', hsl: { h: 180, s: 60, l: 77 } },
+ { name: 'Cyan', prefix: 'Light', type: 'primary', hsl: { h: 180, s: 80, l: 63 } },
+ { name: 'Cyan', prefix: false, type: 'primary', hsl: { h: 180, s: 100, l: 50 } },
+ { name: 'Cyan', prefix: 'Dark', type: 'primary', hsl: { h: 180, s: 80, l: 37 } },
+ { name: 'Cyan', prefix: 'Extra dark', type: 'primary', hsl: { h: 180, s: 60, l: 23 } },
+ { name: 'Cyan', prefix: 'Super extra dark', type: 'primary', hsl: { h: 180, s: 40, l: 10 } },
+ { name: 'Teal', prefix: 'Super extra light', type: 'secondary', hsl: { h: 210, s: 40, l: 90 } },
+ { name: 'Teal', prefix: 'Extra light', type: 'secondary', hsl: { h: 210, s: 60, l: 77 } },
+ { name: 'Teal', prefix: 'Light', type: 'secondary', hsl: { h: 210, s: 80, l: 63 } },
+ { name: 'Teal', prefix: false, type: 'secondary', hsl: { h: 210, s: 100, l: 50 } },
+ { name: 'Teal', prefix: 'Dark', type: 'secondary', hsl: { h: 210, s: 80, l: 37 } },
+ { name: 'Teal', prefix: 'Extra dark', type: 'secondary', hsl: { h: 210, s: 60, l: 23 } },
+ { name: 'Teal', prefix: 'Super extra dark', type: 'secondary', hsl: { h: 210, s: 40, l: 10 } },
+ { name: 'Blue', prefix: 'Super extra light', type: 'primary', hsl: { h: 240, s: 40, l: 90 } },
+ { name: 'Blue', prefix: 'Extra light', type: 'primary', hsl: { h: 240, s: 60, l: 77 } },
+ { name: 'Blue', prefix: 'Light', type: 'primary', hsl: { h: 240, s: 80, l: 63 } },
+ { name: 'Blue', prefix: false, type: 'primary', hsl: { h: 240, s: 100, l: 50 } },
+ { name: 'Blue', prefix: 'Dark', type: 'primary', hsl: { h: 240, s: 80, l: 37 } },
+ { name: 'Blue', prefix: 'Extra dark', type: 'primary', hsl: { h: 240, s: 60, l: 23 } },
+ { name: 'Blue', prefix: 'Super extra dark', type: 'primary', hsl: { h: 240, s: 40, l: 10 } },
+ { name: 'Purple', prefix: 'Super extra light', type: 'secondary', hsl: { h: 270, s: 40, l: 90 } },
+ { name: 'Purple', prefix: 'Extra light', type: 'secondary', hsl: { h: 270, s: 60, l: 77 } },
+ { name: 'Purple', prefix: 'Light', type: 'secondary', hsl: { h: 270, s: 80, l: 63 } },
+ { name: 'Purple', prefix: false, type: 'secondary', hsl: { h: 270, s: 100, l: 50 } },
+ { name: 'Purple', prefix: 'Dark', type: 'secondary', hsl: { h: 270, s: 80, l: 37 } },
+ { name: 'Purple', prefix: 'Extra dark', type: 'secondary', hsl: { h: 270, s: 60, l: 23 } },
+ { name: 'Purple', prefix: 'Super extra dark', type: 'secondary', hsl: { h: 270, s: 40, l: 10 } },
+ { name: 'Magenta', prefix: 'Super extra light', type: 'primary', hsl: { h: 300, s: 40, l: 90 } },
+ { name: 'Magenta', prefix: 'Extra light', type: 'primary', hsl: { h: 300, s: 60, l: 77 } },
+ { name: 'Magenta', prefix: 'Light', type: 'primary', hsl: { h: 300, s: 80, l: 63 } },
+ { name: 'Magenta', prefix: false, type: 'primary', hsl: { h: 300, s: 100, l: 50 } },
+ { name: 'Magenta', prefix: 'Dark', type: 'primary', hsl: { h: 300, s: 80, l: 37 } },
+ { name: 'Magenta', prefix: 'Extra dark', type: 'primary', hsl: { h: 300, s: 60, l: 23 } },
+ { name: 'Magenta', prefix: 'Super extra dark', type: 'primary', hsl: { h: 300, s: 40, l: 10 } },
+ { name: 'Fuchsia', prefix: 'Super extra light', type: 'secondary', hsl: { h: 330, s: 40, l: 90 } },
+ { name: 'Fuchsia', prefix: 'Extra light', type: 'secondary', hsl: { h: 330, s: 60, l: 77 } },
+ { name: 'Fuchsia', prefix: 'Light', type: 'secondary', hsl: { h: 330, s: 80, l: 63 } },
+ { name: 'Fuchsia', prefix: false, type: 'secondary', hsl: { h: 330, s: 100, l: 50 } },
+ { name: 'Fuchsia', prefix: 'Dark', type: 'secondary', hsl: { h: 330, s: 80, l: 37 } },
+ { name: 'Fuchsia', prefix: 'Extra dark', type: 'secondary', hsl: { h: 330, s: 60, l: 23 } },
+ { name: 'Fuchsia', prefix: 'Super extra dark', type: 'secondary', hsl: { h: 330, s: 40, l: 10 } },
+ ];
+};
+
+export { accentPreset };
diff --git a/src/component/accentPresetButton/index.css b/src/component/accentPresetButton/index.css
new file mode 100644
index 00000000..c7d43ced
--- /dev/null
+++ b/src/component/accentPresetButton/index.css
@@ -0,0 +1,62 @@
+:root {
+ --theme-accent-preset-preview-space: 5;
+}
+
+.theme-accent-preset {
+ display: grid;
+ grid-gap: calc((var(--theme-accent-preset-preview-space) / 8) * 1em);
+ grid-template-columns: repeat(7, auto);
+ grid-auto-flow: row;
+ justify-items: center;
+ width: fit-content;
+}
+
+@media (min-width: 550px) {
+ .theme-accent-preset {
+ grid-template-rows: repeat(7, auto);
+ grid-auto-flow: column;
+ }
+}
+
+.theme-accent-preset-button {
+ padding: 0;
+ width: calc((var(--theme-accent-preset-preview-space) / 4) * 1em);
+ height: calc((var(--theme-accent-preset-preview-space) / 4) * 1em);
+ min-width: initial;
+ min-height: initial;
+ overflow: hidden;
+}
+
+.theme-accent-preset-preview {
+ background-color: hsl(var(--theme-accent-preset-color-hsl-h), calc(var(--theme-accent-preset-color-hsl-s) * 1%), calc(var(--theme-accent-preset-color-hsl-l) * 1%));
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: block;
+}
+
+/* @media (min-width: 550px) {
+ :root {
+ --theme-accent-preset-preview-space: 5;
+ }
+}
+
+@media (min-width: 700px) {
+ :root {
+ --theme-accent-preset-preview-space: 5;
+ }
+}
+
+@media (min-width: 900px) {
+ :root {
+ --theme-accent-preset-preview-space: 5;
+ }
+}
+
+@media (min-width: 1100px) {
+ :root {
+ --theme-accent-preset-preview-space: 5;
+ }
+} */
diff --git a/src/component/accentPresetButton/index.js b/src/component/accentPresetButton/index.js
new file mode 100644
index 00000000..7e89b27c
--- /dev/null
+++ b/src/component/accentPresetButton/index.js
@@ -0,0 +1,93 @@
+import { state } from '../state';
+import { data } from '../data';
+import { theme } from '../theme';
+import { toolbar } from '../toolbar';
+import { themeSetting } from '../menuContent/themeSetting';
+
+import { Button } from '../button';
+
+import { node } from '../../utility/node';
+import { convertColor } from '../../utility/convertColor';
+import { isValidString } from '../../utility/isValidString';
+import { complexNode } from '../../utility/complexNode';
+import { applyCSSVar } from '../../utility/applyCSSVar';
+import { applyCSSClass } from '../../utility/applyCSSClass';
+import { applyCSSState } from '../../utility/applyCSSState';
+
+import './index.css';
+
+export const AccentPresetButton = function({ presetData = false } = {}) {
+
+ this.name = () => {
+
+ let fullName = presetData.name;
+
+ if (presetData.prefix) {
+ fullName = presetData.prefix + ' ' + presetData.name.toLowerCase();
+ };
+
+ return fullName;
+
+ };
+
+ this.element = {
+ button: new Button({
+ text: this.name(),
+ title: this.name(),
+ srOnly: true,
+ classList: ['theme-accent-preset-button', 'theme-accent-preset-type-' + presetData.type],
+ func: () => {
+
+ state.get.current().theme.accent.rgb = convertColor.hsl.rgb(presetData.hsl);
+
+ state.get.current().theme.accent.hsl = presetData.hsl;
+
+ applyCSSVar([
+ 'theme.accent.rgb.r',
+ 'theme.accent.rgb.g',
+ 'theme.accent.rgb.b',
+ 'theme.accent.hsl.h',
+ 'theme.accent.hsl.s',
+ 'theme.accent.hsl.l'
+ ]);
+
+ toolbar.current.update.style();
+
+ toolbar.current.update.accent();
+
+ themeSetting.control.accent.color.update();
+
+ data.save();
+
+ }
+ }),
+ preview: node('span|class:theme-accent-preset-preview')
+ };
+
+ this.previewTile = () => {
+
+ this.element.preview.style.setProperty('--theme-accent-preset-color-hsl-h', presetData.hsl.h);
+
+ this.element.preview.style.setProperty('--theme-accent-preset-color-hsl-s', presetData.hsl.s);
+
+ this.element.preview.style.setProperty('--theme-accent-preset-color-hsl-l', presetData.hsl.l);
+
+ };
+
+ this.assemble = () => {
+
+ this.previewTile();
+
+ this.element.button.button.appendChild(this.element.preview);
+
+ };
+
+ this.button = () => {
+
+ return this.element.button.button;
+
+ };
+
+ this.assemble();
+
+};
diff --git a/src/component/appName/index.js b/src/component/appName/index.js
new file mode 100644
index 00000000..abb126a6
--- /dev/null
+++ b/src/component/appName/index.js
@@ -0,0 +1 @@
+export const appName = 'nightTab';
diff --git a/src/component/base/animation/index.css b/src/component/base/animation/index.css
new file mode 100644
index 00000000..032236d0
--- /dev/null
+++ b/src/component/base/animation/index.css
@@ -0,0 +1,107 @@
+@keyframes appear {
+ 0% {
+ opacity: 0;
+ }
+
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes shake {
+ 0% {
+ transform: translate3d(0, 0, 0);
+ }
+
+ 10% {
+ transform: translate3d(-1.2em, 0, 0);
+ }
+
+ 20% {
+ transform: translate3d(1.2em, 0, 0);
+ }
+
+ 30% {
+ transform: translate3d(-1em, 0, 0);
+ }
+
+ 40% {
+ transform: translate3d(1em, 0, 0);
+ }
+
+ 50% {
+ transform: translate3d(-0.8em, 0, 0);
+ }
+
+ 60% {
+ transform: translate3d(0.8em, 0, 0);
+ }
+
+ 70% {
+ transform: translate3d(-0.3em, 0, 0);
+ }
+
+ 80% {
+ transform: translate3d(0.3em, 0, 0);
+ }
+
+ 90% {
+ transform: translate3d(-0.1em, 0, 0);
+ }
+
+ 100% {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes pop {
+ 0% {
+ transform: scale(1);
+ }
+
+ 25% {
+ transform: scale(1.1);
+ }
+
+ 50% {
+ transform: scale(0.9);
+ }
+
+ 75% {
+ transform: scale(1.1);
+ }
+
+ 100% {
+ transform: scale(1);
+ }
+}
+
+@keyframes jello {
+ 0% {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 30% {
+ transform: scale3d(1.25, 0.75, 1);
+ }
+
+ 40% {
+ transform: scale3d(0.75, 1.25, 1);
+ }
+
+ 50% {
+ transform: scale3d(1.15, 0.85, 1);
+ }
+
+ 65% {
+ transform: scale3d(0.95, 1.05, 1);
+ }
+
+ 75% {
+ transform: scale3d(1.05, 0.95, 1);
+ }
+
+ 100% {
+ transform: scale3d(1, 1, 1);
+ }
+}
diff --git a/src/component/base/base/index.css b/src/component/base/base/index.css
new file mode 100644
index 00000000..2a5e1daf
--- /dev/null
+++ b/src/component/base/base/index.css
@@ -0,0 +1,122 @@
+:root {
+ --base-size: 16;
+ --font-size: calc(var(--base-size) * 1px);
+}
+
+/* @media (min-width: 900px) {
+ :root {
+ --base-size: 16;
+ }
+} */
+
+::selection {
+ background-color: rgb(var(--theme-accent));
+ color: hsl(var(--theme-accent-rgb-text));
+}
+
+html,
+body {
+ background-color: hsl(var(--theme-primary-010));
+ font-size: var(--font-size);
+ line-height: 1.6;
+ font-family: var(--theme-font-ui-name);
+ font-weight: var(--theme-font-ui-weight);
+ font-style: var(--theme-font-ui-style);
+ color: hsl(var(--theme-primary-text-010));
+ transition: background-color var(--layout-transition-extra-fast);
+}
+
+body {
+ min-width: 100vw;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+}
+
+html.is-theme-style-dark,
+.is-theme-style-dark body,
+html.is-theme-style-light,
+.is-theme-style-light body {
+ background-color: hsl(var(--theme-primary-010));
+ color: hsl(var(--theme-primary-text-010));
+}
+
+@media (prefers-color-scheme: light) {
+
+ html.is-theme-style-system,
+ .is-theme-style-system body {
+ background-color: hsl(var(--theme-primary-010));
+ color: hsl(var(--theme-primary-text-010));
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ html.is-theme-style-system,
+ .is-theme-style-system body {
+ background-color: hsl(var(--theme-primary-010));
+ color: hsl(var(--theme-primary-text-010));
+ }
+}
+
+html.is-theme-background-type-theme,
+.is-theme-background-type-theme body {
+ background-color: hsl(var(--theme-background-theme));
+}
+
+html.is-theme-background-type-accent,
+.is-theme-background-type-accent body {
+ background-color: rgb(var(--theme-background-accent));
+}
+
+html.is-theme-background-type-color,
+.is-theme-background-type-color body {
+ background-color: rgb(var(--theme-background-color));
+}
+
+.is-layout-alignment-top-left body {
+ justify-content: flex-start;
+ align-items: flex-start;
+}
+
+.is-layout-alignment-top-center body {
+ justify-content: flex-start;
+ align-items: center;
+}
+
+.is-layout-alignment-top-right body {
+ justify-content: flex-start;
+ align-items: flex-end;
+}
+
+.is-layout-alignment-center-left body {
+ justify-content: center;
+ align-items: flex-start;
+}
+
+.is-layout-alignment-center-center body {
+ justify-content: center;
+ align-items: center;
+}
+
+.is-layout-alignment-center-right body {
+ justify-content: center;
+ align-items: flex-end;
+}
+
+.is-layout-alignment-bottom-left body {
+ justify-content: flex-end;
+ align-items: flex-start;
+}
+
+.is-layout-alignment-bottom-center body {
+ justify-content: flex-end;
+ align-items: center;
+}
+
+.is-layout-alignment-bottom-right body {
+ justify-content: flex-end;
+ align-items: flex-end;
+}
diff --git a/src/component/base/font/index.css b/src/component/base/font/index.css
new file mode 100644
index 00000000..0fcd8126
--- /dev/null
+++ b/src/component/base/font/index.css
@@ -0,0 +1,146 @@
+/* open sans */
+/* normal */
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 300;
+ font-style: normal;
+ font-display: swap;
+ src:
+ local("Open Sans Light"),
+ local("OpenSans-Light"),
+ url("../../../font/open-sans/open-sans-300.woff") format("woff"),
+ url("../../../font/open-sans/open-sans-300.woff2") format("woff2"),
+ url("../../../font/open-sans/open-sans-300.ttf") format("truetype");
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 400;
+ font-style: normal;
+ font-display: swap;
+ src:
+ local("Open Sans Regular"),
+ local("OpenSans-Regular"),
+ url("../../../font/open-sans/open-sans-400.woff") format("woff"),
+ url("../../../font/open-sans/open-sans-400.woff2") format("woff2"),
+ url("../../../font/open-sans/open-sans-400.ttf") format("truetype");
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 600;
+ font-style: normal;
+ font-display: swap;
+ src:
+ local("Open Sans SemiBold"),
+ local("OpenSans-SemiBold"),
+ url("../../../font/open-sans/open-sans-600.woff") format("woff"),
+ url("../../../font/open-sans/open-sans-600.woff2") format("woff2"),
+ url("../../../font/open-sans/open-sans-600.ttf") format("truetype");
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 700;
+ font-style: normal;
+ font-display: swap;
+ src:
+ local("Open Sans Bold"),
+ local("OpenSans-Bold"),
+ url("../../../font/open-sans/open-sans-700.woff") format("woff"),
+ url("../../../font/open-sans/open-sans-700.woff2") format("woff2"),
+ url("../../../font/open-sans/open-sans-700.ttf") format("truetype");
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 800;
+ font-style: normal;
+ font-display: swap;
+ src:
+ local("Open Sans ExtraBold"),
+ local("OpenSans-ExtraBold"),
+ url("../../../font/open-sans/open-sans-800.woff") format("woff"),
+ url("../../../font/open-sans/open-sans-800.woff2") format("woff2"),
+ url("../../../font/open-sans/open-sans-800.ttf") format("truetype");
+}
+
+/* italic */
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 300;
+ font-style: italic;
+ font-display: swap;
+ src:
+ local("Open Sans Light Italic"),
+ local("OpenSans-LightItalic"),
+ url("../../../font/open-sans/open-sans-italic-300.woff") format("woff"),
+ url("../../../font/open-sans/open-sans-italic-300.woff2") format("woff2"),
+ url("../../../font/open-sans/open-sans-italic-300.ttf") format("truetype");
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 400;
+ font-style: italic;
+ font-display: swap;
+ src:
+ local("Open Sans Italic"),
+ local("OpenSans-Italic"),
+ url("../../../font/open-sans/open-sans-italic-400.woff") format("woff"),
+ url("../../../font/open-sans/open-sans-italic-400.woff2") format("woff2"),
+ url("../../../font/open-sans/open-sans-italic-400.ttf") format("truetype");
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 600;
+ font-style: italic;
+ font-display: swap;
+ src:
+ local("Open Sans SemiBold Italic"),
+ local("OpenSans-SemiBoldItalic"),
+ url("../../../font/open-sans/open-sans-italic-600.woff") format("woff"),
+ url("../../../font/open-sans/open-sans-italic-600.woff2") format("woff2"),
+ url("../../../font/open-sans/open-sans-italic-600.ttf") format("truetype");
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 700;
+ font-style: italic;
+ font-display: swap;
+ src:
+ local("Open Sans Bold Italic"),
+ local("OpenSans-BoldItalic"),
+ url("../../../font/open-sans/open-sans-italic-700.woff") format("woff"),
+ url("../../../font/open-sans/open-sans-italic-700.woff2") format("woff2"),
+ url("../../../font/open-sans/open-sans-italic-700.ttf") format("truetype");
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-weight: 800;
+ font-style: italic;
+ font-display: swap;
+ src:
+ local("Open Sans ExtraBold Italic"),
+ local("OpenSans-ExtraBoldItalic"),
+ url("../../../font/open-sans/open-sans-italic-800.woff") format("woff"),
+ url("../../../font/open-sans/open-sans-italic-800.woff2") format("woff2"),
+ url("../../../font/open-sans/open-sans-italic-800.ttf") format("truetype");
+}
+
+/* fjalla one */
+/* normal */
+@font-face {
+ font-family: "Fjalla One";
+ font-weight: 400;
+ font-style: normal;
+ font-display: swap;
+ src:
+ local("Fjalla One"),
+ url("../../../font/fjalla-one/fjalla-one-400.woff") format("woff"),
+ url("../../../font/fjalla-one/fjalla-one-400.woff2") format("woff2"),
+ url("../../../font/fjalla-one/fjalla-one-400.ttf") format("truetype");
+}
diff --git a/src/component/base/index.js b/src/component/base/index.js
new file mode 100644
index 00000000..1fd44375
--- /dev/null
+++ b/src/component/base/index.js
@@ -0,0 +1,11 @@
+import './base/index.css';
+import './font/index.css';
+import './animation/index.css';
+import './spacing/index.css';
+import './state/index.css';
+import './typography/index.css';
+import './version/index.css';
+import './zindex/index.css';
+import './utility/index.css';
+
+export const base = {};
diff --git a/src/css/spacing.css b/src/component/base/spacing/index.css
old mode 100755
new mode 100644
similarity index 100%
rename from src/css/spacing.css
rename to src/component/base/spacing/index.css
diff --git a/src/css/state.css b/src/component/base/state/index.css
old mode 100755
new mode 100644
similarity index 53%
rename from src/css/state.css
rename to src/component/base/state/index.css
index 276482eb..85ca1e45
--- a/src/css/state.css
+++ b/src/component/base/state/index.css
@@ -26,10 +26,6 @@
visibility: visible !important;
}
-.is-scrolll-disabled {
- overflow: hidden !important;
-}
-
.is-small {
transform: scale(0.5) !important;
}
@@ -37,3 +33,31 @@
.is-large {
transform: scale(1.5) !important;
}
+
+.is-scroll-disabled {
+ overflow: hidden !important;
+}
+
+.is-scroll-x-disabled {
+ overflow-x: hidden !important;
+}
+
+.is-scroll-y-disabled {
+ overflow-y: hidden !important;
+}
+
+.is-appear {
+ animation: appear var(--layout-transition-medium) 1;
+}
+
+.is-shake {
+ animation: shake var(--layout-transition-slow) 1;
+}
+
+.is-pop {
+ animation: pop var(--layout-transition-medium) 1;
+}
+
+.is-jello {
+ animation: jello var(--layout-transition-slow) 1;
+}
diff --git a/src/css/typography.css b/src/component/base/typography/index.css
old mode 100755
new mode 100644
similarity index 74%
rename from src/css/typography.css
rename to src/component/base/typography/index.css
index 2c0f1550..d0778ac6
--- a/src/css/typography.css
+++ b/src/component/base/typography/index.css
@@ -7,7 +7,7 @@ h6 {
margin: 0 0 1em 0;
font-weight: normal;
line-height: 1.6;
- color: rgb(var(--theme-color-18));
+ color: hsl(var(--theme-primary-text-010));
}
h1 {
@@ -55,7 +55,7 @@ h6 {
}
p {
- color: rgb(var(--theme-color-16));
+ color: hsl(var(--theme-primary-text-010));
margin: 0;
line-height: 1.6;
}
@@ -66,9 +66,9 @@ p:not(:last-child) {
hr {
border: 0;
- border-top: var(--horizontal-rule-small);
- border-radius: var(--theme-radius);
- margin: calc(var(--form-wrap-space) * 2) 0;
+ border-top: var(--layout-horizontal-rule-small);
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ margin: calc(var(--wrap-space) * 2) 0;
clear: both;
transition: border-color var(--layout-transition-extra-fast);
}
@@ -76,9 +76,9 @@ hr {
b,
caption,
strong {
- color: rgb(var(--theme-style-text));
+ color: hsl(var(--theme-primary-text-010));
font-family: var(--theme-font-ui-name);
- font-weight: 700;
+ font-weight: 600;
}
i {
@@ -86,29 +86,29 @@ i {
}
a {
- color: rgb(var(--theme-color-16));
+ color: hsl(var(--theme-primary-text-010));
text-decoration: underline;
transition: text-decoration var(--layout-transition-extra-fast);
}
a:link,
a:visited {
- color: rgb(var(--theme-color-18));
+ color: hsl(var(--theme-primary-text-010));
}
a:focus {
- text-decoration-color: rgb(var(--theme-style-text));
+ text-decoration-color: hsl(var(--theme-primary-text-010));
outline: none;
}
a:hover {
- color: rgb(var(--theme-style-text));
+ color: hsl(var(--theme-primary-text-010));
text-decoration-color: rgb(var(--theme-accent));
}
a:active {
- color: rgb(var(--theme-style-text));
- text-decoration-color: rgb(var(--theme-style-text));
+ color: hsl(var(--theme-primary-text-010));
+ text-decoration-color: hsl(var(--theme-primary-text-010));
}
ol,
@@ -150,9 +150,9 @@ table {
table thead tr td,
table thead tr th {
- background-color: rgb(var(--theme-color-03));
+ background-color: hsl(var(--theme-primary-030));
border: 0;
- border-bottom: 1px solid rgb(var(--theme-color-04));
+ border-bottom: 1px solid hsl(var(--theme-primary-040));
padding: 0.5em;
margin: 0;
text-align: left;
@@ -164,7 +164,7 @@ table thead tr th {
}
table tr:nth-child(odd) {
- background-color: rgb(var(--theme-color-02));
+ background-color: hsl(var(--theme-primary-020));
}
table tbody tr td,
@@ -177,7 +177,7 @@ table tbody tr th {
}
code {
- background-color: rgb(var(--theme-color-04));
+ background-color: hsl(var(--theme-primary-040));
padding: 0.2em 0.5em;
- border-radius: var(--theme-radius);
+ border-radius: calc(var(--theme-radius) * 0.01em);
}
diff --git a/src/css/utilities.css b/src/component/base/utility/index.css
old mode 100755
new mode 100644
similarity index 65%
rename from src/css/utilities.css
rename to src/component/base/utility/index.css
index 64be311d..74e77095
--- a/src/css/utilities.css
+++ b/src/component/base/utility/index.css
@@ -1,3 +1,11 @@
+:root {
+ --utility-muted: var(--theme-primary-140);
+ --utility-muted-hover: var(--theme-primary-140);
+ --utility-muted-focus-active: var(--theme-primary-140);
+ --utility-muted-checked: var(--theme-primary-140);
+ --utility-muted-disabled: var(--theme-primary-030);
+}
+
.list-unstyled {
padding-left: 0;
margin-bottom: 0;
@@ -20,31 +28,7 @@
}
.muted {
- color: rgb(var(--utilities-muted));
-}
-
-.scroll-disabled {
- overflow: hidden;
-}
-
-.scroll-x-disabled {
- overflow-x: hidden;
-}
-
-.scroll-y-disabled {
- overflow-y: hidden;
-}
-
-.is-shake {
- animation: shake var(--layout-transition-slow) 1;
-}
-
-.is-pop {
- animation: pop var(--layout-transition-medium) 1;
-}
-
-.is-jello {
- animation: jello var(--layout-transition-slow) 1;
+ color: hsl(var(--utility-muted));
}
.sr-only {
diff --git a/src/component/base/version/index.css b/src/component/base/version/index.css
new file mode 100644
index 00000000..717cea7f
--- /dev/null
+++ b/src/component/base/version/index.css
@@ -0,0 +1,40 @@
+:root {
+ --version-icon-size: 22;
+ --version-icon: calc((var(--version-icon-size) / 4) * 1em);
+}
+
+.version {
+ font-size: 1rem;
+ display: inline-grid;
+ grid-template-columns: auto auto;
+ grid-gap: var(--wrap-space);
+ align-items: center;
+ justify-items: start;
+}
+
+.version-app-name {
+ margin-bottom: 0;
+}
+
+.version-number:not(:last-child),
+.version-name:not(:last-child) {
+ margin-bottom: 0;
+}
+
+.version-number {
+ background-color: rgb(var(--theme-accent));
+ color: hsl(var(--theme-accent-rgb-text));
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ padding: 0 0.5em;
+}
+
+.version-icon {
+ width: var(--version-icon);
+}
+
+.version-details {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 0.25em;
+}
diff --git a/src/component/base/zindex/index.css b/src/component/base/zindex/index.css
new file mode 100644
index 00000000..fe9d3c94
--- /dev/null
+++ b/src/component/base/zindex/index.css
@@ -0,0 +1,11 @@
+:root {
+ --z-index-background: 1000;
+ --z-index-layout: 2000;
+ --z-index-toolbar: 3000;
+ --z-index-edge: 4000;
+ --z-index-dropdown: 5000;
+ --z-index-shade: 6000;
+ --z-index-menu: 7000;
+ --z-index-modal: 8000;
+ --z-index-suggest: 9000;
+}
diff --git a/src/component/bookmark/index.css b/src/component/bookmark/index.css
new file mode 100644
index 00000000..7c149e11
--- /dev/null
+++ b/src/component/bookmark/index.css
@@ -0,0 +1,1015 @@
+:root {
+ --bookmark-color: var(--theme-primary-020);
+ --bookmark-color-focus-hover: var(--theme-primary-030);
+ --bookmark-display-visual-color: var(--theme-accent);
+ --bookmark-display-visual-color-focus-hover: var(--theme-accent-rgb-text);
+ --bookmark-display-name-color: var(--theme-primary-text-020);
+ --bookmark-display-name-color-focus-hover: var(--theme-primary-text-030);
+}
+
+.is-bookmark-style-block {
+ --bookmark-edit-height-tall: 5em;
+ --bookmark-edit-height-short: calc(var(--bookmark-edit-height-tall) / 2);
+ --bookmark-edit-height: var(--bookmark-edit-height-tall);
+ --bookmark-url-height: 2.25em;
+}
+
+.is-bookmark-style-list {
+ --bookmark-edit-height-tall: 5em;
+ --bookmark-edit-height-short: 2em;
+ --bookmark-edit-height: var(--bookmark-edit-height-short);
+ --bookmark-url-height: 1.5em;
+}
+
+.is-bookmark-style-block {
+ --bookmark-url-height: 2.25em;
+}
+
+.is-bookmark-style-list {
+ --bookmark-url-height: 1.5em;
+}
+
+:root {
+ --bookmark-padding: 10;
+ --bookmark-clip-padding: 1;
+}
+
+.bookmark-area {
+ flex-grow: 1;
+ padding: calc(var(--layout-space) * var(--layout-padding));
+ width: 100%;
+}
+
+.is-theme-bookmark-color-by-custom .bookmark-area {
+ background-color: hsla(var(--theme-bookmark-color-hsl-h), calc(var(--theme-bookmark-color-hsl-s) * 1%), calc(var(--theme-bookmark-color-hsl-l) * 1%), calc(var(--theme-bookmark-color-opacity) / 100));
+}
+
+.bookmark-group {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ gap: calc(var(--layout-space) * var(--layout-padding));
+ align-items: stretch;
+ justify-content: stretch;
+}
+
+.bookmark {
+ font-size: 1em;
+ position: relative;
+ width: 100%;
+ height: 100%;
+ display: block;
+ z-index: 1;
+}
+
+.bookmark:focus,
+.bookmark:hover,
+.bookmark:focus-within {
+ z-index: 2;
+}
+
+.is-bookmark-hoverscale-show:not(.is-bookmark-edit) .bookmark {
+ transform: scale(1);
+ transition: transform var(--layout-transition-extra-fast);
+}
+
+.is-bookmark-hoverscale-show:not(.is-bookmark-edit) .bookmark:focus-within,
+.is-bookmark-hoverscale-show:not(.is-bookmark-edit) .bookmark:focus,
+.is-bookmark-hoverscale-show:not(.is-bookmark-edit) .bookmark:hover {
+ transform: scale(1.05);
+}
+
+.is-bookmark-hoverscale-show:not(.is-bookmark-edit) .bookmark:active {
+ transform: scale(1.04);
+ transition: none;
+}
+
+@media (min-width: 900px) {
+
+ .is-layout-breakpoint-md.is-bookmark-style-list .bookmark-wide,
+ .is-layout-breakpoint-lg.is-bookmark-style-list .bookmark-wide,
+ .is-layout-breakpoint-xl.is-bookmark-style-list .bookmark-wide,
+ .is-layout-breakpoint-xxl.is-bookmark-style-list .bookmark-wide {
+ grid-column: span 2;
+ }
+
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide {
+ grid-column: span 2;
+ }
+
+ .is-layout-breakpoint-md .bookmark-tall,
+ .is-layout-breakpoint-lg .bookmark-tall,
+ .is-layout-breakpoint-xl .bookmark-tall,
+ .is-layout-breakpoint-xxl .bookmark-tall {
+ grid-row: span 2;
+ }
+}
+
+@media (min-width: 900px) {
+
+ .is-layout-breakpoint-md.is-bookmark-orientation-top .bookmark-wide,
+ .is-layout-breakpoint-lg.is-bookmark-orientation-top .bookmark-wide,
+ .is-layout-breakpoint-xl.is-bookmark-orientation-top .bookmark-wide,
+ .is-layout-breakpoint-xxl.is-bookmark-orientation-top .bookmark-wide,
+ .is-layout-breakpoint-md.is-bookmark-orientation-bottom .bookmark-wide,
+ .is-layout-breakpoint-lg.is-bookmark-orientation-bottom .bookmark-wide,
+ .is-layout-breakpoint-xl.is-bookmark-orientation-bottom .bookmark-wide,
+ .is-layout-breakpoint-xxl.is-bookmark-orientation-bottom .bookmark-wide {
+ --bookmark-edit-height: var(--bookmark-edit-height-short);
+ }
+}
+
+.bookmark-front {
+ background-color: hsla(var(--bookmark-color), calc(var(--theme-bookmark-item-opacity) / 100));
+ border: calc(var(--bookmark-border) * var(--layout-line-width)) solid rgb(var(--theme-accent));
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ position: absolute;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ z-index: 3;
+ overflow: hidden;
+ text-decoration: none;
+ outline: none;
+ user-select: none;
+ transition: background-color var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast), height var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
+}
+
+.bookmark:focus-within .bookmark-front,
+.bookmark:focus .bookmark-front,
+.bookmark:hover .bookmark-front,
+.bookmark-front:focus,
+.bookmark-front:hover {
+ background-color: hsla(var(--bookmark-color-focus-hover), calc(var(--theme-bookmark-item-opacity) / 100));
+}
+
+.is-bookmark-edit .bookmark-front {
+ height: calc(100% - var(--bookmark-edit-height));
+ transition-delay: calc(var(--bookmark-transition-delay) * 0.03s);
+}
+
+.is-bookmark-line-show:not(.is-bookmark-edit) .bookmark-front {
+ height: calc(100% - var(--layout-line-width));
+}
+
+.is-bookmark-orientation-top .bookmark-front {
+ top: inherit;
+ bottom: 0;
+}
+
+.is-bookmark-orientation-bottom .bookmark-front {
+ top: 0;
+ bottom: inherit;
+}
+
+.is-bookmark-url-show.is-bookmark-orientation-top .bookmark:focus .bookmark-front,
+.is-bookmark-url-show.is-bookmark-orientation-top .bookmark:focus-within .bookmark-front,
+.is-bookmark-url-show.is-bookmark-orientation-top .bookmark:hover .bookmark-front {
+ border-top-left-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+ border-top-right-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+}
+
+.is-bookmark-url-show.is-bookmark-orientation-bottom .bookmark:focus .bookmark-front,
+.is-bookmark-url-show.is-bookmark-orientation-bottom .bookmark:focus-within .bookmark-front,
+.is-bookmark-url-show.is-bookmark-orientation-bottom .bookmark:hover .bookmark-front {
+ border-bottom-left-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+ border-bottom-right-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+}
+
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark .bookmark-front,
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark:hover .bookmark-front,
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark:focus .bookmark-front {
+ border-top-left-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+ border-top-right-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+}
+
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark .bookmark-front,
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark:hover .bookmark-front,
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark:focus .bookmark-front {
+ border-bottom-left-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+ border-bottom-right-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+}
+
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom .bookmark:focus .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom .bookmark:focus-within .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom .bookmark:hover .bookmark-front {
+ box-shadow: var(--theme-shadow-bottom-large);
+}
+
+.is-bookmark-shadow-show.is-bookmark-orientation-top .bookmark:focus .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top .bookmark:focus-within .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top .bookmark:hover .bookmark-front {
+ box-shadow: var(--theme-shadow-top-large);
+}
+
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom.is-bookmark-edit .bookmark .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom.is-bookmark-edit .bookmark:hover .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom.is-bookmark-edit .bookmark:focus .bookmark-front {
+ box-shadow: var(--theme-shadow-bottom-medium);
+}
+
+.is-bookmark-shadow-show.is-bookmark-orientation-top.is-bookmark-edit .bookmark .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top.is-bookmark-edit .bookmark:hover .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top.is-bookmark-edit .bookmark:focus .bookmark-front {
+ box-shadow: var(--theme-shadow-top-medium);
+}
+
+.bookmark-link {
+ background-color: transparent;
+ position: relative;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ pointer-events: all;
+ overflow: hidden;
+ text-decoration: none;
+}
+
+.is-bookmark-style-block .bookmark-link {
+ padding: calc(var(--bookmark-padding) * 0.1em);
+}
+
+.is-bookmark-style-list .bookmark-link {
+ padding: calc((var(--bookmark-padding) * 0.5) * 0.1em) calc((var(--bookmark-padding) * 1.25) * 0.1em);
+}
+
+.bookmark-link:focus,
+.bookmark-link:hover,
+.bookmark-link:active {
+ text-decoration: none;
+}
+
+.bookmark-display-wrap {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: var(--bookmark-display-justify);
+ align-items: var(--bookmark-display-align);
+ pointer-events: all;
+ z-index: 2;
+}
+
+.bookmark-display {
+ display: flex;
+ gap: calc(var(--bookmark-display-gutter) * 0.025em);
+ font-size: 1em;
+ transition: font-size var(--layout-transition-extra-fast);
+ transform: translateX(calc(var(--bookmark-display-translate-x) * 0.1em)) translateY(calc(var(--bookmark-display-translate-y) * 0.1em)) rotate(calc(var(--bookmark-display-rotate) * 1deg));
+}
+
+.is-bookmark-edit .bookmark-display {
+ font-size: 0.5em;
+ transition-delay: calc(var(--bookmark-transition-delay) * 0.03s);
+}
+
+.is-bookmark-alignment-top-left .bookmark-display-wrap {
+ justify-content: flex-start;
+ align-items: flex-start;
+}
+
+.is-bookmark-alignment-top-center .bookmark-display-wrap {
+ justify-content: center;
+ align-items: flex-start;
+}
+
+.is-bookmark-alignment-top-right .bookmark-display-wrap {
+ justify-content: flex-end;
+ align-items: flex-start;
+}
+
+.is-bookmark-alignment-center-left .bookmark-display-wrap {
+ justify-content: flex-start;
+ align-items: center;
+}
+
+.is-bookmark-alignment-center-center .bookmark-display-wrap {
+ justify-content: center;
+ align-items: center;
+}
+
+.is-bookmark-alignment-center-right .bookmark-display-wrap {
+ justify-content: flex-end;
+ align-items: center;
+}
+
+.is-bookmark-alignment-bottom-left .bookmark-display-wrap {
+ justify-content: flex-start;
+ align-items: flex-end;
+}
+
+.is-bookmark-alignment-bottom-center .bookmark-display-wrap {
+ justify-content: center;
+ align-items: flex-end;
+}
+
+.is-bookmark-alignment-bottom-right .bookmark-display-wrap {
+ justify-content: flex-end;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-visual-name .bookmark-display {
+ flex-direction: row;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-name-visual .bookmark-display {
+ flex-direction: row-reverse;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-visual-name .bookmark-display {
+ flex-direction: column;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-name-visual .bookmark-display {
+ flex-direction: column-reverse;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-visual-name.is-bookmark-alignment-top-left .bookmark-display {
+ justify-content: flex-start;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-visual-name.is-bookmark-alignment-top-center .bookmark-display {
+ justify-content: flex-start;
+ align-items: center;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-visual-name.is-bookmark-alignment-top-right .bookmark-display {
+ justify-content: flex-start;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-visual-name.is-bookmark-alignment-center-left .bookmark-display {
+ justify-content: center;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-visual-name.is-bookmark-alignment-center-center .bookmark-display {
+ justify-content: center;
+ align-items: center;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-visual-name.is-bookmark-alignment-center-right .bookmark-display {
+ justify-content: center;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-visual-name.is-bookmark-alignment-bottom-left .bookmark-display {
+ justify-content: flex-end;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-visual-name.is-bookmark-alignment-bottom-center .bookmark-display {
+ justify-content: flex-end;
+ align-items: center;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-visual-name.is-bookmark-alignment-bottom-right .bookmark-display {
+ justify-content: flex-end;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-name-visual.is-bookmark-alignment-top-left .bookmark-display {
+ justify-content: flex-end;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-name-visual.is-bookmark-alignment-top-center .bookmark-display {
+ justify-content: flex-end;
+ align-items: center;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-name-visual.is-bookmark-alignment-top-right .bookmark-display {
+ justify-content: flex-end;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-name-visual.is-bookmark-alignment-center-left .bookmark-display {
+ justify-content: center;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-name-visual.is-bookmark-alignment-center-center .bookmark-display {
+ justify-content: center;
+ align-items: center;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-name-visual.is-bookmark-alignment-center-right .bookmark-display {
+ justify-content: center;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-name-visual.is-bookmark-alignment-bottom-left .bookmark-display {
+ justify-content: flex-start;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-name-visual.is-bookmark-alignment-bottom-center .bookmark-display {
+ justify-content: flex-start;
+ align-items: center;
+}
+
+.is-bookmark-direction-vertical.is-bookmark-order-name-visual.is-bookmark-alignment-bottom-right .bookmark-display {
+ justify-content: flex-start;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-visual-name.is-bookmark-alignment-top-left .bookmark-display {
+ justify-content: flex-start;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-visual-name.is-bookmark-alignment-top-center .bookmark-display {
+ justify-content: center;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-visual-name.is-bookmark-alignment-top-right .bookmark-display {
+ justify-content: flex-end;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-visual-name.is-bookmark-alignment-center-left .bookmark-display {
+ justify-content: flex-start;
+ align-items: center;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-visual-name.is-bookmark-alignment-center-center .bookmark-display {
+ justify-content: center;
+ align-items: center;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-visual-name.is-bookmark-alignment-center-right .bookmark-display {
+ justify-content: flex-end;
+ align-items: center;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-visual-name.is-bookmark-alignment-bottom-left .bookmark-display {
+ justify-content: flex-start;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-visual-name.is-bookmark-alignment-bottom-center .bookmark-display {
+ justify-content: center;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-visual-name.is-bookmark-alignment-bottom-right .bookmark-display {
+ justify-content: flex-end;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-name-visual.is-bookmark-alignment-top-left .bookmark-display {
+ justify-content: flex-end;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-name-visual.is-bookmark-alignment-top-center .bookmark-display {
+ justify-content: center;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-name-visual.is-bookmark-alignment-top-right .bookmark-display {
+ justify-content: flex-start;
+ align-items: flex-start;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-name-visual.is-bookmark-alignment-center-left .bookmark-display {
+ justify-content: flex-end;
+ align-items: center;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-name-visual.is-bookmark-alignment-center-center .bookmark-display {
+ justify-content: center;
+ align-items: center;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-name-visual.is-bookmark-alignment-center-right .bookmark-display {
+ justify-content: flex-start;
+ align-items: center;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-name-visual.is-bookmark-alignment-bottom-left .bookmark-display {
+ justify-content: flex-end;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-name-visual.is-bookmark-alignment-bottom-center .bookmark-display {
+ justify-content: center;
+ align-items: flex-end;
+}
+
+.is-bookmark-direction-horizontal.is-bookmark-order-name-visual.is-bookmark-alignment-bottom-right .bookmark-display {
+ justify-content: flex-start;
+ align-items: flex-end;
+}
+
+.bookmark-display-visual {
+ color: rgb(var(--bookmark-display-visual-color));
+ line-height: 1;
+ display: flex;
+ justify-content: center;
+ transition: color var(--layout-transition-extra-fast);
+ text-shadow: var(--bookmark-display-visual-shadow);
+}
+
+.bookmark:focus .bookmark-display-visual,
+.bookmark:hover .bookmark-display-visual,
+.bookmark:focus-within .bookmark-display-visual {
+ color: rgb(var(--bookmark-display-visual-color-focus-hover));
+}
+
+.bookmark-display-visual-letter {
+ font-family: var(--theme-font-display-name);
+ font-weight: var(--theme-font-display-weight);
+ font-style: var(--theme-font-display-style);
+ font-size: calc(var(--bookmark-display-visual-size) * 0.1em);
+}
+
+.bookmark-display-visual-icon {
+ font-size: calc(var(--bookmark-display-visual-size) * 0.1em);
+}
+
+.bookmark-display-visual-image {
+ background-image: var(--bookmark-display-visual-image-url);
+ background-size: contain;
+ background-position: center;
+ background-repeat: no-repeat;
+ width: 1em;
+ height: 1em;
+ font-size: calc(var(--bookmark-display-visual-size) * 0.1em);
+}
+
+.bookmark-display-name {
+ color: hsl(var(--bookmark-display-name-color));
+ font-size: calc(var(--bookmark-display-name-size) * 0.1em);
+ display: flex;
+ justify-content: center;
+ transition: color var(--layout-transition-extra-fast);
+}
+
+.is-bookmark-opacity-low .bookmark-display-name {
+ --bookmark-display-name-color: var(--theme-primary-text-010);
+ --bookmark-display-name-color-focus-hover: var(--theme-primary-text-010);
+}
+
+.is-theme-background-type-accent .is-bookmark-opacity-low .bookmark-display-name {
+ --bookmark-display-name-color: var(--theme-accent-rgb-text);
+ --bookmark-display-name-color-focus-hover: var(--theme-accent-rgb-text);
+}
+
+.is-theme-background-type-color .is-bookmark-opacity-low .bookmark-display-name {
+ --bookmark-display-name-color: var(--theme-background-color-rgb-text);
+ --bookmark-display-name-color-focus-hover: var(--theme-background-color-rgb-text);
+}
+
+.bookmark:focus .bookmark-display-name,
+.bookmark:hover .bookmark-display-name,
+.bookmark:focus-within .bookmark-display-name {
+ color: hsl(var(--bookmark-display-name-color-focus-hover));
+}
+
+.is-bookmark-alignment-top-left .bookmark-display-name-text,
+.is-bookmark-alignment-center-left .bookmark-display-name-text,
+.is-bookmark-alignment-bottom-left .bookmark-display-name-text {
+ text-align: left;
+}
+
+.is-bookmark-alignment-top-center .bookmark-display-name-text,
+.is-bookmark-alignment-center-center .bookmark-display-name-text,
+.is-bookmark-alignment-bottom-center .bookmark-display-name-text {
+ text-align: center;
+}
+
+.is-bookmark-alignment-top-right .bookmark-display-name-text,
+.is-bookmark-alignment-center-right .bookmark-display-name-text,
+.is-bookmark-alignment-bottom-right .bookmark-display-name-text {
+ text-align: right;
+}
+
+.bookmark-back {
+ background-color: rgb(var(--theme-accent));
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ width: calc(100% - calc(var(--layout-line-width) * 2));
+ height: calc(100% - calc(var(--layout-line-width) * 2));
+ position: absolute;
+ top: var(--layout-line-width);
+ left: var(--layout-line-width);
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+ z-index: 2;
+ transition: height var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast), top var(--layout-transition-extra-fast), clip-path var(--layout-transition-extra-fast);
+}
+
+.is-bookmark-edit .bookmark-back {
+ height: 100%;
+ top: 0;
+ transition-delay: calc(var(--bookmark-transition-delay) * 0.03s);
+}
+
+.is-bookmark-line-show .bookmark-back {
+ height: calc(100% - var(--layout-line-width));
+}
+
+.is-bookmark-line-show.is-bookmark-orientation-top .bookmark-back {
+ top: 0;
+}
+
+.is-bookmark-line-show.is-bookmark-orientation-bottom .bookmark-back {
+ top: var(--layout-line-width);
+}
+
+.is-bookmark-edit.is-bookmark-line-show .bookmark-back {
+ height: 100%;
+}
+
+.is-bookmark-edit.is-bookmark-line-show.is-bookmark-orientation-top .bookmark-back,
+.is-bookmark-edit.is-bookmark-line-show.is-bookmark-orientation-bottom .bookmark-back {
+ top: 0;
+}
+
+.is-bookmark-orientation-top .bookmark-back {
+ clip-path: polygon(0 0, 100% 0, 100% calc(0% + calc(var(--bookmark-clip-padding) * 1em)), 0 calc(0% + calc(var(--bookmark-clip-padding) * 1em)));
+}
+
+.is-bookmark-orientation-bottom .bookmark-back {
+ clip-path: polygon(0 calc(100% - calc(var(--bookmark-clip-padding) * 1em)), 100% calc(100% - calc(var(--bookmark-clip-padding) * 1em)), 100% 100%, 0 100%);
+}
+
+.is-bookmark-orientation-top.is-bookmark-line-show .bookmark-back {
+ clip-path: polygon(0 0, 100% 0, 100% calc(var(--layout-line-width) + calc(var(--bookmark-clip-padding) * 1em)), 0 calc(var(--layout-line-width) + calc(var(--bookmark-clip-padding) * 1em)));
+}
+
+.is-bookmark-orientation-bottom.is-bookmark-line-show .bookmark-back {
+ clip-path: polygon(0 calc(100% - var(--layout-line-width) - calc(var(--bookmark-clip-padding) * 1em)), 100% calc(100% - var(--layout-line-width) - calc(var(--bookmark-clip-padding) * 1em)), 100% 100%, 0 100%);
+}
+
+.is-bookmark-orientation-top .bookmark:focus .bookmark-back,
+.is-bookmark-orientation-top .bookmark:focus-within .bookmark-back,
+.is-bookmark-orientation-top .bookmark:hover .bookmark-back,
+.is-bookmark-orientation-bottom .bookmark:focus .bookmark-back,
+.is-bookmark-orientation-bottom .bookmark:focus-within .bookmark-back,
+.is-bookmark-orientation-bottom .bookmark:hover .bookmark-back {
+ top: 0;
+ height: 100%;
+}
+
+.is-bookmark-url-show.is-bookmark-orientation-top .bookmark:focus .bookmark-back,
+.is-bookmark-url-show.is-bookmark-orientation-top .bookmark:focus-within .bookmark-back,
+.is-bookmark-url-show.is-bookmark-orientation-top .bookmark:hover .bookmark-back {
+ clip-path: polygon(0 0, 100% 0, 100% calc(var(--bookmark-url-height) + calc(var(--bookmark-clip-padding) * 1em)), 0 calc(var(--bookmark-url-height) + calc(var(--bookmark-clip-padding) * 1em)));
+}
+
+.is-bookmark-url-show.is-bookmark-orientation-bottom .bookmark:focus .bookmark-back,
+.is-bookmark-url-show.is-bookmark-orientation-bottom .bookmark:focus-within .bookmark-back,
+.is-bookmark-url-show.is-bookmark-orientation-bottom .bookmark:hover .bookmark-back {
+ clip-path: polygon(0 calc(100% - calc(var(--bookmark-url-height) + calc(var(--bookmark-clip-padding) * 1em))), 100% calc(100% - calc(var(--bookmark-url-height) + calc(var(--bookmark-clip-padding) * 1em))), 100% 100%, 0 100%);
+}
+
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark:focus .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark:focus-within .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark:hover .bookmark-back {
+ clip-path: polygon(0 0, 100% 0, 100% calc(var(--bookmark-edit-height) + calc(var(--bookmark-clip-padding) * 1em)), 0 calc(var(--bookmark-edit-height) + calc(var(--bookmark-clip-padding) * 1em)));
+}
+
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark:focus .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark:focus-within .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark:hover .bookmark-back {
+ clip-path: polygon(0 calc(100% - var(--bookmark-edit-height) - calc(var(--bookmark-clip-padding) * 1em)), 100% calc(100% - var(--bookmark-edit-height) - calc(var(--bookmark-clip-padding) * 1em)), 100% 100%, 0 100%);
+}
+
+.bookmark-background-wrap {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ opacity: calc(var(--bookmark-background-opacity) / 100);
+ pointer-events: none;
+ z-index: 1;
+}
+
+.bookmark-background-image {
+ background-image: var(--bookmark-background-image-url);
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 1;
+ pointer-events: none;
+}
+
+.bookmark-background-video {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ overflow: hidden;
+ z-index: 1;
+ pointer-events: none;
+}
+
+.bookmark-background-video video {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ pointer-events: none;
+}
+
+.bookmark-control {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ height: var(--bookmark-edit-height);
+ z-index: 3;
+ display: grid;
+ grid-template-columns: repeat(6, 1fr);
+ grid-template-rows: repeat(2, 1fr);
+ overflow: hidden;
+ pointer-events: none;
+ transition: top var(--layout-transition-extra-fast), bottom var(--layout-transition-extra-fast);
+}
+
+.is-bookmark-style-block .bookmark-control {
+ grid-template-columns: repeat(6, 1fr);
+ grid-template-rows: repeat(2, 1fr);
+}
+
+.is-bookmark-style-list .bookmark-control {
+ grid-template-columns: repeat(5, 1fr);
+ grid-template-rows: 1fr;
+}
+
+@media (min-width: 900px) {
+
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide .bookmark-control,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide .bookmark-control,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide .bookmark-control,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide .bookmark-control {
+ grid-template-columns: repeat(5, 1fr);
+ grid-template-rows: 1fr;
+ }
+}
+
+.is-bookmark-orientation-top .bookmark-control {
+ top: calc(-1 * var(--bookmark-edit-height));
+}
+
+.is-bookmark-orientation-bottom .bookmark-control {
+ bottom: calc(-1 * var(--bookmark-edit-height));
+}
+
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark-control {
+ top: 0;
+ transition: top var(--layout-duration-04) var(--layout-timing-bounce);
+ transition-delay: calc(var(--bookmark-transition-delay) * 0.03s);
+}
+
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark-control {
+ bottom: 0;
+ transition: bottom var(--layout-duration-04) var(--layout-timing-bounce) var(--layout-duration-01);
+ transition-delay: calc(var(--bookmark-transition-delay) * 0.03s);
+}
+
+.bookmark-control-button {
+ padding: 0;
+ border-radius: 0;
+ min-height: initial;
+ position: relative;
+ color: hsl(var(--theme-accent-rgb-text));
+ transition: background-color var(--layout-transition-fast), border-color var(--layout-transition-fast), color var(--layout-transition-fast), top var(--layout-transition-fast), right var(--layout-transition-fast), bottom var(--layout-transition-fast), left var(--layout-transition-fast);
+}
+
+.bookmark-control-button:hover,
+.bookmark-control-button:focus {
+ background-color: hsla(var(--theme-accent-rgb-text), 0.1);
+}
+
+.bookmark-control-button:disabled {
+ opacity: 0.25;
+}
+
+.is-bookmark-style-block .bookmark-control-left {
+ grid-column: 1 / span 2;
+ grid-row: 1;
+}
+
+.is-bookmark-style-block .bookmark-control-sort {
+ grid-column: 3 / span 2;
+ grid-row: 1;
+}
+
+.is-bookmark-style-block .bookmark-control-right {
+ grid-column: 5 / span 2;
+ grid-row: 1;
+}
+
+.is-bookmark-style-block .bookmark-control-edit {
+ grid-column: 1 / span 3;
+ grid-row: 2;
+}
+
+.is-bookmark-style-block .bookmark-control-remove {
+ grid-column: 4 / span 3;
+ grid-row: 2;
+}
+
+.is-bookmark-style-list .bookmark-control-left {
+ grid-column: 1;
+}
+
+.is-bookmark-style-list .bookmark-control-sort {
+ grid-column: 2;
+}
+
+.is-bookmark-style-list .bookmark-control-right {
+ grid-column: 3;
+}
+
+.is-bookmark-style-list .bookmark-control-edit {
+ grid-column: 4;
+}
+
+.is-bookmark-style-list .bookmark-control-remove {
+ grid-column: 5;
+}
+
+@media (min-width: 900px) {
+
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide .bookmark-control-left,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide .bookmark-control-left,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide .bookmark-control-left,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide .bookmark-control-left,
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide .bookmark-control-sort,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide .bookmark-control-sort,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide .bookmark-control-sort,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide .bookmark-control-sort,
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide .bookmark-control-right,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide .bookmark-control-right,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide .bookmark-control-right,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide .bookmark-control-right,
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide .bookmark-control-edit,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide .bookmark-control-edit,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide .bookmark-control-edit,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide .bookmark-control-edit,
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide .bookmark-control-remove,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide .bookmark-control-remove,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide .bookmark-control-remove,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide .bookmark-control-remove {
+ grid-row: 1;
+ }
+
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide .bookmark-control-left,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide .bookmark-control-left,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide .bookmark-control-left,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide .bookmark-control-left {
+ grid-column: 1;
+ }
+
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide .bookmark-control-sort,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide .bookmark-control-sort,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide .bookmark-control-sort,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide .bookmark-control-sort {
+ grid-column: 2;
+ }
+
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide .bookmark-control-right,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide .bookmark-control-right,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide .bookmark-control-right,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide .bookmark-control-right {
+ grid-column: 3;
+ }
+
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide .bookmark-control-edit,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide .bookmark-control-edit,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide .bookmark-control-edit,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide .bookmark-control-edit {
+ grid-column: 4;
+ }
+
+ .is-layout-breakpoint-md.is-bookmark-style-block .bookmark-wide .bookmark-control-remove,
+ .is-layout-breakpoint-lg.is-bookmark-style-block .bookmark-wide .bookmark-control-remove,
+ .is-layout-breakpoint-xl.is-bookmark-style-block .bookmark-wide .bookmark-control-remove,
+ .is-layout-breakpoint-xxl.is-bookmark-style-block .bookmark-wide .bookmark-control-remove {
+ grid-column: 5;
+ }
+}
+
+.is-bookmark-edit .bookmark-control .bookmark-control-button {
+ pointer-events: all;
+}
+
+.bookmark-url {
+ height: var(--bookmark-url-height);
+ width: 100%;
+ position: absolute;
+ overflow: hidden;
+ display: none;
+ justify-content: var(--bookmark-display-justify);
+ align-items: center;
+ transition: top var(--layout-duration-04) var(--layout-timing-bounce), bottom var(--layout-duration-04) var(--layout-timing-bounce);
+}
+
+.is-bookmark-url-show .bookmark-url {
+ display: flex;
+}
+
+.is-bookmark-alignment-top-left .bookmark-url,
+.is-bookmark-alignment-center-left .bookmark-url,
+.is-bookmark-alignment-bottom-left .bookmark-url {
+ justify-content: flex-start;
+}
+
+.is-bookmark-alignment-top-center .bookmark-url,
+.is-bookmark-alignment-center-center .bookmark-url,
+.is-bookmark-alignment-bottom-center .bookmark-url {
+ justify-content: center;
+}
+
+.is-bookmark-alignment-top-right .bookmark-url,
+.is-bookmark-alignment-center-right .bookmark-url,
+.is-bookmark-alignment-bottom-right .bookmark-url {
+ justify-content: flex-end;
+}
+
+.is-bookmark-url-show:not(.is-bookmark-edit) .bookmark:focus .bookmark-front,
+.is-bookmark-url-show:not(.is-bookmark-edit) .bookmark:focus-within .bookmark-front,
+.is-bookmark-url-show:not(.is-bookmark-edit) .bookmark:hover .bookmark-front {
+ height: calc(100% - var(--bookmark-url-height));
+}
+
+.is-bookmark-orientation-top .bookmark-url {
+ top: calc(-1 * var(--bookmark-url-height));
+}
+
+.is-bookmark-orientation-bottom .bookmark-url {
+ bottom: calc(-1 * var(--bookmark-url-height));
+}
+
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-url-show .bookmark:focus-within .bookmark-url,
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-url-show .bookmark:focus .bookmark-url,
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-url-show .bookmark:hover .bookmark-url,
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-url-show .bookmark:focus-within .bookmark-url,
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-url-show .bookmark:focus .bookmark-url,
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-url-show .bookmark:hover .bookmark-url {
+ transition-delay: calc(var(--bookmark-transition-delay) * 0.03s);
+}
+
+.is-bookmark-orientation-top.is-bookmark-url-show:not(.is-bookmark-edit) .bookmark:focus-within .bookmark-url,
+.is-bookmark-orientation-top.is-bookmark-url-show:not(.is-bookmark-edit) .bookmark:focus .bookmark-url,
+.is-bookmark-orientation-top.is-bookmark-url-show:not(.is-bookmark-edit) .bookmark:hover .bookmark-url {
+ top: 0;
+}
+
+.is-bookmark-orientation-bottom.is-bookmark-url-show:not(.is-bookmark-edit) .bookmark:focus-within .bookmark-url,
+.is-bookmark-orientation-bottom.is-bookmark-url-show:not(.is-bookmark-edit) .bookmark:focus .bookmark-url,
+.is-bookmark-orientation-bottom.is-bookmark-url-show:not(.is-bookmark-edit) .bookmark:hover .bookmark-url {
+ bottom: 0;
+}
+
+.bookmark-url-text {
+ margin: 0 1em;
+ font-size: 0.75em;
+ font-family: var(--theme-font-ui-name);
+ font-weight: var(--theme-font-ui-weight);
+ font-style: var(--theme-font-ui-style);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: hsl(var(--theme-accent-rgb-text));
+}
+
+.bookmark-sort-placeholder {
+ box-shadow: var(--edge);
+ border-radius: calc(var(--theme-radius) * 0.01em);
+}
+
+.bookmark-sort-placeholder.bookmark .bookmark-front,
+.bookmark-sort-placeholder.bookmark .bookmark-back {
+ visibility: hidden;
+}
+
+.is-theme-background-type-accent .bookmark-sort-placeholder {
+ box-shadow: var(--edge-on-accent);
+}
diff --git a/src/component/bookmark/index.js b/src/component/bookmark/index.js
new file mode 100644
index 00000000..9f205464
--- /dev/null
+++ b/src/component/bookmark/index.js
@@ -0,0 +1,506 @@
+import { state } from '../state';
+import { data } from '../data';
+import { layout } from '../layout';
+import { group } from '../group';
+import { header } from '../header';
+import { bookmarkDefault } from '../bookmarkDefault';
+import { bookmarkPreset } from '../bookmarkPreset';
+import { groupAndBookmark } from '../groupAndBookmark';
+
+import { BookmarkTile } from '../bookmarkTile';
+import { GroupEmpty } from '../groupEmpty';
+import { BookmarkForm } from '../bookmarkForm';
+import { StagedBookmark } from '../stagedBookmark';
+import { StagedGroup } from '../stagedGroup';
+import { Modal } from '../modal';
+
+import { node } from '../../utility/node';
+import { clearChildNode } from '../../utility/clearChildNode';
+import { applyCSSVar } from '../../utility/applyCSSVar';
+import { applyCSSClass } from '../../utility/applyCSSClass';
+import { applyCSSState } from '../../utility/applyCSSState';
+import { set } from '../../utility/set';
+import { get } from '../../utility/get';
+import { sortArrayOfObject } from '../../utility/sortArrayOfObject';
+
+import Sortable from 'sortablejs';
+
+import './index.css';
+
+const bookmark = {};
+
+bookmark.element = {
+ area: node('div|class:bookmark-area'),
+ group: node('div|class:bookmark-group')
+};
+
+bookmark.all = bookmarkPreset.get();
+
+bookmark.area = {
+ render: () => {
+
+ bookmark.element.area.appendChild(bookmark.element.group);
+
+ layout.element.bookmark.appendChild(bookmark.element.area);
+
+ }
+};
+
+bookmark.tile = {
+ current: []
+};
+
+bookmark.item = {
+ mod: {
+ add: (bookmarkData) => {
+
+ bookmark.all[bookmarkData.position.destination.group].items.splice(bookmarkData.position.destination.item, 0, bookmarkData.link);
+
+ },
+ edit: (bookmarkData) => {
+
+ bookmark.all[bookmarkData.position.origin.group].items.splice(bookmarkData.position.origin.item, 1);
+
+ bookmark.all[bookmarkData.position.destination.group].items.splice(bookmarkData.position.destination.item, 0, bookmarkData.link);
+
+ },
+ move: (bookmarkData) => {
+
+ bookmarkData.link = bookmark.all[bookmarkData.position.origin.group].items.splice(bookmarkData.position.origin.item, 1)[0];
+
+ bookmark.all[bookmarkData.position.destination.group].items.splice(bookmarkData.position.destination.item, 0, bookmarkData.link);
+
+ },
+ remove: (bookmarkData) => {
+
+ bookmark.all[bookmarkData.position.origin.group].items.splice(bookmarkData.position.origin.item, 1);
+
+ },
+ propagate: (bookmarkData) => {
+
+ if (bookmarkData.propagate.display || bookmarkData.propagate.layout || bookmarkData.propagate.theme) {
+
+ bookmark.all.forEach((item, i) => {
+
+ item.items.forEach((item, i) => {
+
+ if (bookmarkData.propagate.display) {
+ item.display.visual.show = bookmarkData.link.display.visual.show;
+ item.display.name.show = bookmarkData.link.display.name.show;
+ };
+
+ if (bookmarkData.propagate.layout) {
+ item.display.visual.size = bookmarkData.link.display.visual.size;
+ item.display.name.size = bookmarkData.link.display.name.size;
+ item.display.gutter = bookmarkData.link.display.gutter;
+ item.display.rotate = bookmarkData.link.display.rotate;
+ item.display.translate = bookmarkData.link.display.translate;
+ item.display.alignment = bookmarkData.link.display.alignment;
+ item.display.direction = bookmarkData.link.display.direction;
+ item.display.order = bookmarkData.link.display.order;
+ };
+
+ if (bookmarkData.propagate.theme) {
+ item.accent = bookmarkData.link.accent;
+ item.color = bookmarkData.link.color;
+ item.border = bookmarkData.link.border;
+ item.display.visual.shadow = bookmarkData.link.display.visual.shadow;
+ };
+
+ });
+
+ });
+
+ };
+
+ },
+ applyVar: (path, value) => {
+
+ bookmark.all.forEach((item, i) => {
+
+ item.items.forEach((item, i) => {
+
+ set({ object: item, path: path, value: value });
+
+ });
+
+ });
+
+ },
+ sort: {
+ letter: () => {
+
+ bookmark.all.forEach((item, i) => {
+ item.items = sortArrayOfObject(item.items, 'display.name.text');
+ });
+
+ },
+ icon: () => {
+
+ bookmark.all.forEach((item, i) => {
+ item.items = sortArrayOfObject(item.items, 'display.visual.letter.text');
+ });
+
+ },
+ name: () => {
+
+ bookmark.all.forEach((item, i) => {
+ item.items = sortArrayOfObject(item.items, 'display.visual.icon.name');
+ });
+
+ }
+ }
+ },
+ render: (groupIndex) => {
+
+ const addBookmarkToGroup = (bookmarkData, groupIndex, bookmarkIndex) => {
+
+ const currentBookmarkData = new StagedBookmark(bookmarkData);
+
+ currentBookmarkData.position.origin.group = groupIndex;
+
+ currentBookmarkData.position.origin.item = bookmarkIndex;
+
+ currentBookmarkData.position.destination.group = groupIndex;
+
+ currentBookmarkData.position.destination.item = bookmarkIndex;
+
+ const bookmarkTile = new BookmarkTile({ bookmarkData: currentBookmarkData });
+
+ bookmarkTile.tile().groupIndex = groupIndex;
+
+ bookmarkTile.tile().index = bookmarkIndex;
+
+ group.area.current[groupIndex].element.body.appendChild(bookmarkTile.tile());
+
+ bookmark.tile.current.push(bookmarkTile);
+
+ };
+
+ const addEmptyGroup = (groupIndex) => {
+
+ const emptyGroupItem = new GroupEmpty({ groupIndex: groupIndex });
+
+ group.area.current[groupIndex].element.body.appendChild(emptyGroupItem.empty());
+
+ };
+
+ if (state.get.current().search) {
+
+ // searching
+
+ if (header.element.search.resultCount().total > 0) {
+
+ bookmark.all.forEach((item, i) => {
+
+ const groupIndex = i;
+
+ if (header.element.search.resultCount().group[groupIndex].searchMatch > 0) {
+
+ item.items.forEach((item, i) => {
+
+ const bookmarkIndex = i;
+
+ if (item.searchMatch) {
+
+ addBookmarkToGroup(item, groupIndex, bookmarkIndex);
+
+ };
+
+ });
+
+ };
+
+ });
+
+ };
+
+
+ } else {
+
+ // not searching
+
+ bookmark.all.forEach((item, i) => {
+
+ const groupIndex = i;
+
+ if (item.items.length > 0) {
+
+ item.items.forEach((item, i) => {
+
+ const bookmarkIndex = i;
+
+ addBookmarkToGroup(item, groupIndex, bookmarkIndex);
+
+ });
+
+ } else {
+
+ addEmptyGroup(groupIndex);
+
+ };
+
+ });
+
+ };
+
+ },
+ clear: () => {
+
+ bookmark.tile.current = [];
+
+ }
+};
+
+bookmark.edit = {
+ open: () => {
+
+ state.get.current().bookmark.edit = true;
+
+ bookmark.edit.render();
+
+ },
+ close: () => {
+
+ state.get.current().bookmark.edit = false;
+
+ bookmark.edit.render();
+
+ },
+ toggle: () => {
+
+ if (state.get.current().bookmark.edit) {
+ bookmark.edit.close();
+ } else {
+ bookmark.edit.open();
+ };
+
+ },
+ render: () => {
+
+ applyCSSState('bookmark.edit');
+
+ if (bookmark.tile.current.length > 0) {
+
+ bookmark.tile.current.forEach((item, i) => {
+
+ if (state.get.current().bookmark.edit) {
+ item.control.enable();
+ } else {
+ item.control.disable();
+ };
+
+ });
+
+ };
+
+ }
+};
+
+bookmark.direction = {
+ mod: {
+ vertical: () => {
+
+ bookmark.all.forEach((item, i) => {
+ item.items.forEach((item, i) => {
+
+ item.display.direction = 'vertical';
+
+ });
+ });
+
+ },
+ horizontal: () => {
+
+ bookmark.all.forEach((item, i) => {
+ item.items.forEach((item, i) => {
+
+ item.display.direction = 'horizontal';
+
+ });
+ });
+
+ }
+ }
+};
+
+bookmark.add = {
+ mod: {
+ open: () => { state.get.current().bookmark.add = true; },
+ close: () => { state.get.current().bookmark.add = false; }
+ },
+ render: ({
+ groupIndex = false
+ } = {}) => {
+
+ const newBookmarkData = new StagedBookmark();
+
+ newBookmarkData.type.new = true;
+
+ newBookmarkData.position.destination.item = (bookmark.all.length > 0) ? bookmark.all[0].items.length : 0;
+
+ if (groupIndex || groupIndex === 0) {
+ newBookmarkData.position.destination.group = groupIndex;
+
+ newBookmarkData.position.destination.item = bookmark.all[groupIndex].items.length;
+ };
+
+ if (!bookmark.all.length > 0) {
+ newBookmarkData.group.destination = 'new';
+ };
+
+ const bookmarkForm = new BookmarkForm({ bookmarkData: newBookmarkData });
+
+ const addModal = new Modal({
+ heading: 'Add a new Bookmark',
+ content: bookmarkForm.form(),
+ successText: 'Add',
+ width: 60,
+ maxHeight: true,
+ openAction: () => {
+
+ bookmark.add.mod.open();
+
+ data.save();
+
+ },
+ closeAction: () => {
+
+ bookmark.add.mod.close();
+
+ data.save();
+
+ },
+ successAction: () => {
+
+ switch (newBookmarkData.group.destination) {
+ case 'new':
+
+ const newGroupData = new StagedGroup();
+
+ newGroupData.group.name.text = newBookmarkData.group.name;
+
+ newGroupData.newGroup();
+
+ group.item.mod.add(newGroupData);
+
+ newBookmarkData.position.destination.group = bookmark.all.length - 1;
+
+ layout.area.assemble();
+
+ break;
+
+ };
+
+ newBookmarkData.link.timestamp = new Date().getTime();
+
+ bookmark.item.mod.add(newBookmarkData);
+
+ bookmark.item.mod.propagate(newBookmarkData);
+
+ bookmark.add.mod.close();
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ },
+ dismissAction: () => {
+
+ bookmark.add.mod.close();
+
+ data.save();
+
+ }
+ });
+
+ addModal.open();
+
+ }
+};
+
+bookmark.sort = {
+ sortable: [],
+ bind: () => {
+
+ bookmark.sort.sortable = [];
+
+ group.area.current.forEach((item, i) => {
+
+ bookmark.sort.sortable.push(Sortable.create(item.element.body, {
+ handle: '.bookmark-control-sort',
+ group: 'bookmark-sort',
+ ghostClass: 'bookmark-sort-placeholder',
+ animation: 500,
+ easing: 'cubic-bezier(0.8, 0.8, 0.4, 1.4)',
+ filter: '.group-empty',
+ onEnd: (event) => {
+
+ // console.log('============ debug sort ============');
+ // console.log(event);
+ // console.log('group:', 'origin', event.from.position.origin, 'destination', event.to.position.origin);
+ // console.log('item:', 'origin', event.oldIndex, 'destination', event.newIndex);
+
+ const newBookmarkData = new StagedBookmark();
+
+ newBookmarkData.position.origin.group = event.from.position.origin;
+
+ newBookmarkData.position.origin.item = event.oldIndex;
+
+ newBookmarkData.position.destination.group = event.to.position.origin;
+
+ newBookmarkData.position.destination.item = event.newIndex;
+
+ newBookmarkData.type.existing = true;
+
+ bookmark.item.mod.move(newBookmarkData);
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ }));
+
+ });
+
+ }
+};
+
+bookmark.count = () => {
+
+ let count = 0;
+
+ bookmark.all.forEach((item, i) => { count = count + item.items.length });
+
+ return count;
+
+};
+
+bookmark.restore = (dataToRestore) => {
+ bookmark.all = dataToRestore.bookmark;
+ console.log('bookmark restored');
+};
+
+bookmark.init = () => {
+ applyCSSVar([
+ 'bookmark.size'
+ ]);
+ applyCSSClass([
+ 'bookmark.item.justify',
+ 'bookmark.orientation',
+ 'bookmark.style'
+ ]);
+ applyCSSState([
+ 'bookmark.show',
+ 'bookmark.hoverScale.show',
+ 'bookmark.shadow.show',
+ 'bookmark.line.show',
+ 'bookmark.url.show'
+ ]);
+ bookmark.area.render();
+ bookmark.add.mod.close();
+ bookmark.edit.render();
+};
+
+export { bookmark };
diff --git a/src/component/bookmarkDefault/index.js b/src/component/bookmarkDefault/index.js
new file mode 100644
index 00000000..c3b02970
--- /dev/null
+++ b/src/component/bookmarkDefault/index.js
@@ -0,0 +1,19 @@
+export const bookmarkDefault = {
+ url: '',
+ display: {
+ alignment: 'center-center',
+ direction: 'vertical',
+ order: 'visual-name',
+ rotate: 0,
+ translate: { x: 0, y: 0 },
+ gutter: 25,
+ name: { show: true, text: '', size: 7 },
+ visual: { show: true, type: 'letter', size: 25, letter: { text: '' }, icon: { name: '', prefix: '', label: '' }, image: { url: '' }, shadow: { size: 0 } }
+ },
+ accent: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } },
+ color: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 }, opacity: 100 },
+ background: { show: false, type: 'image', opacity: 100, image: { url: '' }, video: { url: '' } },
+ border: 0,
+ shape: { wide: false, tall: false },
+ timestamp: null
+};
diff --git a/src/component/bookmarkEmpty/index.css b/src/component/bookmarkEmpty/index.css
new file mode 100644
index 00000000..f90fd76c
--- /dev/null
+++ b/src/component/bookmarkEmpty/index.css
@@ -0,0 +1,17 @@
+.bookmark-empty {
+ background-color: hsla(var(--theme-primary-040), 0.2);
+ padding: 2em 3em;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ height: inherit;
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 1em;
+}
+
+.bookmark-empty-string:not(:last-child) {
+ margin-bottom: 0;
+}
diff --git a/src/component/bookmarkEmpty/index.js b/src/component/bookmarkEmpty/index.js
new file mode 100644
index 00000000..930197af
--- /dev/null
+++ b/src/component/bookmarkEmpty/index.js
@@ -0,0 +1,43 @@
+import { state } from '../state';
+import { bookmark } from '../bookmark';
+
+import { Button } from '../button';
+
+import { node } from '../../utility/node';
+
+import './index.css';
+
+export const BookmarkEmpty = function() {
+
+ this.element = {
+ empty: node('div|class:bookmark-empty'),
+ description: node('p:No Groups or Bookmarks|class:bookmark-empty-headline small muted')
+ };
+
+ this.control = {};
+
+ this.control.button = {
+ add: new Button({
+ text: 'Add a Bookmark',
+ size: 'small',
+ func: () => {
+ bookmark.add.render();
+ }
+ })
+ };
+
+ this.assemble = () => {
+
+ this.element.empty.appendChild(this.element.description);
+
+ this.element.empty.appendChild(this.control.button.add.button);
+
+ };
+
+ this.empty = () => {
+ return this.element.empty;
+ };
+
+ this.assemble();
+
+};
diff --git a/src/component/bookmarkForm/index.css b/src/component/bookmarkForm/index.css
new file mode 100644
index 00000000..8f7ea66b
--- /dev/null
+++ b/src/component/bookmarkForm/index.css
@@ -0,0 +1,66 @@
+:root {
+ --bookmark-form-space: calc((var(--form-space) / 4) * 1em);
+}
+
+.bookmark-form {
+ display: block;
+}
+
+@media (min-width: 900px) {
+ .bookmark-form {
+ display: grid;
+ grid-template-columns: 6fr 2fr;
+ gap: var(--bookmark-form-space);
+ align-items: stretch;
+ min-height: 60vh;
+ }
+}
+
+.bookmark-form-main {
+ padding-bottom: var(--bookmark-form-space);
+}
+
+.bookmark-form-aside {
+ display: none;
+}
+
+@media (min-width: 900px) {
+ .bookmark-form-aside {
+ display: block;
+ }
+}
+
+.bookmark-form-text-icon {
+ position: relative;
+}
+
+.bookmark-form-text-icon:empty:before {
+ content: "";
+ background-color: hsl(var(--theme-primary-040));
+ top: 50%;
+ left: 50%;
+ position: absolute;
+ width: 0.5em;
+ height: 0.5em;
+ border-radius: 50%;
+ display: block;
+ transform: translate(-50%, -50%);
+}
+
+.bookmark-form-text-icon .bookmark-form-icon {
+ transform: scale(1) rotate(0deg);
+ transition: transform var(--layout-transition-extra-fast);
+}
+
+.bookmark-form-text-icon:not(.disabled):hover .bookmark-form-icon {
+ transform: scale(2) rotate(360deg);
+ z-index: 1;
+}
+
+.bookmark-form-text-icon:not(.disabled):active .bookmark-form-icon {
+ transform: scale(4) rotate(360deg);
+}
+
+.bookmark-form-icon {
+ font-size: 1.5em;
+}
diff --git a/src/component/bookmarkForm/index.js b/src/component/bookmarkForm/index.js
new file mode 100644
index 00000000..1fc37eb7
--- /dev/null
+++ b/src/component/bookmarkForm/index.js
@@ -0,0 +1,1254 @@
+import { bookmark } from '../bookmark';
+import { bookmarkDefault } from '../bookmarkDefault';
+import { bookmarkMinMax } from '../bookmarkMinMax';
+
+import * as form from '../form';
+
+import { Button } from '../button';
+import { Suggest } from '../suggest';
+import { Collapse } from '../collapse';
+import { Tab } from '../tab';
+import { BookmarkPreview } from '../bookmarkPreview';
+
+import { Control_helperText } from '../control/helperText';
+import { Control_inputButton } from '../control/inputButton';
+import { Control_groupText } from '../control/groupText';
+import { Control_radio } from '../control/radio';
+import { Control_radioGrid } from '../control/radioGrid';
+import { Control_checkbox } from '../control/checkbox';
+import { Control_slider } from '../control/slider';
+import { Control_sliderSlim } from '../control/sliderSlim';
+import { Control_colorMixer } from '../control/colorMixer';
+import { Control_color } from '../control/color';
+import { Control_text } from '../control/text';
+import { Control_select } from '../control/select';
+
+import { node } from '../../utility/node';
+import { complexNode } from '../../utility/complexNode';
+import { isValidString } from '../../utility/isValidString';
+import { trimString } from '../../utility/trimString';
+import { ordinalNumber } from '../../utility/ordinalNumber';
+import { randomString } from '../../utility/randomString';
+import { randomNumber } from '../../utility/randomNumber';
+
+import './index.css';
+
+export const BookmarkForm = function({
+ bookmarkData = false
+} = {}) {
+
+ this.element = {
+ form: node('form|class:bookmark-form'),
+ main: node('div|class:bookmark-form-main'),
+ aside: node('div|class:bookmark-form-aside')
+ };
+
+ this.selectOption = {};
+
+ this.selectOption.group = () => {
+
+ const option = [];
+
+ if (bookmark.all.length > 0) {
+
+ bookmark.all.forEach((item, i) => {
+
+ option.push(isValidString(item.name.text) ? item.name.text : ordinalNumber(i + 1) + ' unnamed group');
+
+ });
+
+ };
+
+ return option;
+
+ };
+
+ this.selectOption.item = () => {
+
+ const option = [];
+
+ if (bookmark.all[bookmarkData.position.destination.group].items.length > 0) {
+
+ let count = bookmark.all[bookmarkData.position.destination.group].items.length;
+
+ if (bookmarkData.type.new || !(bookmarkData.position.origin.group === bookmarkData.position.destination.group)) {
+ count++;
+ };
+
+ for (var i = 1; i <= count; i++) {
+
+ option.push(ordinalNumber(i));
+
+ };
+
+ } else {
+
+ option.push(ordinalNumber(1));
+
+ };
+
+ return option;
+
+ };
+
+ this.control = {};
+
+ this.control.bookmark = {
+ url: new Control_text({
+ object: bookmarkData.link,
+ path: 'url',
+ id: 'url',
+ value: bookmarkData.link.url,
+ placeholder: 'https://www.example.com/',
+ labelText: 'URL',
+ action: () => {
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ display: {
+ alignment: new Control_radioGrid({
+ object: bookmarkData.link,
+ radioGroup: [
+ { id: 'toolbar-position-top-left', labelText: 'Top Left', value: 'top-left', position: 1 },
+ { id: 'toolbar-position-top-center', labelText: 'Top Center', value: 'top-center', position: 2 },
+ { id: 'toolbar-position-top-right', labelText: 'Top Right', value: 'top-right', position: 3 },
+ { id: 'toolbar-position-center-left', labelText: 'Center Left', value: 'center-left', position: 4 },
+ { id: 'toolbar-position-center-center', labelText: 'Center Center', value: 'center-center', position: 5 },
+ { id: 'toolbar-position-center-right', labelText: 'Center Right', value: 'center-right', position: 6 },
+ { id: 'toolbar-position-bottom-left', labelText: 'Bottom Left', value: 'bottom-left', position: 7 },
+ { id: 'toolbar-position-bottom-center', labelText: 'Bottom Center', value: 'bottom-center', position: 8 },
+ { id: 'toolbar-position-bottom-right', labelText: 'Bottom Right', value: 'bottom-right', position: 9 }
+ ],
+ label: 'Visual Element and Name alignment',
+ groupName: 'display-alignment',
+ path: 'display.alignment',
+ gridSize: '3x3',
+ action: () => {
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ direction: new Control_radio({
+ object: bookmarkData.link,
+ radioGroup: [
+ { id: 'display-direction-vertical', labelText: 'Vertical', description: 'Stack the Visual Element and Name one above the other.', value: 'vertical' },
+ { id: 'display-direction-horizontal', labelText: 'Horizontal', description: 'Arrange the Visual Element and Name side by side.', value: 'horizontal' }
+ ],
+ groupName: 'display-direction',
+ path: 'display.direction',
+ action: () => {
+ this.disable();
+ this.preview.update.style(bookmarkData);
+ }
+ }),
+ order: new Control_radio({
+ object: bookmarkData.link,
+ radioGroup: [
+ { id: 'display-order-visual-name', labelText: 'Visual element then name', description: 'Place the Visual Element before the Name.', value: 'visual-name' },
+ { id: 'display-order-name-visual', labelText: 'Name then visual element', description: 'Place the Name before the Visual Element.', value: 'name-visual' }
+ ],
+ groupName: 'display-order',
+ path: 'display.order',
+ action: () => {
+ this.disable();
+ this.preview.update.style(bookmarkData);
+ }
+ }),
+ rotate: new Control_sliderSlim({
+ object: bookmarkData.link,
+ path: 'display.rotate',
+ id: 'display-rotate',
+ labelText: 'Rotate',
+ value: bookmarkData.link.display.rotate,
+ defaultValue: bookmarkDefault.display.rotate,
+ min: bookmarkMinMax.display.rotate.min,
+ max: bookmarkMinMax.display.rotate.max,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ }),
+ translate: {
+ label: form.label({
+ text: 'Adjust Visual Element position',
+ noPadding: true
+ }),
+ x: new Control_sliderSlim({
+ object: bookmarkData.link,
+ path: 'display.translate.x',
+ id: 'display-translate-x',
+ labelText: 'Horizontal',
+ value: bookmarkData.link.display.translate.x,
+ defaultValue: bookmarkDefault.display.translate.x,
+ min: bookmarkMinMax.display.translate.x.min,
+ max: bookmarkMinMax.display.translate.x.max,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ }),
+ y: new Control_sliderSlim({
+ object: bookmarkData.link,
+ path: 'display.translate.y',
+ id: 'display-translate-y',
+ labelText: 'Vertical',
+ value: bookmarkData.link.display.translate.y,
+ defaultValue: bookmarkDefault.display.translate.y,
+ min: bookmarkMinMax.display.translate.y.min,
+ max: bookmarkMinMax.display.translate.y.max,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ })
+ },
+ gutter: new Control_sliderSlim({
+ object: bookmarkData.link,
+ path: 'display.gutter',
+ id: 'display-gutter',
+ labelText: 'Gutter',
+ value: bookmarkData.link.display.gutter,
+ defaultValue: bookmarkDefault.display.gutter,
+ min: bookmarkMinMax.display.gutter.min,
+ max: bookmarkMinMax.display.gutter.max,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ }),
+ name: {
+ show: new Control_checkbox({
+ object: bookmarkData.link,
+ path: 'display.name.show',
+ id: 'display-name-show',
+ labelText: 'Show Name',
+ action: () => {
+ this.disable();
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ text: new Control_text({
+ object: bookmarkData.link,
+ path: 'display.name.text',
+ id: 'display-name-text',
+ value: bookmarkData.link.display.name.text,
+ placeholder: 'Example',
+ labelText: 'Bookmark name',
+ srOnly: true,
+ action: () => {
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ size: new Control_sliderSlim({
+ object: bookmarkData.link,
+ path: 'display.name.size',
+ id: 'display-name-size',
+ labelText: 'Name size',
+ value: bookmarkData.link.display.name.size,
+ defaultValue: bookmarkDefault.display.name.size,
+ min: bookmarkMinMax.display.name.size.min,
+ max: bookmarkMinMax.display.name.size.max,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ })
+ },
+ visual: {
+ show: new Control_checkbox({
+ object: bookmarkData.link,
+ path: 'display.visual.show',
+ id: 'display-visual-show',
+ labelText: 'Show Visual Element',
+ description: 'Display Letters, Icon or an Image on this Bookmark hexagon.',
+ action: () => {
+ this.disable();
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ type: new Control_radio({
+ object: bookmarkData.link,
+ radioGroup: [
+ { id: 'display-visual-type-letter', labelText: 'Letter', value: 'letter' },
+ { id: 'display-visual-type-icon', labelText: 'Icon', value: 'icon' },
+ { id: 'display-visual-type-image', labelText: 'Image', value: 'image' }
+ ],
+ groupName: 'display-visual-type',
+ path: 'display.visual.type',
+ action: () => {
+ this.disable();
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ size: new Control_sliderSlim({
+ object: bookmarkData.link,
+ path: 'display.visual.size',
+ id: 'display-visual-size',
+ labelText: 'Visual size',
+ value: bookmarkData.link.display.visual.size,
+ defaultValue: bookmarkDefault.display.visual.size,
+ min: bookmarkMinMax.display.visual.size.min,
+ max: bookmarkMinMax.display.visual.size.max,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ }),
+ letter: {
+ text: new Control_text({
+ object: bookmarkData.link,
+ path: 'display.visual.letter.text',
+ id: 'display-visual-letter-text',
+ value: bookmarkData.link.display.visual.letter.text,
+ placeholder: 'E',
+ labelText: 'Bookmark letter',
+ srOnly: true,
+ action: () => {
+ this.preview.update.assemble(bookmarkData);
+ }
+ })
+ },
+ icon: {
+ text: new Control_text({
+ object: bookmarkData.link,
+ path: 'display.visual.icon.label',
+ id: 'display-visual-icon-label',
+ value: bookmarkData.link.display.visual.icon.label,
+ placeholder: 'FontAwesome Brands or Icons',
+ labelText: 'Bookmark icon',
+ srOnly: true,
+ action: () => {
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ preview: new Control_groupText({
+ classList: ['bookmark-form-text-icon', 'form-group-item-small']
+ }),
+ remove: new Button({
+ text: 'Remove icon',
+ srOnly: true,
+ style: ['line'],
+ iconName: 'cross',
+ classList: ['form-group-item-small'],
+ func: () => {
+ bookmarkData.link.display.visual.icon.label = '';
+ bookmarkData.link.display.visual.icon.prefix = '';
+ bookmarkData.link.display.visual.icon.name = '';
+ this.update();
+ this.preview.update.assemble(bookmarkData);
+ }
+ })
+ },
+ image: {
+ url: new Control_text({
+ object: bookmarkData.link,
+ path: 'display.visual.image.url',
+ id: 'display-visual-image-url',
+ value: bookmarkData.link.display.visual.image.url,
+ placeholder: 'https://www.example.com/image.jpg',
+ labelText: 'Bookmark image',
+ srOnly: true,
+ action: () => {
+ this.preview.update.assemble(bookmarkData);
+ }
+ })
+ },
+ shadow: {
+ size: new Control_sliderSlim({
+ object: bookmarkData.link,
+ path: 'display.visual.shadow.size',
+ id: 'display-visual-shadow-size',
+ labelText: 'Visual shadow',
+ value: bookmarkData.link.display.visual.shadow.size,
+ defaultValue: bookmarkDefault.display.visual.shadow.size,
+ min: bookmarkMinMax.display.visual.shadow.size.min,
+ max: bookmarkMinMax.display.visual.shadow.size.max,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ })
+ }
+ }
+ },
+ accent: {
+ by: new Control_radio({
+ object: bookmarkData.link,
+ radioGroup: [
+ { id: 'accent-by-theme', labelText: 'Theme Accent', description: 'Use the Accent defined by the Theme.', value: 'theme' },
+ { id: 'accent-by-custom', labelText: 'Custom Accent', description: 'Override the Theme Accent.', value: 'custom' }
+ ],
+ groupName: 'accent-by',
+ path: 'accent.by',
+ action: () => {
+ this.collapse.accent.update();
+ this.disable();
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ color: new Control_colorMixer({
+ object: bookmarkData.link,
+ path: 'accent',
+ id: 'accent',
+ labelText: 'Accent',
+ srOnly: true,
+ defaultValue: JSON.parse(JSON.stringify(bookmarkDefault.accent.rgb)),
+ minMaxObject: bookmarkMinMax,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ })
+ },
+ color: {
+ by: new Control_radio({
+ object: bookmarkData.link,
+ radioGroup: [
+ { id: 'color-by-theme', labelText: 'Theme colour', description: 'Use the Colour defined by the Theme.', value: 'theme' },
+ { id: 'color-by-custom', labelText: 'Custom colour', description: 'Override the Theme colour.', value: 'custom' }
+ ],
+ groupName: 'color-by',
+ path: 'color.by',
+ action: () => {
+ this.collapse.color.update();
+ this.disable();
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ color: new Control_colorMixer({
+ object: bookmarkData.link,
+ path: 'color',
+ id: 'color',
+ labelText: 'Colour',
+ srOnly: true,
+ defaultValue: JSON.parse(JSON.stringify(bookmarkDefault.color.rgb)),
+ minMaxObject: bookmarkMinMax,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ }),
+ opacity: new Control_sliderSlim({
+ object: bookmarkData.link,
+ path: 'color.opacity',
+ id: 'color-opacity',
+ labelText: 'Opacity',
+ value: bookmarkData.link.color.opacity,
+ defaultValue: bookmarkDefault.color.opacity,
+ min: bookmarkMinMax.color.opacity.min,
+ max: bookmarkMinMax.color.opacity.max,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ })
+ },
+ background: {
+ show: new Control_checkbox({
+ object: bookmarkData.link,
+ path: 'background.show',
+ id: 'background-show',
+ labelText: 'Show background',
+ description: 'Display an Image or video Background on this Bookmark tile.',
+ action: () => {
+ this.collapse.background.update();
+ this.disable();
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ type: new Control_radio({
+ object: bookmarkData.link,
+ radioGroup: [
+ { id: 'background-type-image', labelText: 'Image', value: 'image' },
+ { id: 'background-type-video', labelText: 'Video', value: 'video' }
+ ],
+ groupName: 'background-type',
+ path: 'background.type',
+ action: () => {
+ this.disable();
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ opacity: new Control_sliderSlim({
+ object: bookmarkData.link,
+ path: 'background.opacity',
+ id: 'background-opacity',
+ labelText: 'Opacity',
+ value: bookmarkData.link.background.opacity,
+ defaultValue: bookmarkDefault.background.opacity,
+ min: bookmarkMinMax.background.opacity.min,
+ max: bookmarkMinMax.background.opacity.max,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ }),
+ image: {
+ url: new Control_text({
+ object: bookmarkData.link,
+ path: 'background.image.url',
+ id: 'background-image-url',
+ value: bookmarkData.link.background.image.url,
+ placeholder: 'https://www.example.com/image.jpg',
+ labelText: 'Background image URL',
+ srOnly: true,
+ action: () => {
+ this.preview.update.assemble(bookmarkData);
+ }
+ })
+ },
+ video: {
+ url: new Control_text({
+ object: bookmarkData.link,
+ path: 'background.video.url',
+ id: 'background-video-url',
+ value: bookmarkData.link.background.video.url,
+ placeholder: 'https://www.example.com/video.mp4',
+ labelText: 'Background video URL',
+ srOnly: true,
+ action: () => {
+ this.preview.update.assemble(bookmarkData);
+ }
+ })
+ }
+ },
+ border: new Control_sliderSlim({
+ object: bookmarkData.link,
+ path: 'border',
+ id: 'border',
+ labelText: 'Border',
+ value: bookmarkData.link.border,
+ defaultValue: bookmarkDefault.border,
+ min: bookmarkMinMax.border.min,
+ max: bookmarkMinMax.border.max,
+ action: () => {
+ this.preview.update.style(bookmarkData);
+ }
+ }),
+ shape: {
+ wide: new Control_checkbox({
+ object: bookmarkData.link,
+ path: 'shape.wide',
+ id: 'shape-wide',
+ labelText: 'Wide tile',
+ description: 'Bookmark tile to span across two columns.',
+ action: () => {
+ this.preview.update.assemble(bookmarkData);
+ }
+ }),
+ tall: new Control_checkbox({
+ object: bookmarkData.link,
+ path: 'shape.tall',
+ id: 'shape-tall',
+ labelText: 'Tall tile',
+ description: 'Bookmark tile to span across two columns.',
+ action: () => {
+ this.preview.update.assemble(bookmarkData);
+ }
+ })
+ }
+ };
+
+ this.control.group = {
+ destination: new Control_radio({
+ object: bookmarkData,
+ radioGroup: [
+ { id: 'group-destination-existing', labelText: 'Existing Group', value: 'existing' },
+ { id: 'group-destination-new', labelText: 'New Group', value: 'new' }
+ ],
+ groupName: 'group.destination',
+ path: 'group.destination',
+ action: () => {
+ this.disable();
+ }
+ }),
+ name: new Control_text({
+ object: bookmarkData,
+ path: 'group.name',
+ id: 'group-name',
+ value: bookmarkData.group.name,
+ placeholder: 'Example group',
+ labelText: 'URL',
+ srOnly: true
+ }),
+ random: new Button({
+ text: 'Random Group name',
+ style: ['line'],
+ func: () => {
+ bookmarkData.group.name = randomString({ adjectivesCount: randomNumber(1, 3) });
+ this.control.group.name.update();
+ }
+ }),
+ position: {
+ group: new Control_select({
+ object: bookmarkData,
+ path: 'position.destination.group',
+ id: 'position-destination-group',
+ labelText: 'Group',
+ srOnly: true,
+ option: (bookmark.all.length > 0) ? this.selectOption.group() : [],
+ selected: bookmarkData.position.destination.group,
+ action: () => {
+
+ if (bookmarkData.type.new) {
+ bookmarkData.position.destination.item = bookmark.all[bookmarkData.position.destination.group].items.length;
+ } else {
+
+ if (bookmarkData.position.origin.group === bookmarkData.position.destination.group) {
+ bookmarkData.position.destination.item = bookmark.all[bookmarkData.position.destination.group].items.length - 1;
+ } else {
+ bookmarkData.position.destination.item = bookmark.all[bookmarkData.position.destination.group].items.length;
+ };
+
+ };
+
+ this.control.group.position.item.updateOption(this.selectOption.item(), bookmarkData.position.destination.item);
+
+ }
+ }),
+ item: new Control_select({
+ object: bookmarkData,
+ path: 'position.destination.item',
+ id: 'position-destination-item',
+ labelText: 'Position',
+ option: (bookmark.all.length > 0) ? this.selectOption.item() : [],
+ selected: bookmarkData.position.destination.item
+ })
+ }
+ };
+
+ this.control.propagate = {
+ visual: new Control_checkbox({
+ object: bookmarkData.propagate,
+ path: 'display',
+ id: 'apply-to-all-display',
+ labelText: 'Apply Show Visual Element and Show Name to other Bookmarks',
+ description: [
+ 'When saved, apply the above visibility to all other Bookmarks.',
+ 'Only the Show Visual Element and Show Name settings will be applied to all.'
+ ]
+ }),
+ layout: new Control_checkbox({
+ object: bookmarkData.propagate,
+ path: 'layout',
+ id: 'apply-to-all-layout',
+ labelText: 'Apply this Layout to other Bookmarks',
+ description: [
+ 'When saved, apply the above Layout to all other Bookmarks.',
+ 'Only the Visual and Name settings will be applied to all.'
+ ]
+ }),
+ theme: new Control_checkbox({
+ object: bookmarkData.propagate,
+ path: 'theme',
+ id: 'apply-to-all-theme',
+ labelText: 'Apply this Theme to other Bookmarks',
+ description: [
+ 'When saved, apply the above Theme to all other Bookmarks.',
+ 'Only the Colour, Accent, Opacity, Border and Visual shadow settings will be applied to all.'
+ ]
+ })
+ };
+
+ this.helper = {
+ bookmark: {
+ display: {
+ visual: {
+ shadow: {
+ size: new Control_helperText({
+ text: ['Visual shadow only applies to a Letter or Icon.']
+ })
+ }
+ }
+ },
+ background: {
+ image: new Control_helperText({
+ text: ['Background image only supports a direct URL to an image file.']
+ }),
+ video: new Control_helperText({
+ text: ['Background video only supports a direct URL to a video file. Supports MP4 and WebM format.', 'YouTube page URLs can not be used.']
+ })
+ }
+ }
+ };
+
+ this.area = {};
+
+ this.area.accent = () => {
+ return node('div', [
+ this.control.bookmark.accent.color.wrap()
+ ]);
+ };
+
+ this.area.color = () => {
+ return node('div', [
+ this.control.bookmark.color.color.wrap()
+ ]);
+ };
+
+ this.area.visual = () => {
+ return form.fieldset({
+ children: [
+ form.wrap({
+ children: [
+ node('h2:Visual & Name|class:mb-2'),
+ node('p:Display Letters, Icon, Image and a Name on this Bookmark tile.|class:mb-5')
+ ]
+ }),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.bookmark.display.visual.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.bookmark.display.visual.type.radioSet[0].wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.bookmark.display.visual.letter.text.wrap()
+ ]
+ })
+ ]
+ }),
+ this.control.bookmark.display.visual.type.radioSet[1].wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ form.wrap({
+ children: [
+ this.control.bookmark.display.visual.icon.text.label,
+ form.group({
+ block: true,
+ children: [
+ this.control.bookmark.display.visual.icon.text.text,
+ this.control.bookmark.display.visual.icon.preview.groupText,
+ this.control.bookmark.display.visual.icon.remove.button
+ ]
+ })
+ ]
+ })
+ ]
+ })
+ ]
+ }),
+ this.control.bookmark.display.visual.type.radioSet[2].wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.bookmark.display.visual.image.url.wrap()
+ ]
+ })
+ ]
+ })
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ this.control.bookmark.display.name.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.bookmark.display.name.text.wrap()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ this.control.propagate.visual.wrap()
+ ]
+ })
+ ]
+ })
+ ]
+ });
+ };
+
+ this.area.address = () => {
+ return form.fieldset({
+ children: [
+ form.wrap({
+ children: [
+ node('h2:Address|class:mb-2'),
+ complexNode({ tag: 'p', text: 'Be sure to use the full URL and include "https://..."', attr: [{ key: 'class', value: 'mb-5' }] })
+ ]
+ }),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.bookmark.url.wrap()
+ ]
+ })
+ ]
+ })
+ ]
+ });
+ };
+
+ this.area.position = () => {
+ return form.fieldset({
+ children: [
+ form.wrap({
+ children: [
+ node('h2:Position|class:mb-2'),
+ node('p:The Group to place this Bookmark in.|class:mb-5')
+ ]
+ }),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.group.destination.radioSet[0].wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.group.position.group.wrap(),
+ this.control.group.position.item.wrap()
+ ]
+ })
+ ]
+ }),
+ this.control.group.destination.radioSet[1].wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.group.name.wrap(),
+ this.control.group.random.wrap()
+ ]
+ })
+ ]
+ })
+ ]
+ })
+ ]
+ })
+ ]
+ });
+ };
+
+ this.area.layout = () => {
+ return form.fieldset({
+ children: [
+ form.wrap({
+ children: [
+ node('h2:Layout|class:mb-2'),
+ node('p:Change the Visual element and Name position.|class:mb-5')
+ ]
+ }),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.bookmark.display.visual.size.wrap(),
+ this.control.bookmark.display.name.size.wrap(),
+ node('hr'),
+ this.control.bookmark.display.alignment.wrap(),
+ node('hr'),
+ form.wrap({
+ children: [
+ this.control.bookmark.display.translate.label
+ ]
+ }),
+ this.control.bookmark.display.translate.x.wrap(),
+ this.control.bookmark.display.translate.y.wrap(),
+ this.control.bookmark.display.rotate.wrap(),
+ node('hr'),
+ this.control.bookmark.display.direction.wrap(),
+ node('hr'),
+ this.control.bookmark.display.order.wrap(),
+ node('hr'),
+ this.control.bookmark.display.gutter.wrap(),
+ node('hr'),
+ this.control.bookmark.shape.wide.wrap(),
+ this.control.bookmark.shape.tall.wrap(),
+ node('hr'),
+ this.control.propagate.layout.wrap()
+ ]
+ })
+ ]
+ })
+ ]
+ });
+ };
+
+ this.area.theme = () => {
+ return form.fieldset({
+ children: [
+ form.wrap({
+ children: [
+ node('h2:Theme|class:mb-2'),
+ node('p:Override the Theme and Accent colour.|class:mb-5')
+ ]
+ }),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.bookmark.color.by.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.collapse.color.collapse(),
+ node('hr'),
+ this.control.bookmark.color.opacity.wrap()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ this.control.bookmark.accent.by.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.collapse.accent.collapse()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ this.control.bookmark.background.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.collapse.background.collapse()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ this.control.bookmark.border.wrap(),
+ node('hr'),
+ this.control.bookmark.display.visual.shadow.size.wrap(),
+ this.helper.bookmark.display.visual.shadow.size.wrap(),
+ node('hr'),
+ this.control.propagate.theme.wrap()
+ ]
+ })
+ ]
+ })
+ ]
+ });
+ };
+
+ this.area.background = () => {
+ return node('div', [
+ this.control.bookmark.background.type.radioSet[0].wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.bookmark.background.image.url.wrap(),
+ this.helper.bookmark.background.image.wrap()
+ ]
+ })
+ ]
+ }),
+ this.control.bookmark.background.type.radioSet[1].wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.bookmark.background.video.url.wrap(),
+ this.helper.bookmark.background.video.wrap()
+ ]
+ })
+ ]
+ }),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.bookmark.background.opacity.wrap()
+ ]
+ })
+ ]
+ })
+ ]);
+ };
+
+ this.collapse = {
+ color: new Collapse({
+ type: 'radio',
+ radioGroup: this.control.bookmark.color.by,
+ target: [{
+ id: this.control.bookmark.color.by.radioSet[1].radio.value,
+ content: this.area.color()
+ }]
+ }),
+ accent: new Collapse({
+ type: 'radio',
+ radioGroup: this.control.bookmark.accent.by,
+ target: [{
+ id: this.control.bookmark.accent.by.radioSet[1].radio.value,
+ content: this.area.accent()
+ }]
+ }),
+ background: new Collapse({
+ type: 'checkbox',
+ checkbox: this.control.bookmark.background.show,
+ target: [{
+ content: this.area.background()
+ }]
+ })
+ };
+
+ this.tab = new Tab({
+ group: [{
+ tabText: 'Visual & Name',
+ area: this.area.visual(),
+ active: true
+ }, {
+ tabText: 'Address',
+ area: this.area.address(),
+ active: false
+ }, {
+ tabText: 'Position',
+ area: this.area.position(),
+ active: false
+ }, {
+ tabText: 'Layout',
+ area: this.area.layout(),
+ active: false
+ }, {
+ tabText: 'Theme',
+ area: this.area.theme(),
+ active: false
+ }]
+ });
+
+ this.preview = new BookmarkPreview({ bookmarkData: bookmarkData });
+
+ this.disable = () => {
+
+ if (bookmarkData.link.display.visual.show) {
+ this.control.bookmark.display.visual.type.enable();
+ this.control.bookmark.display.visual.letter.text.enable();
+ this.control.bookmark.display.visual.icon.text.enable();
+ this.control.bookmark.display.visual.icon.preview.enable();
+ this.control.bookmark.display.visual.icon.remove.enable();
+ this.control.bookmark.display.visual.image.url.enable();
+ this.control.bookmark.display.visual.size.enable();
+
+ switch (bookmarkData.link.display.visual.type) {
+ case 'letter':
+ this.control.bookmark.display.visual.letter.text.enable();
+ this.control.bookmark.display.visual.icon.text.disable();
+ this.control.bookmark.display.visual.icon.preview.disable()
+ this.control.bookmark.display.visual.icon.remove.disable();
+ this.control.bookmark.display.visual.image.url.disable();
+ break;
+
+ case 'icon':
+ this.control.bookmark.display.visual.letter.text.disable();
+ this.control.bookmark.display.visual.icon.text.enable();
+ this.control.bookmark.display.visual.icon.preview.enable();
+ this.control.bookmark.display.visual.icon.remove.enable();
+ this.control.bookmark.display.visual.image.url.disable();
+ break;
+
+ case 'image':
+ this.control.bookmark.display.visual.letter.text.disable();
+ this.control.bookmark.display.visual.icon.text.disable();
+ this.control.bookmark.display.visual.icon.preview.disable()
+ this.control.bookmark.display.visual.icon.remove.disable();
+ this.control.bookmark.display.visual.image.url.enable();
+ break;
+ };
+ } else {
+ this.control.bookmark.display.visual.type.disable();
+ this.control.bookmark.display.visual.letter.text.disable();
+ this.control.bookmark.display.visual.icon.text.disable();
+ this.control.bookmark.display.visual.icon.preview.disable();
+ this.control.bookmark.display.visual.icon.remove.disable();
+ this.control.bookmark.display.visual.image.url.disable();
+ this.control.bookmark.display.visual.size.disable();
+ };
+
+ if (bookmarkData.link.display.name.show) {
+ this.control.bookmark.display.name.text.enable();
+ this.control.bookmark.display.name.size.enable();
+ } else {
+ this.control.bookmark.display.name.text.disable();
+ this.control.bookmark.display.name.size.disable();
+ };
+
+ if (bookmarkData.link.display.visual.show || bookmarkData.link.display.name.show) {
+ this.control.bookmark.display.translate.x.enable();
+ this.control.bookmark.display.translate.y.enable();
+ this.control.bookmark.display.rotate.enable();
+ } else {
+ this.control.bookmark.display.translate.x.disable();
+ this.control.bookmark.display.translate.y.disable();
+ this.control.bookmark.display.rotate.disable();
+ };
+
+ if (bookmarkData.link.display.visual.show && bookmarkData.link.display.name.show) {
+ this.control.bookmark.display.direction.enable();
+ this.control.bookmark.display.order.enable();
+ this.control.bookmark.display.gutter.enable();
+ } else {
+ this.control.bookmark.display.direction.disable();
+ this.control.bookmark.display.order.disable();
+ this.control.bookmark.display.gutter.disable();
+ };
+
+ switch (bookmarkData.link.display.visual.type) {
+ case 'letter':
+ case 'icon':
+ this.control.bookmark.display.visual.shadow.size.enable();
+ this.helper.bookmark.display.visual.shadow.size.enable();
+ break;
+
+ case 'image':
+ this.control.bookmark.display.visual.shadow.size.disable();
+ this.helper.bookmark.display.visual.shadow.size.disable();
+ break;
+ };
+
+ switch (bookmarkData.link.color.by) {
+ case 'theme':
+ this.control.bookmark.color.color.disable();
+ break;
+
+ case 'custom':
+ this.control.bookmark.color.color.enable();
+ break;
+ };
+
+ switch (bookmarkData.link.accent.by) {
+ case 'theme':
+ this.control.bookmark.accent.color.disable();
+ break;
+
+ case 'custom':
+ this.control.bookmark.accent.color.enable();
+ break;
+ };
+
+ if (bookmarkData.link.background.show) {
+ this.control.bookmark.background.type.enable();
+ this.control.bookmark.background.opacity.enable();
+
+ switch (bookmarkData.link.background.type) {
+ case 'image':
+ this.control.bookmark.background.image.url.enable();
+ this.helper.bookmark.background.image.enable();
+ this.control.bookmark.background.video.url.disable();
+ this.helper.bookmark.background.video.disable();
+ break;
+
+ case 'video':
+ this.control.bookmark.background.image.url.disable();
+ this.helper.bookmark.background.image.disable();
+ this.control.bookmark.background.video.url.enable();
+ this.helper.bookmark.background.video.enable();
+ break;
+ };
+ } else {
+ this.control.bookmark.background.type.disable();
+ this.control.bookmark.background.image.url.disable();
+ this.helper.bookmark.background.image.disable();
+ this.control.bookmark.background.video.url.disable();
+ this.helper.bookmark.background.video.disable();
+ this.control.bookmark.background.opacity.disable();
+ };
+
+ switch (bookmarkData.group.destination) {
+ case 'existing':
+ this.control.group.position.group.enable();
+ this.control.group.position.item.enable();
+ this.control.group.name.disable();
+ this.control.group.random.disable();
+ break;
+
+ case 'new':
+ this.control.group.position.group.disable();
+ this.control.group.position.item.disable();
+ this.control.group.name.enable();
+ this.control.group.random.enable();
+ break;
+ };
+
+ if (!bookmark.all.length > 0) {
+ this.control.group.destination.radioSet[0].radio.disable();
+ } else {
+ this.control.group.destination.radioSet[0].radio.enable();
+ };
+
+ };
+
+ this.update = () => {
+ this.control.bookmark.display.visual.show.update();
+ this.control.bookmark.display.visual.type.update();
+ this.control.bookmark.display.visual.letter.text.update();
+ this.control.bookmark.display.visual.icon.text.update();
+ if (isValidString(bookmarkData.link.display.visual.icon.prefix) && isValidString(bookmarkData.link.display.visual.icon.name)) {
+ this.control.bookmark.display.visual.icon.preview.update(node('span|class:bookmark-form-icon ' + bookmarkData.link.display.visual.icon.prefix + ' fa-' + bookmarkData.link.display.visual.icon.name));
+ } else {
+ this.control.bookmark.display.visual.icon.preview.update();
+ };
+ this.control.bookmark.display.visual.image.url.update();
+ this.control.bookmark.display.name.show.update();
+ this.control.bookmark.display.name.text.update();
+ this.control.bookmark.url.update();
+ };
+
+ this.assemble = () => {
+
+ this.element.main.appendChild(this.tab.tab());
+
+ this.element.aside.appendChild(this.preview.preview());
+
+ this.element.form.appendChild(this.element.main);
+
+ this.element.form.appendChild(this.element.aside);
+
+ };
+
+ this.bind = () => {
+
+ this.element.form.addEventListener('keydown', (event) => {
+
+ if (event.keyCode == 13) { event.preventDefault(); return false; };
+
+ });
+
+ };
+
+ this.suggest = new Suggest({
+ input: this.control.bookmark.display.visual.icon.text.text,
+ widthElement: this.element.main,
+ type: 'fontawesomeIcon',
+
+ postFocus: this.control.bookmark.display.visual.icon.preview.groupText,
+ action: (suggestData) => {
+
+ bookmarkData.link.display.visual.icon.label = suggestData.label;
+ bookmarkData.link.display.visual.icon.name = suggestData.name;
+
+ if (suggestData.styles.includes('solid')) {
+ bookmarkData.link.display.visual.icon.prefix = 'fas';
+ } else if (suggestData.styles.includes('brands')) {
+ bookmarkData.link.display.visual.icon.prefix = 'fab';
+ };
+
+ this.preview.update.assemble(bookmarkData);
+ this.update();
+
+ }
+ });
+
+ this.form = () => {
+
+ return this.element.form;
+
+ };
+
+ this.assemble();
+
+ this.disable();
+
+ this.update();
+
+};
diff --git a/src/component/bookmarkMinMax/index.js b/src/component/bookmarkMinMax/index.js
new file mode 100644
index 00000000..7dba2cab
--- /dev/null
+++ b/src/component/bookmarkMinMax/index.js
@@ -0,0 +1,23 @@
+export const bookmarkMinMax = {
+ display: {
+ rotate: { min: -180, max: 180 },
+ translate: { x: { min: -300, max: 300 }, y: { min: -300, max: 300 } },
+ gutter: { min: 0, max: 500 },
+ visual: {
+ size: { min: 5, max: 200 },
+ shadow: { size: { min: 0, max: 100 } }
+ },
+ name: { size: { min: 5, max: 200 } }
+ },
+ accent: {
+ hsl: { h: { min: 0, max: 359 }, s: { min: 0, max: 100 }, l: { min: 0, max: 100 } },
+ rgb: { r: { min: 0, max: 255 }, g: { min: 0, max: 255 }, b: { min: 0, max: 255 } }
+ },
+ color: {
+ hsl: { h: { min: 0, max: 359 }, s: { min: 0, max: 100 }, l: { min: 0, max: 100 } },
+ rgb: { r: { min: 0, max: 255 }, g: { min: 0, max: 255 }, b: { min: 0, max: 255 } },
+ opacity: { min: 0, max: 100 }
+ },
+ border: { min: 0, max: 20 },
+ background: { opacity: { min: 0, max: 100 } }
+};
diff --git a/src/component/bookmarkPreset/index.js b/src/component/bookmarkPreset/index.js
new file mode 100644
index 00000000..aa464872
--- /dev/null
+++ b/src/component/bookmarkPreset/index.js
@@ -0,0 +1,159 @@
+ const bookmarkPreset = {};
+
+ bookmarkPreset.get = () => {
+ return [{
+ name: { text: 'Cool stuff', show: true },
+ openAll: { show: true },
+ items: [{
+ url: 'https://zombiefox.github.io/awesomeSheet/',
+ display: {
+ alignment: 'center-center',
+ direction: 'vertical',
+ order: 'visual-name',
+ rotate: 0,
+ translate: { x: 0, y: 0 },
+ gutter: 25,
+ name: { show: true, text: 'awesomeSheet', size: 7 },
+ visual: { show: true, type: 'icon', size: 25, letter: { text: 'AS' }, icon: { name: 'dice-d20', prefix: 'fas', label: 'Dice D20' }, image: { url: '' }, shadow: { size: 0 } }
+ },
+ accent: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } },
+ color: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 }, opacity: 100 },
+ background: { show: false, type: 'image', opacity: 100, image: { url: '' }, video: { url: '' } },
+ border: 0,
+ shape: { wide: false, tall: false },
+ timestamp: 1626297988913
+ }, {
+ url: 'https://www.amazon.co.uk/',
+ display: {
+ alignment: 'center-center',
+ direction: 'vertical',
+ order: 'visual-name',
+ rotate: 0,
+ translate: { x: 0, y: 0 },
+ gutter: 25,
+ name: { show: true, text: 'Amazon', size: 7 },
+ visual: { show: true, type: 'letter', size: 25, letter: { text: 'AZ' }, icon: { name: 'amazon', prefix: 'fab', label: 'Amazon' }, image: { url: '' }, shadow: { size: 0 } }
+ },
+ accent: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } },
+ color: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 }, opacity: 100 },
+ background: { show: false, type: 'image', opacity: 100, image: { url: '' }, video: { url: '' } },
+ border: 0,
+ shape: { wide: false, tall: false },
+ timestamp: 1626297999213
+ }, {
+ url: 'https://mail.google.com/',
+ display: {
+ alignment: 'center-center',
+ direction: 'vertical',
+ order: 'visual-name',
+ rotate: 0,
+ translate: { x: 0, y: 0 },
+ gutter: 25,
+ name: { show: true, text: 'Gmail', size: 7 },
+ visual: { show: true, type: 'letter', size: 25, letter: { text: 'GM' }, icon: { name: 'envelope', prefix: 'fas', label: 'Envelope' }, image: { url: '' }, shadow: { size: 0 } }
+ },
+ accent: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } },
+ color: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 }, opacity: 100 },
+ background: { show: false, type: 'image', opacity: 100, image: { url: '' }, video: { url: '' } },
+ border: 0,
+ shape: { wide: false, tall: false },
+ timestamp: 1626298011293
+ }, {
+ url: 'https://www.reddit.com/',
+ display: {
+ alignment: 'center-center',
+ direction: 'vertical',
+ order: 'visual-name',
+ rotate: 0,
+ translate: { x: 0, y: 0 },
+ gutter: 25,
+ name: { show: true, text: 'Reddit', size: 7 },
+ visual: { show: true, type: 'icon', size: 25, letter: { text: 'R' }, icon: { name: 'reddit-alien', prefix: 'fab', label: 'reddit Alien' }, image: { url: '' }, shadow: { size: 0 } }
+ },
+ accent: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } },
+ color: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 }, opacity: 100 },
+ background: { show: false, type: 'image', opacity: 100, image: { url: '' }, video: { url: '' } },
+ border: 0,
+ shape: { wide: false, tall: false },
+ timestamp: 1626298017175
+ }, {
+ url: 'https://www.netflix.com/',
+ display: {
+ alignment: 'center-center',
+ direction: 'vertical',
+ order: 'visual-name',
+ rotate: 0,
+ translate: { x: 0, y: 0 },
+ gutter: 25,
+ name: { show: true, text: 'Netflix', size: 7 },
+ visual: { show: true, type: 'icon', size: 25, letter: { text: 'N' }, icon: { name: 'film', prefix: 'fas', label: 'Film' }, image: { url: '' }, shadow: { size: 0 } }
+ },
+ accent: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } },
+ color: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 }, opacity: 100 },
+ background: { show: false, type: 'image', opacity: 100, image: { url: '' }, video: { url: '' } },
+ border: 0,
+ shape: { wide: false, tall: false },
+ timestamp: 1626298022303
+ }, {
+ url: 'https://drive.google.com/drive/',
+ display: {
+ alignment: 'center-center',
+ direction: 'vertical',
+ order: 'visual-name',
+ rotate: 0,
+ translate: { x: 0, y: 0 },
+ gutter: 25,
+ name: { show: true, text: 'Drive', size: 7 },
+ visual: { show: true, type: 'letter', size: 25, letter: { text: 'DR' }, icon: { name: 'google-drive', prefix: 'fab', label: 'Drive' }, image: { url: '' }, shadow: { size: 0 } }
+ },
+ accent: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } },
+ color: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 }, opacity: 100 },
+ background: { show: false, type: 'image', opacity: 100, image: { url: '' }, video: { url: '' } },
+ border: 0,
+ shape: { wide: false, tall: false },
+ timestamp: 1626298028996
+ }]
+ }, {
+ name: { text: 'Dev sites', show: true },
+ openAll: { show: true },
+ items: [{
+ url: 'https://devdocs.io/',
+ display: {
+ alignment: 'center-center',
+ direction: 'vertical',
+ order: 'visual-name',
+ rotate: 0,
+ translate: { x: 0, y: 0 },
+ gutter: 25,
+ name: { show: true, text: 'Devdocs', size: 7 },
+ visual: { show: true, type: 'icon', size: 25, letter: { text: 'DEV' }, icon: { name: 'code', prefix: 'fas', label: 'Code' }, image: { url: '' }, shadow: { size: 0 } }
+ },
+ accent: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } },
+ color: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 }, opacity: 100 },
+ background: { show: false, type: 'image', opacity: 100, image: { url: '' }, video: { url: '' } },
+ border: 0,
+ shape: { wide: false, tall: false },
+ timestamp: 1626298034209
+ }, {
+ url: 'https://github.com/',
+ display: {
+ alignment: 'center-center',
+ direction: 'vertical',
+ order: 'visual-name',
+ rotate: 0,
+ translate: { x: 0, y: 0 },
+ gutter: 25,
+ name: { show: true, text: 'Github', size: 7 },
+ visual: { show: true, type: 'icon', size: 25, letter: { text: 'GIT' }, icon: { name: 'github', prefix: 'fab', label: 'GitHub' }, image: { url: '' }, shadow: { size: 0 } }
+ },
+ accent: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } },
+ color: { by: 'theme', hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 }, opacity: 100 },
+ background: { show: false, type: 'image', opacity: 100, image: { url: '' }, video: { url: '' } },
+ border: 0,
+ shape: { wide: false, tall: false },
+ timestamp: 1626298038470
+ }]
+ }];
+ };
+
+ export { bookmarkPreset };
diff --git a/src/component/bookmarkPreview/index.css b/src/component/bookmarkPreview/index.css
new file mode 100644
index 00000000..d940d6c7
--- /dev/null
+++ b/src/component/bookmarkPreview/index.css
@@ -0,0 +1,194 @@
+.bookmark-preview-area {
+ position: sticky;
+ top: 50%;
+ transform: translateY(-50%);
+ display: grid;
+ justify-items: center;
+ gap: 1em;
+ grid-template-rows: auto auto;
+}
+
+.bookmark-preview-grid {
+ display: grid;
+ grid-auto-rows: var(--group-cell-height);
+ grid-template-columns: repeat(auto-fill, minmax(var(--group-cell-width), 1fr));
+ grid-auto-flow: dense;
+}
+
+.bookmark-preview-grid-wide {
+ grid-template-columns: repeat(2, var(--group-cell-width));
+}
+
+.bookmark-preview-grid-tall {
+ grid-template-rows: repeat(2, var(--group-cell-height));
+}
+
+.bookmark-preview-grid-tall,
+.bookmark-preview-grid-wide {
+ font-size: 0.5em;
+}
+
+.bookmark.bookmark-preview.bookmark-wide {
+ grid-column: span 2;
+}
+
+.bookmark.bookmark-preview.bookmark-tall {
+ grid-row: span 2;
+}
+
+.is-bookmark-edit .bookmark.bookmark-preview .bookmark-front {
+ height: 100%;
+}
+
+.is-bookmark-line-show .bookmark.bookmark-preview .bookmark-front {
+ height: calc(100% - var(--layout-line-width));
+}
+
+.is-bookmark-url-show .bookmark.bookmark-preview:focus .bookmark-front,
+.is-bookmark-url-show .bookmark.bookmark-preview:focus-within .bookmark-front,
+.is-bookmark-url-show .bookmark.bookmark-preview:hover .bookmark-front {
+ height: calc(100% - var(--bookmark-url-height));
+}
+
+.bookmark.bookmark-preview .bookmark-control {
+ display: none;
+}
+
+.is-bookmark-edit .bookmark.bookmark-preview .bookmark-display {
+ font-size: 1em;
+}
+
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom.is-bookmark-edit .bookmark.bookmark-preview .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom.is-bookmark-edit .bookmark.bookmark-preview:hover .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom.is-bookmark-edit .bookmark.bookmark-preview:focus .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top.is-bookmark-edit .bookmark.bookmark-preview .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top.is-bookmark-edit .bookmark.bookmark-preview:hover .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top.is-bookmark-edit .bookmark.bookmark-preview:focus .bookmark-front {
+ box-shadow: none;
+}
+
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom .bookmark.bookmark-preview:focus .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom .bookmark.bookmark-preview:focus-within .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom .bookmark.bookmark-preview:hover .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom.is-bookmark-edit .bookmark.bookmark-preview:focus .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom.is-bookmark-edit .bookmark.bookmark-preview:focus-within .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-bottom.is-bookmark-edit .bookmark.bookmark-preview:hover .bookmark-front {
+ box-shadow: var(--theme-shadow-bottom-large);
+}
+
+.is-bookmark-shadow-show.is-bookmark-orientation-top .bookmark.bookmark-preview:focus .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top .bookmark.bookmark-preview:focus-within .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top .bookmark.bookmark-preview:hover .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top.is-bookmark-edit .bookmark.bookmark-preview:focus .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top.is-bookmark-edit .bookmark.bookmark-preview:focus-within .bookmark-front,
+.is-bookmark-shadow-show.is-bookmark-orientation-top.is-bookmark-edit .bookmark.bookmark-preview:hover .bookmark-front {
+ box-shadow: var(--theme-shadow-top-large);
+}
+
+.is-bookmark-orientation-top.is-bookmark-url-show .bookmark.bookmark-preview:focus-within .bookmark-url,
+.is-bookmark-orientation-top.is-bookmark-url-show .bookmark.bookmark-preview:focus .bookmark-url,
+.is-bookmark-orientation-top.is-bookmark-url-show .bookmark.bookmark-preview:hover .bookmark-url {
+ top: 0;
+}
+
+.is-bookmark-orientation-bottom.is-bookmark-url-show .bookmark.bookmark-preview:focus-within .bookmark-url,
+.is-bookmark-orientation-bottom.is-bookmark-url-show .bookmark.bookmark-preview:focus .bookmark-url,
+.is-bookmark-orientation-bottom.is-bookmark-url-show .bookmark.bookmark-preview:hover .bookmark-url {
+ bottom: 0;
+}
+
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark.bookmark-preview .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark.bookmark-preview:focus .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark.bookmark-preview:focus-within .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark.bookmark-preview:hover .bookmark-back {
+ clip-path: polygon(0 0, 100% 0, 100% calc(0% + calc(var(--bookmark-clip-padding) * 1em)), 0 calc(0% + calc(var(--bookmark-clip-padding) * 1em)));
+}
+
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark.bookmark-preview .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark.bookmark-preview:focus .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark.bookmark-preview:focus-within .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark.bookmark-preview:hover .bookmark-back {
+ clip-path: polygon(0 calc(100% - calc(var(--bookmark-clip-padding) * 1em)), 100% calc(100% - calc(var(--bookmark-clip-padding) * 1em)), 100% 100%, 0 100%);
+}
+
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-line-show .bookmark.bookmark-preview .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-line-show .bookmark.bookmark-preview:focus .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-line-show .bookmark.bookmark-preview:focus-within .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-line-show .bookmark.bookmark-preview:hover .bookmark-back {
+ clip-path: polygon(0 0, 100% 0, 100% calc(0% + var(--layout-line-width) + calc(var(--bookmark-clip-padding) * 1em)), 0 calc(0% + var(--layout-line-width) + calc(var(--bookmark-clip-padding) * 1em)));
+}
+
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-line-show .bookmark.bookmark-preview .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-line-show .bookmark.bookmark-preview:focus .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-line-show .bookmark.bookmark-preview:focus-within .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-line-show .bookmark.bookmark-preview:hover .bookmark-back {
+ clip-path: polygon(0 calc(100% - calc(var(--layout-line-width) + var(--bookmark-clip-padding) * 1em)), 100% calc(100% - calc(var(--layout-line-width) + var(--bookmark-clip-padding) * 1em)), 100% 100%, 0 100%);
+}
+
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-url-show .bookmark.bookmark-preview .bookmark-back {
+ clip-path: polygon(0 0, 100% 0, 100% calc(0% + calc(var(--bookmark-clip-padding) * 1em)), 0 calc(0% + calc(var(--bookmark-clip-padding) * 1em)));
+}
+
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-url-show .bookmark.bookmark-preview:focus .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-url-show .bookmark.bookmark-preview:focus-within .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-url-show .bookmark.bookmark-preview:hover .bookmark-back {
+ clip-path: polygon(0 0, 100% 0, 100% calc(0% + var(--bookmark-url-height) + calc(var(--bookmark-clip-padding) * 1em)), 0 calc(0% + var(--bookmark-url-height) + calc(var(--bookmark-clip-padding) * 1em)));
+}
+
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-url-show .bookmark.bookmark-preview .bookmark-back {
+ clip-path: polygon(0 calc(100% - calc(var(--bookmark-clip-padding) * 1em)), 100% calc(100% - calc(var(--bookmark-clip-padding) * 1em)), 100% 100%, 0 100%);
+}
+
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-url-show .bookmark.bookmark-preview:focus .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-url-show .bookmark.bookmark-preview:focus-within .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-url-show .bookmark.bookmark-preview:hover .bookmark-back {
+ clip-path: polygon(0 calc(100% - calc(var(--bookmark-url-height) + var(--bookmark-clip-padding) * 1em)), 100% calc(100% - calc(var(--bookmark-url-height) + var(--bookmark-clip-padding) * 1em)), 100% 100%, 0 100%);
+}
+
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-url-show.is-bookmark-line-show .bookmark.bookmark-preview .bookmark-back {
+ clip-path: polygon(0 0, 100% 0, 100% calc(0% + var(--layout-line-width) + calc(var(--bookmark-clip-padding) * 1em)), 0 calc(0% + var(--layout-line-width) + calc(var(--bookmark-clip-padding) * 1em)));
+}
+
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-url-show.is-bookmark-line-show .bookmark.bookmark-preview:focus .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-url-show.is-bookmark-line-show .bookmark.bookmark-preview:focus-within .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-top.is-bookmark-url-show.is-bookmark-line-show .bookmark.bookmark-preview:hover .bookmark-back {
+ clip-path: polygon(0 0, 100% 0, 100% calc(0% + var(--bookmark-url-height) + calc(var(--bookmark-clip-padding) * 1em)), 0 calc(0% + var(--bookmark-url-height) + calc(var(--bookmark-clip-padding) * 1em)));
+}
+
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-url-show.is-bookmark-line-show .bookmark.bookmark-preview .bookmark-back {
+ clip-path: polygon(0 calc(100% - calc(var(--layout-line-width) + var(--bookmark-clip-padding) * 1em)), 100% calc(100% - calc(var(--layout-line-width) + var(--bookmark-clip-padding) * 1em)), 100% 100%, 0 100%);
+}
+
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-url-show.is-bookmark-line-show .bookmark.bookmark-preview:focus .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-url-show.is-bookmark-line-show .bookmark.bookmark-preview:focus-within .bookmark-back,
+.is-bookmark-edit.is-bookmark-orientation-bottom.is-bookmark-url-show.is-bookmark-line-show .bookmark.bookmark-preview:hover .bookmark-back {
+ clip-path: polygon(0 calc(100% - calc(var(--bookmark-url-height) + var(--bookmark-clip-padding) * 1em)), 100% calc(100% - calc(var(--bookmark-url-height) + var(--bookmark-clip-padding) * 1em)), 100% 100%, 0 100%);
+}
+
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark.bookmark-preview .bookmark-front,
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark.bookmark-preview:hover .bookmark-front,
+.is-bookmark-edit.is-bookmark-orientation-top .bookmark.bookmark-preview:focus .bookmark-front {
+ border-top-left-radius: calc(var(--theme-radius) * 0.01em);
+ border-top-right-radius: calc(var(--theme-radius) * 0.01em);
+}
+
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark.bookmark-preview .bookmark-front,
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark.bookmark-preview:hover .bookmark-front,
+.is-bookmark-edit.is-bookmark-orientation-bottom .bookmark.bookmark-preview:focus .bookmark-front {
+ border-bottom-left-radius: calc(var(--theme-radius) * 0.01em);
+ border-bottom-right-radius: calc(var(--theme-radius) * 0.01em);
+}
+
+.is-bookmark-url-show.is-bookmark-orientation-top .bookmark.bookmark-preview:focus .bookmark-front,
+.is-bookmark-url-show.is-bookmark-orientation-top .bookmark.bookmark-preview:focus-within .bookmark-front,
+.is-bookmark-url-show.is-bookmark-orientation-top .bookmark.bookmark-preview:hover .bookmark-front {
+ border-top-left-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+ border-top-right-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+}
+
+.is-bookmark-url-show.is-bookmark-orientation-bottom .bookmark.bookmark-preview:focus .bookmark-front,
+.is-bookmark-url-show.is-bookmark-orientation-bottom .bookmark.bookmark-preview:focus-within .bookmark-front,
+.is-bookmark-url-show.is-bookmark-orientation-bottom .bookmark.bookmark-preview:hover .bookmark-front {
+ border-bottom-left-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+ border-bottom-right-radius: calc((var(--theme-radius) * 0.25) * 0.01em);
+}
diff --git a/src/component/bookmarkPreview/index.js b/src/component/bookmarkPreview/index.js
new file mode 100644
index 00000000..1f093585
--- /dev/null
+++ b/src/component/bookmarkPreview/index.js
@@ -0,0 +1,87 @@
+import { BookmarkTile } from '../bookmarkTile';
+
+import { node } from '../../utility/node';
+
+import './index.css';
+
+export const BookmarkPreview = function({
+ bookmarkData = false
+} = {}) {
+
+ this.area = node('div|class:bookmark-preview-area');
+
+ this.grid = node('div|class:bookmark-preview-grid');
+
+ this.title = node('div|class:bookmark-preview-title small muted');
+
+ this.shape = () => {
+
+ if (bookmarkData.link.shape.tall) {
+ this.grid.classList.add('bookmark-preview-grid-tall');
+ } else {
+ this.grid.classList.remove('bookmark-preview-grid-tall');
+ };
+
+ if (bookmarkData.link.shape.wide) {
+ this.grid.classList.add('bookmark-preview-grid-wide');
+ } else {
+ this.grid.classList.remove('bookmark-preview-grid-wide');
+ };
+
+ if (bookmarkData.link.shape.tall || bookmarkData.link.shape.wide) {
+ this.title.textContent = 'Preview (50% scale)';
+ } else {
+ this.title.textContent = 'Preview';
+ };
+
+ };
+
+ this.bookmarkTile = new BookmarkTile({
+ bookmarkData: bookmarkData,
+ preview: true
+ });
+
+ this.update = {};
+
+ this.update.style = (newBookmarkData) => {
+ bookmarkData = newBookmarkData;
+
+ this.bookmarkTile.update();
+
+ this.shape();
+ };
+
+ this.update.assemble = (newBookmarkData) => {
+ bookmarkData = newBookmarkData;
+
+ this.area.removeChild(this.title);
+
+ this.grid.removeChild(this.bookmarkTile.tile());
+
+ this.bookmarkTile = new BookmarkTile({
+ bookmarkData: bookmarkData,
+ preview: true
+ });
+
+ this.shape();
+
+ this.assemble();
+ };
+
+ this.assemble = () => {
+ this.area.appendChild(this.title);
+
+ this.grid.appendChild(this.bookmarkTile.tile());
+
+ this.area.appendChild(this.grid);
+
+ this.shape(bookmarkData);
+ };
+
+ this.assemble();
+
+ this.preview = () => {
+ return this.area;
+ };
+
+};
diff --git a/src/component/bookmarkTile/index.js b/src/component/bookmarkTile/index.js
new file mode 100644
index 00000000..fdbf5da7
--- /dev/null
+++ b/src/component/bookmarkTile/index.js
@@ -0,0 +1,529 @@
+import { state } from '../state';
+import { data } from '../data';
+import { bookmark } from '../bookmark';
+import { group } from '../group';
+import { groupAndBookmark } from '../groupAndBookmark';
+
+import { Button } from '../button';
+import { Video } from '../video';
+import { Modal } from '../modal';
+import { StagedBookmark } from '../stagedBookmark';
+import { StagedGroup } from '../stagedGroup';
+import { BookmarkForm } from '../bookmarkForm';
+
+import { node } from '../../utility/node';
+import { complexNode } from '../../utility/complexNode';
+import { isValidString } from '../../utility/isValidString';
+import { trimString } from '../../utility/trimString';
+
+const BookmarkTile = function({
+ bookmarkData = {},
+ preview = false
+} = {}) {
+
+ this.element = {
+ bookmark: node('div|class:bookmark'),
+ front: node('div|class:bookmark-front'),
+ back: node('div|class:bookmark-back'),
+ content: {
+ link: node('a|class:bookmark-link,tabindex:1'),
+ display: {
+ wrap: node('div|class:bookmark-display-wrap'),
+ display: node('div|class:bookmark-display'),
+ visual: {
+ visual: node('div|class:bookmark-display-visual'),
+ letter: complexNode({ tag: 'div', text: bookmarkData.link.display.visual.letter.text, attr: [{ key: 'class', value: 'bookmark-display-visual-letter' }] }),
+ icon: node('div|class:bookmark-display-visual-icon'),
+ faIcon: node('div|class:' + bookmarkData.link.display.visual.icon.prefix + ' fa-' + bookmarkData.link.display.visual.icon.name),
+ image: node('div|class:bookmark-display-visual-image')
+ },
+ name: {
+ name: node('div|class:bookmark-display-name'),
+ text: node('div:' + bookmarkData.link.display.name.text + '|class:bookmark-display-name-text')
+ }
+ },
+ background: {
+ wrap: node('div|class:bookmark-background-wrap'),
+ image: node('div|class:bookmark-background-image'),
+ video: node('div|class:bookmark-background-video')
+ }
+ },
+ url: {
+ url: node('div|class:bookmark-url'),
+ text: node('span|class:bookmark-url-text')
+ },
+ control: node('div|class:bookmark-control')
+ };
+
+ if (preview) { this.element.bookmark.classList.add('bookmark-preview'); };
+
+ this.control = {};
+
+ this.control.button = {
+ left: new Button({
+ text: 'Move this bookmark left',
+ srOnly: true,
+ iconName: 'arrowKeyboardLeft',
+ style: ['link'],
+ title: 'Move this bookmark left',
+ classList: ['bookmark-control-button', 'bookmark-control-left'],
+ func: () => {
+
+ bookmarkData.position.destination.item--;
+
+ if (bookmarkData.position.destination.item < 0) {
+ bookmarkData.position.destination.item = 0;
+ };
+
+ bookmark.item.mod.move(bookmarkData);
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ }),
+ sort: new Button({
+ text: 'Drag bookmark to reorder',
+ srOnly: true,
+ iconName: 'drag',
+ style: ['link'],
+ title: 'Drag bookmark to reorder',
+ classList: ['bookmark-control-button', 'bookmark-control-sort']
+ }),
+ right: new Button({
+ text: 'Move this bookmark right',
+ srOnly: true,
+ iconName: 'arrowKeyboardRight',
+ style: ['link'],
+ title: 'Move this bookmark right',
+ classList: ['bookmark-control-button', 'bookmark-control-right'],
+ func: () => {
+
+ bookmarkData.position.destination.item++;
+
+ if (bookmarkData.position.destination.item > bookmark.all[bookmarkData.position.destination.group].items.length - 1) {
+ bookmarkData.position.destination.item = bookmark.all[bookmarkData.position.destination.group].items.length - 1;
+ };
+
+ bookmark.item.mod.move(bookmarkData);
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ }),
+ edit: new Button({
+ text: 'Edit this bookmark',
+ srOnly: true,
+ iconName: 'edit',
+ style: ['link'],
+ title: 'Edit this bookmark',
+ classList: ['bookmark-control-button', 'bookmark-control-edit'],
+ func: () => {
+
+ let newBookmarkData = new StagedBookmark();
+
+ newBookmarkData.link = JSON.parse(JSON.stringify(bookmarkData.link));
+
+ newBookmarkData.position = JSON.parse(JSON.stringify(bookmarkData.position));
+
+ newBookmarkData.type.existing = true;
+
+ const bookmarkForm = new BookmarkForm({ bookmarkData: newBookmarkData });
+
+ const editModal = new Modal({
+ heading: isValidString(newBookmarkData.link.display.name.text) ? 'Edit ' + newBookmarkData.link.display.name.text : 'Edit unnamed bookmark',
+ content: bookmarkForm.form(),
+ successText: 'Save',
+ width: 60,
+ maxHeight: true,
+ successAction: () => {
+
+ switch (newBookmarkData.group.destination) {
+ case 'new':
+
+ newBookmarkData.position.destination.group = bookmark.all.length;
+
+ const newGroupData = new StagedGroup();
+
+ newGroupData.newGroup({
+ name: newBookmarkData.group.name
+ });
+
+ group.item.mod.add(newGroupData);
+
+ break;
+ };
+
+ bookmark.item.mod.edit(newBookmarkData);
+
+ bookmark.item.mod.propagate(newBookmarkData);
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ });
+
+ editModal.open();
+
+ }
+ }),
+ remove: new Button({
+ text: 'Remove this bookmark',
+ srOnly: true,
+ iconName: 'cross',
+ style: ['link'],
+ title: 'Remove this bookmark',
+ classList: ['bookmark-control-button', 'bookmark-control-remove'],
+ func: () => {
+
+ const removeModal = new Modal({
+ heading: isValidString(bookmarkData.link.display.name.text) ? 'Remove ' + bookmarkData.link.display.name.text : 'Remove unnamed bookmark',
+ content: 'Are you sure you want to remove this Bookmark? This can not be undone.',
+ successText: 'Remove',
+ width: 'small',
+ successAction: () => {
+
+ bookmark.item.mod.remove(bookmarkData);
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ });
+
+ removeModal.open();
+
+ }
+ })
+ };
+
+ this.control.disable = () => {
+
+ for (var key in this.control.button) {
+ this.control.button[key].disable();
+ };
+
+ this.control.searchState();
+
+ };
+
+ this.control.enable = () => {
+
+ for (var key in this.control.button) {
+ this.control.button[key].enable();
+ };
+
+ this.control.searchState();
+
+ };
+
+ this.control.searchState = () => {
+
+ if (state.get.current().search) {
+ this.control.button.left.disable();
+ this.control.button.right.disable();
+ this.control.button.sort.disable();
+ } else if (state.get.current().bookmark.edit && !state.get.current().search) {
+ this.control.button.left.enable();
+ this.control.button.right.enable();
+ this.control.button.sort.enable();
+ };
+
+ };
+
+ this.style = (newBookmarkData) => {
+
+ if (newBookmarkData) {
+ bookmarkData = newBookmarkData;
+ };
+
+ if (isValidString(bookmarkData.link.url) && !preview) {
+ this.element.content.link.setAttribute('href', trimString(bookmarkData.link.url));
+ } else {
+ this.element.content.link.setAttribute('href', '#');
+ };
+
+ if (state.get.current().bookmark.newTab && !preview) {
+ this.element.content.link.setAttribute('target', '_blank');
+ };
+
+ if (!preview) {
+ this.element.bookmark.style.setProperty('--bookmark-transition-delay', bookmarkData.position.origin.item);
+ };
+
+ this.element.bookmark.style.setProperty('--theme-bookmark-item-opacity', bookmarkData.link.color.opacity);
+
+ if (bookmarkData.link.color.opacity < 100) {
+ this.element.bookmark.style.setProperty('--bookmark-clip-padding', 0);
+ };
+
+ if (bookmarkData.link.color.opacity < 40) {
+
+ this.element.bookmark.classList.add('is-bookmark-opacity-low');
+
+ } else {
+
+ this.element.bookmark.classList.remove('is-bookmark-opacity-low');
+
+ };
+
+ if (preview) {
+ const alignment = ['top-left', 'top-center', 'top-right', 'center-left', 'center-center', 'center-right', 'bottom-left', 'bottom-center', 'bottom-right'];
+
+ alignment.forEach((item, i) => {
+ this.element.bookmark.classList.remove('is-bookmark-alignment-' + item);
+ });
+ const order = ['visual-name', 'name-visual'];
+
+ order.forEach((item, i) => {
+ this.element.bookmark.classList.remove('is-bookmark-order-' + item);
+ });
+ const direction = ['vertical', 'horizontal'];
+
+ direction.forEach((item, i) => {
+ this.element.bookmark.classList.remove('is-bookmark-direction-' + item);
+ });
+ };
+
+ this.element.bookmark.classList.add('is-bookmark-alignment-' + bookmarkData.link.display.alignment);
+
+ this.element.bookmark.classList.add('is-bookmark-order-' + bookmarkData.link.display.order);
+
+ this.element.bookmark.classList.add('is-bookmark-direction-' + bookmarkData.link.display.direction);
+
+ this.element.bookmark.style.setProperty('--bookmark-display-translate-x', bookmarkData.link.display.translate.x);
+
+ this.element.bookmark.style.setProperty('--bookmark-display-translate-y', bookmarkData.link.display.translate.y);
+
+ this.element.bookmark.style.setProperty('--bookmark-display-rotate', bookmarkData.link.display.rotate);
+
+ this.element.bookmark.style.setProperty('--bookmark-display-gutter', bookmarkData.link.display.gutter);
+
+ this.element.bookmark.style.setProperty('--bookmark-display-visual-size', bookmarkData.link.display.visual.size);
+
+ this.element.bookmark.style.setProperty('--bookmark-display-visual-image-url', 'url(' + trimString(bookmarkData.link.display.visual.image.url) + ')');
+
+ this.element.bookmark.style.setProperty('--bookmark-display-name-size', bookmarkData.link.display.name.size);
+
+ this.element.bookmark.style.setProperty('--bookmark-border', bookmarkData.link.border);
+
+ if (bookmarkData.link.accent.by == 'custom') {
+ this.element.bookmark.style.setProperty('--theme-accent-rgb-r', bookmarkData.link.accent.rgb.r);
+ this.element.bookmark.style.setProperty('--theme-accent-rgb-g', bookmarkData.link.accent.rgb.g);
+ this.element.bookmark.style.setProperty('--theme-accent-rgb-b', bookmarkData.link.accent.rgb.b);
+ this.element.bookmark.style.setProperty('--theme-accent', 'var(--theme-accent-rgb-r), var(--theme-accent-rgb-g), var(--theme-accent-rgb-b)');
+
+ this.element.bookmark.style.setProperty('--theme-accent-rgb-text', '0, 0%, calc(((((var(--theme-accent-rgb-r) * var(--theme-t-r)) + (var(--theme-accent-rgb-g) * var(--theme-t-g)) + (var(--theme-accent-rgb-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%)');
+
+ this.element.bookmark.style.setProperty('--bookmark-display-visual-color', 'var(--theme-accent)');
+ this.element.bookmark.style.setProperty('--bookmark-display-visual-color-focus-hover', 'var(--theme-accent)');
+ };
+
+ if (bookmarkData.link.display.visual.shadow.size > 0) {
+ this.element.bookmark.style.setProperty('--bookmark-display-visual-shadow-size', bookmarkData.link.display.visual.shadow.size);
+
+ this.element.bookmark.style.setProperty('--bookmark-display-visual-shadow-offset', '0.1');
+
+ this.element.bookmark.style.setProperty('--bookmark-display-visual-shadow-blur', '0.1');
+
+ this.element.bookmark.style.setProperty('--bookmark-display-visual-shadow-opacity', '0.1');
+
+ this.element.bookmark.style.setProperty(
+ '--bookmark-display-visual-shadow',
+ '0 ' +
+ 'calc(var(--bookmark-display-visual-shadow-size) * calc(calc(var(--bookmark-display-visual-shadow-offset) * 8)) * 0.01em) ' +
+ 'calc(var(--bookmark-display-visual-shadow-size) * calc(calc(var(--bookmark-display-visual-shadow-blur) * 8)) * 0.01em)' +
+ 'rgba(0, 0, 0, calc(var(--bookmark-display-visual-shadow-size) * calc(calc(var(--bookmark-display-visual-shadow-opacity) / 25) * 1))), ' +
+ '0 ' +
+ 'calc(var(--bookmark-display-visual-shadow-size) * calc(calc(var(--bookmark-display-visual-shadow-offset) * 16)) * 0.01em) ' +
+ 'calc(var(--bookmark-display-visual-shadow-size) * calc(calc(var(--bookmark-display-visual-shadow-blur) * 16)) * 0.01em)' +
+ 'rgba(0, 0, 0, calc(var(--bookmark-display-visual-shadow-size) * calc(calc(var(--bookmark-display-visual-shadow-opacity) / 25) * 2))), ' +
+ '0 ' +
+ 'calc(var(--bookmark-display-visual-shadow-size) * calc(calc(var(--bookmark-display-visual-shadow-offset) * 32)) * 0.01em) ' +
+ 'calc(var(--bookmark-display-visual-shadow-size) * calc(calc(var(--bookmark-display-visual-shadow-blur) * 32)) * 0.01em)' +
+ 'rgba(0, 0, 0, calc(var(--bookmark-display-visual-shadow-size) * calc(calc(var(--bookmark-display-visual-shadow-opacity) / 25) * 3)))'
+ );
+ } else {
+ this.element.bookmark.style.removeProperty('--bookmark-display-visual-shadow-size');
+ this.element.bookmark.style.removeProperty('--bookmark-display-visual-shadow-offset');
+ this.element.bookmark.style.removeProperty('--bookmark-display-visual-shadow-blur');
+ this.element.bookmark.style.removeProperty('--bookmark-display-visual-shadow-opacity');
+ this.element.bookmark.style.removeProperty('--bookmark-display-visual-shadow');
+ };
+
+ if (bookmarkData.link.color.by == 'custom') {
+ this.element.bookmark.style.setProperty('--theme-color-r', bookmarkData.link.color.rgb.r);
+ this.element.bookmark.style.setProperty('--theme-color-g', bookmarkData.link.color.rgb.g);
+ this.element.bookmark.style.setProperty('--theme-color-b', bookmarkData.link.color.rgb.b);
+
+ this.element.bookmark.style.setProperty('--theme-color-h', bookmarkData.link.color.hsl.h);
+ this.element.bookmark.style.setProperty('--theme-color-s', bookmarkData.link.color.hsl.s);
+ this.element.bookmark.style.setProperty('--theme-color-l', bookmarkData.link.color.hsl.l);
+
+ this.element.bookmark.style.setProperty('--theme-color', bookmarkData.link.color.hsl.h + ', ' + bookmarkData.link.color.hsl.s + '%, ' + bookmarkData.link.color.hsl.l + '%');
+ this.element.bookmark.style.setProperty('--theme-color-text', '0, 0%, calc(((((var(--theme-color-r) * var(--theme-t-r)) + (var(--theme-color-g) * var(--theme-t-g)) + (var(--theme-color-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%)');
+
+ this.element.bookmark.style.setProperty('--bookmark-color', 'var(--theme-color)');
+ this.element.bookmark.style.setProperty('--bookmark-color-focus-hover', 'var(--theme-color)');
+
+ this.element.bookmark.style.setProperty('--bookmark-display-name-color', 'var(--theme-color-text)');
+ this.element.bookmark.style.setProperty('--bookmark-display-name-color-focus-hover', 'var(--theme-color-text)');
+
+ this.element.bookmark.style.setProperty('--button-link-text', 'var(--theme-color-text)');
+ this.element.bookmark.style.setProperty('--button-link-text-focus-hover', 'var(--theme-color-text)');
+ this.element.bookmark.style.setProperty('--button-link-text-active', 'var(--theme-color-text)');
+ };
+
+ if (bookmarkData.link.background.show) {
+ this.element.bookmark.style.setProperty('--bookmark-background-opacity', bookmarkData.link.background.opacity);
+
+ switch (bookmarkData.link.background.type) {
+ case 'image':
+ if (isValidString(bookmarkData.link.background.image.url)) {
+ this.element.bookmark.style.setProperty('--bookmark-background-image-url', 'url(' + trimString(bookmarkData.link.background.image.url) + ')');
+ };
+ break;
+ };
+ };
+
+ if (bookmarkData.link.shape.tall) {
+ this.element.bookmark.classList.add('bookmark-tall');
+ };
+
+ if (bookmarkData.link.shape.wide) {
+ this.element.bookmark.classList.add('bookmark-wide');
+ };
+
+ };
+
+ this.assemble = () => {
+
+ if (bookmarkData.link.display.visual.show || bookmarkData.link.display.name.show) {
+ if (bookmarkData.link.display.visual.show) {
+ switch (bookmarkData.link.display.visual.type) {
+ case 'letter':
+ if (isValidString(bookmarkData.link.display.visual.letter.text)) {
+ this.element.content.display.visual.visual.appendChild(this.element.content.display.visual.letter);
+ this.element.content.display.display.appendChild(this.element.content.display.visual.visual);
+ };
+ break;
+
+ case 'icon':
+ if (isValidString(bookmarkData.link.display.visual.icon.name)) {
+ this.element.content.display.visual.icon.appendChild(this.element.content.display.visual.faIcon);
+ this.element.content.display.visual.visual.appendChild(this.element.content.display.visual.icon);
+ this.element.content.display.display.appendChild(this.element.content.display.visual.visual);
+ };
+ break;
+
+ case 'image':
+ if (isValidString(bookmarkData.link.display.visual.image.url)) {
+ this.element.content.display.visual.visual.appendChild(this.element.content.display.visual.image);
+ this.element.content.display.display.appendChild(this.element.content.display.visual.visual);
+ };
+ break;
+ };
+ };
+
+ if (bookmarkData.link.display.name.show && isValidString(bookmarkData.link.display.name.text)) {
+ this.element.content.display.name.name.appendChild(this.element.content.display.name.text);
+ this.element.content.display.display.appendChild(this.element.content.display.name.name);
+ };
+
+ this.element.content.display.wrap.appendChild(this.element.content.display.display);
+
+ this.element.content.link.appendChild(this.element.content.display.wrap);
+ };
+
+ if (bookmarkData.link.background.show) {
+
+ switch (bookmarkData.link.background.type) {
+
+ case 'image':
+
+ this.element.content.background.wrap.appendChild(this.element.content.background.image);
+
+ break;
+
+ case 'video':
+
+ this.element.content.background.wrap.appendChild(this.element.content.background.video);
+
+ if (isValidString(bookmarkData.link.background.video.url)) {
+ const backgroundVideoElement = new Video({
+ url: bookmarkData.link.background.video.url
+ });
+
+ this.element.content.background.video.appendChild(backgroundVideoElement.video);
+ };
+
+ break;
+ };
+
+ this.element.content.link.appendChild(this.element.content.background.wrap);
+
+ };
+
+ this.element.bookmark.appendChild(this.element.front);
+
+ this.element.bookmark.appendChild(this.element.back);
+
+ this.element.front.appendChild(this.element.content.link);
+
+ this.element.control.appendChild(this.control.button.left.button);
+
+ this.element.control.appendChild(this.control.button.sort.button);
+
+ this.element.control.appendChild(this.control.button.right.button);
+
+ this.element.control.appendChild(this.control.button.edit.button);
+
+ this.element.control.appendChild(this.control.button.remove.button);
+
+ this.element.back.appendChild(this.element.control);
+
+ if (isValidString(bookmarkData.link.url)) {
+
+ this.element.url.text.textContent = trimString(bookmarkData.link.url).replace(/^https?\:\/\//i, '').replace(/\/+$/, '');
+
+ this.element.url.text.title = trimString(bookmarkData.link.url);
+
+ this.element.url.url.appendChild(this.element.url.text);
+
+ this.element.back.appendChild(this.element.url.url);
+
+ };
+
+ if (state.get.current().bookmark.edit) {
+ this.control.enable();
+ } else {
+ this.control.disable();
+ };
+
+ };
+
+ this.tile = () => {
+
+ return this.element.bookmark;
+
+ };
+
+ this.update = (newBookmarkData) => {
+
+ this.style(newBookmarkData);
+
+ };
+
+ this.assemble();
+
+ this.style();
+
+};
+
+export { BookmarkTile };
diff --git a/src/css/button.css b/src/component/button/index.css
old mode 100755
new mode 100644
similarity index 69%
rename from src/css/button.css
rename to src/component/button/index.css
index df3d6a28..c8efd4e4
--- a/src/css/button.css
+++ b/src/component/button/index.css
@@ -1,12 +1,40 @@
+:root {
+ --button-background: var(--theme-primary-020);
+ --button-background-focus-hover: var(--theme-primary-030);
+ --button-background-active: var(--theme-primary-040);
+ --button-background-disabled: var(--theme-primary-010);
+}
+
+:root {
+ --button-border: var(--theme-primary-030);
+ --button-border-focus-hover: var(--theme-primary-050);
+ --button-border-active: var(--theme-accent);
+ --button-border-disabled: var(--theme-primary-010);
+}
+
+:root {
+ --button-text: var(--theme-primary-text-020);
+ --button-text-focus-hover: var(--theme-primary-text-030);
+ --button-text-active: var(--theme-primary-text-030);
+ --button-text-disabled: var(--theme-primary-030);
+}
+
+:root {
+ --button-link-text: var(--theme-primary-text-010);
+ --button-link-text-focus-hover: var(--theme-primary-text-010);
+ --button-link-text-active: var(--theme-primary-text-010);
+ --button-link-text-disabled: var(--theme-primary-030);
+}
+
button,
.button,
input[type="button"],
input[type="reset"],
input[type="submit"] {
- background-color: rgb(var(--button-background));
+ background-color: hsl(var(--button-background));
padding: 0.25em 1.25em;
margin: 0;
- color: rgb(var(--button-text));
+ color: hsl(var(--button-text));
font-size: 1em;
font-family: var(--theme-font-ui-name);
font-weight: var(--theme-font-ui-weight);
@@ -14,13 +42,14 @@ input[type="submit"] {
min-height: 2.5em;
line-height: 1;
border: 0;
- border-radius: var(--theme-radius);
+ border-radius: calc(var(--theme-radius) * 0.01em);
position: relative;
text-align: center;
text-decoration: none;
white-space: nowrap;
cursor: pointer;
display: inline-flex;
+ gap: 0.5em;
flex-direction: row;
justify-content: center;
align-items: center;
@@ -37,8 +66,8 @@ input[type="reset"]:focus,
input[type="reset"]:hover,
input[type="submit"]:focus,
input[type="submit"]:hover {
- background-color: rgb(var(--button-background-focus-hover));
- color: rgb(var(--button-text-focus-hover));
+ background-color: hsl(var(--button-background-focus-hover));
+ color: hsl(var(--button-text-focus-hover));
outline: none;
text-decoration: none;
}
@@ -48,8 +77,8 @@ button:active,
input[type="button"]:active,
input[type="reset"]:active,
input[type="submit"]:active {
- background-color: rgb(var(--button-background-active));
- color: rgb(var(--button-text-active));
+ background-color: hsl(var(--button-background-active));
+ color: hsl(var(--button-text-active));
outline: none;
text-decoration: none;
transition: none;
@@ -57,7 +86,8 @@ input[type="submit"]:active {
button.active,
.button.active {
- color: rgb(var(--button-text-focus-active));
+ background-color: hsl(var(--button-background-active));
+ color: hsl(var(--button-text-active));
}
button.disabled,
@@ -76,8 +106,8 @@ button:disabled:active,
.button:disabled:hover,
.button:disabled:focus,
.button:disabled:active {
- background-color: rgb(var(--button-background-disabled));
- color: rgb(var(--button-text-disabled));
+ background-color: hsl(var(--button-background-disabled));
+ color: hsl(var(--button-text-disabled));
cursor: default;
text-decoration: none;
}
@@ -85,7 +115,7 @@ button:disabled:active,
.button-line:after {
content: "";
background: transparent;
- border-radius: var(--theme-radius);
+ border-radius: calc(var(--theme-radius) * 0.01em);
position: absolute;
bottom: 0;
left: 0;
@@ -98,7 +128,7 @@ button:disabled:active,
.button-line:focus:after,
.button-line:hover:after {
- background-color: rgb(var(--button-border-focus-hover));
+ background-color: hsl(var(--button-border-focus-hover));
}
.button-line:active:after,
@@ -115,7 +145,7 @@ button:disabled:active,
.button-line:disabled:hover:after,
.button-line:disabled:focus:after,
.button-line:disabled:active:after {
- background-color: rgb(var(--button-border-disabled));
+ background-color: hsl(var(--button-border-disabled));
}
.button-ring {
@@ -147,10 +177,8 @@ button:disabled:active,
pointer-events: none;
}
-button [class^="icon-"],
-button [class*=" icon-"],
-.button [class^="icon-"],
-.button [class*=" icon-"] {
+button .icon,
+.button .icon {
line-height: 1;
font-size: 1.5em;
}
@@ -193,24 +221,24 @@ button [class*=" button-"]:last-child,
.button-link {
background-color: transparent;
border: 0;
- color: rgb(var(--button-link-text));
+ color: hsl(var(--button-link-text));
}
.button-link:hover,
.button-link:focus {
background-color: transparent;
- color: rgb(var(--button-link-text-focus-hover));
+ color: hsl(var(--button-link-text-focus-hover));
}
+.button-link.active,
.button-link:active {
background-color: transparent;
- color: rgb(var(--button-link-text-active));
+ color: hsl(var(--button-link-text-active));
}
.button-link.disabled,
.button-link:disabled {
background-color: transparent;
- color: transparent;
pointer-events: none;
}
@@ -219,5 +247,4 @@ button [class*=" button-"]:last-child,
.button-link:hover:disabled,
.button-link:focus:disabled {
background-color: transparent;
- color: transparent;
}
diff --git a/src/component/button/index.js b/src/component/button/index.js
new file mode 100644
index 00000000..234cdb1b
--- /dev/null
+++ b/src/component/button/index.js
@@ -0,0 +1,153 @@
+import { icon } from '../icon';
+
+import * as form from '../form';
+
+import { node } from '../../utility/node';
+
+import './index.css';
+
+export const Button = function({
+ text = 'Button',
+ srOnly = false,
+ iconName = false,
+ iconPosition = false,
+ block = false,
+ size = false,
+ style = [],
+ title = false,
+ classList = [],
+ func = false
+} = {}) {
+
+ this.button = node('button|class:button,tabindex:1,type:button');
+
+ if (text) {
+ const buttonText = node('span:' + text + '|class:button-text');
+
+ if (srOnly) {
+ buttonText.classList.add('sr-only');
+ };
+
+ this.button.appendChild(buttonText);
+ };
+
+ if (iconName) {
+
+ switch (iconPosition) {
+
+ case 'right':
+ this.button.append(icon.render(iconName));
+ break;
+
+ default:
+ case 'left':
+ this.button.prepend(icon.render(iconName));
+ break;
+
+ };
+
+ };
+
+ if (block) {
+ this.button.classList.add('button-block');
+ };
+
+ switch (size) {
+ case 'small':
+ this.button.classList.add('button-small');
+ break;
+
+ case 'large':
+ this.button.classList.add('button-large');
+ break;
+ };
+
+ if (title) {
+ this.button.setAttribute('title', title);
+ };
+
+ if (classList.length > 0) {
+ classList.forEach((item, i) => {
+ this.button.classList.add(item);
+ });
+ };
+
+ if (func) {
+ this.button.addEventListener('click', (event) => {
+ func();
+ });
+ };
+
+ this.style = {};
+
+ this.style.add = (style) => {
+
+ if (style) {
+
+ if (style.length > 0) {
+ style.forEach((item, i) => {
+ switch (item) {
+ case 'link':
+ this.button.classList.add('button-link');
+ break;
+
+ case 'line':
+ this.button.classList.add('button-line');
+ break;
+
+ case 'ring':
+ this.button.classList.add('button-ring');
+ break;
+ };
+ });
+ };
+
+ };
+
+ };
+
+ this.style.remove = () => {
+
+ this.button.classList.remove('button-link');
+
+ this.button.classList.remove('button-line');
+
+ this.button.classList.remove('button-ring');
+
+ };
+
+ this.style.update = (style) => {
+
+ this.style.remove();
+
+ this.style.add(style);
+
+ };
+
+ this.style.add(style);
+
+ this.disable = () => {
+ this.button.disabled = true;
+ };
+
+ this.enable = () => {
+ this.button.disabled = false;
+ };
+
+ this.deactive = () => {
+ this.button.classList.remove('active');
+ };
+
+ this.active = () => {
+ this.button.classList.add('active');
+ };
+
+ this.wrap = () => {
+ return form.wrap({
+ children: [
+ this.button
+ ]
+ })
+ };
+
+};
diff --git a/src/css/clock.css b/src/component/clock/index.css
old mode 100755
new mode 100644
similarity index 55%
rename from src/css/clock.css
rename to src/component/clock/index.css
index 129b1833..b5b8b3fd
--- a/src/css/clock.css
+++ b/src/component/clock/index.css
@@ -5,14 +5,57 @@
font-family: var(--theme-font-display-name);
font-weight: var(--theme-font-display-weight);
font-style: var(--theme-font-display-style);
- color: rgb(var(--theme-style-text));
display: inline-flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
+ gap: 0.25em;
line-height: 1.2;
}
+.clock-hour,
+.clock-separator,
+.clock-minute,
+.clock-second,
+.clock-meridiem {
+ font-size: 1.5em;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ white-space: nowrap;
+}
+
+.clock-separator {
+ justify-content: center;
+ color: rgb(var(--theme-accent));
+}
+
+.is-theme-background-type-accent .clock-separator {
+ justify-content: center;
+ color: hsl(var(--theme-accent-rgb-text));
+}
+
+.clock-hour,
+.clock-minute,
+.clock-second,
+.clock-meridiem {
+ justify-content: center;
+}
+
+.is-theme-background-type-accent .clock-hour,
+.is-theme-background-type-accent .clock-minute,
+.is-theme-background-type-accent .clock-second,
+.is-theme-background-type-accent .clock-meridiem {
+ color: hsl(var(--theme-accent-rgb-text));
+}
+
+.is-theme-background-type-color .clock-hour,
+.is-theme-background-type-color .clock-minute,
+.is-theme-background-type-color .clock-second,
+.is-theme-background-type-color .clock-meridiem {
+ color: hsl(var(--theme-background-color-rgb-text));
+}
+
.is-header-item-justify-left .clock {
justify-content: flex-start;
text-align: left;
@@ -27,54 +70,3 @@
justify-content: flex-end;
text-align: right;
}
-
-.clock-separator,
-.clock-hours,
-.clock-minutes,
-.clock-seconds,
-.clock-meridiem {
- font-size: 1.5em;
- display: flex;
- justify-content: center;
- align-items: center;
- white-space: nowrap;
-}
-
-.clock-separator {
- justify-content: center;
- color: rgb(var(--theme-accent));
-}
-
-.clock-hours,
-.clock-minutes,
-.clock-seconds,
-.clock-meridiem {
- justify-content: center;
- /* min-width: 1.25em; */
-}
-
-.is-header-item-justify-left .clock-item:not(:last-child) {
- margin-right: 0.2em;
-}
-
-.is-header-item-justify-center .clock-item:not(:first-child) {
- margin-left: 0.1em;
-}
-
-.is-header-item-justify-center .clock-item:not(:last-child) {
- margin-right: 0.1em;
-}
-
-.is-header-item-justify-right .clock-item:not(:first-child) {
- margin-left: 0.2em;
-}
-
-.clock-hours {
- color: rgb(var(--theme-style-text));
-}
-
-.clock-minutes,
-.clock-seconds,
-.clock-meridiem {
- color: rgb(var(--theme-color-16));
-}
diff --git a/src/component/clock/index.js b/src/component/clock/index.js
new file mode 100644
index 00000000..d3a02b5a
--- /dev/null
+++ b/src/component/clock/index.js
@@ -0,0 +1,251 @@
+import { state } from '../state';
+
+import { node } from '../../utility/node';
+import { ordinalWord } from '../../utility/ordinalWord';
+import { wordNumber } from '../../utility/wordNumber';
+import { trimString } from '../../utility/trimString';
+import { isValidString } from '../../utility/isValidString';
+import { complexNode } from '../../utility/complexNode';
+import { clearChildNode } from '../../utility/clearChildNode';
+
+import moment from 'moment';
+
+import './index.css';
+
+export const Clock = function({} = {}) {
+
+ this.now;
+
+ this.bind = {};
+
+ this.bind.tick = () => {
+
+ window.setInterval(() => {
+ this.update();
+ }, 1000);
+
+ };
+
+ this.element = {
+ clock: node('div|class:clock'),
+ hour: node('span|class:clock-item clock-hour'),
+ minute: node('span|class:clock-item clock-minute'),
+ second: node('span|class:clock-item clock-second'),
+ meridiem: node('span|class:clock-item clock-meridiem')
+ };
+
+ this.string = {};
+
+ this.string.hour = () => {
+
+ let value;
+
+ switch (state.get.current().header.clock.hour.display) {
+
+ case 'word':
+
+ value = this.now.hours();
+
+ if (!state.get.current().header.clock.hour24.show && this.now.hours() > 12) {
+ value = value - 12;
+ };
+
+ if (!state.get.current().header.clock.hour24.show && this.now.hours() == 0) {
+ value = 12;
+ };
+
+ value = wordNumber(value);
+
+ if (state.get.current().header.clock.hour24.show && this.now.hours() > 0 && this.now.hours() < 10) {
+ value = 'Zero ' + value;
+ };
+
+ break;
+
+ case 'number':
+
+ value = this.now.hours();
+
+ if (!state.get.current().header.clock.hour24.show && this.now.hours() > 12) {
+ value = value - 12;
+ };
+
+ if (!state.get.current().header.clock.hour24.show && this.now.hours() == 0) {
+ value = 12;
+ };
+
+ if (state.get.current().header.clock.hour24.show && this.now.hours() < 10) {
+ value = '0' + value;
+ };
+
+ break;
+
+ };
+
+ return value;
+
+ };
+
+ this.string.minute = () => {
+
+ let value;
+
+ switch (state.get.current().header.clock.minute.display) {
+
+ case 'word':
+
+ value = wordNumber(this.now.minutes());
+
+ if (this.now.minutes() > 0 && this.now.minutes() < 10) {
+ value = 'Zero ' + value;
+ };
+
+ break;
+
+ case 'number':
+
+ value = this.now.minutes();
+
+ if (this.now.minutes() < 10) {
+ value = '0' + value;
+ };
+
+ break;
+
+ };
+
+ return value;
+
+ };
+
+ this.string.second = () => {
+
+ let value;
+
+ switch (state.get.current().header.clock.second.display) {
+
+ case 'word':
+
+ value = wordNumber(this.now.seconds());
+
+ if (this.now.seconds() > 0 && this.now.seconds() < 10) {
+ value = 'Zero ' + value;
+ };
+
+ break;
+
+ case 'number':
+
+ value = this.now.seconds();
+
+ if (this.now.seconds() < 10) {
+ value = '0' + value;
+ };
+
+ break;
+
+ };
+
+ return value;
+
+ };
+
+ this.string.meridiem = () => {
+
+ return this.now.format('A');
+
+ };
+
+ this.assemble = () => {
+
+ clearChildNode(this.element.clock);
+
+ if (state.get.current().header.clock.hour.show) {
+ this.element.clock.appendChild(this.element.hour);
+ };
+
+ if (state.get.current().header.clock.minute.show) {
+ this.element.clock.appendChild(this.element.minute);
+ };
+
+ if (state.get.current().header.clock.second.show) {
+ this.element.clock.appendChild(this.element.second);
+ };
+
+ if (!state.get.current().header.clock.hour24.show && state.get.current().header.clock.meridiem.show) {
+ this.element.clock.appendChild(this.element.meridiem);
+ };
+
+ if (state.get.current().header.clock.separator.show) {
+
+ let separatorCharacter;
+
+ if (isValidString(state.get.current().header.clock.separator.text)) {
+ separatorCharacter = trimString(state.get.current().header.clock.separator.text);
+ } else {
+ separatorCharacter = ':';
+ };
+
+ let parts = this.element.clock.querySelectorAll('span');
+
+ if (parts.length > 1) {
+
+ parts.forEach((item, i) => {
+
+ if (i > 0 && item != this.element.meridiem) {
+
+ let separator = complexNode({
+ tag: 'span',
+ text: separatorCharacter,
+ attr: [{
+ key: 'class',
+ value: 'clock-item clock-separator'
+ }]
+ });
+
+ this.element.clock.insertBefore(separator, item);
+
+ };
+ });
+
+ };
+
+ };
+
+ };
+
+ this.update = () => {
+
+ this.assemble();
+
+ this.now = moment();
+
+ if (state.get.current().header.clock.hour.show) {
+ this.element.hour.innerHTML = this.string.hour();
+ };
+
+ if (state.get.current().header.clock.minute.show) {
+ this.element.minute.innerHTML = this.string.minute();
+ };
+
+ if (state.get.current().header.clock.second.show) {
+ this.element.second.innerHTML = this.string.second();
+ };
+
+ if (!state.get.current().header.clock.hour24.show && state.get.current().header.clock.meridiem.show) {
+ this.element.meridiem.innerHTML = this.string.meridiem();
+ };
+
+ };
+
+ this.assemble();
+
+ this.update();
+
+ this.bind.tick();
+
+ this.clock = () => {
+ return this.element.clock;
+ };
+
+};
diff --git a/src/component/collapse/index.css b/src/component/collapse/index.css
new file mode 100644
index 00000000..0b84fcea
--- /dev/null
+++ b/src/component/collapse/index.css
@@ -0,0 +1,57 @@
+.collapse {
+ margin-top: calc(var(--wrap-space) * -1);
+ position: relative;
+ display: grid;
+ transition: margin var(--layout-transition-fast);
+ pointer-events: none;
+}
+
+.collapse-area {
+ margin-top: calc(var(--wrap-space) - 1em);
+ margin-right: -1em;
+ margin-bottom: -1em;
+ margin-left: -1em;
+ position: relative;
+ display: block;
+ overflow: hidden;
+ transition: margin var(--layout-transition-fast);
+}
+
+.collapse-area.is-collapsed {
+ margin: 0;
+}
+
+.collapse-spacer {
+ padding: 1em;
+ transition: margin var(--layout-transition-fast);
+}
+
+.collapse-spacer>* {
+ pointer-events: all;
+}
+
+.collapse-area.is-collapsed .collapse-spacer {
+ margin-bottom: -200vh;
+ position: relative;
+}
+
+.collapse-toggle .icon {
+ transition: transform var(--layout-transition-fast);
+}
+
+.collapse-toggle.is-collapsed .icon {
+ transform: rotate(180deg);
+}
+
+.collapse-spacer hr:first-child {
+ margin-top: var(--wrap-space);
+}
+
+/* debug */
+/* .collapse {
+ outline: 1px dotted blue;
+}
+
+.collapse-area {
+ outline: 1px solid red;
+} */
diff --git a/src/component/collapse/index.js b/src/component/collapse/index.js
new file mode 100644
index 00000000..563de50c
--- /dev/null
+++ b/src/component/collapse/index.js
@@ -0,0 +1,138 @@
+import { form } from '../form';
+import { icon } from '../icon';
+
+import { complexNode } from '../../utility/complexNode';
+import { node } from '../../utility/node';
+
+import './index.css';
+
+export const Collapse = function({
+ type = false,
+ radioGroup = false,
+ checkbox = false,
+ target = false
+} = {}) {
+
+ target.forEach((item, i) => {
+ item.state = {
+ collapsed: true
+ };
+
+ item.area = node('div|class:collapse-area');
+
+ item.spacer = node('div|class:collapse-spacer');
+ });
+
+ this.target = () => {
+ return target;
+ };
+
+ this.element = {
+ collapse: node('div|class:collapse')
+ };
+
+ this.collapse = () => {
+ target.forEach((item, i) => {
+ item.spacer.appendChild(item.content);
+
+ item.area.appendChild(item.spacer);
+
+ this.element.collapse.appendChild(item.area);
+ });
+
+ return this.element.collapse;
+ };
+
+ this.toggle = () => {
+ target.forEach((item, i) => {
+ if (item.state.collapsed) {
+ item.state.collapsed = false;
+ } else {
+ item.state.collapsed = true;
+ };
+ });
+
+ this.update();
+ };
+
+ this.renderTarget = (state, area) => {
+ if (state) {
+ area.classList.add('is-collapsed');
+ // area.classList.remove('is-pop');
+ area.setAttribute('aria-hidden', true);
+ } else {
+ area.classList.remove('is-collapsed');
+ // area.classList.add('is-pop');
+ area.removeAttribute('aria-hidden');
+ };
+ };
+
+ this.renderToggle = (state, toggle) => {
+ if (state) {
+ toggle.classList.remove('active');
+ toggle.classList.remove('is-collapsed');
+ } else {
+ toggle.classList.add('active');
+ toggle.classList.add('is-collapsed');
+ };
+ };
+
+ this.update = () => {
+
+ switch (type) {
+
+ case 'radio':
+
+ const selectedRadioValue = radioGroup.value();
+
+ target.forEach((item, i) => {
+ this.renderTarget(!(item.id === selectedRadioValue), item.area);
+ });
+
+ break;
+
+ case 'checkbox':
+
+ let state = true;
+
+ if (checkbox.length > 1) {
+
+ let allCheckboxState = [];
+
+ checkbox.forEach(item => allCheckboxState.push(item.checked()));
+
+ state = allCheckboxState.some(item => item === true);
+
+ } else {
+
+ state = checkbox.checked();
+
+ };
+
+ target.forEach((item, i) => {
+ this.renderTarget(!state, item.area);
+ });
+
+ break;
+
+ case 'toggle':
+
+ target.forEach((item, i) => {
+
+ this.renderTarget(item.state.collapsed, item.area);
+
+ if (item.toggle) {
+ this.renderToggle(item.state.collapsed, item.toggle);
+ };
+
+ });
+
+ break;
+
+ };
+
+ };
+
+ this.update();
+
+};
diff --git a/src/component/control/checkbox/index.js b/src/component/control/checkbox/index.js
new file mode 100644
index 00000000..3afc4cae
--- /dev/null
+++ b/src/component/control/checkbox/index.js
@@ -0,0 +1,76 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+
+export const Control_checkbox = function({
+ object = {},
+ id = 'name',
+ path = false,
+ labelText = 'name',
+ description = false,
+ action = false,
+ inputButton = false,
+ inputHide = false,
+ inputButtonStyle = false
+} = {}) {
+
+ this.checkbox = form.input.checkbox({
+ id: id,
+ checked: get({ object: object, path: path }),
+ func: () => {
+
+ set({ object: object, path: path, value: this.checkbox.checked });
+
+ if (action) { action(); };
+
+ }
+ });
+
+ this.label = form.label({
+ forInput: id,
+ text: labelText,
+ description: description,
+ icon: true
+ });
+
+ this.update = () => {
+ this.checkbox.checked = get({ object: object, path: path });
+ };
+
+ this.checked = () => {
+
+ return get({ object: object, path: path });
+
+ };
+
+ this.wrap = () => {
+
+ return form.wrap({
+ children: [
+ this.checkbox,
+ this.label
+ ]
+ });
+
+ };
+
+ this.disable = () => {
+ this.checkbox.disabled = true;
+ };
+
+ this.enable = () => {
+ this.checkbox.disabled = false;
+ };
+
+};
diff --git a/src/component/control/color/index.js b/src/component/control/color/index.js
new file mode 100644
index 00000000..dc4f039e
--- /dev/null
+++ b/src/component/control/color/index.js
@@ -0,0 +1,193 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+
+export const Control_color = function({
+ object = {},
+ path = false,
+ id = 'name',
+ labelText = 'Name',
+ srOnly = false,
+ value = '#000000',
+ defaultValue = false,
+ action = false,
+ extraButtons = []
+} = {}) {
+
+ this.label = form.label({
+ forInput: id,
+ text: labelText,
+ srOnly: srOnly
+ });
+
+ this.color = form.input.color({
+ id: id,
+ value: convertColor.rgb.hex(get({
+ object: object,
+ path: path + '.rgb'
+ })),
+ classList: ['form-group-item-half'],
+ func: () => {
+
+ if (path) {
+
+ set({ object: object, path: path + '.rgb', value: convertColor.hex.rgb(this.color.value) });
+
+ set({
+ object: object,
+ path: path + '.hsl',
+ value: convertColor.rgb.hsl(get({
+ object: object,
+ path: path + '.rgb'
+ }))
+ });
+
+ };
+
+ if (action) { action(); };
+
+ this.text.value = convertColor.rgb.hex(get({ object: object, path: path + '.rgb' }));
+
+ }
+ });
+
+ this.text = form.input.text({
+ value: convertColor.rgb.hex(get({
+ object: object,
+ path: path + '.rgb'
+ })),
+ max: 7,
+ classList: ['form-group-item-half'],
+ placeholder: 'Hex code',
+ func: () => {
+
+ if (path) {
+
+ set({ object: object, path: path + '.rgb', value: convertColor.hex.rgb(this.text.value) });
+
+ };
+
+ if (action) { action(); };
+
+ this.update({ delay: true });
+
+ }
+ });
+
+ this.reset = new Button({
+ text: false,
+ iconName: 'replay',
+ style: ['line'],
+ classList: ['form-group-item-small'],
+ func: () => {
+
+ set({ object: object, path: path + '.rgb', value: JSON.parse(JSON.stringify(defaultValue)) });
+
+ this.update({ all: true });
+
+ if (action) { action(); };
+
+ }
+ });
+
+ this.update = ({
+ delay = false,
+ all = false
+ } = {}) => {
+
+ let delayedUpdate = null;
+
+ const updateControl = () => {
+
+ this.color.value = convertColor.rgb.hex(get({
+ object: object,
+ path: path + '.rgb'
+ }));
+
+ if (all) {
+ this.text.value = convertColor.rgb.hex(get({
+ object: object,
+ path: path + '.rgb'
+ }));
+ };
+
+ };
+
+ if (delay) {
+ clearTimeout(delayedUpdate);
+ delayedUpdate = setTimeout(updateControl, 2000);
+ } else {
+ updateControl();
+ };
+
+ };
+
+ this.wrap = () => {
+
+ const formGroup = form.group({
+ block: true,
+ children: [
+ this.color,
+ this.text
+ ]
+ });
+
+ if (defaultValue || (typeof defaultValue === 'number' && defaultValue === 0)) {
+ formGroup.appendChild(this.reset.button);
+ };
+
+ if (extraButtons.length > 0) {
+ extraButtons.forEach((item, i) => {
+ formGroup.appendChild(item.button);
+ });
+ };
+
+ const wrap = form.wrap({
+ children: [
+ this.label,
+ formGroup
+ ]
+ });
+
+ return wrap;
+
+ };
+
+ this.disable = () => {
+ this.label.classList.add('disabled');
+ this.color.disabled = true;
+ this.text.disabled = true;
+ this.reset.disable();
+
+ if (extraButtons.length > 0) {
+ extraButtons.forEach((item, i) => {
+ item.disable();
+ });
+ };
+ };
+
+ this.enable = () => {
+ this.label.classList.remove('disabled');
+ this.color.disabled = false;
+ this.text.disabled = false;
+ this.reset.enable();
+
+ if (extraButtons.length > 0) {
+ extraButtons.forEach((item, i) => {
+ item.enable();
+ });
+ };
+ };
+
+};
diff --git a/src/component/control/colorMixer/index.js b/src/component/control/colorMixer/index.js
new file mode 100644
index 00000000..222c8a77
--- /dev/null
+++ b/src/component/control/colorMixer/index.js
@@ -0,0 +1,320 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+
+import { Control_color } from '../color';
+import { Control_sliderSlim } from '../sliderSlim';
+
+export const Control_colorMixer = function({
+ object = {},
+ path = false,
+ defaultValue = false,
+ minMaxObject = false,
+ id = 'name',
+ labelText = 'name',
+ srOnly = false,
+ action = false
+} = {}) {
+
+ this.moreControlsToggle = new Button({
+ text: false,
+ iconName: 'arrowKeyboardDown',
+ style: ['line'],
+ classList: ['collapse-toggle', 'form-group-item-small'],
+ func: () => {
+ this.moreControlsCollapse.toggle();
+ this.moreControlsUpdate();
+ }
+ });
+
+ this.color = new Control_color({
+ object: object,
+ path: path,
+ id: id + '-rgb',
+ labelText: labelText,
+ srOnly: srOnly,
+ value: get({ object: object, path: path + '.rgb' }),
+ defaultValue: defaultValue,
+ extraButtons: [this.moreControlsToggle],
+ action: () => {
+ set({
+ object: object,
+ path: path + '.hsl',
+ value: convertColor.rgb.hsl(get({ object: object, path: path + '.rgb' }))
+ });
+ this.colorSliderR.update();
+ this.colorSliderG.update();
+ this.colorSliderB.update();
+ this.colorSliderH.update();
+ this.colorSliderS.update();
+ this.colorSliderL.update();
+ if (action) {
+ action();
+ };
+ }
+ });
+
+ this.colorSliderH = new Control_sliderSlim({
+ object: object,
+ path: path + '.hsl.h',
+ id: id + '-hsl-h',
+ labelText: 'Hue',
+ value: get({ object: object, path: path + '.hsl.h' }),
+ min: get({ object: minMaxObject, path: path + '.hsl.h.min' }),
+ max: get({ object: minMaxObject, path: path + '.hsl.h.max' }),
+ action: () => {
+ set({
+ object: object,
+ path: path + '.rgb',
+ value: convertColor.hsl.rgb(get({ object: object, path: path + '.hsl' }))
+ });
+ this.color.update({ all: true });
+ this.colorSliderR.update();
+ this.colorSliderG.update();
+ this.colorSliderB.update();
+ this.colorSliderS.update();
+ this.colorSliderL.update();
+ if (action) {
+ action();
+ };
+ }
+ });
+
+ this.colorSliderS = new Control_sliderSlim({
+ object: object,
+ path: path + '.hsl.s',
+ id: id + '-hsl-s',
+ labelText: 'Saturation',
+ value: get({ object: object, path: path + '.hsl.s' }),
+ min: get({ object: minMaxObject, path: path + '.hsl.s.min' }),
+ max: get({ object: minMaxObject, path: path + '.hsl.s.max' }),
+ action: () => {
+ set({
+ object: object,
+ path: path + '.rgb',
+ value: convertColor.hsl.rgb(get({ object: object, path: path + '.hsl' }))
+ });
+ this.color.update({ all: true });
+ this.colorSliderR.update();
+ this.colorSliderG.update();
+ this.colorSliderB.update();
+ this.colorSliderH.update();
+ this.colorSliderL.update();
+ if (action) {
+ action();
+ };
+ }
+ });
+
+ this.colorSliderL = new Control_sliderSlim({
+ object: object,
+ path: path + '.hsl.l',
+ id: id + '-hsl-l',
+ labelText: 'Lightness',
+ value: get({ object: object, path: path + '.hsl.l' }),
+ min: get({ object: minMaxObject, path: path + '.hsl.l.min' }),
+ max: get({ object: minMaxObject, path: path + '.hsl.l.max' }),
+ action: () => {
+ set({
+ object: object,
+ path: path + '.rgb',
+ value: convertColor.hsl.rgb(get({ object: object, path: path + '.hsl' }))
+ });
+ this.color.update({ all: true });
+ this.colorSliderR.update();
+ this.colorSliderG.update();
+ this.colorSliderB.update();
+ this.colorSliderH.update();
+ this.colorSliderS.update();
+ if (action) {
+ action();
+ };
+ }
+ });
+
+ this.colorSliderR = new Control_sliderSlim({
+ object: object,
+ path: path + '.rgb.r',
+ id: id + '-rgb-r',
+ labelText: 'Red',
+ value: get({ object: object, path: path + '.rgb.r' }),
+ min: get({ object: minMaxObject, path: path + '.rgb.r.min' }),
+ max: get({ object: minMaxObject, path: path + '.rgb.r.max' }),
+ action: () => {
+ set({
+ object: object,
+ path: path + '.hsl',
+ value: convertColor.rgb.hsl(get({ object: object, path: path + '.rgb' }))
+ });
+ this.color.update({ all: true });
+ this.colorSliderG.update();
+ this.colorSliderB.update();
+ this.colorSliderH.update();
+ this.colorSliderS.update();
+ this.colorSliderL.update();
+ if (action) {
+ action();
+ };
+ }
+ });
+
+ this.colorSliderG = new Control_sliderSlim({
+ object: object,
+ path: path + '.rgb.g',
+ id: id + '-rgb-g',
+ labelText: 'Green',
+ value: get({ object: object, path: path + '.rgb.g' }),
+ min: get({ object: minMaxObject, path: path + '.rgb.g.min' }),
+ max: get({ object: minMaxObject, path: path + '.rgb.g.max' }),
+ action: () => {
+ set({
+ object: object,
+ path: path + '.hsl',
+ value: convertColor.rgb.hsl(get({ object: object, path: path + '.rgb' }))
+ });
+ this.color.update({ all: true });
+ this.colorSliderR.update();
+ this.colorSliderB.update();
+ this.colorSliderH.update();
+ this.colorSliderS.update();
+ this.colorSliderL.update();
+ if (action) {
+ action();
+ };
+ }
+ });
+
+ this.colorSliderB = new Control_sliderSlim({
+ object: object,
+ path: path + '.rgb.b',
+ id: id + '-rgb-b',
+ labelText: 'Blue',
+ value: get({ object: object, path: path + '.rgb.b' }),
+ min: get({ object: minMaxObject, path: path + '.rgb.b.min' }),
+ max: get({ object: minMaxObject, path: path + '.rgb.b.max' }),
+ action: () => {
+ set({
+ object: object,
+ path: path + '.hsl',
+ value: convertColor.rgb.hsl(get({ object: object, path: path + '.rgb' }))
+ });
+ this.color.update({ all: true });
+ this.colorSliderR.update();
+ this.colorSliderG.update();
+ this.colorSliderH.update();
+ this.colorSliderS.update();
+ this.colorSliderL.update();
+ if (action) {
+ action();
+ };
+ }
+ });
+
+ this.moreControls = node('div', [
+ this.colorSliderH.wrap(),
+ this.colorSliderS.wrap(),
+ this.colorSliderL.wrap(),
+ this.colorSliderR.wrap(),
+ this.colorSliderG.wrap(),
+ this.colorSliderB.wrap()
+ ]);
+
+ this.moreControlsCollapse = new Collapse({
+ type: 'toggle',
+ target: [{
+ toggle: this.moreControlsToggle.button,
+ content: this.moreControls
+ }]
+ });
+
+ this.wrap = () => {
+ return form.wrap({
+ children: [
+ this.color.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.moreControlsCollapse.collapse()
+ ]
+ })
+ ]
+ })
+ ]
+ })
+ };
+
+ this.disable = () => {
+ this.color.disable();
+
+ if (!this.moreControlsCollapse.target()[0].state.collapsed) {
+ this.colorSliderH.disable();
+ this.colorSliderS.disable();
+ this.colorSliderL.disable();
+ this.colorSliderR.disable();
+ this.colorSliderG.disable();
+ this.colorSliderB.disable();
+ } else {
+ this.moreControlsUpdate();
+ };
+ };
+
+ this.enable = () => {
+ this.color.enable();
+
+ if (!this.moreControlsCollapse.target()[0].state.collapsed) {
+ this.colorSliderH.enable();
+ this.colorSliderS.enable();
+ this.colorSliderL.enable();
+ this.colorSliderR.enable();
+ this.colorSliderG.enable();
+ this.colorSliderB.enable();
+ } else {
+ this.moreControlsUpdate();
+ };
+ };
+
+ this.moreControlsUpdate = () => {
+
+ if (this.moreControlsCollapse.target()[0].state.collapsed) {
+ this.colorSliderH.disable();
+ this.colorSliderS.disable();
+ this.colorSliderL.disable();
+ this.colorSliderR.disable();
+ this.colorSliderG.disable();
+ this.colorSliderB.disable();
+ } else {
+ this.colorSliderH.enable();
+ this.colorSliderS.enable();
+ this.colorSliderL.enable();
+ this.colorSliderR.enable();
+ this.colorSliderG.enable();
+ this.colorSliderB.enable();
+ };
+
+ };
+
+ this.update = () => {
+ this.color.update({ all: true });
+ this.colorSliderR.update();
+ this.colorSliderG.update();
+ this.colorSliderB.update();
+ this.colorSliderH.update();
+ this.colorSliderS.update();
+ this.colorSliderL.update();
+ };
+
+ this.moreControlsUpdate();
+
+};
diff --git a/src/component/control/groupText/index.js b/src/component/control/groupText/index.js
new file mode 100644
index 00000000..ca557c9d
--- /dev/null
+++ b/src/component/control/groupText/index.js
@@ -0,0 +1,54 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+import { clearChildNode } from '../../../utility/clearChildNode';
+
+export const Control_groupText = function({
+ text = false,
+ classList = []
+} = {}) {
+
+ this.groupText = form.groupText({
+ text: text,
+ classList: classList
+ });
+
+ this.update = (content) => {
+
+ clearChildNode(this.groupText);
+
+ if (typeof content === 'string' && isValidString(content)) {
+ this.groupText.textContent = content;
+ } else if (content && content != '') {
+ this.groupText.appendChild(content);
+ };
+ };
+
+ this.wrap = () => {
+ return form.wrap({
+ children: [
+ this.groupText
+ ]
+ })
+ };
+
+ this.disable = () => {
+ this.groupText.classList.add('disabled');
+ };
+
+ this.enable = () => {
+ this.groupText.classList.remove('disabled');
+ };
+
+};
diff --git a/src/component/control/helperText/index.js b/src/component/control/helperText/index.js
new file mode 100644
index 00000000..2f51ac03
--- /dev/null
+++ b/src/component/control/helperText/index.js
@@ -0,0 +1,51 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+
+export const Control_helperText = function({
+ text = []
+} = {}) {
+
+ this.para = [];
+
+ text.forEach((item, i) => {
+ this.para.push(form.helper({
+ tag: 'p',
+ text: item
+ }));
+ });
+
+ this.wrap = () => {
+ const formWrap = form.wrap();
+
+ this.para.forEach((item, i) => {
+ formWrap.appendChild(item);
+ });
+
+ return formWrap;
+ };
+
+ this.disable = () => {
+ this.para.forEach((item, i) => {
+ item.classList.add('disabled');
+ });
+ };
+
+ this.enable = () => {
+ this.para.forEach((item, i) => {
+ item.classList.remove('disabled');
+ });
+ };
+
+};
\ No newline at end of file
diff --git a/src/component/control/index.js b/src/component/control/index.js
new file mode 100644
index 00000000..76d891c9
--- /dev/null
+++ b/src/component/control/index.js
@@ -0,0 +1,28 @@
+import { Control_checkbox } from './checkbox';
+import { Control_color } from './color';
+import { Control_colorMixer } from './colorMixer';
+import { Control_groupText } from './groupText';
+import { Control_helperText } from './helperText';
+import { Control_inputButton } from './inputButton';
+import { Control_radio } from './radio';
+import { Control_radioGrid } from './radioGrid';
+import { Control_slider } from './slider';
+import { Control_sliderSlim } from './sliderSlim';
+import { Control_text } from './text';
+import { Control_select } from './select';
+
+export {
+ Control_checkbox,
+ Control_color,
+ Control_colorMixer,
+ Control_groupText,
+ Control_helperText,
+ Control_inputButton,
+ Control_radio,
+ Control_radioGrid,
+ Control_slider,
+ Control_sliderSlim,
+ Control_sliderDouble,
+ Control_text
+ Control_select
+};
diff --git a/src/component/control/inputButton/index.js b/src/component/control/inputButton/index.js
new file mode 100644
index 00000000..f9821a34
--- /dev/null
+++ b/src/component/control/inputButton/index.js
@@ -0,0 +1,188 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+
+export const Control_inputButton = function({
+ object = {},
+ path = false,
+ id = 'name',
+ classList = [],
+ inputButtonClassList = [],
+ type = false,
+ inputHide = false,
+ labelText = 'Name',
+ srOnly = false,
+ inputButtonStyle = [],
+ action = false
+} = {}) {
+
+ this.input;
+
+ switch (type) {
+ case 'file':
+ this.input = form.input.file({
+ id: id,
+ func: () => {
+ if (action) {
+ action();
+ };
+ }
+ });
+
+ break;
+
+ case 'color':
+ this.input = form.input.color({
+ id: id,
+ value: convertColor.rgb.hex(get({
+ object: object,
+ path: path + '.rgb'
+ })),
+ classList: classList,
+ func: () => {
+ if (path) {
+ set({
+ object: object,
+ path: path + '.rgb',
+ value: convertColor.hex.rgb(this.input.value)
+ });
+ set({
+ object: object,
+ path: path + '.hsl',
+ value: convertColor.rgb.hsl(get({
+ object: object,
+ path: path + '.rgb'
+ }))
+ });
+ };
+ if (action) {
+ action();
+ };
+ }
+ });
+
+ break;
+
+ };
+
+ this.label = form.label({
+ text: labelText,
+ forInput: id
+ });
+
+ this.button = form.input.inputButton({
+ style: inputButtonStyle,
+ inputHide: inputHide,
+ srOnly: srOnly
+ });
+
+ this.inputButtonStyle = {};
+
+ this.inputButtonStyle.add = (inputButtonStyle) => {
+
+ if (inputButtonStyle) {
+ if (inputButtonStyle.length > 0) {
+
+ inputButtonStyle.forEach((item, i) => {
+
+ switch (item) {
+ case 'link':
+ this.button.classList.add('form-input-button-link');
+ break;
+
+ case 'line':
+ this.button.classList.add('form-input-button-line');
+ break;
+
+ case 'ring':
+ this.button.classList.add('form-input-button-ring');
+ break;
+
+ case 'dot':
+ this.button.classList.add('input-color-dot');
+ break;
+ };
+
+ });
+
+ };
+ };
+
+ };
+
+ this.inputButtonStyle.remove = () => {
+
+ this.button.classList.remove('form-input-button-link');
+
+ this.button.classList.remove('form-input-button-line');
+
+ this.button.classList.remove('form-input-button-ring');
+
+ this.button.classList.remove('input-color-dot');
+
+ };
+
+ this.inputButtonStyle.update = (inputButtonStyle) => {
+
+ this.inputButtonStyle.remove();
+
+ this.inputButtonStyle.add(inputButtonStyle);
+
+ };
+
+ this.inputButtonStyle.add(inputButtonStyle);
+
+ if (inputButtonClassList.length > 0) {
+
+ inputButtonClassList.forEach((item, i) => {
+ this.button.classList.add(item);
+ });
+
+ };
+
+ this.button.appendChild(this.input);
+
+ this.button.appendChild(this.label);
+
+ this.update = () => {
+ switch (type) {
+ case 'color':
+ this.input.value = convertColor.rgb.hex(get({
+ object: object,
+ path: path + '.rgb'
+ }));
+
+ break;
+ };
+ };
+
+ this.wrap = () => {
+ return form.wrap({
+ children: [
+ this.button
+ ]
+ })
+ };
+
+ this.disable = () => {
+ this.label.classList.add('disabled');
+ this.input.disabled = true;
+ };
+
+ this.enable = () => {
+ this.label.classList.remove('disabled');
+ this.input.disabled = false;
+ };
+
+};
diff --git a/src/component/control/radio/index.js b/src/component/control/radio/index.js
new file mode 100644
index 00000000..bedcf00b
--- /dev/null
+++ b/src/component/control/radio/index.js
@@ -0,0 +1,214 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+
+export const Control_radio = function({
+ radioGroup = [],
+ object = {},
+ label = false,
+ groupName = 'group',
+ path = false,
+ action = false,
+ inputButton = false,
+ inputHide = false,
+ inputButtonStyle = false
+} = {}) {
+
+ this.radioSet = [];
+
+ const radioGroupName = groupName;
+
+ const radioGroupPath = path;
+
+ this.label = label;
+
+ if (label) {
+ this.label = form.label({
+ text: label,
+ noPadding: true
+ });
+ };
+
+ if (radioGroup.length > 0) {
+ radioGroup.forEach((item, i) => {
+ const radioAndLabel = {
+ radio: form.input.radio({
+ id: item.id,
+ radioGroup: radioGroupName,
+ value: item.value,
+ checked: (get({ object: object, path: radioGroupPath }) === item.value),
+ func: () => {
+
+ set({ object: object, path: radioGroupPath, value: item.value });
+
+ if (action) { action(); };
+
+ }
+ }),
+ label: form.label({
+ forInput: item.id,
+ text: item.labelText,
+ description: item.description,
+ icon: true
+ }),
+ wrap: () => {
+ return form.wrap({
+ children: [
+ radioAndLabel.radio,
+ radioAndLabel.label
+ ]
+ });
+ },
+ inputButton: () => {
+ return form.input.inputButton({
+ inputButton: inputButton,
+ inputHide: inputHide,
+ style: inputButtonStyle,
+ children: [
+ radioAndLabel.radio,
+ radioAndLabel.label
+ ]
+ });
+ }
+ };
+
+ radioAndLabel.radio.update = () => {
+ radioAndLabel.radio.checked = (get({ object: object, path: radioGroupPath }) === item.value);
+ };
+
+ radioAndLabel.radio.disable = () => {
+ radioAndLabel.radio.disabled = true;
+ };
+
+ radioAndLabel.radio.enable = () => {
+ radioAndLabel.radio.disabled = false;
+ };
+
+ this.radioSet.push(radioAndLabel);
+ });
+ };
+
+ this.value = () => {
+
+ let currentSelectedRadio = false;
+
+ this.radioSet.forEach((item, i) => {
+ if (item.radio.checked) {
+ currentSelectedRadio = item.radio.value;
+ };
+ });
+
+ return currentSelectedRadio;
+
+ };
+
+ this.update = () => {
+
+ this.radioSet.forEach((item, i) => {
+ item.radio.update();
+ });
+
+ };
+
+ this.wrap = () => {
+
+ const wrap = form.wrap();
+
+ if (label) {
+ wrap.appendChild(
+ form.wrap({
+ children: [
+ this.label
+ ]
+ })
+ );
+ };
+
+ this.radioSet.forEach((item, i) => {
+ wrap.appendChild(
+ item.wrap()
+ );
+ });
+
+ return wrap;
+
+ };
+
+ this.inputButton = ({
+ inputHide = false
+ } = {}) => {
+
+ const wrap = form.wrap();
+
+ const group = form.group();
+
+ this.radioSet.forEach((item, i) => {
+ group.appendChild(
+ item.inputButton()
+ );
+ });
+
+ wrap.appendChild(group);
+
+ return wrap;
+
+ };
+
+ this.inline = () => {
+
+ const formWrap = form.wrap();
+
+ const formInline = form.inline({
+ gap: 'large',
+ wrap: true
+ });
+
+ this.radioSet.forEach((item, i) => {
+ formInline.appendChild(
+ form.wrap({
+ children: [
+ item.radio,
+ item.label
+ ]
+ })
+ );
+ });
+
+ formWrap.appendChild(formInline);
+
+ return formWrap;
+
+ };
+
+ this.disable = () => {
+ this.radioSet.forEach((item, i) => {
+ item.radio.disable();
+ });
+
+ if (label) {
+ this.label.classList.add('disabled');
+ };
+ };
+
+ this.enable = () => {
+ this.radioSet.forEach((item, i) => {
+ item.radio.enable();
+ });
+
+ if (label) {
+ this.label.classList.remove('disabled');
+ };
+ };
+
+};
diff --git a/src/component/control/radioGrid/index.js b/src/component/control/radioGrid/index.js
new file mode 100644
index 00000000..feec24d0
--- /dev/null
+++ b/src/component/control/radioGrid/index.js
@@ -0,0 +1,182 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+
+export const Control_radioGrid = function({
+ radioGroup = [],
+ label = false,
+ object = {},
+ groupName = 'group',
+ path = false,
+ gridSize = '3x3',
+ action = false
+} = {}) {
+
+ this.radioSet = [];
+
+ const radioGroupName = groupName;
+
+ const radioGroupPath = path;
+
+ const gridElement = form.grid();
+
+ this.label = false;
+
+ if (label) {
+ this.label = form.label({
+ text: label
+ });
+ };
+
+ if (radioGroup.length > 0) {
+ radioGroup.forEach((item, i) => {
+ const radioAndLabel = {};
+
+ radioAndLabel.position = item.position;
+
+ radioAndLabel.radio = form.input.radio({
+ id: item.id,
+ radioGroup: radioGroupName,
+ value: item.value,
+ checked: (get({ object: object, path: radioGroupPath, }) === item.value),
+ func: () => {
+
+ set({ object: object, path: radioGroupPath, value: item.value });
+
+ if (action) { action(); };
+
+ }
+ });
+
+ radioAndLabel.label = form.label({
+ forInput: item.id,
+ text: item.labelText,
+ description: item.description,
+ srOnly: true,
+ icon: true
+ });
+
+ radioAndLabel.wrap = () => {
+ return form.wrap({
+ children: [
+ radioAndLabel.radio,
+ radioAndLabel.label
+ ]
+ });
+ };
+
+ radioAndLabel.radio.update = () => {
+
+ radioAndLabel.radio.checked = (get({ object: object, path: radioGroupPath }) === item.value);
+
+ };
+
+ radioAndLabel.radio.disable = () => {
+ radioAndLabel.radio.disabled = true;
+ };
+
+ radioAndLabel.radio.enable = () => {
+ radioAndLabel.radio.disabled = false;
+ };
+
+ this.radioSet.push(radioAndLabel);
+ });
+ };
+
+ this.value = () => {
+ let currentSelectedRadio = false;
+
+ this.radioSet.forEach((item, i) => {
+ if (item.radio.checked) {
+ currentSelectedRadio = item.radio.value;
+ };
+ });
+
+ return currentSelectedRadio;
+ };
+
+ this.update = () => {
+ this.radioSet.forEach((item, i) => {
+ item.radio.update();
+ });
+ };
+
+ this.wrap = () => {
+ const wrap = form.wrap();
+
+ switch (gridSize) {
+ case '3x3':
+ gridElement.classList.add('form-grid-3x3');
+ break;
+
+ case '3x1':
+ gridElement.classList.add('form-grid-3x1');
+ break;
+
+ case '1x3':
+ gridElement.classList.add('form-grid-1x3');
+ break;
+
+ case '2x2':
+ gridElement.classList.add('form-grid-2x2');
+ break;
+ };
+
+ this.radioSet.forEach((item, i) => {
+ const wrap = form.wrap({
+ children: [
+ item.radio,
+ item.label
+ ]
+ });
+
+ wrap.style.setProperty('--form-grid-cell', 'cell-' + item.position);
+
+ gridElement.appendChild(wrap);
+ });
+
+ if (label) {
+ wrap.appendChild(this.label);
+ };
+
+ wrap.appendChild(gridElement);
+
+ return wrap;
+ };
+
+ this.disable = () => {
+ this.radioSet.forEach((item, i) => {
+ item.radio.disable();
+ });
+
+ gridElement.classList.add('disabled');
+
+ if (label) {
+ this.label.classList.add('disabled');
+ };
+ };
+
+ this.enable = () => {
+ this.radioSet.forEach((item, i) => {
+ item.radio.enable();
+ });
+
+ gridElement.classList.remove('disabled');
+
+ if (label) {
+ this.label.classList.remove('disabled');
+ };
+ };
+
+};
diff --git a/src/component/control/select/index.js b/src/component/control/select/index.js
new file mode 100644
index 00000000..54658451
--- /dev/null
+++ b/src/component/control/select/index.js
@@ -0,0 +1,110 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+import { trimString } from '../../../utility/trimString';
+import { clearChildNode } from '../../../utility/clearChildNode';
+
+export const Control_select = function({
+ option = [],
+ selected = 0,
+ object = {},
+ id = 'name',
+ path = false,
+ labelText = 'name',
+ srOnly = false,
+ description = false,
+ action = false
+} = {}) {
+
+ this.select = form.input.select({
+ id: id,
+ option: option,
+ selected: selected,
+ func: () => {
+
+ set({ object: object, path: path, value: this.select.selectedIndex });
+
+ if (action) { action(); };
+
+ }
+ });
+
+ this.label = form.label({
+ forInput: id,
+ text: labelText,
+ description: description
+ });
+
+ if (srOnly) {
+ this.label.classList.add('sr-only')
+ };
+
+ this.update = () => {
+ this.select.selectedIndex = get({
+ object: object,
+ path: path
+ });
+ };
+
+ this.updateOption = (option, selectedIndex) => {
+
+ if (option.length > 0) {
+
+ clearChildNode(this.select);
+
+ option.forEach((item, i) => {
+
+ this.select.appendChild(
+ node(
+ 'option:' +
+ item +
+ '|value:' +
+ trimString(item).replace(/\s+/g, '-').toLowerCase()
+ )
+ );
+
+ });
+
+ if (selectedIndex || selectedIndex === 0) {
+ this.select.selectedIndex = selectedIndex;
+ };
+
+ };
+
+ };
+
+ this.selected = () => {
+ return this.select.selectedIndex;
+ };
+
+ this.wrap = () => {
+ return form.wrap({
+ children: [
+ this.label,
+ this.select
+ ]
+ })
+ };
+
+ this.disable = () => {
+ this.label.classList.add('disabled');
+ this.select.disabled = true;
+ };
+
+ this.enable = () => {
+ this.label.classList.remove('disabled');
+ this.select.disabled = false;
+ };
+
+};
diff --git a/src/component/control/slider/index.js b/src/component/control/slider/index.js
new file mode 100644
index 00000000..52cfe765
--- /dev/null
+++ b/src/component/control/slider/index.js
@@ -0,0 +1,197 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+import { minMax } from '../../../utility/minMax';
+
+export const Control_slider = function({
+ object = {},
+ path = false,
+ id = 'name',
+ labelText = 'Name',
+ hue = false,
+ value = 0,
+ defaultValue = false,
+ min = 0,
+ max = 100,
+ step = 1,
+ action = false,
+ focusAction = false,
+ blurAction = false,
+ sliderAction = false,
+ numberAction = false,
+ resetAction = false,
+ mouseDownAction = false,
+ mouseUpAction = false
+} = {}) {
+
+ this.label = form.label({
+ forInput: id,
+ text: labelText
+ });
+
+ const classList = [];
+
+ if (hue) {
+ classList.push('input-range-hue-spectrum');
+ };
+
+ this.range = form.input.range({
+ id: id,
+ value: value,
+ min: min,
+ max: max,
+ step: step,
+ classList: classList,
+ func: () => {
+
+ if (path) {
+
+ set({ object: object, path: path, value: this.value() });
+
+ };
+
+ if (action) { action(); };
+
+ if (sliderAction) { sliderAction(); };
+
+ this.number.value = get({ object: object, path: path });
+
+ },
+ focusFunc: focusAction,
+ blurFunc: blurAction,
+ mouseDownFunc: mouseDownAction,
+ mouseUpFunc: mouseUpAction
+ });
+
+ this.number = form.input.number({
+ value: value,
+ min: min,
+ max: max,
+ classList: ['form-group-item-small'],
+ func: () => {
+
+ if (path) {
+
+ set({
+ object: object,
+ path: path,
+ value: minMax({
+ value: parseInt(this.number.value, 10),
+ min: min,
+ max: max
+ })
+ });
+
+ };
+
+ if (action) { action(); };
+
+ if (numberAction) { numberAction(); };
+
+ this.update({ delay: true });
+
+ }
+ });
+
+ this.reset = new Button({
+ text: false,
+ iconName: 'replay',
+ style: ['line'],
+ classList: ['form-group-item-small'],
+ func: () => {
+
+ set({
+ object: object,
+ path: path,
+ value: JSON.parse(JSON.stringify(defaultValue))
+ });
+
+ this.update();
+
+ if (action) { action(); };
+
+ if (resetAction) { resetAction(); };
+
+ }
+ });
+
+ this.update = ({
+ delay = false
+ } = {}) => {
+
+ let delayedUpdate = null;
+
+ const updateControl = () => {
+ this.range.value = get({ object: object, path: path });
+ this.number.value = get({ object: object, path: path });
+ };
+
+ if (delay) {
+ clearTimeout(delayedUpdate);
+ delayedUpdate = setTimeout(updateControl, 2000);
+ } else {
+ updateControl();
+ };
+
+ };
+
+ this.value = () => {
+ return parseInt(this.range.value, 10);
+ };
+
+ this.wrap = () => {
+ const formGroup = form.group({
+ children: [
+ this.number
+ ]
+ });
+
+ if (defaultValue || (typeof defaultValue === 'number' && defaultValue === 0)) {
+ formGroup.appendChild(this.reset.button);
+ };
+
+ const formInline = form.inline({
+ block: true,
+ gap: 'small',
+ children: [
+ this.range,
+ formGroup
+ ]
+ });
+
+ const wrap = form.wrap({
+ children: [
+ this.label,
+ formInline
+ ]
+ });
+
+ return wrap;
+ };
+
+ this.disable = () => {
+ this.label.classList.add('disabled');
+ this.range.disabled = true;
+ this.number.disabled = true;
+ this.reset.disable();
+ };
+
+ this.enable = () => {
+ this.label.classList.remove('disabled');
+ this.range.disabled = false;
+ this.number.disabled = false;
+ this.reset.enable();
+ };
+
+};
diff --git a/src/component/control/sliderDouble/index.js b/src/component/control/sliderDouble/index.js
new file mode 100644
index 00000000..c562a857
--- /dev/null
+++ b/src/component/control/sliderDouble/index.js
@@ -0,0 +1,217 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Control_slider } from '../slider';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+import { minMax } from '../../../utility/minMax';
+
+export const Control_sliderDouble = function({
+ object = {},
+ labelText = 'Name',
+ left = {
+ path: false,
+ id: 'name',
+ labelText: 'Name',
+ hue: false,
+ value: 0,
+ defaultValue: false,
+ min: 0,
+ max: 100,
+ step: 1,
+ action: false,
+ focusAction: false,
+ blurAction: false,
+ sliderAction: false,
+ numberAction: false,
+ resetAction: false,
+ mouseDownAction: false,
+ mouseUpAction: false
+ },
+ right = {
+ path: false,
+ id: 'name',
+ labelText: 'Name',
+ hue: false,
+ value: 0,
+ defaultValue: false,
+ min: 0,
+ max: 100,
+ step: 1,
+ action: false,
+ focusAction: false,
+ blurAction: false,
+ sliderAction: false,
+ numberAction: false,
+ resetAction: false,
+ mouseDownAction: false,
+ mouseUpAction: false
+ }
+} = {}) {
+
+ this.label = form.label({
+ forInput: left.id,
+ text: labelText
+ });
+
+ this.range = {
+ left: new Control_slider({
+ object: object,
+ path: left.path,
+ id: left.id,
+ labelText: left.labelText,
+ hue: left.hue,
+ value: left.value,
+ defaultValue: left.defaultValue,
+ min: left.min,
+ max: left.max,
+ step: left.step,
+ action: () => {
+
+ if (get({ object: state.get.current(), path: left.path }) > get({ object: state.get.minMax(), path: left.path }).max - 10) {
+ set({ object: state.get.current(), path: left.path, value: get({ object: state.get.minMax(), path: left.path }).max - 10 })
+ };
+
+ if (get({ object: state.get.current(), path: left.path }) >= get({ object: state.get.current(), path: right.path }) - 10) {
+ set({ object: state.get.current(), path: right.path, value: get({ object: state.get.current(), path: left.path }) + 10 })
+ };
+
+ this.range.left.update();
+
+ this.range.right.update();
+
+ if (left.action) {
+ left.action();
+ };
+
+ },
+ focusAction: left.focusAction,
+ blurAction: left.blurAction,
+ sliderAction: left.sliderAction,
+ numberAction: left.numberAction,
+ resetAction: left.resetAction,
+ mouseDownAction: left.mouseDownAction,
+ mouseUpAction: left.mouseUpAction
+ }),
+ right: new Control_slider({
+ object: object,
+ path: right.path,
+ id: right.id,
+ labelText: right.labelText,
+ hue: right.hue,
+ value: right.value,
+ defaultValue: right.defaultValue,
+ min: right.min,
+ max: right.max,
+ step: right.step,
+ action: () => {
+
+ if (get({ object: state.get.current(), path: right.path }) < get({ object: state.get.minMax(), path: right.path }).min + 10) {
+ set({ object: state.get.current(), path: right.path, value: get({ object: state.get.minMax(), path: right.path }).min + 10 })
+ };
+
+ if (get({ object: state.get.current(), path: right.path }) <= get({ object: state.get.current(), path: left.path }) + 10) {
+ set({ object: state.get.current(), path: left.path, value: get({ object: state.get.current(), path: right.path }) - 10 })
+ };
+
+ this.range.left.update();
+
+ this.range.right.update();
+
+ if (right.action) {
+ right.action();
+ };
+
+ },
+ focusAction: right.focusAction,
+ blurAction: right.blurAction,
+ sliderAction: right.sliderAction,
+ numberAction: right.numberAction,
+ resetAction: right.resetAction,
+ mouseDownAction: right.mouseDownAction,
+ mouseUpAction: right.mouseUpAction
+ })
+ };
+
+ this.wrap = () => {
+
+ const leftNumberReset = form.group({
+ children: [
+ this.range.left.number
+ ]
+ });
+
+ if (left.defaultValue || (typeof left.defaultValue === 'number' && left.defaultValue === 0)) {
+ leftNumberReset.prepend(this.range.left.reset.button);
+ };
+
+ const rightNumberReset = form.group({
+ children: [
+ this.range.right.number
+ ]
+ });
+
+ if (right.defaultValue || (typeof right.defaultValue === 'number' && right.defaultValue === 0)) {
+ rightNumberReset.appendChild(this.range.right.reset.button);
+ };
+
+ const wrap = form.wrap({
+ children: [
+ form.wrap({
+ children: [
+ this.label,
+ node('div|class:slider-double', [
+ this.range.left.range,
+ this.range.right.range
+ ])
+ ]
+ }),
+ form.wrap({
+ children: [
+ form.group({
+ block: true,
+ justify: 'space-between',
+ children: [
+ leftNumberReset,
+ rightNumberReset
+ ]
+ })
+ ]
+ })
+ ]
+ });
+
+ return wrap;
+
+ };
+
+ this.update = ({
+ delay = false
+ } = {}) => {
+
+ let delayedUpdate = null;
+
+ const updateControl = () => {
+ this.range.left.update();
+ this.range.right.update();
+ };
+
+ if (delay) {
+ clearTimeout(delayedUpdate);
+ delayedUpdate = setTimeout(updateControl, 2000);
+ } else {
+ updateControl();
+ };
+
+ };
+
+};
diff --git a/src/component/control/sliderSlim/index.js b/src/component/control/sliderSlim/index.js
new file mode 100644
index 00000000..d39fed90
--- /dev/null
+++ b/src/component/control/sliderSlim/index.js
@@ -0,0 +1,199 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+import { minMax } from '../../../utility/minMax';
+
+export const Control_sliderSlim = function({
+ object = {},
+ path = false,
+ id = 'name',
+ labelText = 'Name',
+ hue = false,
+ value = 0,
+ defaultValue = false,
+ min = 0,
+ max = 100,
+ step = 1,
+ action = false,
+ focusAction = false,
+ blurAction = false,
+ sliderAction = false,
+ numberAction = false,
+ resetAction = false,
+ mouseDownAction = false,
+ mouseUpAction = false
+} = {}) {
+
+ this.label = form.label({
+ forInput: id,
+ text: labelText,
+ noPadding: true,
+ classList: ['form-group-text', 'form-group-text-left', 'form-group-text-transparent', 'form-group-text-borderless', 'form-group-item-medium', ]
+ });
+
+ const classList = ['form-group-item-grow'];
+
+ if (hue) {
+ classList.push('input-range-hue-spectrum');
+ };
+
+ this.range = form.input.range({
+ id: id,
+ value: value,
+ min: min,
+ max: max,
+ step: step,
+ classList: classList,
+ func: () => {
+
+ if (path) {
+
+ set({ object: object, path: path, value: this.value() });
+
+ };
+
+ if (action) { action(); };
+
+ if (sliderAction) { sliderAction(); };
+
+ this.number.value = get({ object: object, path: path });
+
+ },
+ focusFunc: focusAction,
+ blurFunc: blurAction,
+ mouseDownFunc: mouseDownAction,
+ mouseUpFunc: mouseUpAction
+ });
+
+ this.number = form.input.number({
+ value: value,
+ min: min,
+ max: max,
+ classList: ['form-group-item-small'],
+ func: () => {
+
+ if (path) {
+
+ set({
+ object: object,
+ path: path,
+ value: minMax({
+ value: parseInt(this.number.value, 10),
+ min: min,
+ max: max
+ })
+ });
+
+ };
+
+ if (action) { action(); };
+
+ if (numberAction) { numberAction(); };
+
+ this.update({ delay: true });
+
+ }
+ });
+
+ this.reset = new Button({
+ text: false,
+ iconName: 'replay',
+ style: ['line'],
+ classList: ['form-group-item-small'],
+ func: () => {
+
+ set({
+ object: object,
+ path: path,
+ value: JSON.parse(JSON.stringify(defaultValue))
+ });
+
+ this.update();
+
+ if (action) { action(); };
+
+ if (resetAction) { resetAction(); };
+
+ }
+ });
+
+ this.update = ({
+ delay = false
+ } = {}) => {
+
+ let delayedUpdate = null;
+
+ const updateControl = () => {
+ this.range.value = get({ object: object, path: path });
+ this.number.value = get({ object: object, path: path });
+ };
+
+ if (delay) {
+ clearTimeout(delayedUpdate);
+ delayedUpdate = setTimeout(updateControl, 2000);
+ } else {
+ updateControl();
+ };
+
+ };
+
+ this.value = () => {
+ return parseInt(this.range.value, 10);
+ };
+
+ this.wrap = () => {
+ const formGroup = form.group({
+ children: [
+ this.number
+ ]
+ });
+
+ if (defaultValue || (typeof defaultValue === 'number' && defaultValue === 0)) {
+ formGroup.appendChild(this.reset.button);
+ };
+
+ const formInline = form.inline({
+ block: true,
+ gap: 'small',
+ children: [
+ this.label,
+ this.range,
+ formGroup
+ ]
+ });
+
+ const wrap = form.wrap({
+ children: [
+ formInline
+ ]
+ });
+
+ return wrap;
+ };
+
+ this.disable = () => {
+ this.label.classList.add('disabled');
+ this.range.disabled = true;
+ this.number.disabled = true;
+ this.reset.disable();
+ };
+
+ this.enable = () => {
+ this.label.classList.remove('disabled');
+ this.range.disabled = false;
+ this.number.disabled = false;
+ this.reset.enable();
+ };
+
+};
diff --git a/src/component/control/text/index.js b/src/component/control/text/index.js
new file mode 100644
index 00000000..a178e607
--- /dev/null
+++ b/src/component/control/text/index.js
@@ -0,0 +1,94 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+
+export const Control_text = function({
+ object = {},
+ path = false,
+ id = 'name',
+ value = false,
+ min = false,
+ max = false,
+ placeholder = false,
+ classList = [],
+ labelText = 'Name',
+ srOnly = false,
+ action = false
+} = {}) {
+
+ this.label = form.label({
+ forInput: id,
+ text: labelText
+ });
+
+ if (srOnly) {
+ this.label.classList.add('sr-only')
+ };
+
+ this.text = form.input.text({
+ id: id,
+ classList: classList,
+ func: () => {
+
+ if (path) {
+ set({ object: object, path: path, value: this.text.value });
+ };
+
+ if (action) { action(); };
+
+ }
+ });
+
+ if (value) {
+ this.text.value = value;
+ };
+
+ if (min) {
+ this.text.min = min;
+ };
+
+ if (max) {
+ this.text.max = max;
+ };
+
+ if (placeholder) {
+ this.text.placeholder = placeholder;
+ };
+
+ this.update = () => {
+
+ this.text.value = get({ object: object, path: path });
+
+ };
+
+ this.wrap = () => {
+ return form.wrap({
+ children: [
+ this.label,
+ this.text
+ ]
+ })
+ };
+
+ this.disable = () => {
+ this.label.classList.add('disabled');
+ this.text.disabled = true;
+ };
+
+ this.enable = () => {
+ this.label.classList.remove('disabled');
+ this.text.disabled = false;
+ };
+
+};
diff --git a/src/component/control/textReset/index.js b/src/component/control/textReset/index.js
new file mode 100644
index 00000000..9036217e
--- /dev/null
+++ b/src/component/control/textReset/index.js
@@ -0,0 +1,126 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+
+export const Control_textReset = function({
+ object = {},
+ path = false,
+ id = 'name',
+ value = false,
+ defaultValue = false,
+ min = false,
+ max = false,
+ placeholder = false,
+ classList = [],
+ labelText = 'Name',
+ srOnly = false,
+ action = false
+} = {}) {
+
+ this.label = form.label({
+ forInput: id,
+ text: labelText
+ });
+
+ if (srOnly) {
+ this.label.classList.add('sr-only')
+ };
+
+ this.text = form.input.text({
+ id: id,
+ classList: classList,
+ func: () => {
+ if (path) {
+ set({
+ object: object,
+ path: path,
+ value: this.text.value
+ });
+ };
+ if (action) {
+ action();
+ };
+ }
+ });
+
+ if (value) {
+ this.text.value = value;
+ };
+
+ if (min) {
+ this.text.min = min;
+ };
+
+ if (max) {
+ this.text.max = max;
+ };
+
+ if (placeholder) {
+ this.text.placeholder = placeholder;
+ };
+
+ this.reset = new Button({
+ text: false,
+ iconName: 'replay',
+ style: ['line'],
+ classList: ['form-group-item-small'],
+ func: () => {
+ set({
+ object: object,
+ path: path,
+ value: JSON.parse(JSON.stringify(defaultValue))
+ });
+ this.update();
+ if (action) {
+ action();
+ };
+ }
+ });
+
+ this.update = () => {
+ this.text.value = get({
+ object: object,
+ path: path,
+ });
+ };
+
+ this.wrap = () => {
+ return form.wrap({
+ children: [
+ this.label,
+ form.group({
+ direction: 'horizontal',
+ block: true,
+ children: [
+ this.text,
+ this.reset.button
+ ]
+ })
+ ]
+ });
+ };
+
+ this.disable = () => {
+ this.label.classList.add('disabled');
+ this.text.disabled = true;
+ this.reset.disable();
+ };
+
+ this.enable = () => {
+ this.label.classList.remove('disabled');
+ this.text.disabled = false;
+ this.reset.enable();
+ };
+
+};
diff --git a/src/component/control/textarea/index.js b/src/component/control/textarea/index.js
new file mode 100644
index 00000000..f756db7b
--- /dev/null
+++ b/src/component/control/textarea/index.js
@@ -0,0 +1,94 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { bookmark } from '../../bookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+
+import { node } from '../../../utility/node';
+import { get } from '../../../utility/get';
+import { set } from '../../../utility/set';
+import { convertColor } from '../../../utility/convertColor';
+import { isValidString } from '../../../utility/isValidString';
+
+export const Control_textarea = function({
+ object = {},
+ path = false,
+ id = 'name',
+ value = false,
+ min = false,
+ max = false,
+ placeholder = false,
+ classList = [],
+ labelText = 'Name',
+ srOnly = false,
+ action = false
+} = {}) {
+
+ this.label = form.label({
+ forInput: id,
+ text: labelText
+ });
+
+ if (srOnly) {
+ this.label.classList.add('sr-only')
+ };
+
+ this.textarea = form.input.textarea({
+ id: id,
+ classList: classList,
+ func: () => {
+
+ if (path) {
+ set({ object: object, path: path, value: this.textarea.value });
+ };
+
+ if (action) { action(); };
+
+ }
+ });
+
+ if (value) {
+ this.textarea.value = value;
+ };
+
+ if (min) {
+ this.textarea.min = min;
+ };
+
+ if (max) {
+ this.textarea.max = max;
+ };
+
+ if (placeholder) {
+ this.textarea.placeholder = placeholder;
+ };
+
+ this.update = () => {
+
+ this.textarea.value = get({ object: object, path: path });
+
+ };
+
+ this.wrap = () => {
+ return form.wrap({
+ children: [
+ this.label,
+ this.textarea
+ ]
+ })
+ };
+
+ this.disable = () => {
+ this.label.classList.add('disabled');
+ this.textarea.disabled = true;
+ };
+
+ this.enable = () => {
+ this.label.classList.remove('disabled');
+ this.textarea.disabled = false;
+ };
+
+};
diff --git a/src/component/customTheme/index.js b/src/component/customTheme/index.js
new file mode 100644
index 00000000..a6b2b434
--- /dev/null
+++ b/src/component/customTheme/index.js
@@ -0,0 +1,142 @@
+import { state } from '../state';
+import { data } from '../data';
+
+import * as form from '../form';
+
+import { Modal } from '../modal';
+import { CustomThemeTile } from '../customThemeTile';
+import { CustomThemeForm } from '../customThemeForm';
+import { StagedCustomTheme } from '../stagedCustomTheme';
+
+import { node } from '../../utility/node';
+import { clearChildNode } from '../../utility/clearChildNode';
+import { applyCSSState } from '../../utility/applyCSSState';
+
+const customTheme = {};
+
+customTheme.tile = {
+ current: []
+};
+
+customTheme.item = {
+ mod: {
+ add: (customThemeData) => {
+
+ state.get.current().theme.custom.all.push(customThemeData.theme);
+
+ },
+ edit: (customThemeData) => {
+
+ state.get.current().theme.custom.all.splice(customThemeData.position, 1);
+
+ state.get.current().theme.custom.all.splice(customThemeData.position, 0, customThemeData.theme);
+
+ },
+ remove: (customThemeData) => {
+
+ state.get.current().theme.custom.all.splice(customThemeData.position, 1);
+
+ }
+ },
+ render: (container) => {
+
+ customTheme.edit.close();
+
+ customTheme.tile.current = [];
+
+ state.get.current().theme.custom.all.forEach((item, i) => {
+
+ const itemIndex = i;
+
+ const currentCustomThemeData = new StagedCustomTheme(item);
+
+ currentCustomThemeData.position = itemIndex;
+
+ const themeCustomTile = new CustomThemeTile({
+ customThemeData: currentCustomThemeData
+ });
+
+ customTheme.tile.current.push(themeCustomTile);
+
+ container.appendChild(themeCustomTile.tile());
+
+ });
+
+ return container;
+
+ }
+};
+
+customTheme.add = {
+ mod: {
+ open: () => { state.get.current().theme.custom.edit = true; },
+ close: () => { state.get.current().theme.custom.edit = false; }
+ },
+ render: () => {
+
+ const newCustomThemeData = new StagedCustomTheme();
+
+ newCustomThemeData.position = state.get.current().theme.custom.all.length;
+
+ const bookmarkForm = new CustomThemeForm({ customThemeData: newCustomThemeData });
+
+ const addModal = new Modal({
+ heading: 'Save current theme',
+ content: bookmarkForm.form(),
+ successText: 'Save',
+ width: 'small',
+ successAction: () => {
+ customTheme.item.mod.add(newCustomThemeData);
+ data.save();
+ }
+ });
+
+ addModal.open();
+
+ }
+};
+
+customTheme.edit = {
+ open: () => {
+
+ state.get.current().theme.custom.edit = true;
+
+ customTheme.edit.render();
+
+ },
+ close: () => {
+
+ state.get.current().theme.custom.edit = false;
+
+ customTheme.edit.render();
+
+ },
+ toggle: () => {
+
+ if (state.get.current().theme.custom.edit) {
+ customTheme.edit.close();
+ } else {
+ customTheme.edit.open();
+ };
+
+ },
+ render: () => {
+
+ applyCSSState('theme.custom.edit');
+
+ if (customTheme.tile.current.length > 0) {
+ customTheme.tile.current.forEach((item, i) => {
+
+ if (state.get.current().theme.custom.edit) {
+ item.control.enable();
+ } else {
+ item.control.disable();
+ };
+
+ });
+ };
+
+ }
+};
+
+export { customTheme };
diff --git a/src/component/customThemeDefault/index.js b/src/component/customThemeDefault/index.js
new file mode 100644
index 00000000..af108cc6
--- /dev/null
+++ b/src/component/customThemeDefault/index.js
@@ -0,0 +1,21 @@
+import { state } from '../state';
+
+export const customThemeDefault = () => {
+ return {
+ name: '',
+ color: { range: { primary: { h: state.get.current().theme.color.range.primary.h, s: state.get.current().theme.color.range.primary.s } }, contrast: state.get.current().theme.color.contrast },
+ accent: { hsl: state.get.current().theme.accent.hsl, rgb: state.get.current().theme.accent.rgb },
+ font: state.get.current().theme.font,
+ background: state.get.current().theme.background,
+ radius: state.get.current().theme.radius,
+ shadow: state.get.current().theme.shadow,
+ style: state.get.current().theme.style,
+ shade: state.get.current().theme.shade,
+ opacity: state.get.current().theme.opacity,
+ layout: state.get.current().theme.layout,
+ header: state.get.current().theme.header,
+ bookmark: state.get.current().theme.bookmark,
+ group: state.get.current().theme.group,
+ toolbar: state.get.current().theme.toolbar
+ };
+};
diff --git a/src/component/customThemeForm/index.js b/src/component/customThemeForm/index.js
new file mode 100644
index 00000000..8b238936
--- /dev/null
+++ b/src/component/customThemeForm/index.js
@@ -0,0 +1,69 @@
+import * as form from '../form';
+
+import { Button } from '../button';
+
+import { Control_helperText } from '../control/helperText';
+import { Control_inputButton } from '../control/inputButton';
+import { Control_groupText } from '../control/groupText';
+import { Control_radio } from '../control/radio';
+import { Control_radioGrid } from '../control/radioGrid';
+import { Control_checkbox } from '../control/checkbox';
+import { Control_slider } from '../control/slider';
+import { Control_sliderSlim } from '../control/sliderSlim';
+import { Control_colorMixer } from '../control/colorMixer';
+import { Control_color } from '../control/color';
+import { Control_text } from '../control/text';
+import { Control_select } from '../control/select';
+
+import { node } from '../../utility/node';
+import { complexNode } from '../../utility/complexNode';
+import { isValidString } from '../../utility/isValidString';
+import { trimString } from '../../utility/trimString';
+import { ordinalNumber } from '../../utility/ordinalNumber';
+import { randomString } from '../../utility/randomString';
+import { randomNumber } from '../../utility/randomNumber';
+
+export const CustomThemeForm = function({
+ customThemeData = false
+} = {}) {
+
+ this.element = {
+ form: node('form|class:theme-custom-form'),
+ main: node('div|class:theme-custom-form-main'),
+ text: new Control_text({
+ object: customThemeData.theme,
+ path: 'name',
+ id: 'name',
+ value: customThemeData.theme.name,
+ placeholder: 'Example theme',
+ labelText: 'Name'
+ }),
+ randomName: new Button({
+ text: 'Random theme name',
+ style: ['line'],
+ func: () => {
+ customThemeData.theme.name = randomString({ adjectivesCount: randomNumber(1, 3) });
+ this.element.text.update();
+ }
+ })
+ };
+
+ this.assemble = () => {
+
+ this.element.main.appendChild(this.element.text.wrap());
+
+ this.element.main.appendChild(this.element.randomName.wrap());
+
+ this.element.form.appendChild(this.element.main);
+
+ };
+
+ this.form = () => {
+
+ return this.element.form;
+
+ };
+
+ this.assemble();
+
+};
diff --git a/src/component/customThemeTile/index.css b/src/component/customThemeTile/index.css
new file mode 100644
index 00000000..18b39f8f
--- /dev/null
+++ b/src/component/customThemeTile/index.css
@@ -0,0 +1,207 @@
+:root {
+ --theme-custom-size: 14;
+}
+
+@media (min-width: 1100px) {
+ :root {
+ --theme-custom-size: 18;
+ }
+}
+
+:root {
+ --theme-custom-columns: 3;
+ --theme-custom-preview-shift: 8;
+ --theme-custom-preview-gap: 8;
+ --theme-custom-preview-circle: 28;
+ --theme-custom-edit-height: 10;
+}
+
+.theme-custom {
+ display: grid;
+ grid-template-columns: repeat(var(--theme-custom-columns), 1fr);
+ grid-auto-rows: calc((var(--theme-custom-size) / 4) * 1em);
+ grid-gap: calc((var(--form-space) / 8) * 1em);
+}
+
+.theme-custom-tile {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ display: block;
+}
+
+.theme-custom-tile-front,
+.theme-custom-tile-back {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ transition: background-color var(--layout-transition-extra-fast), height var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast);
+}
+
+.theme-custom-tile-front {
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ z-index: 2;
+}
+
+.is-theme-custom-edit .theme-custom-tile-front {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.is-theme-custom-edit .theme-custom-tile-front {
+ height: calc(((var(--theme-custom-size) - var(--theme-custom-edit-height)) / 4) * 1em);
+ box-shadow: var(--theme-shadow-bottom-medium);
+}
+
+.theme-custom-tile-back {
+ background-color: hsl(var(--button-background));
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ overflow: hidden;
+ z-index: 1;
+}
+
+.theme-custom-button {
+ padding: 0;
+ width: 100%;
+ height: 100%;
+ min-height: initial;
+ line-height: 1.6;
+ display: block;
+ overflow: hidden;
+ transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast), height var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast);
+}
+
+.is-theme-custom-edit .theme-custom-button {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.theme-custom-control {
+ position: absolute;
+ left: 0;
+ bottom: calc(((var(--theme-custom-edit-height) / 4) * 1em) * -1);
+ width: 100%;
+ height: calc((var(--theme-custom-edit-height) / 4) * 1em);
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ grid-template-rows: 1fr;
+ overflow: hidden;
+ transition: bottom var(--layout-transition-extra-fast);
+}
+
+.is-theme-custom-edit .theme-custom-control {
+ bottom: 0;
+}
+
+.theme-custom-control-button {
+ padding: 0;
+ border-radius: 0;
+ min-height: initial;
+ position: relative;
+}
+
+.theme-custom-control-button:hover,
+.theme-custom-control-button:focus {
+ background-color: hsla(var(--theme-accent-rgb-text), 0.1);
+}
+
+.theme-custom-control-edit .icon,
+.theme-custom-control-remove .icon {
+ position: relative;
+}
+
+.theme-custom-control-edit .icon {
+ bottom: calc((var(--theme-radius) / 32) * 0.01em);
+ left: calc((var(--theme-radius) / 16) * 0.01em);
+}
+
+.theme-custom-control-remove .icon {
+ bottom: calc((var(--theme-radius) / 32) * 0.01em);
+ right: calc((var(--theme-radius) / 16) * 0.01em);
+}
+
+.theme-custom-preview {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: block;
+}
+
+.theme-custom-background-01,
+.theme-custom-background-02,
+.theme-custom-background-03,
+.theme-custom-background-04,
+.theme-custom-accent {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: block;
+ transition: clip-path var(--layout-transition-extra-fast);
+}
+
+.theme-custom-background-01 {
+ background-color: rgb(var(--theme-custom-background-01));
+ z-index: 1;
+}
+
+.theme-custom-background-02 {
+ --theme-custom-preview-shift-02: calc((var(--theme-custom-preview-shift) / 4) + 2);
+ background-color: rgb(var(--theme-custom-background-02));
+ z-index: 2;
+ clip-path: polygon(100% calc(100% - (var(--theme-custom-preview-shift-02) * ((var(--theme-custom-preview-gap) / 4) * 1em))), 100% 100%, calc(100% - (var(--theme-custom-preview-shift-02) * ((var(--theme-custom-preview-gap) / 4) * 1em))) 100%);
+ transition-delay: var(--layout-duration-03);
+}
+
+.theme-custom-background-03 {
+ --theme-custom-preview-shift-03: calc((var(--theme-custom-preview-shift) / 4) + 1);
+ background-color: rgb(var(--theme-custom-background-03));
+ z-index: 3;
+ clip-path: polygon(100% calc(100% - (var(--theme-custom-preview-shift-03) * ((var(--theme-custom-preview-gap) / 4) * 1em))), 100% 100%, calc(100% - (var(--theme-custom-preview-shift-03) * ((var(--theme-custom-preview-gap) / 4) * 1em))) 100%);
+ transition-delay: var(--layout-duration-02);
+}
+
+.theme-custom-background-04 {
+ --theme-custom-preview-shift-04: calc(var(--theme-custom-preview-shift) / 4);
+ background-color: rgb(var(--theme-custom-background-04));
+ z-index: 4;
+ clip-path: polygon(100% calc(100% - (var(--theme-custom-preview-shift-04) * ((var(--theme-custom-preview-gap) / 4) * 1em))), 100% 100%, calc(100% - (var(--theme-custom-preview-shift-04) * ((var(--theme-custom-preview-gap) / 4) * 1em))) 100%);
+ transition-delay: var(--layout-duration-01);
+}
+
+.theme-custom-accent {
+ z-index: 5;
+ background-color: rgb(var(--theme-custom-accent));
+ clip-path: circle(calc(var(--theme-custom-preview-circle) * 1%) at 100% 100%);
+}
+
+.theme-custom-button:focus,
+.theme-custom-button:hover {
+ --theme-custom-preview-shift: 10;
+ --theme-custom-preview-circle: 34;
+}
+
+.theme-custom-name {
+ padding: calc(0.75em + ((var(--theme-radius) / 8) * 0.01em));
+ color: hsl(var(--theme-custom-text));
+ font-style: normal;
+ font-size: 0.75em;
+ text-align: left;
+ display: block;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 6;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: initial;
+ transform: scale(1);
+ transition: color var(--layout-transition-extra-fast), transform var(--layout-transition-extra-fast), max-width var(--layout-transition-extra-fast), max-height var(--layout-transition-extra-fast), top var(--layout-transition-extra-fast), left var(--layout-transition-extra-fast);
+}
diff --git a/src/component/customThemeTile/index.js b/src/component/customThemeTile/index.js
new file mode 100644
index 00000000..ec80fa51
--- /dev/null
+++ b/src/component/customThemeTile/index.js
@@ -0,0 +1,493 @@
+import { state } from '../state';
+import { data } from '../data';
+import { theme } from '../theme';
+import { menu } from '../menu';
+import { toolbar } from '../toolbar';
+import { layout } from '../layout';
+import { header } from '../header';
+import { bookmark } from '../bookmark';
+import { group } from '../group';
+import { groupAndBookmark } from '../groupAndBookmark';
+import { customTheme } from '../customTheme';
+import { themeSetting } from '../menuContent/themeSetting';
+
+import { Button } from '../button';
+import { Modal } from '../modal';
+import { CustomThemeForm } from '../customThemeForm';
+import { StagedCustomTheme } from '../stagedCustomTheme';
+
+import { node } from '../../utility/node';
+import { convertColor } from '../../utility/convertColor';
+import { isValidString } from '../../utility/isValidString';
+import { complexNode } from '../../utility/complexNode';
+import { applyCSSVar } from '../../utility/applyCSSVar';
+import { applyCSSClass } from '../../utility/applyCSSClass';
+import { applyCSSState } from '../../utility/applyCSSState';
+
+import './index.css';
+
+export const CustomThemeTile = function({
+ customThemeData = false
+} = {}) {
+
+ this.element = {
+ tile: node('div|class:theme-custom-tile'),
+ front: node('div|class:theme-custom-tile-front'),
+ back: node('div|class:theme-custom-tile-back'),
+ control: node('div|class:theme-custom-control'),
+ preview: node('div|class:theme-custom-preview'),
+ name: node('span|class:theme-custom-name'),
+ custom: new Button({
+ text: false,
+ classList: ['theme-custom-button'],
+ style: ['ring'],
+ block: true,
+ func: () => {
+
+ const newCustomThemeData = JSON.parse(JSON.stringify(customThemeData));
+
+ state.get.current().theme.color.range.primary.h = newCustomThemeData.theme.color.range.primary.h;
+
+ state.get.current().theme.color.range.primary.s = newCustomThemeData.theme.color.range.primary.s;
+
+ state.get.current().theme.color.contrast = newCustomThemeData.theme.color.contrast;
+
+ state.get.current().theme.accent.hsl = newCustomThemeData.theme.accent.hsl;
+
+ state.get.current().theme.accent.rgb = newCustomThemeData.theme.accent.rgb;
+
+ state.get.current().theme.font = newCustomThemeData.theme.font;
+
+ state.get.current().theme.background = newCustomThemeData.theme.background;
+
+ state.get.current().theme.radius = newCustomThemeData.theme.radius;
+
+ state.get.current().theme.shadow = newCustomThemeData.theme.shadow;
+
+ state.get.current().theme.style = newCustomThemeData.theme.style;
+
+ state.get.current().theme.shade = newCustomThemeData.theme.shade;
+
+ state.get.current().theme.opacity = newCustomThemeData.theme.opacity;
+
+ state.get.current().theme.layout = newCustomThemeData.theme.layout;
+
+ state.get.current().theme.header = newCustomThemeData.theme.header;
+
+ state.get.current().theme.bookmark = newCustomThemeData.theme.bookmark;
+
+ state.get.current().theme.group = newCustomThemeData.theme.group;
+
+ state.get.current().theme.toolbar = newCustomThemeData.theme.toolbar;
+
+ theme.color.render();
+
+ theme.font.display.load();
+
+ theme.font.ui.load();
+
+ theme.background.image.render();
+
+ theme.background.video.clear();
+
+ theme.background.video.render();
+
+ themeSetting.control.style.update();
+
+ themeSetting.control.color.range.primary.h.update();
+
+ themeSetting.control.color.range.primary.s.update();
+
+ themeSetting.control.color.contrast.update();
+
+ themeSetting.control.accent.color.update();
+
+ themeSetting.control.font.display.name.update();
+
+ themeSetting.control.font.display.weight.update();
+
+ themeSetting.control.font.display.style.update();
+
+ themeSetting.control.font.ui.name.update();
+
+ themeSetting.control.font.ui.weight.update();
+
+ themeSetting.control.font.ui.style.update();
+
+ themeSetting.control.radius.update();
+
+ themeSetting.control.shadow.update();
+
+ themeSetting.control.shade.opacity.update();
+
+ themeSetting.control.shade.blur.update();
+
+ themeSetting.control.opacity.general.update();
+
+ themeSetting.control.layout.divider.size.update();
+
+ themeSetting.control.header.color.by.update();
+
+ themeSetting.control.header.color.color.update();
+
+ themeSetting.control.header.color.opacity.update();
+
+ themeSetting.control.header.color.collapse.update();
+
+ themeSetting.control.bookmark.color.by.update();
+
+ themeSetting.control.bookmark.color.color.update();
+
+ themeSetting.control.bookmark.color.opacity.update();
+
+ themeSetting.control.bookmark.color.collapse.update();
+
+ themeSetting.control.bookmark.item.border.update();
+
+ themeSetting.control.background.type.update();
+
+ themeSetting.control.background.typeCollapse.update();
+
+ themeSetting.control.background.color.update();
+
+ themeSetting.control.background.gradient.angle.update();
+
+ themeSetting.control.background.gradient.start.update();
+
+ themeSetting.control.background.gradient.end.update();
+
+ themeSetting.control.background.image.url.update();
+
+ themeSetting.control.background.image.blur.update();
+
+ themeSetting.control.background.image.grayscale.update();
+
+ themeSetting.control.background.image.scale.update();
+
+ themeSetting.control.background.image.accent.update();
+
+ themeSetting.control.background.image.opacity.update();
+
+ themeSetting.control.background.video.url.update();
+
+ themeSetting.control.background.video.blur.update();
+
+ themeSetting.control.background.video.grayscale.update();
+
+ themeSetting.control.background.video.scale.update();
+
+ themeSetting.control.background.video.accent.update();
+
+ themeSetting.control.background.video.opacity.update();
+
+ themeSetting.control.opacity.general.update();
+
+ themeSetting.control.opacity.toolbar.update();
+
+ themeSetting.control.opacity.bookmark.update();
+
+ themeSetting.control.opacity.search.update();
+
+ themeSetting.control.opacity.openAll.update();
+
+ themeSetting.disable();
+
+ applyCSSVar([
+ 'theme.accent.rgb.r',
+ 'theme.accent.rgb.g',
+ 'theme.accent.rgb.b',
+ 'theme.accent.hsl.h',
+ 'theme.accent.hsl.s',
+ 'theme.accent.hsl.l',
+ 'theme.font.display.weight',
+ 'theme.font.display.style',
+ 'theme.font.ui.weight',
+ 'theme.font.ui.style',
+ 'theme.opacity.general',
+ 'theme.background.color.rgb.r',
+ 'theme.background.color.rgb.g',
+ 'theme.background.color.rgb.b',
+ 'theme.background.color.hsl.h',
+ 'theme.background.color.hsl.s',
+ 'theme.background.color.hsl.l',
+ 'theme.background.image.blur',
+ 'theme.background.image.grayscale',
+ 'theme.background.image.scale',
+ 'theme.background.image.accent',
+ 'theme.background.image.opacity',
+ 'theme.background.image.vignette.opacity',
+ 'theme.background.image.vignette.start',
+ 'theme.background.image.vignette.end',
+ 'theme.background.video.blur',
+ 'theme.background.video.grayscale',
+ 'theme.background.video.scale',
+ 'theme.background.video.accent',
+ 'theme.background.video.opacity',
+ 'theme.background.video.vignette.opacity',
+ 'theme.background.video.vignette.start',
+ 'theme.background.video.vignette.end',
+ 'theme.background.gradient.angle',
+ 'theme.background.gradient.start.rgb.r',
+ 'theme.background.gradient.start.rgb.g',
+ 'theme.background.gradient.start.rgb.b',
+ 'theme.background.gradient.start.hsl.h',
+ 'theme.background.gradient.start.hsl.s',
+ 'theme.background.gradient.start.hsl.l',
+ 'theme.background.gradient.end.rgb.r',
+ 'theme.background.gradient.end.rgb.g',
+ 'theme.background.gradient.end.rgb.b',
+ 'theme.background.gradient.end.hsl.h',
+ 'theme.background.gradient.end.hsl.s',
+ 'theme.background.gradient.end.hsl.l',
+ 'theme.radius',
+ 'theme.shadow',
+ 'theme.shade.opacity',
+ 'theme.shade.blur',
+ 'theme.layout.divider.size',
+ 'theme.header.color.rgb.r',
+ 'theme.header.color.rgb.g',
+ 'theme.header.color.rgb.b',
+ 'theme.header.color.hsl.h',
+ 'theme.header.color.hsl.s',
+ 'theme.header.color.hsl.l',
+ 'theme.header.color.opacity',
+ 'theme.header.search.opacity',
+ 'theme.bookmark.color.rgb.r',
+ 'theme.bookmark.color.rgb.g',
+ 'theme.bookmark.color.rgb.b',
+ 'theme.bookmark.color.hsl.h',
+ 'theme.bookmark.color.hsl.s',
+ 'theme.bookmark.color.hsl.l',
+ 'theme.bookmark.color.opacity',
+ 'theme.bookmark.item.opacity',
+ 'theme.toolbar.opacity',
+ 'theme.group.openAll.opacity'
+ ]);
+
+ applyCSSClass([
+ 'theme.style',
+ 'theme.background.type',
+ 'theme.header.color.by',
+ 'theme.bookmark.color.by'
+ ]);
+
+ applyCSSState([
+ 'theme.layout.divider.size'
+ ]);
+
+ layout.area.render();
+
+ bookmark.item.mod.applyVar('border', state.get.current().theme.bookmark.item.border);
+
+ bookmark.item.mod.applyVar('color.opacity', state.get.current().theme.bookmark.item.opacity);
+
+ groupAndBookmark.render();
+
+ toolbar.current.update.accent();
+
+ toolbar.current.update.style();
+
+ header.element.search.update.style();
+
+ if (group.area.current.length > 0) {
+
+ group.area.current[0].update.style();
+
+ };
+
+ data.save();
+
+ }
+ })
+ };
+
+ this.control = {};
+
+ this.control.button = {
+ edit: new Button({
+ text: 'Edit this saved theme',
+ srOnly: true,
+ iconName: 'edit',
+ style: ['link'],
+ size: 'small',
+ title: 'Edit this saved theme',
+ classList: ['theme-custom-control-button', 'theme-custom-control-edit'],
+ func: () => {
+
+ menu.close();
+
+ let newCustomThemeData = new StagedCustomTheme(JSON.parse(JSON.stringify(customThemeData.theme)));
+
+ newCustomThemeData.position = JSON.parse(JSON.stringify(customThemeData.position));
+
+ const bookmarkForm = new CustomThemeForm({ customThemeData: newCustomThemeData });
+
+ const editModal = new Modal({
+ heading: isValidString(customThemeData.theme.name) ? 'Edit ' + customThemeData.theme.name : 'Edit unnamed custom theme',
+ content: bookmarkForm.form(),
+ successText: 'Save',
+ width: 'small',
+ successAction: () => {
+
+ customTheme.item.mod.edit(newCustomThemeData);
+
+ data.save();
+
+ }
+ });
+
+ editModal.open();
+
+ }
+ }),
+ remove: new Button({
+ text: 'Remove this saved theme',
+ srOnly: true,
+ iconName: 'cross',
+ style: ['link'],
+ size: 'small',
+ title: 'Remove this saved theme',
+ classList: ['theme-custom-control-button', 'theme-custom-control-remove'],
+ func: () => {
+
+ menu.close();
+
+ const removeModal = new Modal({
+ heading: isValidString(customThemeData.theme.name) ? 'Remove ' + customThemeData.theme.name : 'Remove unnamed custom theme',
+ content: 'Are you sure you want to remove this saved theme? This can not be undone.',
+ successText: 'Remove',
+ width: 'small',
+ successAction: () => {
+ customTheme.item.mod.remove(customThemeData);
+ data.save();
+ }
+ });
+
+ removeModal.open();
+
+ }
+ })
+ };
+
+ this.control.disable = () => {
+ for (var key in this.control.button) {
+ this.control.button[key].disable();
+ };
+ };
+
+ this.control.enable = () => {
+ for (var key in this.control.button) {
+ this.control.button[key].enable();
+ };
+ };
+
+ this.previewTile = () => {
+
+ const shadeSteps = 4;
+
+ let hsl = customThemeData.theme.color.range.primary;
+
+ hsl.l = Math.round(customThemeData.theme.color.contrast.start + ((customThemeData.theme.color.contrast.end - customThemeData.theme.color.contrast.start) / 2));
+
+ let shadeStep = Math.round((customThemeData.theme.color.contrast.end - customThemeData.theme.color.contrast.start) / 10);
+
+ for (let i = 1; i <= shadeSteps; i++) {
+
+ let darken = () => { hsl.l = Math.round(hsl.l - shadeStep); };
+
+ let lighten = () => { hsl.l = Math.round(hsl.l + shadeStep); };
+
+ if (customThemeData.theme.style == 'dark') {
+
+ darken();
+
+ } else if (customThemeData.theme.style == 'light') {
+
+ lighten();
+
+ } else if (customThemeData.theme.style == 'system') {
+
+ if (window.matchMedia('(prefers-color-scheme:dark)').matches) {
+ darken();
+ } else if (window.matchMedia('(prefers-color-scheme:light)').matches) {
+ lighten();
+ };
+
+ };
+
+ if (hsl.l < 0) { hsl.l = 0; };
+
+ if (hsl.l > 100) { hsl.l = 100; };
+
+ let rgb = convertColor.hsl.rgb(hsl);
+
+ this.element.tile.style.setProperty('--theme-custom-background-0' + i + '-rgb-r', rgb.r);
+ this.element.tile.style.setProperty('--theme-custom-background-0' + i + '-rgb-g', rgb.g);
+ this.element.tile.style.setProperty('--theme-custom-background-0' + i + '-rgb-b', rgb.b);
+ this.element.tile.style.setProperty('--theme-custom-background-0' + i + '-hsl-h', hsl.h);
+ this.element.tile.style.setProperty('--theme-custom-background-0' + i + '-hsl-s', hsl.s);
+ this.element.tile.style.setProperty('--theme-custom-background-0' + i + '-hsl-l', hsl.l);
+
+ this.element.tile.style.setProperty('--theme-custom-background-0' + i, 'var(--theme-custom-background-0' + i + '-rgb-r), var(--theme-custom-background-0' + i + '-rgb-g), var(--theme-custom-background-0' + i + '-rgb-b)');
+
+ this.element.preview.appendChild(node('span|class:theme-custom-background-0' + i));
+
+ };
+
+ this.element.tile.style.setProperty('--theme-custom-text', '0, 0%, calc(((((var(--theme-custom-background-01-rgb-r) * var(--theme-t-r)) + (var(--theme-custom-background-01-rgb-g) * var(--theme-t-g)) + (var(--theme-custom-background-01-rgb-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%)');
+
+ this.element.tile.style.setProperty('--theme-custom-accent-rgb-r', customThemeData.theme.accent.rgb.r);
+ this.element.tile.style.setProperty('--theme-custom-accent-rgb-g', customThemeData.theme.accent.rgb.g);
+ this.element.tile.style.setProperty('--theme-custom-accent-rgb-b', customThemeData.theme.accent.rgb.b);
+
+ this.element.tile.style.setProperty('--theme-custom-accent', 'var(--theme-custom-accent-rgb-r), var(--theme-custom-accent-rgb-g), var(--theme-custom-accent-rgb-b)');
+
+ this.element.preview.appendChild(node('span|class:theme-custom-accent'));
+
+ return node('div|class:theme-custom-tile')
+
+ };
+
+ this.assemble = () => {
+
+ this.previewTile();
+
+ this.element.custom.button.appendChild(this.element.preview);
+
+ if (isValidString(customThemeData.theme.name)) {
+
+ this.element.name.innerHTML = customThemeData.theme.name;
+
+ this.element.custom.button.appendChild(this.element.name);
+
+ };
+
+ this.element.front.appendChild(this.element.custom.button);
+
+ this.element.back.appendChild(this.element.control);
+
+ this.element.control.appendChild(this.control.button.edit.button);
+
+ this.element.control.appendChild(this.control.button.remove.button);
+
+ this.element.tile.appendChild(this.element.back);
+
+ this.element.tile.appendChild(this.element.front);
+
+ if (state.get.current().theme.custom.edit) {
+ this.control.enable();
+ } else {
+ this.control.disable();
+ };
+
+ };
+
+ this.tile = () => {
+
+ return this.element.tile;
+
+ };
+
+ this.assemble();
+
+};
diff --git a/src/component/data/index.js b/src/component/data/index.js
new file mode 100644
index 00000000..7026c737
--- /dev/null
+++ b/src/component/data/index.js
@@ -0,0 +1,272 @@
+import { state } from '../state';
+import { bookmark } from '../bookmark';
+import { version } from '../version';
+import { update } from '../update';
+import { appName } from '../appName';
+
+import { Modal } from '../modal';
+
+import { dateTime } from '../../utility/dateTime';
+import { node } from '../../utility/node';
+import { isJson } from '../../utility/isJson';
+import { clearChildNode } from '../../utility/clearChildNode';
+
+const data = {};
+
+data.set = (key, data) => {
+ localStorage.setItem(key, data);
+};
+
+data.get = (key) => {
+ return localStorage.getItem(key);
+};
+
+data.import = (input, feedback) => {
+ const fileList = input.files;
+
+ if (fileList.length > 0) {
+ data.validateJsonFile(fileList, input, feedback);
+ };
+};
+
+data.validateJsonFile = (fileList, input, feedback) => {
+
+ // make new file reader
+ var reader = new FileReader();
+
+ // define the on load event for the reader
+ reader.onload = (event) => {
+
+ // is this a JSON file
+ if (isJson(event.target.result)) {
+
+ // is this JSON from this app
+ if (JSON.parse(event.target.result)[appName] || JSON.parse(event.target.result)[appName.toLowerCase()]) {
+
+ data.feedback.clear.render(feedback);
+
+ data.feedback.success.render(feedback, fileList[0].name, () => {
+ data.restore(JSON.parse(event.target.result));
+ data.save();
+ data.reload.render();
+ });
+
+ input.value = '';
+
+ } else {
+
+ data.feedback.clear.render(feedback);
+ data.feedback.fail.notAppJson.render(feedback, fileList[0].name);
+ input.value = '';
+
+ };
+ } else {
+
+ // not a JSON file
+ data.feedback.clear.render(feedback);
+ data.feedback.fail.notJson.render(feedback, fileList[0].name);
+ input.value = '';
+
+ };
+
+ };
+
+ // invoke the reader
+ reader.readAsText(fileList.item(0));
+
+};
+
+data.export = () => {
+ let timestamp = dateTime();
+
+ const leadingZero = (value) => {
+ if (value < 10) {
+ value = '0' + value;
+ };
+ return value;
+ };
+
+ timestamp.hours = leadingZero(timestamp.hours);
+ timestamp.minutes = leadingZero(timestamp.minutes);
+ timestamp.seconds = leadingZero(timestamp.seconds);
+ timestamp.date = leadingZero(timestamp.date);
+ timestamp.month = leadingZero(timestamp.month + 1);
+ timestamp.year = leadingZero(timestamp.year);
+ timestamp = timestamp.year + '.' + timestamp.month + '.' + timestamp.date + ' - ' + timestamp.hours + ' ' + timestamp.minutes + ' ' + timestamp.seconds;
+
+ const fileName = appName + ' backup - ' + timestamp + '.json';
+
+ const dataToExport = 'data:text/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(data.load()));
+
+ const link = document.createElement('a');
+
+ link.setAttribute('href', dataToExport);
+
+ link.setAttribute('download', fileName);
+
+ link.addEventListener('click', () => { link.remove(); });
+
+ document.querySelector('body').appendChild(link);
+
+ link.click();
+};
+
+data.remove = (key) => {
+ localStorage.removeItem(key);
+};
+
+data.backup = (dataToBackup) => {
+ if (dataToBackup) {
+ console.log('data version ' + dataToBackup.version + ' backed up');
+ data.set(appName + 'Backup', JSON.stringify(dataToBackup));
+ };
+};
+
+data.restore = (dataToRestore) => {
+ if (dataToRestore) {
+ if (dataToRestore.version != version.number) {
+ // backup save data before running update
+ data.backup(dataToRestore);
+ // run update on save data
+ dataToRestore = update.run(dataToRestore);
+ // save data
+ data.set(appName, JSON.stringify(dataToRestore));
+ } else {
+ console.log('data version:', version.number, 'no need to run update');
+ };
+ // restore state and bookmarks from save data
+ state.set.restore(dataToRestore);
+ bookmark.restore(dataToRestore);
+ } else {
+ console.log('no data found to load');
+ state.set.default();
+ };
+};
+
+data.save = () => {
+ data.set(appName, JSON.stringify({
+ [appName]: true,
+ version: version.number,
+ state: state.get.current(),
+ bookmark: bookmark.all
+ }));
+};
+
+data.load = () => {
+ if (data.get(appName) != null && data.get(appName) != undefined) {
+ return JSON.parse(data.get(appName));
+ } else {
+ return false;
+ };
+};
+
+data.wipe = () => {
+ data.remove(appName);
+ data.reload.render();
+};
+
+data.reload = {
+ render: () => {
+ location.reload();
+ }
+};
+
+data.clear = {
+ render: () => {
+
+ const clearContent = node('div');
+
+ const para1 = node('p:Are you sure you want to clear all ' + appName + ' Bookmarks and Settings? ' + appName + ' will be restore to the default state.');
+
+ const para2 = node('p:This can not be undone.');
+
+ clearContent.appendChild(para1);
+
+ clearContent.appendChild(para2);
+
+ const clearModal = new Modal({
+ heading: 'Clear all ' + appName + ' data?',
+ content: clearContent,
+ successText: 'Clear all data',
+ width: 'small',
+ successAction: () => {
+ data.wipe();
+ }
+ });
+
+ clearModal.open();
+
+ }
+};
+
+data.feedback = {};
+
+data.feedback.empty = {
+ render: (feedback) => {
+ feedback.appendChild(node('p:No JSON file selected.|class:muted small'));
+ }
+};
+
+data.feedback.clear = {
+ render: (feedback) => {
+ clearChildNode(feedback);
+ }
+};
+
+data.feedback.success = {
+ render: (feedback, filename, action) => {
+ feedback.appendChild(node('p:Success! Restoring ' + appName + ' Bookmarks and Settings.|class:muted small'));
+ feedback.appendChild(node('p:' + filename));
+ if (action) {
+ data.feedback.animation.set.render(feedback, 'is-pop', action);
+ };
+ }
+};
+
+data.feedback.fail = {
+ notJson: {
+ render: (feedback, filename) => {
+ feedback.appendChild(node('p:Not a JSON file. Make sure the selected file came from ' + appName + '.|class:small muted'));
+ feedback.appendChild(node('p:' + filename));
+ data.feedback.animation.set.render(feedback, 'is-shake');
+ }
+ },
+ notAppJson: {
+ render: (feedback, filename) => {
+ feedback.appendChild(node('p:Not the right kind of JSON file. Make sure the selected file came from ' + appName + '.|class:small muted'));
+ feedback.appendChild(node('p:' + filename));
+ data.feedback.animation.set.render(feedback, 'is-shake');
+ }
+ }
+};
+
+data.feedback.animation = {
+ set: {
+ render: (feedback, animationClass, action) => {
+ feedback.classList.add(animationClass);
+
+ const animationEndAction = () => {
+ if (action) {
+ action();
+ };
+ data.feedback.animation.reset.render(feedback);
+ };
+
+ feedback.addEventListener('animationend', animationEndAction);
+ }
+ },
+ reset: {
+ render: (feedback) => {
+ feedback.classList.remove('is-shake');
+ feedback.classList.remove('is-pop');
+ feedback.classList.remove('is-jello');
+ feedback.removeEventListener('animationend', data.feedback.animation.reset.render);
+ }
+ }
+};
+
+data.init = () => {
+ data.restore(data.load());
+};
+
+export { data };
diff --git a/src/css/date.css b/src/component/date/index.css
old mode 100755
new mode 100644
similarity index 61%
rename from src/css/date.css
rename to src/component/date/index.css
index d3cb2a8d..236ce331
--- a/src/css/date.css
+++ b/src/component/date/index.css
@@ -5,29 +5,14 @@
font-family: var(--theme-font-display-name);
font-weight: var(--theme-font-display-weight);
font-style: var(--theme-font-display-style);
- color: rgb(var(--theme-style-text));
display: inline-flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
+ gap: 0.25em;
line-height: 1.2;
}
-.is-header-item-justify-left .date {
- justify-content: flex-start;
- text-align: left;
-}
-
-.is-header-item-justify-center .date {
- justify-content: center;
- text-align: center;
-}
-
-.is-header-item-justify-right .date {
- justify-content: flex-end;
- text-align: right;
-}
-
.date-separator,
.date-date,
.date-day,
@@ -45,6 +30,11 @@
color: rgb(var(--theme-accent));
}
+.is-theme-background-type-accent .date-separator {
+ justify-content: center;
+ color: hsl(var(--theme-accent-rgb-text));
+}
+
.date-date,
.date-day,
.date-month,
@@ -52,28 +42,31 @@
justify-content: center;
}
-.is-header-item-justify-left .date-item:not(:last-child) {
- margin-right: 0.2em;
+.is-theme-background-type-accent .date-day,
+.is-theme-background-type-accent .date-date,
+.is-theme-background-type-accent .date-month,
+.is-theme-background-type-accent .date-year {
+ color: hsl(var(--theme-accent-rgb-text));
}
-.is-header-item-justify-center .date-item:not(:first-child) {
- margin-left: 0.1em;
+.is-theme-background-type-color .date-day,
+.is-theme-background-type-color .date-date,
+.is-theme-background-type-color .date-month,
+.is-theme-background-type-color .date-year {
+ color: hsl(var(--theme-background-color-rgb-text));
}
-.is-header-item-justify-center .date-item:not(:last-child) {
- margin-right: 0.1em;
+.is-header-item-justify-left .date {
+ justify-content: flex-start;
+ text-align: left;
}
-.is-header-item-justify-right .date-item:not(:first-child) {
- margin-left: 0.2em;
+.is-header-item-justify-center .date {
+ justify-content: center;
+ text-align: center;
}
-.date-day {
- color: rgb(var(--theme-style-text));
-}
-
-.date-date,
-.date-month,
-.date-year {
- color: rgb(var(--theme-color-16));
+.is-header-item-justify-right .date {
+ justify-content: flex-end;
+ text-align: right;
}
diff --git a/src/component/date/index.js b/src/component/date/index.js
new file mode 100644
index 00000000..30f8b0de
--- /dev/null
+++ b/src/component/date/index.js
@@ -0,0 +1,287 @@
+import { state } from '../state';
+
+import { node } from '../../utility/node';
+import { ordinalWord } from '../../utility/ordinalWord';
+import { wordNumber } from '../../utility/wordNumber';
+import { trimString } from '../../utility/trimString';
+import { isValidString } from '../../utility/isValidString';
+import { complexNode } from '../../utility/complexNode';
+import { clearChildNode } from '../../utility/clearChildNode';
+
+import moment from 'moment';
+
+import './index.css';
+
+export const Date = function({} = {}) {
+
+ this.now;
+
+ this.bind = {};
+
+ this.bind.tick = () => {
+
+ window.setInterval(() => {
+ this.update();
+ }, 1000);
+
+ };
+
+ this.element = {
+ date: node('div|class:date'),
+ day: node('span|class:date-item date-day'),
+ dateOfMonth: node('span|class:date-item date-date'),
+ month: node('span|class:date-item date-month'),
+ year: node('span|class:date-item date-year')
+ };
+
+ this.string = {};
+
+ this.string.day = () => {
+
+ let value;
+
+ switch (state.get.current().header.date.day.display) {
+
+ case 'word':
+
+ value = this.now.format('dddd');
+
+ if (state.get.current().header.date.day.length == 'short') {
+ value = value.substring(0, 3);
+ };
+
+ break;
+
+ case 'number':
+
+ value = this.now.day();
+
+ if (state.get.current().header.date.day.weekStart == 'monday') {
+ if (value == 0) {
+ value = 7;
+ };
+ } else if (state.get.current().header.date.day.weekStart == 'sunday') {
+ value = value + 1;
+ };
+
+ break;
+
+ };
+
+ return value;
+
+ };
+
+ this.string.dateOfMonth = () => {
+
+ let value;
+
+ switch (state.get.current().header.date.date.display) {
+
+ case 'word':
+
+ if (state.get.current().header.date.date.ordinal) {
+ value = ordinalWord(wordNumber(this.now.date()));
+ } else {
+ value = wordNumber(this.now.date());
+ };
+
+ break;
+
+ case 'number':
+
+ if (state.get.current().header.date.date.ordinal) {
+ value = this.now.format('Do');
+ } else {
+ value = this.now.format('D');
+ };
+
+ break;
+
+ };
+
+ return value;
+
+ };
+
+ this.string.month = () => {
+
+ let value;
+
+ switch (state.get.current().header.date.month.display) {
+
+ case 'word':
+
+ value = this.now.format('MMMM');
+ if (state.get.current().header.date.month.length == 'short') {
+ value = value.substring(0, 3);
+ };
+
+ break;
+
+ case 'number':
+
+ if (state.get.current().header.date.month.ordinal) {
+ value = this.now.format('Mo');
+ } else {
+ value = this.now.format('M');
+ };
+
+ break;
+
+ };
+
+ return value;
+
+ };
+
+ this.string.year = () => {
+
+ let value;
+
+ switch (state.get.current().header.date.year.display) {
+
+ case 'word':
+
+ value = wordNumber(this.now.format('YYYY'));
+
+ break;
+
+ case 'number':
+
+ value = this.now.format('YYYY');
+
+ break;
+
+ };
+
+ return value;
+
+ };
+
+ this.assemble = () => {
+
+ clearChildNode(this.element.date);
+
+ if (state.get.current().header.date.day.show) {
+ this.element.date.appendChild(this.element.day);
+ };
+
+ if (state.get.current().header.date.date.show && state.get.current().header.date.month.show) {
+
+ switch (state.get.current().header.date.format) {
+
+ case 'date-month':
+
+ if (state.get.current().header.date.date.show) {
+ this.element.date.appendChild(this.element.dateOfMonth);
+ };
+
+ if (state.get.current().header.date.month.show) {
+ this.element.date.appendChild(this.element.month);
+ };
+
+ break;
+
+ case 'month-date':
+
+ if (state.get.current().header.date.month.show) {
+ this.element.date.appendChild(this.element.month);
+ };
+
+ if (state.get.current().header.date.date.show) {
+ this.element.date.appendChild(this.element.dateOfMonth);
+ };
+
+ break;
+
+ };
+
+ } else {
+
+ if (state.get.current().header.date.date.show) {
+ this.element.date.appendChild(this.element.dateOfMonth);
+ };
+
+ if (state.get.current().header.date.month.show) {
+ this.element.date.appendChild(this.element.month);
+ };
+
+ };
+
+ if (state.get.current().header.date.year.show) {
+ this.element.date.appendChild(this.element.year);
+ };
+
+ if (state.get.current().header.date.separator.show) {
+
+ let separatorCharacter;
+
+ if (isValidString(state.get.current().header.date.separator.text)) {
+ separatorCharacter = trimString(state.get.current().header.date.separator.text);
+ } else {
+ separatorCharacter = '/';
+ };
+
+ let parts = this.element.date.querySelectorAll('span');
+
+ if (parts.length > 1) {
+
+ parts.forEach((item, i) => {
+ if (i > 0) {
+
+ let separator = complexNode({
+ tag: 'span',
+ text: separatorCharacter,
+ attr: [{
+ key: 'class',
+ value: 'date-item date-separator'
+ }]
+ });
+
+ this.element.date.insertBefore(separator, item);
+
+ };
+ });
+
+ };
+
+ };
+
+ };
+
+ this.update = () => {
+
+ this.assemble();
+
+ this.now = moment();
+
+ if (state.get.current().header.date.day.show) {
+ this.element.day.innerHTML = this.string.day();
+ };
+
+ if (state.get.current().header.date.date.show) {
+ this.element.dateOfMonth.innerHTML = this.string.dateOfMonth();
+ };
+
+ if (state.get.current().header.date.month.show) {
+ this.element.month.innerHTML = this.string.month();
+ };
+
+ if (state.get.current().header.date.year.show) {
+ this.element.year.innerHTML = this.string.year();
+ };
+
+ };
+
+ this.assemble();
+
+ this.update();
+
+ this.bind.tick();
+
+ this.date = () => {
+ return this.element.date;
+ };
+
+};
diff --git a/src/component/dropdown/index.css b/src/component/dropdown/index.css
new file mode 100644
index 00000000..00f9f591
--- /dev/null
+++ b/src/component/dropdown/index.css
@@ -0,0 +1,30 @@
+:root {
+ --dropdown-background: var(--theme-primary-020);
+}
+
+.dropdown-menu {
+ padding: 0.5em;
+ display: flex;
+ flex-direction: column;
+ position: fixed;
+ top: calc(var(--dropdown-menu-top) * 1px);
+ left: calc(var(--dropdown-menu-left) * 1px);
+ z-index: var(--z-index-dropdown);
+}
+
+.dropdown-content {
+ background-color: hsl(var(--dropdown-background));
+ padding: 0.5em;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ display: flex;
+ flex-direction: column;
+ gap: 0.25em;
+ min-width: 15em;
+ box-shadow: var(--theme-shadow-bottom-large);
+ overflow: hidden;
+}
+
+.dropdown-menu-button {
+ padding: 0.25em 1em;
+ justify-content: flex-start;
+}
diff --git a/src/component/dropdown/index.js b/src/component/dropdown/index.js
new file mode 100644
index 00000000..e0fbebc9
--- /dev/null
+++ b/src/component/dropdown/index.js
@@ -0,0 +1,199 @@
+import { form } from '../form';
+import { icon } from '../icon';
+
+import { Button } from '../button';
+import { KeyboardShortcut } from '../keyboardShortcut';
+
+import { complexNode } from '../../utility/complexNode';
+import { node } from '../../utility/node';
+
+import './index.css';
+
+export const Dropdown = function({
+ text = 'Dropdown',
+ menuItem = [],
+ buttonStyle = [],
+ buttonClassList = [],
+ srOnly = false,
+ iconName = false
+} = {}) {
+
+ this.state = {
+ open: false
+ };
+
+ this.element = {
+ menu: node('div|class:dropdown-menu'),
+ content: node('div|class:dropdown-content'),
+ toggle: new Button({
+ text: text,
+ srOnly: srOnly,
+ iconName: iconName,
+ style: buttonStyle,
+ classList: buttonClassList,
+ func: () => {
+
+ if (this.state.open) {
+ this.close();
+ } else {
+ this.open();
+ };
+
+ }
+ })
+ };
+
+ this.toggle = this.element.toggle.button;
+
+ this.buttonStyle = {};
+
+ this.buttonStyle.update = (style) => {
+
+ this.element.toggle.style.update(style);
+
+ };
+
+ this.open = () => {
+
+ this.state.open = true;
+
+ const body = document.querySelector('body');
+
+ body.appendChild(this.element.menu);
+
+ this.position();
+
+ this.bind.add();
+
+ };
+
+ this.close = () => {
+
+ this.state.open = false;
+
+ const body = document.querySelector('body');
+
+ if (body.contains(this.element.menu)) {
+ body.removeChild(this.element.menu)
+ };
+
+ this.bind.remove();
+
+ };
+
+ this.esc = new KeyboardShortcut({ keycode: 27, action: () => { this.close(); } });
+
+ this.ctrAltM = new KeyboardShortcut({ keycode: 77, ctrl: true, alt: true, action: () => { this.close(); } });
+
+ this.ctrAltG = new KeyboardShortcut({ keycode: 71, ctrl: true, alt: true, action: () => { this.close(); } });
+
+ this.ctrAltA = new KeyboardShortcut({ keycode: 65, ctrl: true, alt: true, action: () => { this.close(); } });
+
+ this.bind = {
+ add: () => {
+
+ window.addEventListener('mouseup', this.clickOut);
+
+ this.esc.add();
+
+ this.ctrAltM.add();
+
+ this.ctrAltG.add();
+
+ this.ctrAltA.add();
+
+ },
+ remove: () => {
+
+ window.removeEventListener('mouseup', this.clickOut);
+
+ this.esc.remove();
+
+ this.ctrAltM.remove();
+
+ this.ctrAltG.remove();
+
+ this.ctrAltA.remove();
+
+ }
+ };
+
+ this.clickOut = (event) => {
+
+ const path = event.path || (event.composedPath && event.composedPath());
+
+ if (!path.includes(this.element.toggle.button) && !path.includes(this.element.menu)) {
+
+ this.close();
+
+ };
+
+ };
+
+ this.position = () => {
+
+ const vWidth = window.innerWidth || doc.documentElement.clientWidth;
+
+ const vHeight = window.innerHeight || doc.documentElement.clientHeight;
+
+ const dropdownRect = this.element.toggle.button.getBoundingClientRect();
+
+ const menuRect = this.element.menu.getBoundingClientRect();
+
+ let menuTop;
+
+ if ((dropdownRect.bottom + menuRect.height) > vHeight) {
+ menuTop = dropdownRect.top - menuRect.height;
+ } else {
+ menuTop = dropdownRect.bottom;
+ };
+
+ let menuLeft = dropdownRect.left + (dropdownRect.width / 2) - (menuRect.width / 2);
+
+ if (menuLeft < 0) {
+ menuLeft = 0;
+ } else if ((menuLeft + menuRect.width) > vWidth) {
+ menuLeft = vWidth - menuRect.width;
+ };
+
+ this.element.menu.style.setProperty('--dropdown-menu-top', menuTop);
+
+ this.element.menu.style.setProperty('--dropdown-menu-left', menuLeft);
+
+ };
+
+ this.assemble = () => {
+
+ if (menuItem.length > 0) {
+
+ menuItem.forEach((item, i) => {
+
+ const dropdownMenuButton = new Button({
+ text: item.text,
+ iconName: item.iconName,
+ classList: ['dropdown-menu-button']
+ });
+
+ dropdownMenuButton.button.addEventListener('click', () => {
+
+ if (item.action()) {
+ item.action();
+ };
+
+ this.close();
+
+ });
+
+ this.element.content.appendChild(dropdownMenuButton.button);
+
+ });
+
+ this.element.menu.appendChild(this.element.content);
+
+ };
+
+ };
+
+ this.assemble();
+
+};
diff --git a/src/component/easterEgg/index.js b/src/component/easterEgg/index.js
new file mode 100644
index 00000000..ab5b9a9c
--- /dev/null
+++ b/src/component/easterEgg/index.js
@@ -0,0 +1,82 @@
+import { data } from '../data';
+import { state } from '../state';
+import { menu } from '../menu';
+import { bookmark } from '../bookmark';
+import { group } from '../group';
+import { groupAndBookmark } from '../groupAndBookmark';
+
+import { StagedBookmark } from '../stagedBookmark';
+import { StagedGroup } from '../stagedGroup';
+
+import { node } from '../../utility/node';
+import { randomNumber } from '../../utility/randomNumber';
+import { convertColor } from '../../utility/convertColor';
+
+const easterEgg = {};
+
+easterEgg.toaster = {};
+
+easterEgg.toaster.render = () => {
+
+ easterEgg.toaster.bind.remove();
+
+ if (bookmark.all.length < 1) {
+
+ const newGroupData = new StagedGroup();
+
+ newGroupData.group.name.text = 'Toaster';
+
+ newGroupData.newGroup();
+
+ group.item.mod.add(newGroupData);
+
+ };
+
+ const newBookmarkData = new StagedBookmark();
+
+ newBookmarkData.link.url = 'https://en.wikipedia.org/wiki/Easter_egg_(media)';
+
+ newBookmarkData.link.background.show = true;
+
+ newBookmarkData.link.background.image.url = 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1628494879270.gif?raw=true';
+
+ newBookmarkData.link.accent.by = 'custom';
+
+ newBookmarkData.link.accent.hsl = { h: randomNumber(0, 360), s: 100, l: 50 };
+
+ newBookmarkData.link.accent.rgb = convertColor.hsl.rgb(newBookmarkData.link.accent.hsl);
+
+ newBookmarkData.link.color.by = 'custom';
+
+ newBookmarkData.link.color.hsl = { h: 0, s: 0, l: 100 };
+
+ newBookmarkData.link.color.rgb = { r: 255, g: 255, b: 255 };
+
+ bookmark.item.mod.add(newBookmarkData);
+
+ groupAndBookmark.render();
+
+ menu.close();
+
+ data.save();
+
+};
+
+easterEgg.toaster.bind = {
+ add: () => {
+
+ menu.element.frame.element.area.addEventListener('animationend', easterEgg.toaster.render);
+
+ menu.element.frame.element.area.classList.add('is-jello');
+
+ },
+ remove: () => {
+
+ menu.element.frame.element.area.removeEventListener('animationend', easterEgg.toaster.render);
+
+ menu.element.frame.element.area.classList.remove('is-jello');
+
+ }
+};
+
+export { easterEgg };
diff --git a/src/component/edge/index.css b/src/component/edge/index.css
new file mode 100644
index 00000000..abbb09fb
--- /dev/null
+++ b/src/component/edge/index.css
@@ -0,0 +1,46 @@
+:root {
+ --edge: inset 0 0 0 var(--layout-line-width) rgb(var(--theme-accent)),
+ inset 0 0 0 calc(var(--layout-line-width) * 4) rgba(var(--theme-accent), 0.1),
+ inset 0 0 0 calc(var(--layout-line-width) * 8) rgba(var(--theme-accent), 0.1);
+ --edge-on-accent: inset 0 0 0 var(--layout-line-width) hsl(var(--theme-accent-rgb-text)),
+ inset 0 0 0 calc(var(--layout-line-width) * 4) hsla(var(--theme-accent-rgb-text), 0.1),
+ inset 0 0 0 calc(var(--layout-line-width) * 8) hsla(var(--theme-accent-rgb-text), 0.1);
+}
+
+.edge,
+.edge-secondary {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
+ opacity: 0;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ z-index: var(--z-index-edge);
+ pointer-events: none;
+ transition: opacity var(--layout-transition-fast);
+}
+
+.edge {
+ background-color: rgba(var(--theme-accent), 0.2);
+ box-shadow: var(--edge);
+}
+
+.edge-secondary {
+ border: var(--layout-line-width) solid rgba(var(--theme-accent), 0.5);
+}
+
+.edge.is-edge-opening,
+.edge-secondary.is-edge-opening {
+ transition:
+ opacity var(--layout-transition-fast),
+ top var(--layout-transition-fast),
+ left var(--layout-transition-fast),
+ width var(--layout-transition-fast),
+ height var(--layout-transition-fast);
+}
+
+.is-theme-background-type-accent .edge,
+.is-theme-background-type-accent .edge-secondary {
+ box-shadow: var(--edge-on-accent);
+}
diff --git a/src/component/edge/index.js b/src/component/edge/index.js
new file mode 100644
index 00000000..6ac8dc5e
--- /dev/null
+++ b/src/component/edge/index.js
@@ -0,0 +1,261 @@
+import { state } from '../state';
+
+import { node } from '../../utility/node';
+
+import './index.css';
+
+export const Edge = function({
+ primary = false,
+ secondary = false,
+ padding = 0
+} = {}) {
+
+ this.tick = null;
+
+ this.element = {
+ edge: {
+ primary: null,
+ secondary: []
+ }
+ };
+
+ this.bind = {
+ set: () => {
+
+ this.tick = window.setTimeout(() => {
+
+ this.bind.set();
+
+ this.track();
+
+ }, 100);
+
+ },
+ remove: () => {
+
+ clearTimeout(this.tick);
+
+ this.tick = null;
+
+ }
+ };
+
+ this.assemble = (edge) => {
+
+ this.element.edge.primary = node('div|class:edge is-transparent');
+
+ this.element.edge.primary.addEventListener('transitionend', (event) => {
+
+ if (event.propertyName === 'opacity' && getComputedStyle(this.element.edge.primary).opacity == 1) {
+
+ this.bind.set();
+
+ this.element.edge.primary.classList.remove('is-edge-opening');
+
+ };
+
+ if (event.propertyName === 'opacity' && getComputedStyle(this.element.edge.primary).opacity == 0) {
+
+ if (this.element.edge.primary.parentElement.contains(this.element.edge.primary)) {
+ this.element.edge.primary.parentElement.removeChild(this.element.edge.primary);
+ };
+
+ this.element.edge.primary.removeAttribute('style');
+
+ this.element.edge.primary.classList.remove('is-edge-opening');
+
+ this.bind.remove();
+
+ };
+
+ });
+
+ this.element.edge.secondary = [];
+
+ if (secondary.length > 0) {
+
+ secondary.forEach((item, i) => {
+ this.element.edge.secondary.push(node('div|class:edge-secondary is-transparent'));
+ });
+
+ this.element.edge.secondary.forEach((item, i) => {
+
+ item.addEventListener('transitionend', (event) => {
+
+ if (event.propertyName === 'opacity' && getComputedStyle(item).opacity == 1) {
+
+ item.classList.remove('is-edge-opening');
+
+ };
+
+ if (event.propertyName === 'opacity' && getComputedStyle(item).opacity == 0) {
+
+ if (item.parentElement.contains(item)) {
+ item.parentElement.removeChild(item);
+ };
+
+ item.removeAttribute('style');
+
+ item.classList.remove('is-edge-opening');
+
+ };
+
+ });
+
+ });
+
+ };
+
+ };
+
+ this.destroy = () => {
+
+ this.element.edge.primary.classList.remove('is-opaque');
+
+ this.element.edge.primary.classList.add('is-transparent');
+
+ if (this.element.edge.secondary.length > 0) {
+
+ this.element.edge.secondary.forEach((item, i) => {
+
+ item.classList.remove('is-opaque');
+
+ item.classList.add('is-transparent');
+
+ });
+
+ };
+
+ };
+
+ this.appear = (edge) => {
+
+ const html = document.querySelector('html');
+
+ const body = document.querySelector('body');
+
+ body.appendChild(edge);
+
+ getComputedStyle(edge).opacity;
+
+ getComputedStyle(edge).width;
+
+ getComputedStyle(edge).height;
+
+ getComputedStyle(edge).top;
+
+ getComputedStyle(edge).left;
+
+ edge.classList.remove('is-transparent');
+
+ edge.classList.add('is-opaque');
+
+ edge.classList.add('is-edge-opening');
+
+ };
+
+ this.show = () => {
+
+ this.appear(this.element.edge.primary);
+
+ const body = document.querySelector('body');
+
+
+ if (secondary.length > 0) {
+
+ secondary.forEach((item, i) => {
+
+ if (body.contains(item)) {
+
+ this.appear(this.element.edge.secondary[i]);
+
+ };
+
+ });
+
+ };
+
+ this.track();
+
+ const html = document.querySelector('html');
+
+ html.classList.add('is-edge');
+
+ };
+
+ this.hide = () => {
+
+ this.destroy();
+
+ this.bind.remove();
+
+ const html = document.querySelector('html');
+
+ html.classList.remove('is-edge');
+
+ };
+
+ this.style = (elementToTrack, edge) => {
+
+ const html = document.querySelector('html');
+
+ const scrollTop = document.documentElement.scrollTop;
+
+ const scrollLeft = document.documentElement.scrollLeft;
+
+ const rect = elementToTrack.getBoundingClientRect();
+
+ const fontSize = parseInt(getComputedStyle(html).fontSize, 10);
+
+ const layoutSpace = parseFloat(getComputedStyle(html).getPropertyValue('--layout-space'), 10);
+
+ const layoutSize = state.get.current().layout.size;
+
+ edge.style.width = rect.width + ((layoutSize / 100) * (((layoutSpace * fontSize) * padding) * 2)) + 'px';
+
+ edge.style.height = rect.height + ((layoutSize / 100) * (((layoutSpace * fontSize) * padding) * 2)) + 'px';
+
+ edge.style.top = rect.top + scrollTop - ((layoutSize / 100) * ((layoutSpace * fontSize) * padding)) + 'px';
+
+ edge.style.left = rect.left + scrollLeft - ((layoutSize / 100) * ((layoutSpace * fontSize) * padding)) + 'px';
+
+ };
+
+ this.track = () => {
+
+ this.style(primary, this.element.edge.primary);
+
+ if (secondary.length > 0) {
+
+ secondary.forEach((item, i) => {
+ this.style(item, this.element.edge.secondary[i]);
+ });
+
+ };
+
+ };
+
+ this.update = {
+ primary: (newPrimary) => {
+
+ if (newPrimary) {
+ primary = newPrimary;
+ };
+
+ this.assemble();
+
+ },
+ secondary: (newSecondary) => {
+
+ if (newSecondary) {
+ secondary = newSecondary;
+ };
+
+ this.assemble();
+
+ }
+ };
+
+ this.assemble();
+
+};
diff --git a/src/css/fontawesome.css b/src/component/fontawesome/index.css
similarity index 97%
rename from src/css/fontawesome.css
rename to src/component/fontawesome/index.css
index 6057440f..5b72639e 100644
--- a/src/css/fontawesome.css
+++ b/src/component/fontawesome/index.css
@@ -1,5 +1,5 @@
/*!
- * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
*/
.fa,
@@ -571,6 +571,14 @@ readers do not read off random characters that represent icons */
content: "\f7e5";
}
+.fa-bacteria:before {
+ content: "\e059";
+}
+
+.fa-bacterium:before {
+ content: "\e05a";
+}
+
.fa-bahai:before {
content: "\f666";
}
@@ -824,7 +832,7 @@ readers do not read off random characters that represent icons */
}
.fa-box-tissue:before {
- content: "\f95b";
+ content: "\e05b";
}
.fa-boxes:before {
@@ -1592,7 +1600,7 @@ readers do not read off random characters that represent icons */
}
.fa-dailymotion:before {
- content: "\f952";
+ content: "\e052";
}
.fa-dashcube:before {
@@ -1607,6 +1615,10 @@ readers do not read off random characters that represent icons */
content: "\f2a4";
}
+.fa-deezer:before {
+ content: "\e077";
+}
+
.fa-delicious:before {
content: "\f1a5";
}
@@ -1851,6 +1863,10 @@ readers do not read off random characters that represent icons */
content: "\f282";
}
+.fa-edge-legacy:before {
+ content: "\e078";
+}
+
.fa-edit:before {
content: "\f044";
}
@@ -2024,7 +2040,7 @@ readers do not read off random characters that represent icons */
}
.fa-faucet:before {
- content: "\f905";
+ content: "\e005";
}
.fa-fax:before {
@@ -2188,7 +2204,7 @@ readers do not read off random characters that represent icons */
}
.fa-firefox-browser:before {
- content: "\f907";
+ content: "\e007";
}
.fa-first-aid:before {
@@ -2507,6 +2523,10 @@ readers do not read off random characters that represent icons */
content: "\f3aa";
}
+.fa-google-pay:before {
+ content: "\e079";
+}
+
.fa-google-play:before {
content: "\f3ab";
}
@@ -2676,7 +2696,7 @@ readers do not read off random characters that represent icons */
}
.fa-hand-holding-medical:before {
- content: "\f95c";
+ content: "\e05c";
}
.fa-hand-holding-usd:before {
@@ -2732,7 +2752,7 @@ readers do not read off random characters that represent icons */
}
.fa-hand-sparkles:before {
- content: "\f95d";
+ content: "\e05d";
}
.fa-hand-spock:before {
@@ -2748,7 +2768,7 @@ readers do not read off random characters that represent icons */
}
.fa-hands-wash:before {
- content: "\f95e";
+ content: "\e05e";
}
.fa-handshake:before {
@@ -2756,11 +2776,11 @@ readers do not read off random characters that represent icons */
}
.fa-handshake-alt-slash:before {
- content: "\f95f";
+ content: "\e05f";
}
.fa-handshake-slash:before {
- content: "\f960";
+ content: "\e060";
}
.fa-hanukiah:before {
@@ -2792,19 +2812,19 @@ readers do not read off random characters that represent icons */
}
.fa-head-side-cough:before {
- content: "\f961";
+ content: "\e061";
}
.fa-head-side-cough-slash:before {
- content: "\f962";
+ content: "\e062";
}
.fa-head-side-mask:before {
- content: "\f963";
+ content: "\e063";
}
.fa-head-side-virus:before {
- content: "\f964";
+ content: "\e064";
}
.fa-heading:before {
@@ -2944,7 +2964,7 @@ readers do not read off random characters that represent icons */
}
.fa-house-user:before {
- content: "\f965";
+ content: "\e065";
}
.fa-houzz:before {
@@ -2992,7 +3012,7 @@ readers do not read off random characters that represent icons */
}
.fa-ideal:before {
- content: "\f913";
+ content: "\e013";
}
.fa-igloo:before {
@@ -3040,7 +3060,7 @@ readers do not read off random characters that represent icons */
}
.fa-instagram-square:before {
- content: "\f955";
+ content: "\e055";
}
.fa-intercom:before {
@@ -3196,7 +3216,7 @@ readers do not read off random characters that represent icons */
}
.fa-laptop-house:before {
- content: "\f966";
+ content: "\e066";
}
.fa-laptop-medical:before {
@@ -3360,7 +3380,7 @@ readers do not read off random characters that represent icons */
}
.fa-lungs-virus:before {
- content: "\f967";
+ content: "\e067";
}
.fa-lyft:before {
@@ -3532,7 +3552,7 @@ readers do not read off random characters that represent icons */
}
.fa-microblog:before {
- content: "\f91a";
+ content: "\e01a";
}
.fa-microchip:before {
@@ -3588,7 +3608,7 @@ readers do not read off random characters that represent icons */
}
.fa-mixer:before {
- content: "\f956";
+ content: "\e056";
}
.fa-mizuni:before {
@@ -3908,7 +3928,7 @@ readers do not read off random characters that represent icons */
}
.fa-people-arrows:before {
- content: "\f968";
+ content: "\e068";
}
.fa-people-carry:before {
@@ -3996,7 +4016,7 @@ readers do not read off random characters that represent icons */
}
.fa-pied-piper-square:before {
- content: "\f91e";
+ content: "\e01e";
}
.fa-piggy-bank:before {
@@ -4040,7 +4060,7 @@ readers do not read off random characters that represent icons */
}
.fa-plane-slash:before {
- content: "\f969";
+ content: "\e069";
}
.fa-play:before {
@@ -4144,11 +4164,11 @@ readers do not read off random characters that represent icons */
}
.fa-pump-medical:before {
- content: "\f96a";
+ content: "\e06a";
}
.fa-pump-soap:before {
- content: "\f96b";
+ content: "\e06b";
}
.fa-pushed:before {
@@ -4403,6 +4423,10 @@ readers do not read off random characters that represent icons */
content: "\f156";
}
+.fa-rust:before {
+ content: "\e07a";
+}
+
.fa-sad-cry:before {
content: "\f5b3";
}
@@ -4532,7 +4556,7 @@ readers do not read off random characters that represent icons */
}
.fa-shield-virus:before {
- content: "\f96c";
+ content: "\e06c";
}
.fa-ship:before {
@@ -4552,7 +4576,7 @@ readers do not read off random characters that represent icons */
}
.fa-shopify:before {
- content: "\f957";
+ content: "\e057";
}
.fa-shopping-bag:before {
@@ -4611,6 +4635,10 @@ readers do not read off random characters that represent icons */
content: "\f215";
}
+.fa-sink:before {
+ content: "\e06d";
+}
+
.fa-sistrix:before {
content: "\f3ee";
}
@@ -4736,7 +4764,7 @@ readers do not read off random characters that represent icons */
}
.fa-soap:before {
- content: "\f96e";
+ content: "\e06e";
}
.fa-socks:before {
@@ -4960,7 +4988,7 @@ readers do not read off random characters that represent icons */
}
.fa-stopwatch-20:before {
- content: "\f96f";
+ content: "\e06f";
}
.fa-store:before {
@@ -4972,11 +5000,11 @@ readers do not read off random characters that represent icons */
}
.fa-store-alt-slash:before {
- content: "\f970";
+ content: "\e070";
}
.fa-store-slash:before {
- content: "\f971";
+ content: "\e071";
}
.fa-strava:before {
@@ -5259,6 +5287,10 @@ readers do not read off random characters that represent icons */
content: "\f3ff";
}
+.fa-tiktok:before {
+ content: "\e07b";
+}
+
.fa-times:before {
content: "\f00d";
}
@@ -5296,7 +5328,7 @@ readers do not read off random characters that represent icons */
}
.fa-toilet-paper-slash:before {
- content: "\f972";
+ content: "\e072";
}
.fa-toolbox:before {
@@ -5336,7 +5368,7 @@ readers do not read off random characters that represent icons */
}
.fa-trailer:before {
- content: "\f941";
+ content: "\e041";
}
.fa-train:before {
@@ -5484,7 +5516,7 @@ readers do not read off random characters that represent icons */
}
.fa-unity:before {
- content: "\f949";
+ content: "\e049";
}
.fa-universal-access:before {
@@ -5507,6 +5539,10 @@ readers do not read off random characters that represent icons */
content: "\f13e";
}
+.fa-unsplash:before {
+ content: "\e07c";
+}
+
.fa-untappd:before {
content: "\f405";
}
@@ -5627,6 +5663,10 @@ readers do not read off random characters that represent icons */
content: "\f509";
}
+.fa-users-slash:before {
+ content: "\e073";
+}
+
.fa-usps:before {
content: "\f7e1";
}
@@ -5716,15 +5756,15 @@ readers do not read off random characters that represent icons */
}
.fa-virus:before {
- content: "\f974";
+ content: "\e074";
}
.fa-virus-slash:before {
- content: "\f975";
+ content: "\e075";
}
.fa-viruses:before {
- content: "\f976";
+ content: "\e076";
}
.fa-vk:before {
@@ -6013,9 +6053,9 @@ readers do not read off random characters that represent icons */
font-weight: 400;
font-display: block;
src:
- url("../fonts/fa/fa-brands-400.woff") format("woff"),
- url("../fonts/fa/fa-brands-400.woff2") format("woff2"),
- url("../fonts/fa/fa-brands-400.ttf") format("truetype");
+ url("../../font/fa/fa-brands-400.woff2") format("woff2"),
+ url("../../font/fa/fa-brands-400.woff") format("woff"),
+ url("../../font/fa/fa-brands-400.ttf") format("truetype");
}
.fab {
@@ -6029,9 +6069,9 @@ readers do not read off random characters that represent icons */
font-weight: 400;
font-display: block;
src:
- url("../fonts/fa/fa-regular-400.woff") format("woff"),
- url("../fonts/fa/fa-regular-400.woff2") format("woff2"),
- url("../fonts/fa/fa-regular-400.ttf") format("truetype");
+ url("../../font/fa/fa-regular-400.woff2") format("woff2"),
+ url("../../font/fa/fa-regular-400.woff") format("woff"),
+ url("../../font/fa/fa-regular-400.ttf") format("truetype");
}
.far {
@@ -6045,9 +6085,9 @@ readers do not read off random characters that represent icons */
font-weight: 900;
font-display: block;
src:
- url("../fonts/fa/fa-solid-900.woff") format("woff"),
- url("../fonts/fa/fa-solid-900.woff2") format("woff2"),
- url("../fonts/fa/fa-solid-900.ttf") format("truetype");
+ url("../../font/fa/fa-solid-900.woff2") format("woff2"),
+ url("../../font/fa/fa-solid-900.woff") format("woff"),
+ url("../../font/fa/fa-solid-900.ttf") format("truetype");
}
.fa,
diff --git a/src/component/fontawesome/index.js b/src/component/fontawesome/index.js
new file mode 100644
index 00000000..69da0195
--- /dev/null
+++ b/src/component/fontawesome/index.js
@@ -0,0 +1,7188 @@
+import './index.css';
+
+export const fontawesome = [{
+ name: "500px",
+ search: [],
+ styles: ["brands"],
+ label: "500px"
+}, {
+ name: "accessible-icon",
+ search: ["accessibility", "handicap", "person", "wheelchair", "wheelchair-alt"],
+ styles: ["brands"],
+ label: "Accessible Icon"
+}, {
+ name: "accusoft",
+ search: [],
+ styles: ["brands"],
+ label: "Accusoft"
+}, {
+ name: "acquisitions-incorporated",
+ search: ["Dungeons & Dragons", "d&d", "dnd", "fantasy", "game", "gaming", "tabletop"],
+ styles: ["brands"],
+ label: "Acquisitions Incorporated"
+}, {
+ name: "ad",
+ search: ["advertisement", "media", "newspaper", "promotion", "publicity"],
+ styles: ["solid"],
+ label: "Ad"
+}, {
+ name: "address-book",
+ search: ["contact", "directory", "index", "little black book", "rolodex"],
+ styles: ["solid", "regular"],
+ label: "Address Book"
+}, {
+ name: "address-card",
+ search: ["about", "contact", "id", "identification", "postcard", "profile"],
+ styles: ["solid", "regular"],
+ label: "Address Card"
+}, {
+ name: "adjust",
+ search: ["contrast", "dark", "light", "saturation"],
+ styles: ["solid"],
+ label: "adjust"
+}, {
+ name: "adn",
+ search: [],
+ styles: ["brands"],
+ label: "App.net"
+}, {
+ name: "adobe",
+ search: ["acrobat", "app", "design", "illustrator", "indesign", "photoshop"],
+ styles: ["brands"],
+ label: "Adobe"
+}, {
+ name: "adversal",
+ search: [],
+ styles: ["brands"],
+ label: "Adversal"
+}, {
+ name: "affiliatetheme",
+ search: [],
+ styles: ["brands"],
+ label: "affiliatetheme"
+}, {
+ name: "air-freshener",
+ search: ["car", "deodorize", "fresh", "pine", "scent"],
+ styles: ["solid"],
+ label: "Air Freshener"
+}, {
+ name: "airbnb",
+ search: [],
+ styles: ["brands"],
+ label: "Airbnb"
+}, {
+ name: "algolia",
+ search: [],
+ styles: ["brands"],
+ label: "Algolia"
+}, {
+ name: "align-center",
+ search: ["format", "middle", "paragraph", "text"],
+ styles: ["solid"],
+ label: "align-center"
+}, {
+ name: "align-justify",
+ search: ["format", "paragraph", "text"],
+ styles: ["solid"],
+ label: "align-justify"
+}, {
+ name: "align-left",
+ search: ["format", "paragraph", "text"],
+ styles: ["solid"],
+ label: "align-left"
+}, {
+ name: "align-right",
+ search: ["format", "paragraph", "text"],
+ styles: ["solid"],
+ label: "align-right"
+}, {
+ name: "alipay",
+ search: [],
+ styles: ["brands"],
+ label: "Alipay"
+}, {
+ name: "allergies",
+ search: ["allergy", "freckles", "hand", "hives", "pox", "skin", "spots"],
+ styles: ["solid"],
+ label: "Allergies"
+}, {
+ name: "amazon",
+ search: [],
+ styles: ["brands"],
+ label: "Amazon"
+}, {
+ name: "amazon-pay",
+ search: [],
+ styles: ["brands"],
+ label: "Amazon Pay"
+}, {
+ name: "ambulance",
+ search: ["covid-19", "emergency", "emt", "er", "help", "hospital", "support", "vehicle"],
+ styles: ["solid"],
+ label: "ambulance"
+}, {
+ name: "american-sign-language-interpreting",
+ search: ["asl", "deaf", "finger", "hand", "interpret", "speak"],
+ styles: ["solid"],
+ label: "American Sign Language Interpreting"
+}, {
+ name: "amilia",
+ search: [],
+ styles: ["brands"],
+ label: "Amilia"
+}, {
+ name: "anchor",
+ search: ["berth", "boat", "dock", "embed", "link", "maritime", "moor", "secure"],
+ styles: ["solid"],
+ label: "Anchor"
+}, {
+ name: "android",
+ search: ["robot"],
+ styles: ["brands"],
+ label: "Android"
+}, {
+ name: "angellist",
+ search: [],
+ styles: ["brands"],
+ label: "AngelList"
+}, {
+ name: "angle-double-down",
+ search: ["arrows", "caret", "download", "expand"],
+ styles: ["solid"],
+ label: "Angle Double Down"
+}, {
+ name: "angle-double-left",
+ search: ["arrows", "back", "caret", "laquo", "previous", "quote"],
+ styles: ["solid"],
+ label: "Angle Double Left"
+}, {
+ name: "angle-double-right",
+ search: ["arrows", "caret", "forward", "more", "next", "quote", "raquo"],
+ styles: ["solid"],
+ label: "Angle Double Right"
+}, {
+ name: "angle-double-up",
+ search: ["arrows", "caret", "collapse", "upload"],
+ styles: ["solid"],
+ label: "Angle Double Up"
+}, {
+ name: "angle-down",
+ search: ["arrow", "caret", "download", "expand"],
+ styles: ["solid"],
+ label: "angle-down"
+}, {
+ name: "angle-left",
+ search: ["arrow", "back", "caret", "less", "previous"],
+ styles: ["solid"],
+ label: "angle-left"
+}, {
+ name: "angle-right",
+ search: ["arrow", "care", "forward", "more", "next"],
+ styles: ["solid"],
+ label: "angle-right"
+}, {
+ name: "angle-up",
+ search: ["arrow", "caret", "collapse", "upload"],
+ styles: ["solid"],
+ label: "angle-up"
+}, {
+ name: "angry",
+ search: ["disapprove", "emoticon", "face", "mad", "upset"],
+ styles: ["solid", "regular"],
+ label: "Angry Face"
+}, {
+ name: "angrycreative",
+ search: [],
+ styles: ["brands"],
+ label: "Angry Creative"
+}, {
+ name: "angular",
+ search: [],
+ styles: ["brands"],
+ label: "Angular"
+}, {
+ name: "ankh",
+ search: ["amulet", "copper", "coptic christianity", "copts", "crux ansata", "egypt", "venus"],
+ styles: ["solid"],
+ label: "Ankh"
+}, {
+ name: "app-store",
+ search: [],
+ styles: ["brands"],
+ label: "App Store"
+}, {
+ name: "app-store-ios",
+ search: [],
+ styles: ["brands"],
+ label: "iOS App Store"
+}, {
+ name: "apper",
+ search: [],
+ styles: ["brands"],
+ label: "Apper Systems AB"
+}, {
+ name: "apple",
+ search: ["fruit", "ios", "mac", "operating system", "os", "osx"],
+ styles: ["brands"],
+ label: "Apple"
+}, {
+ name: "apple-alt",
+ search: ["fall", "fruit", "fuji", "macintosh", "orchard", "seasonal", "vegan"],
+ styles: ["solid"],
+ label: "Fruit Apple"
+}, {
+ name: "apple-pay",
+ search: [],
+ styles: ["brands"],
+ label: "Apple Pay"
+}, {
+ name: "archive",
+ search: ["box", "package", "save", "storage"],
+ styles: ["solid"],
+ label: "Archive"
+}, {
+ name: "archway",
+ search: ["arc", "monument", "road", "street", "tunnel"],
+ styles: ["solid"],
+ label: "Archway"
+}, {
+ name: "arrow-alt-circle-down",
+ search: ["arrow-circle-o-down", "download"],
+ styles: ["solid", "regular"],
+ label: "Alternate Arrow Circle Down"
+}, {
+ name: "arrow-alt-circle-left",
+ search: ["arrow-circle-o-left", "back", "previous"],
+ styles: ["solid", "regular"],
+ label: "Alternate Arrow Circle Left"
+}, {
+ name: "arrow-alt-circle-right",
+ search: ["arrow-circle-o-right", "forward", "next"],
+ styles: ["solid", "regular"],
+ label: "Alternate Arrow Circle Right"
+}, {
+ name: "arrow-alt-circle-up",
+ search: ["arrow-circle-o-up"],
+ styles: ["solid", "regular"],
+ label: "Alternate Arrow Circle Up"
+}, {
+ name: "arrow-circle-down",
+ search: ["download"],
+ styles: ["solid"],
+ label: "Arrow Circle Down"
+}, {
+ name: "arrow-circle-left",
+ search: ["back", "previous"],
+ styles: ["solid"],
+ label: "Arrow Circle Left"
+}, {
+ name: "arrow-circle-right",
+ search: ["forward", "next"],
+ styles: ["solid"],
+ label: "Arrow Circle Right"
+}, {
+ name: "arrow-circle-up",
+ search: ["upload"],
+ styles: ["solid"],
+ label: "Arrow Circle Up"
+}, {
+ name: "arrow-down",
+ search: ["download"],
+ styles: ["solid"],
+ label: "arrow-down"
+}, {
+ name: "arrow-left",
+ search: ["back", "previous"],
+ styles: ["solid"],
+ label: "arrow-left"
+}, {
+ name: "arrow-right",
+ search: ["forward", "next"],
+ styles: ["solid"],
+ label: "arrow-right"
+}, {
+ name: "arrow-up",
+ search: ["forward", "upload"],
+ styles: ["solid"],
+ label: "arrow-up"
+}, {
+ name: "arrows-alt",
+ search: ["arrow", "arrows", "bigger", "enlarge", "expand", "fullscreen", "move", "position", "reorder", "resize"],
+ styles: ["solid"],
+ label: "Alternate Arrows"
+}, {
+ name: "arrows-alt-h",
+ search: ["arrows-h", "expand", "horizontal", "landscape", "resize", "wide"],
+ styles: ["solid"],
+ label: "Alternate Arrows Horizontal"
+}, {
+ name: "arrows-alt-v",
+ search: ["arrows-v", "expand", "portrait", "resize", "tall", "vertical"],
+ styles: ["solid"],
+ label: "Alternate Arrows Vertical"
+}, {
+ name: "artstation",
+ search: [],
+ styles: ["brands"],
+ label: "Artstation"
+}, {
+ name: "assistive-listening-systems",
+ search: ["amplify", "audio", "deaf", "ear", "headset", "hearing", "sound"],
+ styles: ["solid"],
+ label: "Assistive Listening Systems"
+}, {
+ name: "asterisk",
+ search: ["annotation", "details", "reference", "star"],
+ styles: ["solid"],
+ label: "asterisk"
+}, {
+ name: "asymmetrik",
+ search: [],
+ styles: ["brands"],
+ label: "Asymmetrik, Ltd."
+}, {
+ name: "at",
+ search: ["address", "author", "e-mail", "email", "handle"],
+ styles: ["solid"],
+ label: "At"
+}, {
+ name: "atlas",
+ search: ["book", "directions", "geography", "globe", "map", "travel", "wayfinding"],
+ styles: ["solid"],
+ label: "Atlas"
+}, {
+ name: "atlassian",
+ search: [],
+ styles: ["brands"],
+ label: "Atlassian"
+}, {
+ name: "atom",
+ search: ["atheism", "chemistry", "electron", "ion", "isotope", "neutron", "nuclear", "proton", "science"],
+ styles: ["solid"],
+ label: "Atom"
+}, {
+ name: "audible",
+ search: [],
+ styles: ["brands"],
+ label: "Audible"
+}, {
+ name: "audio-description",
+ search: ["blind", "narration", "video", "visual"],
+ styles: ["solid"],
+ label: "Audio Description"
+}, {
+ name: "autoprefixer",
+ search: [],
+ styles: ["brands"],
+ label: "Autoprefixer"
+}, {
+ name: "avianex",
+ search: [],
+ styles: ["brands"],
+ label: "avianex"
+}, {
+ name: "aviato",
+ search: [],
+ styles: ["brands"],
+ label: "Aviato"
+}, {
+ name: "award",
+ search: ["honor", "praise", "prize", "recognition", "ribbon", "trophy"],
+ styles: ["solid"],
+ label: "Award"
+}, {
+ name: "aws",
+ search: [],
+ styles: ["brands"],
+ label: "Amazon Web Services (AWS)"
+}, {
+ name: "baby",
+ search: ["child", "diaper", "doll", "human", "infant", "kid", "offspring", "person", "sprout"],
+ styles: ["solid"],
+ label: "Baby"
+}, {
+ name: "baby-carriage",
+ search: ["buggy", "carrier", "infant", "push", "stroller", "transportation", "walk", "wheels"],
+ styles: ["solid"],
+ label: "Baby Carriage"
+}, {
+ name: "backspace",
+ search: ["command", "delete", "erase", "keyboard", "undo"],
+ styles: ["solid"],
+ label: "Backspace"
+}, {
+ name: "backward",
+ search: ["previous", "rewind"],
+ styles: ["solid"],
+ label: "backward"
+}, {
+ name: "bacon",
+ search: ["blt", "breakfast", "ham", "lard", "meat", "pancetta", "pork", "rasher"],
+ styles: ["solid"],
+ label: "Bacon"
+}, {
+ name: "bahai",
+ search: ["bahai", "bahá'í", "star"],
+ styles: ["solid"],
+ label: "Bahá'í"
+}, {
+ name: "balance-scale",
+ search: ["balanced", "justice", "legal", "measure", "weight"],
+ styles: ["solid"],
+ label: "Balance Scale"
+}, {
+ name: "balance-scale-left",
+ search: ["justice", "legal", "measure", "unbalanced", "weight"],
+ styles: ["solid"],
+ label: "Balance Scale (Left-Weighted)"
+}, {
+ name: "balance-scale-right",
+ search: ["justice", "legal", "measure", "unbalanced", "weight"],
+ styles: ["solid"],
+ label: "Balance Scale (Right-Weighted)"
+}, {
+ name: "ban",
+ search: ["abort", "ban", "block", "cancel", "delete", "hide", "prohibit", "remove", "stop", "trash"],
+ styles: ["solid"],
+ label: "ban"
+}, {
+ name: "band-aid",
+ search: ["bandage", "boo boo", "first aid", "ouch"],
+ styles: ["solid"],
+ label: "Band-Aid"
+}, {
+ name: "bandcamp",
+ search: [],
+ styles: ["brands"],
+ label: "Bandcamp"
+}, {
+ name: "barcode",
+ search: ["info", "laser", "price", "scan", "upc"],
+ styles: ["solid"],
+ label: "barcode"
+}, {
+ name: "bars",
+ search: ["checklist", "drag", "hamburger", "list", "menu", "nav", "navigation", "ol", "reorder", "settings", "todo", "ul"],
+ styles: ["solid"],
+ label: "Bars"
+}, {
+ name: "baseball-ball",
+ search: ["foul", "hardball", "league", "leather", "mlb", "softball", "sport"],
+ styles: ["solid"],
+ label: "Baseball Ball"
+}, {
+ name: "basketball-ball",
+ search: ["dribble", "dunk", "hoop", "nba"],
+ styles: ["solid"],
+ label: "Basketball Ball"
+}, {
+ name: "bath",
+ search: ["clean", "shower", "tub", "wash"],
+ styles: ["solid"],
+ label: "Bath"
+}, {
+ name: "battery-empty",
+ search: ["charge", "dead", "power", "status"],
+ styles: ["solid"],
+ label: "Battery Empty"
+}, {
+ name: "battery-full",
+ search: ["charge", "power", "status"],
+ styles: ["solid"],
+ label: "Battery Full"
+}, {
+ name: "battery-half",
+ search: ["charge", "power", "status"],
+ styles: ["solid"],
+ label: "Battery 1/2 Full"
+}, {
+ name: "battery-quarter",
+ search: ["charge", "low", "power", "status"],
+ styles: ["solid"],
+ label: "Battery 1/4 Full"
+}, {
+ name: "battery-three-quarters",
+ search: ["charge", "power", "status"],
+ styles: ["solid"],
+ label: "Battery 3/4 Full"
+}, {
+ name: "battle-net",
+ search: [],
+ styles: ["brands"],
+ label: "Battle.net"
+}, {
+ name: "bed",
+ search: ["lodging", "mattress", "rest", "sleep", "travel"],
+ styles: ["solid"],
+ label: "Bed"
+}, {
+ name: "beer",
+ search: ["alcohol", "ale", "bar", "beverage", "brewery", "drink", "lager", "liquor", "mug", "stein"],
+ styles: ["solid"],
+ label: "beer"
+}, {
+ name: "behance",
+ search: [],
+ styles: ["brands"],
+ label: "Behance"
+}, {
+ name: "behance-square",
+ search: [],
+ styles: ["brands"],
+ label: "Behance Square"
+}, {
+ name: "bell",
+ search: ["alarm", "alert", "chime", "notification", "reminder"],
+ styles: ["solid", "regular"],
+ label: "bell"
+}, {
+ name: "bell-slash",
+ search: ["alert", "cancel", "disabled", "notification", "off", "reminder"],
+ styles: ["solid", "regular"],
+ label: "Bell Slash"
+}, {
+ name: "bezier-curve",
+ search: ["curves", "illustrator", "lines", "path", "vector"],
+ styles: ["solid"],
+ label: "Bezier Curve"
+}, {
+ name: "bible",
+ search: ["book", "catholicism", "christianity", "god", "holy"],
+ styles: ["solid"],
+ label: "Bible"
+}, {
+ name: "bicycle",
+ search: ["bike", "gears", "pedal", "transportation", "vehicle"],
+ styles: ["solid"],
+ label: "Bicycle"
+}, {
+ name: "biking",
+ search: ["bicycle", "bike", "cycle", "cycling", "ride", "wheel"],
+ styles: ["solid"],
+ label: "Biking"
+}, {
+ name: "bimobject",
+ search: [],
+ styles: ["brands"],
+ label: "BIMobject"
+}, {
+ name: "binoculars",
+ search: ["glasses", "magnify", "scenic", "spyglass", "view"],
+ styles: ["solid"],
+ label: "Binoculars"
+}, {
+ name: "biohazard",
+ search: ["covid-19", "danger", "dangerous", "hazmat", "medical", "radioactive", "toxic", "waste", "zombie"],
+ styles: ["solid"],
+ label: "Biohazard"
+}, {
+ name: "birthday-cake",
+ search: ["anniversary", "bakery", "candles", "celebration", "dessert", "frosting", "holiday", "party", "pastry"],
+ styles: ["solid"],
+ label: "Birthday Cake"
+}, {
+ name: "bitbucket",
+ search: ["atlassian", "bitbucket-square", "git"],
+ styles: ["brands"],
+ label: "Bitbucket"
+}, {
+ name: "bitcoin",
+ search: [],
+ styles: ["brands"],
+ label: "Bitcoin"
+}, {
+ name: "bity",
+ search: [],
+ styles: ["brands"],
+ label: "Bity"
+}, {
+ name: "black-tie",
+ search: [],
+ styles: ["brands"],
+ label: "Font Awesome Black Tie"
+}, {
+ name: "blackberry",
+ search: [],
+ styles: ["brands"],
+ label: "BlackBerry"
+}, {
+ name: "blender",
+ search: ["cocktail", "milkshake", "mixer", "puree", "smoothie"],
+ styles: ["solid"],
+ label: "Blender"
+}, {
+ name: "blender-phone",
+ search: ["appliance", "cocktail", "communication", "fantasy", "milkshake", "mixer", "puree", "silly", "smoothie"],
+ styles: ["solid"],
+ label: "Blender Phone"
+}, {
+ name: "blind",
+ search: ["cane", "disability", "person", "sight"],
+ styles: ["solid"],
+ label: "Blind"
+}, {
+ name: "blog",
+ search: ["journal", "log", "online", "personal", "post", "web 2.0", "wordpress", "writing"],
+ styles: ["solid"],
+ label: "Blog"
+}, {
+ name: "blogger",
+ search: [],
+ styles: ["brands"],
+ label: "Blogger"
+}, {
+ name: "blogger-b",
+ search: [],
+ styles: ["brands"],
+ label: "Blogger B"
+}, {
+ name: "bluetooth",
+ search: [],
+ styles: ["brands"],
+ label: "Bluetooth"
+}, {
+ name: "bluetooth-b",
+ search: [],
+ styles: ["brands"],
+ label: "Bluetooth"
+}, {
+ name: "bold",
+ search: ["emphasis", "format", "text"],
+ styles: ["solid"],
+ label: "bold"
+}, {
+ name: "bolt",
+ search: ["electricity", "lightning", "weather", "zap"],
+ styles: ["solid"],
+ label: "Lightning Bolt"
+}, {
+ name: "bomb",
+ search: ["error", "explode", "fuse", "grenade", "warning"],
+ styles: ["solid"],
+ label: "Bomb"
+}, {
+ name: "bone",
+ search: ["calcium", "dog", "skeletal", "skeleton", "tibia"],
+ styles: ["solid"],
+ label: "Bone"
+}, {
+ name: "bong",
+ search: ["aparatus", "cannabis", "marijuana", "pipe", "smoke", "smoking"],
+ styles: ["solid"],
+ label: "Bong"
+}, {
+ name: "book",
+ search: ["diary", "documentation", "journal", "library", "read"],
+ styles: ["solid"],
+ label: "book"
+}, {
+ name: "book-dead",
+ search: ["Dungeons & Dragons", "crossbones", "d&d", "dark arts", "death", "dnd", "documentation", "evil", "fantasy", "halloween", "holiday", "necronomicon", "read", "skull", "spell"],
+ styles: ["solid"],
+ label: "Book of the Dead"
+}, {
+ name: "book-medical",
+ search: ["diary", "documentation", "health", "history", "journal", "library", "read", "record"],
+ styles: ["solid"],
+ label: "Medical Book"
+}, {
+ name: "book-open",
+ search: ["flyer", "library", "notebook", "open book", "pamphlet", "reading"],
+ styles: ["solid"],
+ label: "Book Open"
+}, {
+ name: "book-reader",
+ search: ["flyer", "library", "notebook", "open book", "pamphlet", "reading"],
+ styles: ["solid"],
+ label: "Book Reader"
+}, {
+ name: "bookmark",
+ search: ["favorite", "marker", "read", "remember", "save"],
+ styles: ["solid", "regular"],
+ label: "bookmark"
+}, {
+ name: "bootstrap",
+ search: [],
+ styles: ["brands"],
+ label: "Bootstrap"
+}, {
+ name: "border-all",
+ search: ["cell", "grid", "outline", "stroke", "table"],
+ styles: ["solid"],
+ label: "Border All"
+}, {
+ name: "border-none",
+ search: ["cell", "grid", "outline", "stroke", "table"],
+ styles: ["solid"],
+ label: "Border None"
+}, {
+ name: "border-style",
+ search: [],
+ styles: ["solid"],
+ label: "Border Style"
+}, {
+ name: "bowling-ball",
+ search: ["alley", "candlepin", "gutter", "lane", "strike", "tenpin"],
+ styles: ["solid"],
+ label: "Bowling Ball"
+}, {
+ name: "box",
+ search: ["archive", "container", "package", "storage"],
+ styles: ["solid"],
+ label: "Box"
+}, {
+ name: "box-open",
+ search: ["archive", "container", "package", "storage", "unpack"],
+ styles: ["solid"],
+ label: "Box Open"
+}, {
+ name: "box-tissue",
+ search: ["cough", "covid-19", "kleenex", "mucus", "nose", "sneeze", "snot"],
+ styles: ["solid"],
+ label: "Tissue Box"
+}, {
+ name: "boxes",
+ search: ["archives", "inventory", "storage", "warehouse"],
+ styles: ["solid"],
+ label: "Boxes"
+}, {
+ name: "braille",
+ search: ["alphabet", "blind", "dots", "raised", "vision"],
+ styles: ["solid"],
+ label: "Braille"
+}, {
+ name: "brain",
+ search: ["cerebellum", "gray matter", "intellect", "medulla oblongata", "mind", "noodle", "wit"],
+ styles: ["solid"],
+ label: "Brain"
+}, {
+ name: "bread-slice",
+ search: ["bake", "bakery", "baking", "dough", "flour", "gluten", "grain", "sandwich", "sourdough", "toast", "wheat", "yeast"],
+ styles: ["solid"],
+ label: "Bread Slice"
+}, {
+ name: "briefcase",
+ search: ["bag", "business", "luggage", "office", "work"],
+ styles: ["solid"],
+ label: "Briefcase"
+}, {
+ name: "briefcase-medical",
+ search: ["doctor", "emt", "first aid", "health"],
+ styles: ["solid"],
+ label: "Medical Briefcase"
+}, {
+ name: "broadcast-tower",
+ search: ["airwaves", "antenna", "radio", "reception", "waves"],
+ styles: ["solid"],
+ label: "Broadcast Tower"
+}, {
+ name: "broom",
+ search: ["clean", "firebolt", "fly", "halloween", "nimbus 2000", "quidditch", "sweep", "witch"],
+ styles: ["solid"],
+ label: "Broom"
+}, {
+ name: "brush",
+ search: ["art", "bristles", "color", "handle", "paint"],
+ styles: ["solid"],
+ label: "Brush"
+}, {
+ name: "btc",
+ search: [],
+ styles: ["brands"],
+ label: "BTC"
+}, {
+ name: "buffer",
+ search: [],
+ styles: ["brands"],
+ label: "Buffer"
+}, {
+ name: "bug",
+ search: ["beetle", "error", "insect", "report"],
+ styles: ["solid"],
+ label: "Bug"
+}, {
+ name: "building",
+ search: ["apartment", "business", "city", "company", "office", "work"],
+ styles: ["solid", "regular"],
+ label: "Building"
+}, {
+ name: "bullhorn",
+ search: ["announcement", "broadcast", "louder", "megaphone", "share"],
+ styles: ["solid"],
+ label: "bullhorn"
+}, {
+ name: "bullseye",
+ search: ["archery", "goal", "objective", "target"],
+ styles: ["solid"],
+ label: "Bullseye"
+}, {
+ name: "burn",
+ search: ["caliente", "energy", "fire", "flame", "gas", "heat", "hot"],
+ styles: ["solid"],
+ label: "Burn"
+}, {
+ name: "buromobelexperte",
+ search: [],
+ styles: ["brands"],
+ label: "Büromöbel-Experte GmbH & Co. KG."
+}, {
+ name: "bus",
+ search: ["public transportation", "transportation", "travel", "vehicle"],
+ styles: ["solid"],
+ label: "Bus"
+}, {
+ name: "bus-alt",
+ search: ["mta", "public transportation", "transportation", "travel", "vehicle"],
+ styles: ["solid"],
+ label: "Bus Alt"
+}, {
+ name: "business-time",
+ search: ["alarm", "briefcase", "business socks", "clock", "flight of the conchords", "reminder", "wednesday"],
+ styles: ["solid"],
+ label: "Business Time"
+}, {
+ name: "buy-n-large",
+ search: [],
+ styles: ["brands"],
+ label: "Buy n Large"
+}, {
+ name: "buysellads",
+ search: [],
+ styles: ["brands"],
+ label: "BuySellAds"
+}, {
+ name: "calculator",
+ search: ["abacus", "addition", "arithmetic", "counting", "math", "multiplication", "subtraction"],
+ styles: ["solid"],
+ label: "Calculator"
+}, {
+ name: "calendar",
+ search: ["calendar-o", "date", "event", "schedule", "time", "when"],
+ styles: ["solid", "regular"],
+ label: "Calendar"
+}, {
+ name: "calendar-alt",
+ search: ["calendar", "date", "event", "schedule", "time", "when"],
+ styles: ["solid", "regular"],
+ label: "Alternate Calendar"
+}, {
+ name: "calendar-check",
+ search: ["accept", "agree", "appointment", "confirm", "correct", "date", "done", "event", "ok", "schedule", "select", "success", "tick", "time", "todo", "when"],
+ styles: ["solid", "regular"],
+ label: "Calendar Check"
+}, {
+ name: "calendar-day",
+ search: ["date", "detail", "event", "focus", "schedule", "single day", "time", "today", "when"],
+ styles: ["solid"],
+ label: "Calendar with Day Focus"
+}, {
+ name: "calendar-minus",
+ search: ["calendar", "date", "delete", "event", "negative", "remove", "schedule", "time", "when"],
+ styles: ["solid", "regular"],
+ label: "Calendar Minus"
+}, {
+ name: "calendar-plus",
+ search: ["add", "calendar", "create", "date", "event", "new", "positive", "schedule", "time", "when"],
+ styles: ["solid", "regular"],
+ label: "Calendar Plus"
+}, {
+ name: "calendar-times",
+ search: ["archive", "calendar", "date", "delete", "event", "remove", "schedule", "time", "when", "x"],
+ styles: ["solid", "regular"],
+ label: "Calendar Times"
+}, {
+ name: "calendar-week",
+ search: ["date", "detail", "event", "focus", "schedule", "single week", "time", "today", "when"],
+ styles: ["solid"],
+ label: "Calendar with Week Focus"
+}, {
+ name: "camera",
+ search: ["image", "lens", "photo", "picture", "record", "shutter", "video"],
+ styles: ["solid"],
+ label: "camera"
+}, {
+ name: "camera-retro",
+ search: ["image", "lens", "photo", "picture", "record", "shutter", "video"],
+ styles: ["solid"],
+ label: "Retro Camera"
+}, {
+ name: "campground",
+ search: ["camping", "fall", "outdoors", "teepee", "tent", "tipi"],
+ styles: ["solid"],
+ label: "Campground"
+}, {
+ name: "canadian-maple-leaf",
+ search: ["canada", "flag", "flora", "nature", "plant"],
+ styles: ["brands"],
+ label: "Canadian Maple Leaf"
+}, {
+ name: "candy-cane",
+ search: ["candy", "christmas", "holiday", "mint", "peppermint", "striped", "xmas"],
+ styles: ["solid"],
+ label: "Candy Cane"
+}, {
+ name: "cannabis",
+ search: ["bud", "chronic", "drugs", "endica", "endo", "ganja", "marijuana", "mary jane", "pot", "reefer", "sativa", "spliff", "weed", "whacky-tabacky"],
+ styles: ["solid"],
+ label: "Cannabis"
+}, {
+ name: "capsules",
+ search: ["drugs", "medicine", "pills", "prescription"],
+ styles: ["solid"],
+ label: "Capsules"
+}, {
+ name: "car",
+ search: ["auto", "automobile", "sedan", "transportation", "travel", "vehicle"],
+ styles: ["solid"],
+ label: "Car"
+}, {
+ name: "car-alt",
+ search: ["auto", "automobile", "sedan", "transportation", "travel", "vehicle"],
+ styles: ["solid"],
+ label: "Alternate Car"
+}, {
+ name: "car-battery",
+ search: ["auto", "electric", "mechanic", "power"],
+ styles: ["solid"],
+ label: "Car Battery"
+}, {
+ name: "car-crash",
+ search: ["accident", "auto", "automobile", "insurance", "sedan", "transportation", "vehicle", "wreck"],
+ styles: ["solid"],
+ label: "Car Crash"
+}, {
+ name: "car-side",
+ search: ["auto", "automobile", "sedan", "transportation", "travel", "vehicle"],
+ styles: ["solid"],
+ label: "Car Side"
+}, {
+ name: "caravan",
+ search: ["camper", "motor home", "rv", "trailer", "travel"],
+ styles: ["solid"],
+ label: "Caravan"
+}, {
+ name: "caret-down",
+ search: ["arrow", "dropdown", "expand", "menu", "more", "triangle"],
+ styles: ["solid"],
+ label: "Caret Down"
+}, {
+ name: "caret-left",
+ search: ["arrow", "back", "previous", "triangle"],
+ styles: ["solid"],
+ label: "Caret Left"
+}, {
+ name: "caret-right",
+ search: ["arrow", "forward", "next", "triangle"],
+ styles: ["solid"],
+ label: "Caret Right"
+}, {
+ name: "caret-square-down",
+ search: ["arrow", "caret-square-o-down", "dropdown", "expand", "menu", "more", "triangle"],
+ styles: ["solid", "regular"],
+ label: "Caret Square Down"
+}, {
+ name: "caret-square-left",
+ search: ["arrow", "back", "caret-square-o-left", "previous", "triangle"],
+ styles: ["solid", "regular"],
+ label: "Caret Square Left"
+}, {
+ name: "caret-square-right",
+ search: ["arrow", "caret-square-o-right", "forward", "next", "triangle"],
+ styles: ["solid", "regular"],
+ label: "Caret Square Right"
+}, {
+ name: "caret-square-up",
+ search: ["arrow", "caret-square-o-up", "collapse", "triangle", "upload"],
+ styles: ["solid", "regular"],
+ label: "Caret Square Up"
+}, {
+ name: "caret-up",
+ search: ["arrow", "collapse", "triangle"],
+ styles: ["solid"],
+ label: "Caret Up"
+}, {
+ name: "carrot",
+ search: ["bugs bunny", "orange", "vegan", "vegetable"],
+ styles: ["solid"],
+ label: "Carrot"
+}, {
+ name: "cart-arrow-down",
+ search: ["download", "save", "shopping"],
+ styles: ["solid"],
+ label: "Shopping Cart Arrow Down"
+}, {
+ name: "cart-plus",
+ search: ["add", "create", "new", "positive", "shopping"],
+ styles: ["solid"],
+ label: "Add to Shopping Cart"
+}, {
+ name: "cash-register",
+ search: ["buy", "cha-ching", "change", "checkout", "commerce", "leaerboard", "machine", "pay", "payment", "purchase", "store"],
+ styles: ["solid"],
+ label: "Cash Register"
+}, {
+ name: "cat",
+ search: ["feline", "halloween", "holiday", "kitten", "kitty", "meow", "pet"],
+ styles: ["solid"],
+ label: "Cat"
+}, {
+ name: "cc-amazon-pay",
+ search: [],
+ styles: ["brands"],
+ label: "Amazon Pay Credit Card"
+}, {
+ name: "cc-amex",
+ search: ["amex"],
+ styles: ["brands"],
+ label: "American Express Credit Card"
+}, {
+ name: "cc-apple-pay",
+ search: [],
+ styles: ["brands"],
+ label: "Apple Pay Credit Card"
+}, {
+ name: "cc-diners-club",
+ search: [],
+ styles: ["brands"],
+ label: "Diner's Club Credit Card"
+}, {
+ name: "cc-discover",
+ search: [],
+ styles: ["brands"],
+ label: "Discover Credit Card"
+}, {
+ name: "cc-jcb",
+ search: [],
+ styles: ["brands"],
+ label: "JCB Credit Card"
+}, {
+ name: "cc-mastercard",
+ search: [],
+ styles: ["brands"],
+ label: "MasterCard Credit Card"
+}, {
+ name: "cc-paypal",
+ search: [],
+ styles: ["brands"],
+ label: "Paypal Credit Card"
+}, {
+ name: "cc-stripe",
+ search: [],
+ styles: ["brands"],
+ label: "Stripe Credit Card"
+}, {
+ name: "cc-visa",
+ search: [],
+ styles: ["brands"],
+ label: "Visa Credit Card"
+}, {
+ name: "centercode",
+ search: [],
+ styles: ["brands"],
+ label: "Centercode"
+}, {
+ name: "centos",
+ search: ["linux", "operating system", "os"],
+ styles: ["brands"],
+ label: "Centos"
+}, {
+ name: "certificate",
+ search: ["badge", "star", "verified"],
+ styles: ["solid"],
+ label: "certificate"
+}, {
+ name: "chair",
+ search: ["furniture", "seat", "sit"],
+ styles: ["solid"],
+ label: "Chair"
+}, {
+ name: "chalkboard",
+ search: ["blackboard", "learning", "school", "teaching", "whiteboard", "writing"],
+ styles: ["solid"],
+ label: "Chalkboard"
+}, {
+ name: "chalkboard-teacher",
+ search: ["blackboard", "instructor", "learning", "professor", "school", "whiteboard", "writing"],
+ styles: ["solid"],
+ label: "Chalkboard Teacher"
+}, {
+ name: "charging-station",
+ search: ["electric", "ev", "tesla", "vehicle"],
+ styles: ["solid"],
+ label: "Charging Station"
+}, {
+ name: "chart-area",
+ search: ["analytics", "area", "chart", "graph"],
+ styles: ["solid"],
+ label: "Area Chart"
+}, {
+ name: "chart-bar",
+ search: ["analytics", "bar", "chart", "graph"],
+ styles: ["solid", "regular"],
+ label: "Bar Chart"
+}, {
+ name: "chart-line",
+ search: ["activity", "analytics", "chart", "dashboard", "gain", "graph", "increase", "line"],
+ styles: ["solid"],
+ label: "Line Chart"
+}, {
+ name: "chart-pie",
+ search: ["analytics", "chart", "diagram", "graph", "pie"],
+ styles: ["solid"],
+ label: "Pie Chart"
+}, {
+ name: "check",
+ search: ["accept", "agree", "checkmark", "confirm", "correct", "done", "notice", "notification", "notify", "ok", "select", "success", "tick", "todo", "yes"],
+ styles: ["solid"],
+ label: "Check"
+}, {
+ name: "check-circle",
+ search: ["accept", "agree", "confirm", "correct", "done", "ok", "select", "success", "tick", "todo", "yes"],
+ styles: ["solid", "regular"],
+ label: "Check Circle"
+}, {
+ name: "check-double",
+ search: ["accept", "agree", "checkmark", "confirm", "correct", "done", "notice", "notification", "notify", "ok", "select", "success", "tick", "todo"],
+ styles: ["solid"],
+ label: "Double Check"
+}, {
+ name: "check-square",
+ search: ["accept", "agree", "checkmark", "confirm", "correct", "done", "ok", "select", "success", "tick", "todo", "yes"],
+ styles: ["solid", "regular"],
+ label: "Check Square"
+}, {
+ name: "cheese",
+ search: ["cheddar", "curd", "gouda", "melt", "parmesan", "sandwich", "swiss", "wedge"],
+ styles: ["solid"],
+ label: "Cheese"
+}, {
+ name: "chess",
+ search: ["board", "castle", "checkmate", "game", "king", "rook", "strategy", "tournament"],
+ styles: ["solid"],
+ label: "Chess"
+}, {
+ name: "chess-bishop",
+ search: ["board", "checkmate", "game", "strategy"],
+ styles: ["solid"],
+ label: "Chess Bishop"
+}, {
+ name: "chess-board",
+ search: ["board", "checkmate", "game", "strategy"],
+ styles: ["solid"],
+ label: "Chess Board"
+}, {
+ name: "chess-king",
+ search: ["board", "checkmate", "game", "strategy"],
+ styles: ["solid"],
+ label: "Chess King"
+}, {
+ name: "chess-knight",
+ search: ["board", "checkmate", "game", "horse", "strategy"],
+ styles: ["solid"],
+ label: "Chess Knight"
+}, {
+ name: "chess-pawn",
+ search: ["board", "checkmate", "game", "strategy"],
+ styles: ["solid"],
+ label: "Chess Pawn"
+}, {
+ name: "chess-queen",
+ search: ["board", "checkmate", "game", "strategy"],
+ styles: ["solid"],
+ label: "Chess Queen"
+}, {
+ name: "chess-rook",
+ search: ["board", "castle", "checkmate", "game", "strategy"],
+ styles: ["solid"],
+ label: "Chess Rook"
+}, {
+ name: "chevron-circle-down",
+ search: ["arrow", "download", "dropdown", "menu", "more"],
+ styles: ["solid"],
+ label: "Chevron Circle Down"
+}, {
+ name: "chevron-circle-left",
+ search: ["arrow", "back", "previous"],
+ styles: ["solid"],
+ label: "Chevron Circle Left"
+}, {
+ name: "chevron-circle-right",
+ search: ["arrow", "forward", "next"],
+ styles: ["solid"],
+ label: "Chevron Circle Right"
+}, {
+ name: "chevron-circle-up",
+ search: ["arrow", "collapse", "upload"],
+ styles: ["solid"],
+ label: "Chevron Circle Up"
+}, {
+ name: "chevron-down",
+ search: ["arrow", "download", "expand"],
+ styles: ["solid"],
+ label: "chevron-down"
+}, {
+ name: "chevron-left",
+ search: ["arrow", "back", "bracket", "previous"],
+ styles: ["solid"],
+ label: "chevron-left"
+}, {
+ name: "chevron-right",
+ search: ["arrow", "bracket", "forward", "next"],
+ styles: ["solid"],
+ label: "chevron-right"
+}, {
+ name: "chevron-up",
+ search: ["arrow", "collapse", "upload"],
+ styles: ["solid"],
+ label: "chevron-up"
+}, {
+ name: "child",
+ search: ["boy", "girl", "kid", "toddler", "young"],
+ styles: ["solid"],
+ label: "Child"
+}, {
+ name: "chrome",
+ search: ["browser"],
+ styles: ["brands"],
+ label: "Chrome"
+}, {
+ name: "chromecast",
+ search: [],
+ styles: ["brands"],
+ label: "Chromecast"
+}, {
+ name: "church",
+ search: ["building", "cathedral", "chapel", "community", "religion"],
+ styles: ["solid"],
+ label: "Church"
+}, {
+ name: "circle",
+ search: ["circle-thin", "diameter", "dot", "ellipse", "notification", "round"],
+ styles: ["solid", "regular"],
+ label: "Circle"
+}, {
+ name: "circle-notch",
+ search: ["circle-o-notch", "diameter", "dot", "ellipse", "round", "spinner"],
+ styles: ["solid"],
+ label: "Circle Notched"
+}, {
+ name: "city",
+ search: ["buildings", "busy", "skyscrapers", "urban", "windows"],
+ styles: ["solid"],
+ label: "City"
+}, {
+ name: "clinic-medical",
+ search: ["covid-19", "doctor", "general practitioner", "hospital", "infirmary", "medicine", "office", "outpatient"],
+ styles: ["solid"],
+ label: "Medical Clinic"
+}, {
+ name: "clipboard",
+ search: ["copy", "notes", "paste", "record"],
+ styles: ["solid", "regular"],
+ label: "Clipboard"
+}, {
+ name: "clipboard-check",
+ search: ["accept", "agree", "confirm", "done", "ok", "select", "success", "tick", "todo", "yes"],
+ styles: ["solid"],
+ label: "Clipboard with Check"
+}, {
+ name: "clipboard-list",
+ search: ["checklist", "completed", "done", "finished", "intinerary", "ol", "schedule", "tick", "todo", "ul"],
+ styles: ["solid"],
+ label: "Clipboard List"
+}, {
+ name: "clock",
+ search: ["date", "late", "schedule", "time", "timer", "timestamp", "watch"],
+ styles: ["solid", "regular"],
+ label: "Clock"
+}, {
+ name: "clone",
+ search: ["arrange", "copy", "duplicate", "paste"],
+ styles: ["solid", "regular"],
+ label: "Clone"
+}, {
+ name: "closed-captioning",
+ search: ["cc", "deaf", "hearing", "subtitle", "subtitling", "text", "video"],
+ styles: ["solid", "regular"],
+ label: "Closed Captioning"
+}, {
+ name: "cloud",
+ search: ["atmosphere", "fog", "overcast", "save", "upload", "weather"],
+ styles: ["solid"],
+ label: "Cloud"
+}, {
+ name: "cloud-download-alt",
+ search: ["download", "export", "save"],
+ styles: ["solid"],
+ label: "Alternate Cloud Download"
+}, {
+ name: "cloud-meatball",
+ search: ["FLDSMDFR", "food", "spaghetti", "storm"],
+ styles: ["solid"],
+ label: "Cloud with (a chance of) Meatball"
+}, {
+ name: "cloud-moon",
+ search: ["crescent", "evening", "lunar", "night", "partly cloudy", "sky"],
+ styles: ["solid"],
+ label: "Cloud with Moon"
+}, {
+ name: "cloud-moon-rain",
+ search: ["crescent", "evening", "lunar", "night", "partly cloudy", "precipitation", "rain", "sky", "storm"],
+ styles: ["solid"],
+ label: "Cloud with Moon and Rain"
+}, {
+ name: "cloud-rain",
+ search: ["precipitation", "rain", "sky", "storm"],
+ styles: ["solid"],
+ label: "Cloud with Rain"
+}, {
+ name: "cloud-showers-heavy",
+ search: ["precipitation", "rain", "sky", "storm"],
+ styles: ["solid"],
+ label: "Cloud with Heavy Showers"
+}, {
+ name: "cloud-sun",
+ search: ["clear", "day", "daytime", "fall", "outdoors", "overcast", "partly cloudy"],
+ styles: ["solid"],
+ label: "Cloud with Sun"
+}, {
+ name: "cloud-sun-rain",
+ search: ["day", "overcast", "precipitation", "storm", "summer", "sunshower"],
+ styles: ["solid"],
+ label: "Cloud with Sun and Rain"
+}, {
+ name: "cloud-upload-alt",
+ search: ["cloud-upload", "import", "save", "upload"],
+ styles: ["solid"],
+ label: "Alternate Cloud Upload"
+}, {
+ name: "cloudscale",
+ search: [],
+ styles: ["brands"],
+ label: "cloudscale.ch"
+}, {
+ name: "cloudsmith",
+ search: [],
+ styles: ["brands"],
+ label: "Cloudsmith"
+}, {
+ name: "cloudversify",
+ search: [],
+ styles: ["brands"],
+ label: "cloudversify"
+}, {
+ name: "cocktail",
+ search: ["alcohol", "beverage", "drink", "gin", "glass", "margarita", "martini", "vodka"],
+ styles: ["solid"],
+ label: "Cocktail"
+}, {
+ name: "code",
+ search: ["brackets", "code", "development", "html"],
+ styles: ["solid"],
+ label: "Code"
+}, {
+ name: "code-branch",
+ search: ["branch", "code-fork", "fork", "git", "github", "rebase", "svn", "vcs", "version"],
+ styles: ["solid"],
+ label: "Code Branch"
+}, {
+ name: "codepen",
+ search: [],
+ styles: ["brands"],
+ label: "Codepen"
+}, {
+ name: "codiepie",
+ search: [],
+ styles: ["brands"],
+ label: "Codie Pie"
+}, {
+ name: "coffee",
+ search: ["beverage", "breakfast", "cafe", "drink", "fall", "morning", "mug", "seasonal", "tea"],
+ styles: ["solid"],
+ label: "Coffee"
+}, {
+ name: "cog",
+ search: ["gear", "mechanical", "settings", "sprocket", "wheel"],
+ styles: ["solid"],
+ label: "cog"
+}, {
+ name: "cogs",
+ search: ["gears", "mechanical", "settings", "sprocket", "wheel"],
+ styles: ["solid"],
+ label: "cogs"
+}, {
+ name: "coins",
+ search: ["currency", "dime", "financial", "gold", "money", "penny"],
+ styles: ["solid"],
+ label: "Coins"
+}, {
+ name: "columns",
+ search: ["browser", "dashboard", "organize", "panes", "split"],
+ styles: ["solid"],
+ label: "Columns"
+}, {
+ name: "comment",
+ search: ["bubble", "chat", "commenting", "conversation", "feedback", "message", "note", "notification", "sms", "speech", "texting"],
+ styles: ["solid", "regular"],
+ label: "comment"
+}, {
+ name: "comment-alt",
+ search: ["bubble", "chat", "commenting", "conversation", "feedback", "message", "note", "notification", "sms", "speech", "texting"],
+ styles: ["solid", "regular"],
+ label: "Alternate Comment"
+}, {
+ name: "comment-dollar",
+ search: ["bubble", "chat", "commenting", "conversation", "feedback", "message", "money", "note", "notification", "pay", "sms", "speech", "spend", "texting", "transfer"],
+ styles: ["solid"],
+ label: "Comment Dollar"
+}, {
+ name: "comment-dots",
+ search: ["bubble", "chat", "commenting", "conversation", "feedback", "message", "more", "note", "notification", "reply", "sms", "speech", "texting"],
+ styles: ["solid", "regular"],
+ label: "Comment Dots"
+}, {
+ name: "comment-medical",
+ search: ["advice", "bubble", "chat", "commenting", "conversation", "diagnose", "feedback", "message", "note", "notification", "prescription", "sms", "speech", "texting"],
+ styles: ["solid"],
+ label: "Alternate Medical Chat"
+}, {
+ name: "comment-slash",
+ search: ["bubble", "cancel", "chat", "commenting", "conversation", "feedback", "message", "mute", "note", "notification", "quiet", "sms", "speech", "texting"],
+ styles: ["solid"],
+ label: "Comment Slash"
+}, {
+ name: "comments",
+ search: ["bubble", "chat", "commenting", "conversation", "feedback", "message", "note", "notification", "sms", "speech", "texting"],
+ styles: ["solid", "regular"],
+ label: "comments"
+}, {
+ name: "comments-dollar",
+ search: ["bubble", "chat", "commenting", "conversation", "feedback", "message", "money", "note", "notification", "pay", "sms", "speech", "spend", "texting", "transfer"],
+ styles: ["solid"],
+ label: "Comments Dollar"
+}, {
+ name: "compact-disc",
+ search: ["album", "bluray", "cd", "disc", "dvd", "media", "movie", "music", "record", "video", "vinyl"],
+ styles: ["solid"],
+ label: "Compact Disc"
+}, {
+ name: "compass",
+ search: ["directions", "directory", "location", "menu", "navigation", "safari", "travel"],
+ styles: ["solid", "regular"],
+ label: "Compass"
+}, {
+ name: "compress",
+ search: ["collapse", "fullscreen", "minimize", "move", "resize", "shrink", "smaller"],
+ styles: ["solid"],
+ label: "Compress"
+}, {
+ name: "compress-alt",
+ search: ["collapse", "fullscreen", "minimize", "move", "resize", "shrink", "smaller"],
+ styles: ["solid"],
+ label: "Alternate Compress"
+}, {
+ name: "compress-arrows-alt",
+ search: ["collapse", "fullscreen", "minimize", "move", "resize", "shrink", "smaller"],
+ styles: ["solid"],
+ label: "Alternate Compress Arrows"
+}, {
+ name: "concierge-bell",
+ search: ["attention", "hotel", "receptionist", "service", "support"],
+ styles: ["solid"],
+ label: "Concierge Bell"
+}, {
+ name: "confluence",
+ search: ["atlassian"],
+ styles: ["brands"],
+ label: "Confluence"
+}, {
+ name: "connectdevelop",
+ search: [],
+ styles: ["brands"],
+ label: "Connect Develop"
+}, {
+ name: "contao",
+ search: [],
+ styles: ["brands"],
+ label: "Contao"
+}, {
+ name: "cookie",
+ search: ["baked good", "chips", "chocolate", "eat", "snack", "sweet", "treat"],
+ styles: ["solid"],
+ label: "Cookie"
+}, {
+ name: "cookie-bite",
+ search: ["baked good", "bitten", "chips", "chocolate", "eat", "snack", "sweet", "treat"],
+ styles: ["solid"],
+ label: "Cookie Bite"
+}, {
+ name: "copy",
+ search: ["clone", "duplicate", "file", "files-o", "paper", "paste"],
+ styles: ["solid", "regular"],
+ label: "Copy"
+}, {
+ name: "copyright",
+ search: ["brand", "mark", "register", "trademark"],
+ styles: ["solid", "regular"],
+ label: "Copyright"
+}, {
+ name: "cotton-bureau",
+ search: ["clothing", "t-shirts", "tshirts"],
+ styles: ["brands"],
+ label: "Cotton Bureau"
+}, {
+ name: "couch",
+ search: ["chair", "cushion", "furniture", "relax", "sofa"],
+ styles: ["solid"],
+ label: "Couch"
+}, {
+ name: "cpanel",
+ search: [],
+ styles: ["brands"],
+ label: "cPanel"
+}, {
+ name: "creative-commons",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons"
+}, {
+ name: "creative-commons-by",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons Attribution"
+}, {
+ name: "creative-commons-nc",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons Noncommercial"
+}, {
+ name: "creative-commons-nc-eu",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons Noncommercial (Euro Sign)"
+}, {
+ name: "creative-commons-nc-jp",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons Noncommercial (Yen Sign)"
+}, {
+ name: "creative-commons-nd",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons No Derivative Works"
+}, {
+ name: "creative-commons-pd",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons Public Domain"
+}, {
+ name: "creative-commons-pd-alt",
+ search: [],
+ styles: ["brands"],
+ label: "Alternate Creative Commons Public Domain"
+}, {
+ name: "creative-commons-remix",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons Remix"
+}, {
+ name: "creative-commons-sa",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons Share Alike"
+}, {
+ name: "creative-commons-sampling",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons Sampling"
+}, {
+ name: "creative-commons-sampling-plus",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons Sampling +"
+}, {
+ name: "creative-commons-share",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons Share"
+}, {
+ name: "creative-commons-zero",
+ search: [],
+ styles: ["brands"],
+ label: "Creative Commons CC0"
+}, {
+ name: "credit-card",
+ search: ["buy", "checkout", "credit-card-alt", "debit", "money", "payment", "purchase"],
+ styles: ["solid", "regular"],
+ label: "Credit Card"
+}, {
+ name: "critical-role",
+ search: ["Dungeons & Dragons", "d&d", "dnd", "fantasy", "game", "gaming", "tabletop"],
+ styles: ["brands"],
+ label: "Critical Role"
+}, {
+ name: "crop",
+ search: ["design", "frame", "mask", "resize", "shrink"],
+ styles: ["solid"],
+ label: "crop"
+}, {
+ name: "crop-alt",
+ search: ["design", "frame", "mask", "resize", "shrink"],
+ styles: ["solid"],
+ label: "Alternate Crop"
+}, {
+ name: "cross",
+ search: ["catholicism", "christianity", "church", "jesus"],
+ styles: ["solid"],
+ label: "Cross"
+}, {
+ name: "crosshairs",
+ search: ["aim", "bullseye", "gpd", "picker", "position"],
+ styles: ["solid"],
+ label: "Crosshairs"
+}, {
+ name: "crow",
+ search: ["bird", "bullfrog", "fauna", "halloween", "holiday", "toad"],
+ styles: ["solid"],
+ label: "Crow"
+}, {
+ name: "crown",
+ search: ["award", "favorite", "king", "queen", "royal", "tiara"],
+ styles: ["solid"],
+ label: "Crown"
+}, {
+ name: "crutch",
+ search: ["cane", "injury", "mobility", "wheelchair"],
+ styles: ["solid"],
+ label: "Crutch"
+}, {
+ name: "css3",
+ search: ["code"],
+ styles: ["brands"],
+ label: "CSS 3 Logo"
+}, {
+ name: "css3-alt",
+ search: [],
+ styles: ["brands"],
+ label: "Alternate CSS3 Logo"
+}, {
+ name: "cube",
+ search: ["3d", "block", "dice", "package", "square", "tesseract"],
+ styles: ["solid"],
+ label: "Cube"
+}, {
+ name: "cubes",
+ search: ["3d", "block", "dice", "package", "pyramid", "square", "stack", "tesseract"],
+ styles: ["solid"],
+ label: "Cubes"
+}, {
+ name: "cut",
+ search: ["clip", "scissors", "snip"],
+ styles: ["solid"],
+ label: "Cut"
+}, {
+ name: "cuttlefish",
+ search: [],
+ styles: ["brands"],
+ label: "Cuttlefish"
+}, {
+ name: "d-and-d",
+ search: [],
+ styles: ["brands"],
+ label: "Dungeons & Dragons"
+}, {
+ name: "d-and-d-beyond",
+ search: ["Dungeons & Dragons", "d&d", "dnd", "fantasy", "gaming", "tabletop"],
+ styles: ["brands"],
+ label: "D&D Beyond"
+}, {
+ name: "dailymotion",
+ search: [],
+ styles: ["brands"],
+ label: "dailymotion"
+}, {
+ name: "dashcube",
+ search: [],
+ styles: ["brands"],
+ label: "DashCube"
+}, {
+ name: "database",
+ search: ["computer", "development", "directory", "memory", "storage"],
+ styles: ["solid"],
+ label: "Database"
+}, {
+ name: "deaf",
+ search: ["ear", "hearing", "sign language"],
+ styles: ["solid"],
+ label: "Deaf"
+}, {
+ name: "delicious",
+ search: [],
+ styles: ["brands"],
+ label: "Delicious"
+}, {
+ name: "democrat",
+ search: ["american", "democratic party", "donkey", "election", "left", "left-wing", "liberal", "politics", "usa"],
+ styles: ["solid"],
+ label: "Democrat"
+}, {
+ name: "deploydog",
+ search: [],
+ styles: ["brands"],
+ label: "deploy.dog"
+}, {
+ name: "deskpro",
+ search: [],
+ styles: ["brands"],
+ label: "Deskpro"
+}, {
+ name: "desktop",
+ search: ["computer", "cpu", "demo", "desktop", "device", "imac", "machine", "monitor", "pc", "screen"],
+ styles: ["solid"],
+ label: "Desktop"
+}, {
+ name: "dev",
+ search: [],
+ styles: ["brands"],
+ label: "DEV"
+}, {
+ name: "deviantart",
+ search: [],
+ styles: ["brands"],
+ label: "deviantART"
+}, {
+ name: "dharmachakra",
+ search: ["buddhism", "buddhist", "wheel of dharma"],
+ styles: ["solid"],
+ label: "Dharmachakra"
+}, {
+ name: "dhl",
+ search: ["Dalsey", "Hillblom and Lynn", "german", "package", "shipping"],
+ styles: ["brands"],
+ label: "DHL"
+}, {
+ name: "diagnoses",
+ search: ["analyze", "detect", "diagnosis", "examine", "medicine"],
+ styles: ["solid"],
+ label: "Diagnoses"
+}, {
+ name: "diaspora",
+ search: [],
+ styles: ["brands"],
+ label: "Diaspora"
+}, {
+ name: "dice",
+ search: ["chance", "gambling", "game", "roll"],
+ styles: ["solid"],
+ label: "Dice"
+}, {
+ name: "dice-d20",
+ search: ["Dungeons & Dragons", "chance", "d&d", "dnd", "fantasy", "gambling", "game", "roll"],
+ styles: ["solid"],
+ label: "Dice D20"
+}, {
+ name: "dice-d6",
+ search: ["Dungeons & Dragons", "chance", "d&d", "dnd", "fantasy", "gambling", "game", "roll"],
+ styles: ["solid"],
+ label: "Dice D6"
+}, {
+ name: "dice-five",
+ search: ["chance", "gambling", "game", "roll"],
+ styles: ["solid"],
+ label: "Dice Five"
+}, {
+ name: "dice-four",
+ search: ["chance", "gambling", "game", "roll"],
+ styles: ["solid"],
+ label: "Dice Four"
+}, {
+ name: "dice-one",
+ search: ["chance", "gambling", "game", "roll"],
+ styles: ["solid"],
+ label: "Dice One"
+}, {
+ name: "dice-six",
+ search: ["chance", "gambling", "game", "roll"],
+ styles: ["solid"],
+ label: "Dice Six"
+}, {
+ name: "dice-three",
+ search: ["chance", "gambling", "game", "roll"],
+ styles: ["solid"],
+ label: "Dice Three"
+}, {
+ name: "dice-two",
+ search: ["chance", "gambling", "game", "roll"],
+ styles: ["solid"],
+ label: "Dice Two"
+}, {
+ name: "digg",
+ search: [],
+ styles: ["brands"],
+ label: "Digg Logo"
+}, {
+ name: "digital-ocean",
+ search: [],
+ styles: ["brands"],
+ label: "Digital Ocean"
+}, {
+ name: "digital-tachograph",
+ search: ["data", "distance", "speed", "tachometer"],
+ styles: ["solid"],
+ label: "Digital Tachograph"
+}, {
+ name: "directions",
+ search: ["map", "navigation", "sign", "turn"],
+ styles: ["solid"],
+ label: "Directions"
+}, {
+ name: "discord",
+ search: [],
+ styles: ["brands"],
+ label: "Discord"
+}, {
+ name: "discourse",
+ search: [],
+ styles: ["brands"],
+ label: "Discourse"
+}, {
+ name: "disease",
+ search: ["bacteria", "cancer", "covid-19", "illness", "infection", "sickness", "virus"],
+ styles: ["solid"],
+ label: "Disease"
+}, {
+ name: "divide",
+ search: ["arithmetic", "calculus", "division", "math"],
+ styles: ["solid"],
+ label: "Divide"
+}, {
+ name: "dizzy",
+ search: ["dazed", "dead", "disapprove", "emoticon", "face"],
+ styles: ["solid", "regular"],
+ label: "Dizzy Face"
+}, {
+ name: "dna",
+ search: ["double helix", "genetic", "helix", "molecule", "protein"],
+ styles: ["solid"],
+ label: "DNA"
+}, {
+ name: "dochub",
+ search: [],
+ styles: ["brands"],
+ label: "DocHub"
+}, {
+ name: "docker",
+ search: [],
+ styles: ["brands"],
+ label: "Docker"
+}, {
+ name: "dog",
+ search: ["animal", "canine", "fauna", "mammal", "pet", "pooch", "puppy", "woof"],
+ styles: ["solid"],
+ label: "Dog"
+}, {
+ name: "dollar-sign",
+ search: ["$", "cost", "dollar-sign", "money", "price", "usd"],
+ styles: ["solid"],
+ label: "Dollar Sign"
+}, {
+ name: "dolly",
+ search: ["carry", "shipping", "transport"],
+ styles: ["solid"],
+ label: "Dolly"
+}, {
+ name: "dolly-flatbed",
+ search: ["carry", "inventory", "shipping", "transport"],
+ styles: ["solid"],
+ label: "Dolly Flatbed"
+}, {
+ name: "donate",
+ search: ["contribute", "generosity", "gift", "give"],
+ styles: ["solid"],
+ label: "Donate"
+}, {
+ name: "door-closed",
+ search: ["enter", "exit", "locked"],
+ styles: ["solid"],
+ label: "Door Closed"
+}, {
+ name: "door-open",
+ search: ["enter", "exit", "welcome"],
+ styles: ["solid"],
+ label: "Door Open"
+}, {
+ name: "dot-circle",
+ search: ["bullseye", "notification", "target"],
+ styles: ["solid", "regular"],
+ label: "Dot Circle"
+}, {
+ name: "dove",
+ search: ["bird", "fauna", "flying", "peace", "war"],
+ styles: ["solid"],
+ label: "Dove"
+}, {
+ name: "download",
+ search: ["export", "hard drive", "save", "transfer"],
+ styles: ["solid"],
+ label: "Download"
+}, {
+ name: "draft2digital",
+ search: [],
+ styles: ["brands"],
+ label: "Draft2digital"
+}, {
+ name: "drafting-compass",
+ search: ["design", "map", "mechanical drawing", "plot", "plotting"],
+ styles: ["solid"],
+ label: "Drafting Compass"
+}, {
+ name: "dragon",
+ search: ["Dungeons & Dragons", "d&d", "dnd", "fantasy", "fire", "lizard", "serpent"],
+ styles: ["solid"],
+ label: "Dragon"
+}, {
+ name: "draw-polygon",
+ search: ["anchors", "lines", "object", "render", "shape"],
+ styles: ["solid"],
+ label: "Draw Polygon"
+}, {
+ name: "dribbble",
+ search: [],
+ styles: ["brands"],
+ label: "Dribbble"
+}, {
+ name: "dribbble-square",
+ search: [],
+ styles: ["brands"],
+ label: "Dribbble Square"
+}, {
+ name: "dropbox",
+ search: [],
+ styles: ["brands"],
+ label: "Dropbox"
+}, {
+ name: "drum",
+ search: ["instrument", "music", "percussion", "snare", "sound"],
+ styles: ["solid"],
+ label: "Drum"
+}, {
+ name: "drum-steelpan",
+ search: ["calypso", "instrument", "music", "percussion", "reggae", "snare", "sound", "steel", "tropical"],
+ styles: ["solid"],
+ label: "Drum Steelpan"
+}, {
+ name: "drumstick-bite",
+ search: ["bone", "chicken", "leg", "meat", "poultry", "turkey"],
+ styles: ["solid"],
+ label: "Drumstick with Bite Taken Out"
+}, {
+ name: "drupal",
+ search: [],
+ styles: ["brands"],
+ label: "Drupal Logo"
+}, {
+ name: "dumbbell",
+ search: ["exercise", "gym", "strength", "weight", "weight-lifting"],
+ styles: ["solid"],
+ label: "Dumbbell"
+}, {
+ name: "dumpster",
+ search: ["alley", "bin", "commercial", "trash", "waste"],
+ styles: ["solid"],
+ label: "Dumpster"
+}, {
+ name: "dumpster-fire",
+ search: ["alley", "bin", "commercial", "danger", "dangerous", "euphemism", "flame", "heat", "hot", "trash", "waste"],
+ styles: ["solid"],
+ label: "Dumpster Fire"
+}, {
+ name: "dungeon",
+ search: ["Dungeons & Dragons", "building", "d&d", "dnd", "door", "entrance", "fantasy", "gate"],
+ styles: ["solid"],
+ label: "Dungeon"
+}, {
+ name: "dyalog",
+ search: [],
+ styles: ["brands"],
+ label: "Dyalog"
+}, {
+ name: "earlybirds",
+ search: [],
+ styles: ["brands"],
+ label: "Earlybirds"
+}, {
+ name: "ebay",
+ search: [],
+ styles: ["brands"],
+ label: "eBay"
+}, {
+ name: "edge",
+ search: ["browser", "ie"],
+ styles: ["brands"],
+ label: "Edge Browser"
+}, {
+ name: "edit",
+ search: ["edit", "pen", "pencil", "update", "write"],
+ styles: ["solid", "regular"],
+ label: "Edit"
+}, {
+ name: "egg",
+ search: ["breakfast", "chicken", "easter", "shell", "yolk"],
+ styles: ["solid"],
+ label: "Egg"
+}, {
+ name: "eject",
+ search: ["abort", "cancel", "cd", "discharge"],
+ styles: ["solid"],
+ label: "eject"
+}, {
+ name: "elementor",
+ search: [],
+ styles: ["brands"],
+ label: "Elementor"
+}, {
+ name: "ellipsis-h",
+ search: ["dots", "drag", "kebab", "list", "menu", "nav", "navigation", "ol", "reorder", "settings", "ul"],
+ styles: ["solid"],
+ label: "Horizontal Ellipsis"
+}, {
+ name: "ellipsis-v",
+ search: ["dots", "drag", "kebab", "list", "menu", "nav", "navigation", "ol", "reorder", "settings", "ul"],
+ styles: ["solid"],
+ label: "Vertical Ellipsis"
+}, {
+ name: "ello",
+ search: [],
+ styles: ["brands"],
+ label: "Ello"
+}, {
+ name: "ember",
+ search: [],
+ styles: ["brands"],
+ label: "Ember"
+}, {
+ name: "empire",
+ search: [],
+ styles: ["brands"],
+ label: "Galactic Empire"
+}, {
+ name: "envelope",
+ search: ["e-mail", "email", "letter", "mail", "message", "notification", "support"],
+ styles: ["solid", "regular"],
+ label: "Envelope"
+}, {
+ name: "envelope-open",
+ search: ["e-mail", "email", "letter", "mail", "message", "notification", "support"],
+ styles: ["solid", "regular"],
+ label: "Envelope Open"
+}, {
+ name: "envelope-open-text",
+ search: ["e-mail", "email", "letter", "mail", "message", "notification", "support"],
+ styles: ["solid"],
+ label: "Envelope Open-text"
+}, {
+ name: "envelope-square",
+ search: ["e-mail", "email", "letter", "mail", "message", "notification", "support"],
+ styles: ["solid"],
+ label: "Envelope Square"
+}, {
+ name: "envira",
+ search: ["leaf"],
+ styles: ["brands"],
+ label: "Envira Gallery"
+}, {
+ name: "equals",
+ search: ["arithmetic", "even", "match", "math"],
+ styles: ["solid"],
+ label: "Equals"
+}, {
+ name: "eraser",
+ search: ["art", "delete", "remove", "rubber"],
+ styles: ["solid"],
+ label: "eraser"
+}, {
+ name: "erlang",
+ search: [],
+ styles: ["brands"],
+ label: "Erlang"
+}, {
+ name: "ethereum",
+ search: [],
+ styles: ["brands"],
+ label: "Ethereum"
+}, {
+ name: "ethernet",
+ search: ["cable", "cat 5", "cat 6", "connection", "hardware", "internet", "network", "wired"],
+ styles: ["solid"],
+ label: "Ethernet"
+}, {
+ name: "etsy",
+ search: [],
+ styles: ["brands"],
+ label: "Etsy"
+}, {
+ name: "euro-sign",
+ search: ["currency", "dollar", "exchange", "money"],
+ styles: ["solid"],
+ label: "Euro Sign"
+}, {
+ name: "evernote",
+ search: [],
+ styles: ["brands"],
+ label: "Evernote"
+}, {
+ name: "exchange-alt",
+ search: ["arrow", "arrows", "exchange", "reciprocate", "return", "swap", "transfer"],
+ styles: ["solid"],
+ label: "Alternate Exchange"
+}, {
+ name: "exclamation",
+ search: ["alert", "danger", "error", "important", "notice", "notification", "notify", "problem", "warning"],
+ styles: ["solid"],
+ label: "exclamation"
+}, {
+ name: "exclamation-circle",
+ search: ["alert", "danger", "error", "important", "notice", "notification", "notify", "problem", "warning"],
+ styles: ["solid"],
+ label: "Exclamation Circle"
+}, {
+ name: "exclamation-triangle",
+ search: ["alert", "danger", "error", "important", "notice", "notification", "notify", "problem", "warning"],
+ styles: ["solid"],
+ label: "Exclamation Triangle"
+}, {
+ name: "expand",
+ search: ["arrow", "bigger", "enlarge", "resize"],
+ styles: ["solid"],
+ label: "Expand"
+}, {
+ name: "expand-alt",
+ search: ["arrow", "bigger", "enlarge", "resize"],
+ styles: ["solid"],
+ label: "Alternate Expand"
+}, {
+ name: "expand-arrows-alt",
+ search: ["arrows-alt", "bigger", "enlarge", "move", "resize"],
+ styles: ["solid"],
+ label: "Alternate Expand Arrows"
+}, {
+ name: "expeditedssl",
+ search: [],
+ styles: ["brands"],
+ label: "ExpeditedSSL"
+}, {
+ name: "external-link-alt",
+ search: ["external-link", "new", "open", "share"],
+ styles: ["solid"],
+ label: "Alternate External Link"
+}, {
+ name: "external-link-square-alt",
+ search: ["external-link-square", "new", "open", "share"],
+ styles: ["solid"],
+ label: "Alternate External Link Square"
+}, {
+ name: "eye",
+ search: ["look", "optic", "see", "seen", "show", "sight", "views", "visible"],
+ styles: ["solid", "regular"],
+ label: "Eye"
+}, {
+ name: "eye-dropper",
+ search: ["beaker", "clone", "color", "copy", "eyedropper", "pipette"],
+ styles: ["solid"],
+ label: "Eye Dropper"
+}, {
+ name: "eye-slash",
+ search: ["blind", "hide", "show", "toggle", "unseen", "views", "visible", "visiblity"],
+ styles: ["solid", "regular"],
+ label: "Eye Slash"
+}, {
+ name: "facebook",
+ search: ["facebook-official", "social network"],
+ styles: ["brands"],
+ label: "Facebook"
+}, {
+ name: "facebook-f",
+ search: ["facebook"],
+ styles: ["brands"],
+ label: "Facebook F"
+}, {
+ name: "facebook-messenger",
+ search: [],
+ styles: ["brands"],
+ label: "Facebook Messenger"
+}, {
+ name: "facebook-square",
+ search: ["social network"],
+ styles: ["brands"],
+ label: "Facebook Square"
+}, {
+ name: "fan",
+ search: ["ac", "air conditioning", "blade", "blower", "cool", "hot"],
+ styles: ["solid"],
+ label: "Fan"
+}, {
+ name: "fantasy-flight-games",
+ search: ["Dungeons & Dragons", "d&d", "dnd", "fantasy", "game", "gaming", "tabletop"],
+ styles: ["brands"],
+ label: "Fantasy Flight-games"
+}, {
+ name: "fast-backward",
+ search: ["beginning", "first", "previous", "rewind", "start"],
+ styles: ["solid"],
+ label: "fast-backward"
+}, {
+ name: "fast-forward",
+ search: ["end", "last", "next"],
+ styles: ["solid"],
+ label: "fast-forward"
+}, {
+ name: "faucet",
+ search: ["covid-19", "drip", "house", "hygiene", "kitchen", "sink", "water"],
+ styles: ["solid"],
+ label: "Faucet"
+}, {
+ name: "fax",
+ search: ["business", "communicate", "copy", "facsimile", "send"],
+ styles: ["solid"],
+ label: "Fax"
+}, {
+ name: "feather",
+ search: ["bird", "light", "plucked", "quill", "write"],
+ styles: ["solid"],
+ label: "Feather"
+}, {
+ name: "feather-alt",
+ search: ["bird", "light", "plucked", "quill", "write"],
+ styles: ["solid"],
+ label: "Alternate Feather"
+}, {
+ name: "fedex",
+ search: ["Federal Express", "package", "shipping"],
+ styles: ["brands"],
+ label: "FedEx"
+}, {
+ name: "fedora",
+ search: ["linux", "operating system", "os"],
+ styles: ["brands"],
+ label: "Fedora"
+}, {
+ name: "female",
+ search: ["human", "person", "profile", "user", "woman"],
+ styles: ["solid"],
+ label: "Female"
+}, {
+ name: "fighter-jet",
+ search: ["airplane", "fast", "fly", "goose", "maverick", "plane", "quick", "top gun", "transportation", "travel"],
+ styles: ["solid"],
+ label: "fighter-jet"
+}, {
+ name: "figma",
+ search: ["app", "design", "interface"],
+ styles: ["brands"],
+ label: "Figma"
+}, {
+ name: "file",
+ search: ["document", "new", "page", "pdf", "resume"],
+ styles: ["solid", "regular"],
+ label: "File"
+}, {
+ name: "file-alt",
+ search: ["document", "file-text", "invoice", "new", "page", "pdf"],
+ styles: ["solid", "regular"],
+ label: "Alternate File"
+}, {
+ name: "file-archive",
+ search: [".zip", "bundle", "compress", "compression", "download", "zip"],
+ styles: ["solid", "regular"],
+ label: "Archive File"
+}, {
+ name: "file-audio",
+ search: ["document", "mp3", "music", "page", "play", "sound"],
+ styles: ["solid", "regular"],
+ label: "Audio File"
+}, {
+ name: "file-code",
+ search: ["css", "development", "document", "html"],
+ styles: ["solid", "regular"],
+ label: "Code File"
+}, {
+ name: "file-contract",
+ search: ["agreement", "binding", "document", "legal", "signature"],
+ styles: ["solid"],
+ label: "File Contract"
+}, {
+ name: "file-csv",
+ search: ["document", "excel", "numbers", "spreadsheets", "table"],
+ styles: ["solid"],
+ label: "File CSV"
+}, {
+ name: "file-download",
+ search: ["document", "export", "save"],
+ styles: ["solid"],
+ label: "File Download"
+}, {
+ name: "file-excel",
+ search: ["csv", "document", "numbers", "spreadsheets", "table"],
+ styles: ["solid", "regular"],
+ label: "Excel File"
+}, {
+ name: "file-export",
+ search: ["download", "save"],
+ styles: ["solid"],
+ label: "File Export"
+}, {
+ name: "file-image",
+ search: ["document", "image", "jpg", "photo", "png"],
+ styles: ["solid", "regular"],
+ label: "Image File"
+}, {
+ name: "file-import",
+ search: ["copy", "document", "send", "upload"],
+ styles: ["solid"],
+ label: "File Import"
+}, {
+ name: "file-invoice",
+ search: ["account", "bill", "charge", "document", "payment", "receipt"],
+ styles: ["solid"],
+ label: "File Invoice"
+}, {
+ name: "file-invoice-dollar",
+ search: ["$", "account", "bill", "charge", "document", "dollar-sign", "money", "payment", "receipt", "usd"],
+ styles: ["solid"],
+ label: "File Invoice with US Dollar"
+}, {
+ name: "file-medical",
+ search: ["document", "health", "history", "prescription", "record"],
+ styles: ["solid"],
+ label: "Medical File"
+}, {
+ name: "file-medical-alt",
+ search: ["document", "health", "history", "prescription", "record"],
+ styles: ["solid"],
+ label: "Alternate Medical File"
+}, {
+ name: "file-pdf",
+ search: ["acrobat", "document", "preview", "save"],
+ styles: ["solid", "regular"],
+ label: "PDF File"
+}, {
+ name: "file-powerpoint",
+ search: ["display", "document", "keynote", "presentation"],
+ styles: ["solid", "regular"],
+ label: "Powerpoint File"
+}, {
+ name: "file-prescription",
+ search: ["document", "drugs", "medical", "medicine", "rx"],
+ styles: ["solid"],
+ label: "File Prescription"
+}, {
+ name: "file-signature",
+ search: ["John Hancock", "contract", "document", "name"],
+ styles: ["solid"],
+ label: "File Signature"
+}, {
+ name: "file-upload",
+ search: ["document", "import", "page", "save"],
+ styles: ["solid"],
+ label: "File Upload"
+}, {
+ name: "file-video",
+ search: ["document", "m4v", "movie", "mp4", "play"],
+ styles: ["solid", "regular"],
+ label: "Video File"
+}, {
+ name: "file-word",
+ search: ["document", "edit", "page", "text", "writing"],
+ styles: ["solid", "regular"],
+ label: "Word File"
+}, {
+ name: "fill",
+ search: ["bucket", "color", "paint", "paint bucket"],
+ styles: ["solid"],
+ label: "Fill"
+}, {
+ name: "fill-drip",
+ search: ["bucket", "color", "drop", "paint", "paint bucket", "spill"],
+ styles: ["solid"],
+ label: "Fill Drip"
+}, {
+ name: "film",
+ search: ["cinema", "movie", "strip", "video"],
+ styles: ["solid"],
+ label: "Film"
+}, {
+ name: "filter",
+ search: ["funnel", "options", "separate", "sort"],
+ styles: ["solid"],
+ label: "Filter"
+}, {
+ name: "fingerprint",
+ search: ["human", "id", "identification", "lock", "smudge", "touch", "unique", "unlock"],
+ styles: ["solid"],
+ label: "Fingerprint"
+}, {
+ name: "fire",
+ search: ["burn", "caliente", "flame", "heat", "hot", "popular"],
+ styles: ["solid"],
+ label: "fire"
+}, {
+ name: "fire-alt",
+ search: ["burn", "caliente", "flame", "heat", "hot", "popular"],
+ styles: ["solid"],
+ label: "Alternate Fire"
+}, {
+ name: "fire-extinguisher",
+ search: ["burn", "caliente", "fire fighter", "flame", "heat", "hot", "rescue"],
+ styles: ["solid"],
+ label: "fire-extinguisher"
+}, {
+ name: "firefox",
+ search: ["browser"],
+ styles: ["brands"],
+ label: "Firefox"
+}, {
+ name: "firefox-browser",
+ search: ["browser"],
+ styles: ["brands"],
+ label: "Firefox Browser"
+}, {
+ name: "first-aid",
+ search: ["emergency", "emt", "health", "medical", "rescue"],
+ styles: ["solid"],
+ label: "First Aid"
+}, {
+ name: "first-order",
+ search: [],
+ styles: ["brands"],
+ label: "First Order"
+}, {
+ name: "first-order-alt",
+ search: [],
+ styles: ["brands"],
+ label: "Alternate First Order"
+}, {
+ name: "firstdraft",
+ search: [],
+ styles: ["brands"],
+ label: "firstdraft"
+}, {
+ name: "fish",
+ search: ["fauna", "gold", "seafood", "swimming"],
+ styles: ["solid"],
+ label: "Fish"
+}, {
+ name: "fist-raised",
+ search: ["Dungeons & Dragons", "d&d", "dnd", "fantasy", "hand", "ki", "monk", "resist", "strength", "unarmed combat"],
+ styles: ["solid"],
+ label: "Raised Fist"
+}, {
+ name: "flag",
+ search: ["country", "notice", "notification", "notify", "pole", "report", "symbol"],
+ styles: ["solid", "regular"],
+ label: "flag"
+}, {
+ name: "flag-checkered",
+ search: ["notice", "notification", "notify", "pole", "racing", "report", "symbol"],
+ styles: ["solid"],
+ label: "flag-checkered"
+}, {
+ name: "flag-usa",
+ search: ["betsy ross", "country", "old glory", "stars", "stripes", "symbol"],
+ styles: ["solid"],
+ label: "United States of America Flag"
+}, {
+ name: "flask",
+ search: ["beaker", "experimental", "labs", "science"],
+ styles: ["solid"],
+ label: "Flask"
+}, {
+ name: "flickr",
+ search: [],
+ styles: ["brands"],
+ label: "Flickr"
+}, {
+ name: "flipboard",
+ search: [],
+ styles: ["brands"],
+ label: "Flipboard"
+}, {
+ name: "flushed",
+ search: ["embarrassed", "emoticon", "face"],
+ styles: ["solid", "regular"],
+ label: "Flushed Face"
+}, {
+ name: "fly",
+ search: [],
+ styles: ["brands"],
+ label: "Fly"
+}, {
+ name: "folder",
+ search: ["archive", "directory", "document", "file"],
+ styles: ["solid", "regular"],
+ label: "Folder"
+}, {
+ name: "folder-minus",
+ search: ["archive", "delete", "directory", "document", "file", "negative", "remove"],
+ styles: ["solid"],
+ label: "Folder Minus"
+}, {
+ name: "folder-open",
+ search: ["archive", "directory", "document", "empty", "file", "new"],
+ styles: ["solid", "regular"],
+ label: "Folder Open"
+}, {
+ name: "folder-plus",
+ search: ["add", "archive", "create", "directory", "document", "file", "new", "positive"],
+ styles: ["solid"],
+ label: "Folder Plus"
+}, {
+ name: "font",
+ search: ["alphabet", "glyph", "text", "type", "typeface"],
+ styles: ["solid"],
+ label: "font"
+}, {
+ name: "font-awesome",
+ search: ["meanpath"],
+ styles: ["brands"],
+ label: "Font Awesome"
+}, {
+ name: "font-awesome-alt",
+ search: [],
+ styles: ["brands"],
+ label: "Alternate Font Awesome"
+}, {
+ name: "font-awesome-flag",
+ search: [],
+ styles: ["brands"],
+ label: "Font Awesome Flag"
+}, {
+ name: "fonticons",
+ search: [],
+ styles: ["brands"],
+ label: "Fonticons"
+}, {
+ name: "fonticons-fi",
+ search: [],
+ styles: ["brands"],
+ label: "Fonticons Fi"
+}, {
+ name: "football-ball",
+ search: ["ball", "fall", "nfl", "pigskin", "seasonal"],
+ styles: ["solid"],
+ label: "Football Ball"
+}, {
+ name: "fort-awesome",
+ search: ["castle"],
+ styles: ["brands"],
+ label: "Fort Awesome"
+}, {
+ name: "fort-awesome-alt",
+ search: ["castle"],
+ styles: ["brands"],
+ label: "Alternate Fort Awesome"
+}, {
+ name: "forumbee",
+ search: [],
+ styles: ["brands"],
+ label: "Forumbee"
+}, {
+ name: "forward",
+ search: ["forward", "next", "skip"],
+ styles: ["solid"],
+ label: "forward"
+}, {
+ name: "foursquare",
+ search: [],
+ styles: ["brands"],
+ label: "Foursquare"
+}, {
+ name: "free-code-camp",
+ search: [],
+ styles: ["brands"],
+ label: "freeCodeCamp"
+}, {
+ name: "freebsd",
+ search: [],
+ styles: ["brands"],
+ label: "FreeBSD"
+}, {
+ name: "frog",
+ search: ["amphibian", "bullfrog", "fauna", "hop", "kermit", "kiss", "prince", "ribbit", "toad", "wart"],
+ styles: ["solid"],
+ label: "Frog"
+}, {
+ name: "frown",
+ search: ["disapprove", "emoticon", "face", "rating", "sad"],
+ styles: ["solid", "regular"],
+ label: "Frowning Face"
+}, {
+ name: "frown-open",
+ search: ["disapprove", "emoticon", "face", "rating", "sad"],
+ styles: ["solid", "regular"],
+ label: "Frowning Face With Open Mouth"
+}, {
+ name: "fulcrum",
+ search: [],
+ styles: ["brands"],
+ label: "Fulcrum"
+}, {
+ name: "funnel-dollar",
+ search: ["filter", "money", "options", "separate", "sort"],
+ styles: ["solid"],
+ label: "Funnel Dollar"
+}, {
+ name: "futbol",
+ search: ["ball", "football", "mls", "soccer"],
+ styles: ["solid", "regular"],
+ label: "Futbol"
+}, {
+ name: "galactic-republic",
+ search: ["politics", "star wars"],
+ styles: ["brands"],
+ label: "Galactic Republic"
+}, {
+ name: "galactic-senate",
+ search: ["star wars"],
+ styles: ["brands"],
+ label: "Galactic Senate"
+}, {
+ name: "gamepad",
+ search: ["arcade", "controller", "d-pad", "joystick", "video", "video game"],
+ styles: ["solid"],
+ label: "Gamepad"
+}, {
+ name: "gas-pump",
+ search: ["car", "fuel", "gasoline", "petrol"],
+ styles: ["solid"],
+ label: "Gas Pump"
+}, {
+ name: "gavel",
+ search: ["hammer", "judge", "law", "lawyer", "opinion"],
+ styles: ["solid"],
+ label: "Gavel"
+}, {
+ name: "gem",
+ search: ["diamond", "jewelry", "sapphire", "stone", "treasure"],
+ styles: ["solid", "regular"],
+ label: "Gem"
+}, {
+ name: "genderless",
+ search: ["androgynous", "asexual", "sexless"],
+ styles: ["solid"],
+ label: "Genderless"
+}, {
+ name: "get-pocket",
+ search: [],
+ styles: ["brands"],
+ label: "Get Pocket"
+}, {
+ name: "gg",
+ search: [],
+ styles: ["brands"],
+ label: "GG Currency"
+}, {
+ name: "gg-circle",
+ search: [],
+ styles: ["brands"],
+ label: "GG Currency Circle"
+}, {
+ name: "ghost",
+ search: ["apparition", "blinky", "clyde", "floating", "halloween", "holiday", "inky", "pinky", "spirit"],
+ styles: ["solid"],
+ label: "Ghost"
+}, {
+ name: "gift",
+ search: ["christmas", "generosity", "giving", "holiday", "party", "present", "wrapped", "xmas"],
+ styles: ["solid"],
+ label: "gift"
+}, {
+ name: "gifts",
+ search: ["christmas", "generosity", "giving", "holiday", "party", "present", "wrapped", "xmas"],
+ styles: ["solid"],
+ label: "Gifts"
+}, {
+ name: "git",
+ search: [],
+ styles: ["brands"],
+ label: "Git"
+}, {
+ name: "git-alt",
+ search: [],
+ styles: ["brands"],
+ label: "Git Alt"
+}, {
+ name: "git-square",
+ search: [],
+ styles: ["brands"],
+ label: "Git Square"
+}, {
+ name: "github",
+ search: ["octocat"],
+ styles: ["brands"],
+ label: "GitHub"
+}, {
+ name: "github-alt",
+ search: ["octocat"],
+ styles: ["brands"],
+ label: "Alternate GitHub"
+}, {
+ name: "github-square",
+ search: ["octocat"],
+ styles: ["brands"],
+ label: "GitHub Square"
+}, {
+ name: "gitkraken",
+ search: [],
+ styles: ["brands"],
+ label: "GitKraken"
+}, {
+ name: "gitlab",
+ search: ["Axosoft"],
+ styles: ["brands"],
+ label: "GitLab"
+}, {
+ name: "gitter",
+ search: [],
+ styles: ["brands"],
+ label: "Gitter"
+}, {
+ name: "glass-cheers",
+ search: ["alcohol", "bar", "beverage", "celebration", "champagne", "clink", "drink", "holiday", "new year's eve", "party", "toast"],
+ styles: ["solid"],
+ label: "Glass Cheers"
+}, {
+ name: "glass-martini",
+ search: ["alcohol", "bar", "beverage", "drink", "liquor"],
+ styles: ["solid"],
+ label: "Martini Glass"
+}, {
+ name: "glass-martini-alt",
+ search: ["alcohol", "bar", "beverage", "drink", "liquor"],
+ styles: ["solid"],
+ label: "Alternate Glass Martini"
+}, {
+ name: "glass-whiskey",
+ search: ["alcohol", "bar", "beverage", "bourbon", "drink", "liquor", "neat", "rye", "scotch", "whisky"],
+ styles: ["solid"],
+ label: "Glass Whiskey"
+}, {
+ name: "glasses",
+ search: ["hipster", "nerd", "reading", "sight", "spectacles", "vision"],
+ styles: ["solid"],
+ label: "Glasses"
+}, {
+ name: "glide",
+ search: [],
+ styles: ["brands"],
+ label: "Glide"
+}, {
+ name: "glide-g",
+ search: [],
+ styles: ["brands"],
+ label: "Glide G"
+}, {
+ name: "globe",
+ search: ["all", "coordinates", "country", "earth", "global", "gps", "language", "localize", "location", "map", "online", "place", "planet", "translate", "travel", "world"],
+ styles: ["solid"],
+ label: "Globe"
+}, {
+ name: "globe-africa",
+ search: ["all", "country", "earth", "global", "gps", "language", "localize", "location", "map", "online", "place", "planet", "translate", "travel", "world"],
+ styles: ["solid"],
+ label: "Globe with Africa shown"
+}, {
+ name: "globe-americas",
+ search: ["all", "country", "earth", "global", "gps", "language", "localize", "location", "map", "online", "place", "planet", "translate", "travel", "world"],
+ styles: ["solid"],
+ label: "Globe with Americas shown"
+}, {
+ name: "globe-asia",
+ search: ["all", "country", "earth", "global", "gps", "language", "localize", "location", "map", "online", "place", "planet", "translate", "travel", "world"],
+ styles: ["solid"],
+ label: "Globe with Asia shown"
+}, {
+ name: "globe-europe",
+ search: ["all", "country", "earth", "global", "gps", "language", "localize", "location", "map", "online", "place", "planet", "translate", "travel", "world"],
+ styles: ["solid"],
+ label: "Globe with Europe shown"
+}, {
+ name: "gofore",
+ search: [],
+ styles: ["brands"],
+ label: "Gofore"
+}, {
+ name: "golf-ball",
+ search: ["caddy", "eagle", "putt", "tee"],
+ styles: ["solid"],
+ label: "Golf Ball"
+}, {
+ name: "goodreads",
+ search: [],
+ styles: ["brands"],
+ label: "Goodreads"
+}, {
+ name: "goodreads-g",
+ search: [],
+ styles: ["brands"],
+ label: "Goodreads G"
+}, {
+ name: "google",
+ search: [],
+ styles: ["brands"],
+ label: "Google Logo"
+}, {
+ name: "google-drive",
+ search: [],
+ styles: ["brands"],
+ label: "Google Drive"
+}, {
+ name: "google-play",
+ search: [],
+ styles: ["brands"],
+ label: "Google Play"
+}, {
+ name: "google-plus",
+ search: ["google-plus-circle", "google-plus-official"],
+ styles: ["brands"],
+ label: "Google Plus"
+}, {
+ name: "google-plus-g",
+ search: ["google-plus", "social network"],
+ styles: ["brands"],
+ label: "Google Plus G"
+}, {
+ name: "google-plus-square",
+ search: ["social network"],
+ styles: ["brands"],
+ label: "Google Plus Square"
+}, {
+ name: "google-wallet",
+ search: [],
+ styles: ["brands"],
+ label: "Google Wallet"
+}, {
+ name: "gopuram",
+ search: ["building", "entrance", "hinduism", "temple", "tower"],
+ styles: ["solid"],
+ label: "Gopuram"
+}, {
+ name: "graduation-cap",
+ search: ["ceremony", "college", "graduate", "learning", "school", "student"],
+ styles: ["solid"],
+ label: "Graduation Cap"
+}, {
+ name: "gratipay",
+ search: ["favorite", "heart", "like", "love"],
+ styles: ["brands"],
+ label: "Gratipay (Gittip)"
+}, {
+ name: "grav",
+ search: [],
+ styles: ["brands"],
+ label: "Grav"
+}, {
+ name: "greater-than",
+ search: ["arithmetic", "compare", "math"],
+ styles: ["solid"],
+ label: "Greater Than"
+}, {
+ name: "greater-than-equal",
+ search: ["arithmetic", "compare", "math"],
+ styles: ["solid"],
+ label: "Greater Than Equal To"
+}, {
+ name: "grimace",
+ search: ["cringe", "emoticon", "face", "teeth"],
+ styles: ["solid", "regular"],
+ label: "Grimacing Face"
+}, {
+ name: "grin",
+ search: ["emoticon", "face", "laugh", "smile"],
+ styles: ["solid", "regular"],
+ label: "Grinning Face"
+}, {
+ name: "grin-alt",
+ search: ["emoticon", "face", "laugh", "smile"],
+ styles: ["solid", "regular"],
+ label: "Alternate Grinning Face"
+}, {
+ name: "grin-beam",
+ search: ["emoticon", "face", "laugh", "smile"],
+ styles: ["solid", "regular"],
+ label: "Grinning Face With Smiling Eyes"
+}, {
+ name: "grin-beam-sweat",
+ search: ["embarass", "emoticon", "face", "smile"],
+ styles: ["solid", "regular"],
+ label: "Grinning Face With Sweat"
+}, {
+ name: "grin-hearts",
+ search: ["emoticon", "face", "love", "smile"],
+ styles: ["solid", "regular"],
+ label: "Smiling Face With Heart-Eyes"
+}, {
+ name: "grin-squint",
+ search: ["emoticon", "face", "laugh", "smile"],
+ styles: ["solid", "regular"],
+ label: "Grinning Squinting Face"
+}, {
+ name: "grin-squint-tears",
+ search: ["emoticon", "face", "happy", "smile"],
+ styles: ["solid", "regular"],
+ label: "Rolling on the Floor Laughing"
+}, {
+ name: "grin-stars",
+ search: ["emoticon", "face", "star-struck"],
+ styles: ["solid", "regular"],
+ label: "Star-Struck"
+}, {
+ name: "grin-tears",
+ search: ["LOL", "emoticon", "face"],
+ styles: ["solid", "regular"],
+ label: "Face With Tears of Joy"
+}, {
+ name: "grin-tongue",
+ search: ["LOL", "emoticon", "face"],
+ styles: ["solid", "regular"],
+ label: "Face With Tongue"
+}, {
+ name: "grin-tongue-squint",
+ search: ["LOL", "emoticon", "face"],
+ styles: ["solid", "regular"],
+ label: "Squinting Face With Tongue"
+}, {
+ name: "grin-tongue-wink",
+ search: ["LOL", "emoticon", "face"],
+ styles: ["solid", "regular"],
+ label: "Winking Face With Tongue"
+}, {
+ name: "grin-wink",
+ search: ["emoticon", "face", "flirt", "laugh", "smile"],
+ styles: ["solid", "regular"],
+ label: "Grinning Winking Face"
+}, {
+ name: "grip-horizontal",
+ search: ["affordance", "drag", "drop", "grab", "handle"],
+ styles: ["solid"],
+ label: "Grip Horizontal"
+}, {
+ name: "grip-lines",
+ search: ["affordance", "drag", "drop", "grab", "handle"],
+ styles: ["solid"],
+ label: "Grip Lines"
+}, {
+ name: "grip-lines-vertical",
+ search: ["affordance", "drag", "drop", "grab", "handle"],
+ styles: ["solid"],
+ label: "Grip Lines Vertical"
+}, {
+ name: "grip-vertical",
+ search: ["affordance", "drag", "drop", "grab", "handle"],
+ styles: ["solid"],
+ label: "Grip Vertical"
+}, {
+ name: "gripfire",
+ search: [],
+ styles: ["brands"],
+ label: "Gripfire, Inc."
+}, {
+ name: "grunt",
+ search: [],
+ styles: ["brands"],
+ label: "Grunt"
+}, {
+ name: "guitar",
+ search: ["acoustic", "instrument", "music", "rock", "rock and roll", "song", "strings"],
+ styles: ["solid"],
+ label: "Guitar"
+}, {
+ name: "gulp",
+ search: [],
+ styles: ["brands"],
+ label: "Gulp"
+}, {
+ name: "h-square",
+ search: ["directions", "emergency", "hospital", "hotel", "map"],
+ styles: ["solid"],
+ label: "H Square"
+}, {
+ name: "hacker-news",
+ search: [],
+ styles: ["brands"],
+ label: "Hacker News"
+}, {
+ name: "hacker-news-square",
+ search: [],
+ styles: ["brands"],
+ label: "Hacker News Square"
+}, {
+ name: "hackerrank",
+ search: [],
+ styles: ["brands"],
+ label: "Hackerrank"
+}, {
+ name: "hamburger",
+ search: ["bacon", "beef", "burger", "burger king", "cheeseburger", "fast food", "grill", "ground beef", "mcdonalds", "sandwich"],
+ styles: ["solid"],
+ label: "Hamburger"
+}, {
+ name: "hammer",
+ search: ["admin", "fix", "repair", "settings", "tool"],
+ styles: ["solid"],
+ label: "Hammer"
+}, {
+ name: "hamsa",
+ search: ["amulet", "christianity", "islam", "jewish", "judaism", "muslim", "protection"],
+ styles: ["solid"],
+ label: "Hamsa"
+}, {
+ name: "hand-holding",
+ search: ["carry", "lift"],
+ styles: ["solid"],
+ label: "Hand Holding"
+}, {
+ name: "hand-holding-heart",
+ search: ["carry", "charity", "gift", "lift", "package"],
+ styles: ["solid"],
+ label: "Hand Holding Heart"
+}, {
+ name: "hand-holding-medical",
+ search: ["care", "covid-19", "donate", "help"],
+ styles: ["solid"],
+ label: "Hand Holding Medical Cross"
+}, {
+ name: "hand-holding-usd",
+ search: ["$", "carry", "dollar sign", "donation", "giving", "lift", "money", "price"],
+ styles: ["solid"],
+ label: "Hand Holding US Dollar"
+}, {
+ name: "hand-holding-water",
+ search: ["carry", "covid-19", "drought", "grow", "lift"],
+ styles: ["solid"],
+ label: "Hand Holding Water"
+}, {
+ name: "hand-lizard",
+ search: ["game", "roshambo"],
+ styles: ["solid", "regular"],
+ label: "Lizard (Hand)"
+}, {
+ name: "hand-middle-finger",
+ search: ["flip the bird", "gesture", "hate", "rude"],
+ styles: ["solid"],
+ label: "Hand with Middle Finger Raised"
+}, {
+ name: "hand-paper",
+ search: ["game", "halt", "roshambo", "stop"],
+ styles: ["solid", "regular"],
+ label: "Paper (Hand)"
+}, {
+ name: "hand-peace",
+ search: ["rest", "truce"],
+ styles: ["solid", "regular"],
+ label: "Peace (Hand)"
+}, {
+ name: "hand-point-down",
+ search: ["finger", "hand-o-down", "point"],
+ styles: ["solid", "regular"],
+ label: "Hand Pointing Down"
+}, {
+ name: "hand-point-left",
+ search: ["back", "finger", "hand-o-left", "left", "point", "previous"],
+ styles: ["solid", "regular"],
+ label: "Hand Pointing Left"
+}, {
+ name: "hand-point-right",
+ search: ["finger", "forward", "hand-o-right", "next", "point", "right"],
+ styles: ["solid", "regular"],
+ label: "Hand Pointing Right"
+}, {
+ name: "hand-point-up",
+ search: ["finger", "hand-o-up", "point"],
+ styles: ["solid", "regular"],
+ label: "Hand Pointing Up"
+}, {
+ name: "hand-pointer",
+ search: ["arrow", "cursor", "select"],
+ styles: ["solid", "regular"],
+ label: "Pointer (Hand)"
+}, {
+ name: "hand-rock",
+ search: ["fist", "game", "roshambo"],
+ styles: ["solid", "regular"],
+ label: "Rock (Hand)"
+}, {
+ name: "hand-scissors",
+ search: ["cut", "game", "roshambo"],
+ styles: ["solid", "regular"],
+ label: "Scissors (Hand)"
+}, {
+ name: "hand-sparkles",
+ search: ["clean", "covid-19", "hygiene", "magic", "soap", "wash"],
+ styles: ["solid"],
+ label: "Hand Sparkles"
+}, {
+ name: "hand-spock",
+ search: ["live long", "prosper", "salute", "star trek", "vulcan"],
+ styles: ["solid", "regular"],
+ label: "Spock (Hand)"
+}, {
+ name: "hands",
+ search: ["carry", "hold", "lift"],
+ styles: ["solid"],
+ label: "Hands"
+}, {
+ name: "hands-helping",
+ search: ["aid", "assistance", "handshake", "partnership", "volunteering"],
+ styles: ["solid"],
+ label: "Helping Hands"
+}, {
+ name: "hands-wash",
+ search: ["covid-19", "hygiene", "soap", "wash"],
+ styles: ["solid"],
+ label: "Hands Wash"
+}, {
+ name: "handshake",
+ search: ["agreement", "greeting", "meeting", "partnership"],
+ styles: ["solid", "regular"],
+ label: "Handshake"
+}, {
+ name: "handshake-alt-slash",
+ search: ["broken", "covid-19", "social distance"],
+ styles: ["solid"],
+ label: "Handshake Alternate Slash"
+}, {
+ name: "handshake-slash",
+ search: ["broken", "covid-19", "social distance"],
+ styles: ["solid"],
+ label: "Handshake Slash"
+}, {
+ name: "hanukiah",
+ search: ["candle", "hanukkah", "jewish", "judaism", "light"],
+ styles: ["solid"],
+ label: "Hanukiah"
+}, {
+ name: "hard-hat",
+ search: ["construction", "hardhat", "helmet", "safety"],
+ styles: ["solid"],
+ label: "Hard Hat"
+}, {
+ name: "hashtag",
+ search: ["Twitter", "instagram", "pound", "social media", "tag"],
+ styles: ["solid"],
+ label: "Hashtag"
+}, {
+ name: "hat-cowboy",
+ search: ["buckaroo", "horse", "jackeroo", "john b.", "old west", "pardner", "ranch", "rancher", "rodeo", "western", "wrangler"],
+ styles: ["solid"],
+ label: "Cowboy Hat"
+}, {
+ name: "hat-cowboy-side",
+ search: ["buckaroo", "horse", "jackeroo", "john b.", "old west", "pardner", "ranch", "rancher", "rodeo", "western", "wrangler"],
+ styles: ["solid"],
+ label: "Cowboy Hat Side"
+}, {
+ name: "hat-wizard",
+ search: ["Dungeons & Dragons", "accessory", "buckle", "clothing", "d&d", "dnd", "fantasy", "halloween", "head", "holiday", "mage", "magic", "pointy", "witch"],
+ styles: ["solid"],
+ label: "Wizard's Hat"
+}, {
+ name: "hdd",
+ search: ["cpu", "hard drive", "harddrive", "machine", "save", "storage"],
+ styles: ["solid", "regular"],
+ label: "HDD"
+}, {
+ name: "head-side-cough",
+ search: ["cough", "covid-19", "germs", "lungs", "respiratory", "sick"],
+ styles: ["solid"],
+ label: "Head Side Cough"
+}, {
+ name: "head-side-cough-slash",
+ search: ["cough", "covid-19", "germs", "lungs", "respiratory", "sick"],
+ styles: ["solid"],
+ label: "Head Side-cough-slash"
+}, {
+ name: "head-side-mask",
+ search: ["breath", "covid-19", "filter", "respirator", "virus"],
+ styles: ["solid"],
+ label: "Head Side Mask"
+}, {
+ name: "head-side-virus",
+ search: ["cold", "covid-19", "flu", "sick"],
+ styles: ["solid"],
+ label: "Head Side Virus"
+}, {
+ name: "heading",
+ search: ["format", "header", "text", "title"],
+ styles: ["solid"],
+ label: "heading"
+}, {
+ name: "headphones",
+ search: ["audio", "listen", "music", "sound", "speaker"],
+ styles: ["solid"],
+ label: "headphones"
+}, {
+ name: "headphones-alt",
+ search: ["audio", "listen", "music", "sound", "speaker"],
+ styles: ["solid"],
+ label: "Alternate Headphones"
+}, {
+ name: "headset",
+ search: ["audio", "gamer", "gaming", "listen", "live chat", "microphone", "shot caller", "sound", "support", "telemarketer"],
+ styles: ["solid"],
+ label: "Headset"
+}, {
+ name: "heart",
+ search: ["favorite", "like", "love", "relationship", "valentine"],
+ styles: ["solid", "regular"],
+ label: "Heart"
+}, {
+ name: "heart-broken",
+ search: ["breakup", "crushed", "dislike", "dumped", "grief", "love", "lovesick", "relationship", "sad"],
+ styles: ["solid"],
+ label: "Heart Broken"
+}, {
+ name: "heartbeat",
+ search: ["ekg", "electrocardiogram", "health", "lifeline", "vital signs"],
+ styles: ["solid"],
+ label: "Heartbeat"
+}, {
+ name: "helicopter",
+ search: ["airwolf", "apache", "chopper", "flight", "fly", "travel"],
+ styles: ["solid"],
+ label: "Helicopter"
+}, {
+ name: "highlighter",
+ search: ["edit", "marker", "sharpie", "update", "write"],
+ styles: ["solid"],
+ label: "Highlighter"
+}, {
+ name: "hiking",
+ search: ["activity", "backpack", "fall", "fitness", "outdoors", "person", "seasonal", "walking"],
+ styles: ["solid"],
+ label: "Hiking"
+}, {
+ name: "hippo",
+ search: ["animal", "fauna", "hippopotamus", "hungry", "mammal"],
+ styles: ["solid"],
+ label: "Hippo"
+}, {
+ name: "hips",
+ search: [],
+ styles: ["brands"],
+ label: "Hips"
+}, {
+ name: "hire-a-helper",
+ search: [],
+ styles: ["brands"],
+ label: "HireAHelper"
+}, {
+ name: "history",
+ search: ["Rewind", "clock", "reverse", "time", "time machine"],
+ styles: ["solid"],
+ label: "History"
+}, {
+ name: "hockey-puck",
+ search: ["ice", "nhl", "sport"],
+ styles: ["solid"],
+ label: "Hockey Puck"
+}, {
+ name: "holly-berry",
+ search: ["catwoman", "christmas", "decoration", "flora", "halle", "holiday", "ororo munroe", "plant", "storm", "xmas"],
+ styles: ["solid"],
+ label: "Holly Berry"
+}, {
+ name: "home",
+ search: ["abode", "building", "house", "main"],
+ styles: ["solid"],
+ label: "home"
+}, {
+ name: "hooli",
+ search: [],
+ styles: ["brands"],
+ label: "Hooli"
+}, {
+ name: "hornbill",
+ search: [],
+ styles: ["brands"],
+ label: "Hornbill"
+}, {
+ name: "horse",
+ search: ["equus", "fauna", "mammmal", "mare", "neigh", "pony"],
+ styles: ["solid"],
+ label: "Horse"
+}, {
+ name: "horse-head",
+ search: ["equus", "fauna", "mammmal", "mare", "neigh", "pony"],
+ styles: ["solid"],
+ label: "Horse Head"
+}, {
+ name: "hospital",
+ search: ["building", "covid-19", "emergency room", "medical center"],
+ styles: ["solid", "regular"],
+ label: "hospital"
+}, {
+ name: "hospital-alt",
+ search: ["building", "covid-19", "emergency room", "medical center"],
+ styles: ["solid"],
+ label: "Alternate Hospital"
+}, {
+ name: "hospital-symbol",
+ search: ["clinic", "covid-19", "emergency", "map"],
+ styles: ["solid"],
+ label: "Hospital Symbol"
+}, {
+ name: "hospital-user",
+ search: ["covid-19", "doctor", "network", "patient", "primary care"],
+ styles: ["solid"],
+ label: "Hospital with User"
+}, {
+ name: "hot-tub",
+ search: ["bath", "jacuzzi", "massage", "sauna", "spa"],
+ styles: ["solid"],
+ label: "Hot Tub"
+}, {
+ name: "hotdog",
+ search: ["bun", "chili", "frankfurt", "frankfurter", "kosher", "polish", "sandwich", "sausage", "vienna", "weiner"],
+ styles: ["solid"],
+ label: "Hot Dog"
+}, {
+ name: "hotel",
+ search: ["building", "inn", "lodging", "motel", "resort", "travel"],
+ styles: ["solid"],
+ label: "Hotel"
+}, {
+ name: "hotjar",
+ search: [],
+ styles: ["brands"],
+ label: "Hotjar"
+}, {
+ name: "hourglass",
+ search: ["hour", "minute", "sand", "stopwatch", "time"],
+ styles: ["solid", "regular"],
+ label: "Hourglass"
+}, {
+ name: "hourglass-end",
+ search: ["hour", "minute", "sand", "stopwatch", "time"],
+ styles: ["solid"],
+ label: "Hourglass End"
+}, {
+ name: "hourglass-half",
+ search: ["hour", "minute", "sand", "stopwatch", "time"],
+ styles: ["solid"],
+ label: "Hourglass Half"
+}, {
+ name: "hourglass-start",
+ search: ["hour", "minute", "sand", "stopwatch", "time"],
+ styles: ["solid"],
+ label: "Hourglass Start"
+}, {
+ name: "house-damage",
+ search: ["building", "devastation", "disaster", "home", "insurance"],
+ styles: ["solid"],
+ label: "Damaged House"
+}, {
+ name: "house-user",
+ search: ["covid-19", "home", "isolation", "quarantine"],
+ styles: ["solid"],
+ label: "House User"
+}, {
+ name: "houzz",
+ search: [],
+ styles: ["brands"],
+ label: "Houzz"
+}, {
+ name: "hryvnia",
+ search: ["currency", "money", "ukraine", "ukrainian"],
+ styles: ["solid"],
+ label: "Hryvnia"
+}, {
+ name: "html5",
+ search: [],
+ styles: ["brands"],
+ label: "HTML 5 Logo"
+}, {
+ name: "hubspot",
+ search: [],
+ styles: ["brands"],
+ label: "HubSpot"
+}, {
+ name: "i-cursor",
+ search: ["editing", "i-beam", "type", "writing"],
+ styles: ["solid"],
+ label: "I Beam Cursor"
+}, {
+ name: "ice-cream",
+ search: ["chocolate", "cone", "dessert", "frozen", "scoop", "sorbet", "vanilla", "yogurt"],
+ styles: ["solid"],
+ label: "Ice Cream"
+}, {
+ name: "icicles",
+ search: ["cold", "frozen", "hanging", "ice", "seasonal", "sharp"],
+ styles: ["solid"],
+ label: "Icicles"
+}, {
+ name: "icons",
+ search: ["bolt", "emoji", "heart", "image", "music", "photo", "symbols"],
+ styles: ["solid"],
+ label: "Icons"
+}, {
+ name: "id-badge",
+ search: ["address", "contact", "identification", "license", "profile"],
+ styles: ["solid", "regular"],
+ label: "Identification Badge"
+}, {
+ name: "id-card",
+ search: ["contact", "demographics", "document", "identification", "issued", "profile"],
+ styles: ["solid", "regular"],
+ label: "Identification Card"
+}, {
+ name: "id-card-alt",
+ search: ["contact", "demographics", "document", "identification", "issued", "profile"],
+ styles: ["solid"],
+ label: "Alternate Identification Card"
+}, {
+ name: "ideal",
+ search: [],
+ styles: ["brands"],
+ label: "iDeal"
+}, {
+ name: "igloo",
+ search: ["dome", "dwelling", "eskimo", "home", "house", "ice", "snow"],
+ styles: ["solid"],
+ label: "Igloo"
+}, {
+ name: "image",
+ search: ["album", "landscape", "photo", "picture"],
+ styles: ["solid", "regular"],
+ label: "Image"
+}, {
+ name: "images",
+ search: ["album", "landscape", "photo", "picture"],
+ styles: ["solid", "regular"],
+ label: "Images"
+}, {
+ name: "imdb",
+ search: [],
+ styles: ["brands"],
+ label: "IMDB"
+}, {
+ name: "inbox",
+ search: ["archive", "desk", "email", "mail", "message"],
+ styles: ["solid"],
+ label: "inbox"
+}, {
+ name: "indent",
+ search: ["align", "justify", "paragraph", "tab"],
+ styles: ["solid"],
+ label: "Indent"
+}, {
+ name: "industry",
+ search: ["building", "factory", "industrial", "manufacturing", "mill", "warehouse"],
+ styles: ["solid"],
+ label: "Industry"
+}, {
+ name: "infinity",
+ search: ["eternity", "forever", "math"],
+ styles: ["solid"],
+ label: "Infinity"
+}, {
+ name: "info",
+ search: ["details", "help", "information", "more", "support"],
+ styles: ["solid"],
+ label: "Info"
+}, {
+ name: "info-circle",
+ search: ["details", "help", "information", "more", "support"],
+ styles: ["solid"],
+ label: "Info Circle"
+}, {
+ name: "instagram",
+ search: [],
+ styles: ["brands"],
+ label: "Instagram"
+}, {
+ name: "instagram-square",
+ search: [],
+ styles: ["brands"],
+ label: "Instagram Square"
+}, {
+ name: "intercom",
+ search: ["app", "customer", "messenger"],
+ styles: ["brands"],
+ label: "Intercom"
+}, {
+ name: "internet-explorer",
+ search: ["browser", "ie"],
+ styles: ["brands"],
+ label: "Internet-explorer"
+}, {
+ name: "invision",
+ search: ["app", "design", "interface"],
+ styles: ["brands"],
+ label: "InVision"
+}, {
+ name: "ioxhost",
+ search: [],
+ styles: ["brands"],
+ label: "ioxhost"
+}, {
+ name: "italic",
+ search: ["edit", "emphasis", "font", "format", "text", "type"],
+ styles: ["solid"],
+ label: "italic"
+}, {
+ name: "itch-io",
+ search: [],
+ styles: ["brands"],
+ label: "itch.io"
+}, {
+ name: "itunes",
+ search: [],
+ styles: ["brands"],
+ label: "iTunes"
+}, {
+ name: "itunes-note",
+ search: [],
+ styles: ["brands"],
+ label: "Itunes Note"
+}, {
+ name: "java",
+ search: [],
+ styles: ["brands"],
+ label: "Java"
+}, {
+ name: "jedi",
+ search: ["crest", "force", "sith", "skywalker", "star wars", "yoda"],
+ styles: ["solid"],
+ label: "Jedi"
+}, {
+ name: "jedi-order",
+ search: ["star wars"],
+ styles: ["brands"],
+ label: "Jedi Order"
+}, {
+ name: "jenkins",
+ search: [],
+ styles: ["brands"],
+ label: "Jenkis"
+}, {
+ name: "jira",
+ search: ["atlassian"],
+ styles: ["brands"],
+ label: "Jira"
+}, {
+ name: "joget",
+ search: [],
+ styles: ["brands"],
+ label: "Joget"
+}, {
+ name: "joint",
+ search: ["blunt", "cannabis", "doobie", "drugs", "marijuana", "roach", "smoke", "smoking", "spliff"],
+ styles: ["solid"],
+ label: "Joint"
+}, {
+ name: "joomla",
+ search: [],
+ styles: ["brands"],
+ label: "Joomla Logo"
+}, {
+ name: "journal-whills",
+ search: ["book", "force", "jedi", "sith", "star wars", "yoda"],
+ styles: ["solid"],
+ label: "Journal of the Whills"
+}, {
+ name: "js",
+ search: [],
+ styles: ["brands"],
+ label: "JavaScript (JS)"
+}, {
+ name: "js-square",
+ search: [],
+ styles: ["brands"],
+ label: "JavaScript (JS) Square"
+}, {
+ name: "jsfiddle",
+ search: [],
+ styles: ["brands"],
+ label: "jsFiddle"
+}, {
+ name: "kaaba",
+ search: ["building", "cube", "islam", "muslim"],
+ styles: ["solid"],
+ label: "Kaaba"
+}, {
+ name: "kaggle",
+ search: [],
+ styles: ["brands"],
+ label: "Kaggle"
+}, {
+ name: "key",
+ search: ["lock", "password", "private", "secret", "unlock"],
+ styles: ["solid"],
+ label: "key"
+}, {
+ name: "keybase",
+ search: [],
+ styles: ["brands"],
+ label: "Keybase"
+}, {
+ name: "keyboard",
+ search: ["accessory", "edit", "input", "text", "type", "write"],
+ styles: ["solid", "regular"],
+ label: "Keyboard"
+}, {
+ name: "keycdn",
+ search: [],
+ styles: ["brands"],
+ label: "KeyCDN"
+}, {
+ name: "khanda",
+ search: ["chakkar", "sikh", "sikhism", "sword"],
+ styles: ["solid"],
+ label: "Khanda"
+}, {
+ name: "kickstarter",
+ search: [],
+ styles: ["brands"],
+ label: "Kickstarter"
+}, {
+ name: "kickstarter-k",
+ search: [],
+ styles: ["brands"],
+ label: "Kickstarter K"
+}, {
+ name: "kiss",
+ search: ["beso", "emoticon", "face", "love", "smooch"],
+ styles: ["solid", "regular"],
+ label: "Kissing Face"
+}, {
+ name: "kiss-beam",
+ search: ["beso", "emoticon", "face", "love", "smooch"],
+ styles: ["solid", "regular"],
+ label: "Kissing Face With Smiling Eyes"
+}, {
+ name: "kiss-wink-heart",
+ search: ["beso", "emoticon", "face", "love", "smooch"],
+ styles: ["solid", "regular"],
+ label: "Face Blowing a Kiss"
+}, {
+ name: "kiwi-bird",
+ search: ["bird", "fauna", "new zealand"],
+ styles: ["solid"],
+ label: "Kiwi Bird"
+}, {
+ name: "korvue",
+ search: [],
+ styles: ["brands"],
+ label: "KORVUE"
+}, {
+ name: "landmark",
+ search: ["building", "historic", "memorable", "monument", "politics"],
+ styles: ["solid"],
+ label: "Landmark"
+}, {
+ name: "language",
+ search: ["dialect", "idiom", "localize", "speech", "translate", "vernacular"],
+ styles: ["solid"],
+ label: "Language"
+}, {
+ name: "laptop",
+ search: ["computer", "cpu", "dell", "demo", "device", "mac", "macbook", "machine", "pc"],
+ styles: ["solid"],
+ label: "Laptop"
+}, {
+ name: "laptop-code",
+ search: ["computer", "cpu", "dell", "demo", "develop", "device", "mac", "macbook", "machine", "pc"],
+ styles: ["solid"],
+ label: "Laptop Code"
+}, {
+ name: "laptop-house",
+ search: ["computer", "covid-19", "device", "office", "remote", "work from home"],
+ styles: ["solid"],
+ label: "Laptop House"
+}, {
+ name: "laptop-medical",
+ search: ["computer", "device", "ehr", "electronic health records", "history"],
+ styles: ["solid"],
+ label: "Laptop Medical"
+}, {
+ name: "laravel",
+ search: [],
+ styles: ["brands"],
+ label: "Laravel"
+}, {
+ name: "lastfm",
+ search: [],
+ styles: ["brands"],
+ label: "last.fm"
+}, {
+ name: "lastfm-square",
+ search: [],
+ styles: ["brands"],
+ label: "last.fm Square"
+}, {
+ name: "laugh",
+ search: ["LOL", "emoticon", "face", "laugh", "smile"],
+ styles: ["solid", "regular"],
+ label: "Grinning Face With Big Eyes"
+}, {
+ name: "laugh-beam",
+ search: ["LOL", "emoticon", "face", "happy", "smile"],
+ styles: ["solid", "regular"],
+ label: "Laugh Face with Beaming Eyes"
+}, {
+ name: "laugh-squint",
+ search: ["LOL", "emoticon", "face", "happy", "smile"],
+ styles: ["solid", "regular"],
+ label: "Laughing Squinting Face"
+}, {
+ name: "laugh-wink",
+ search: ["LOL", "emoticon", "face", "happy", "smile"],
+ styles: ["solid", "regular"],
+ label: "Laughing Winking Face"
+}, {
+ name: "layer-group",
+ search: ["arrange", "develop", "layers", "map", "stack"],
+ styles: ["solid"],
+ label: "Layer Group"
+}, {
+ name: "leaf",
+ search: ["eco", "flora", "nature", "plant", "vegan"],
+ styles: ["solid"],
+ label: "leaf"
+}, {
+ name: "leanpub",
+ search: [],
+ styles: ["brands"],
+ label: "Leanpub"
+}, {
+ name: "lemon",
+ search: ["citrus", "lemonade", "lime", "tart"],
+ styles: ["solid", "regular"],
+ label: "Lemon"
+}, {
+ name: "less",
+ search: [],
+ styles: ["brands"],
+ label: "Less"
+}, {
+ name: "less-than",
+ search: ["arithmetic", "compare", "math"],
+ styles: ["solid"],
+ label: "Less Than"
+}, {
+ name: "less-than-equal",
+ search: ["arithmetic", "compare", "math"],
+ styles: ["solid"],
+ label: "Less Than Equal To"
+}, {
+ name: "level-down-alt",
+ search: ["arrow", "level-down"],
+ styles: ["solid"],
+ label: "Alternate Level Down"
+}, {
+ name: "level-up-alt",
+ search: ["arrow", "level-up"],
+ styles: ["solid"],
+ label: "Alternate Level Up"
+}, {
+ name: "life-ring",
+ search: ["coast guard", "help", "overboard", "save", "support"],
+ styles: ["solid", "regular"],
+ label: "Life Ring"
+}, {
+ name: "lightbulb",
+ search: ["energy", "idea", "inspiration", "light"],
+ styles: ["solid", "regular"],
+ label: "Lightbulb"
+}, {
+ name: "line",
+ search: [],
+ styles: ["brands"],
+ label: "Line"
+}, {
+ name: "link",
+ search: ["attach", "attachment", "chain", "connect"],
+ styles: ["solid"],
+ label: "Link"
+}, {
+ name: "linkedin",
+ search: ["linkedin-square"],
+ styles: ["brands"],
+ label: "LinkedIn"
+}, {
+ name: "linkedin-in",
+ search: ["linkedin"],
+ styles: ["brands"],
+ label: "LinkedIn In"
+}, {
+ name: "linode",
+ search: [],
+ styles: ["brands"],
+ label: "Linode"
+}, {
+ name: "linux",
+ search: ["tux"],
+ styles: ["brands"],
+ label: "Linux"
+}, {
+ name: "lira-sign",
+ search: ["currency", "money", "try", "turkish"],
+ styles: ["solid"],
+ label: "Turkish Lira Sign"
+}, {
+ name: "list",
+ search: ["checklist", "completed", "done", "finished", "ol", "todo", "ul"],
+ styles: ["solid"],
+ label: "List"
+}, {
+ name: "list-alt",
+ search: ["checklist", "completed", "done", "finished", "ol", "todo", "ul"],
+ styles: ["solid", "regular"],
+ label: "Alternate List"
+}, {
+ name: "list-ol",
+ search: ["checklist", "completed", "done", "finished", "numbers", "ol", "todo", "ul"],
+ styles: ["solid"],
+ label: "list-ol"
+}, {
+ name: "list-ul",
+ search: ["checklist", "completed", "done", "finished", "ol", "todo", "ul"],
+ styles: ["solid"],
+ label: "list-ul"
+}, {
+ name: "location-arrow",
+ search: ["address", "compass", "coordinate", "direction", "gps", "map", "navigation", "place"],
+ styles: ["solid"],
+ label: "location-arrow"
+}, {
+ name: "lock",
+ search: ["admin", "lock", "open", "password", "private", "protect", "security"],
+ styles: ["solid"],
+ label: "lock"
+}, {
+ name: "lock-open",
+ search: ["admin", "lock", "open", "password", "private", "protect", "security"],
+ styles: ["solid"],
+ label: "Lock Open"
+}, {
+ name: "long-arrow-alt-down",
+ search: ["download", "long-arrow-down"],
+ styles: ["solid"],
+ label: "Alternate Long Arrow Down"
+}, {
+ name: "long-arrow-alt-left",
+ search: ["back", "long-arrow-left", "previous"],
+ styles: ["solid"],
+ label: "Alternate Long Arrow Left"
+}, {
+ name: "long-arrow-alt-right",
+ search: ["forward", "long-arrow-right", "next"],
+ styles: ["solid"],
+ label: "Alternate Long Arrow Right"
+}, {
+ name: "long-arrow-alt-up",
+ search: ["long-arrow-up", "upload"],
+ styles: ["solid"],
+ label: "Alternate Long Arrow Up"
+}, {
+ name: "low-vision",
+ search: ["blind", "eye", "sight"],
+ styles: ["solid"],
+ label: "Low Vision"
+}, {
+ name: "luggage-cart",
+ search: ["bag", "baggage", "suitcase", "travel"],
+ styles: ["solid"],
+ label: "Luggage Cart"
+}, {
+ name: "lungs",
+ search: ["air", "breath", "covid-19", "organ", "respiratory"],
+ styles: ["solid"],
+ label: "Lungs"
+}, {
+ name: "lungs-virus",
+ search: ["breath", "covid-19", "respiratory", "sick"],
+ styles: ["solid"],
+ label: "Lungs Virus"
+}, {
+ name: "lyft",
+ search: [],
+ styles: ["brands"],
+ label: "lyft"
+}, {
+ name: "magento",
+ search: [],
+ styles: ["brands"],
+ label: "Magento"
+}, {
+ name: "magic",
+ search: ["autocomplete", "automatic", "mage", "magic", "spell", "wand", "witch", "wizard"],
+ styles: ["solid"],
+ label: "magic"
+}, {
+ name: "magnet",
+ search: ["Attract", "lodestone", "tool"],
+ styles: ["solid"],
+ label: "magnet"
+}, {
+ name: "mail-bulk",
+ search: ["archive", "envelope", "letter", "post office", "postal", "postcard", "send", "stamp", "usps"],
+ styles: ["solid"],
+ label: "Mail Bulk"
+}, {
+ name: "mailchimp",
+ search: [],
+ styles: ["brands"],
+ label: "Mailchimp"
+}, {
+ name: "male",
+ search: ["human", "man", "person", "profile", "user"],
+ styles: ["solid"],
+ label: "Male"
+}, {
+ name: "mandalorian",
+ search: [],
+ styles: ["brands"],
+ label: "Mandalorian"
+}, {
+ name: "map",
+ search: ["address", "coordinates", "destination", "gps", "localize", "location", "map", "navigation", "paper", "pin", "place", "point of interest", "position", "route", "travel"],
+ styles: ["solid", "regular"],
+ label: "Map"
+}, {
+ name: "map-marked",
+ search: ["address", "coordinates", "destination", "gps", "localize", "location", "map", "navigation", "paper", "pin", "place", "point of interest", "position", "route", "travel"],
+ styles: ["solid"],
+ label: "Map Marked"
+}, {
+ name: "map-marked-alt",
+ search: ["address", "coordinates", "destination", "gps", "localize", "location", "map", "navigation", "paper", "pin", "place", "point of interest", "position", "route", "travel"],
+ styles: ["solid"],
+ label: "Alternate Map Marked"
+}, {
+ name: "map-marker",
+ search: ["address", "coordinates", "destination", "gps", "localize", "location", "map", "navigation", "paper", "pin", "place", "point of interest", "position", "route", "travel"],
+ styles: ["solid"],
+ label: "map-marker"
+}, {
+ name: "map-marker-alt",
+ search: ["address", "coordinates", "destination", "gps", "localize", "location", "map", "navigation", "paper", "pin", "place", "point of interest", "position", "route", "travel"],
+ styles: ["solid"],
+ label: "Alternate Map Marker"
+}, {
+ name: "map-pin",
+ search: ["address", "agree", "coordinates", "destination", "gps", "localize", "location", "map", "marker", "navigation", "pin", "place", "position", "travel"],
+ styles: ["solid"],
+ label: "Map Pin"
+}, {
+ name: "map-signs",
+ search: ["directions", "directory", "map", "signage", "wayfinding"],
+ styles: ["solid"],
+ label: "Map Signs"
+}, {
+ name: "markdown",
+ search: [],
+ styles: ["brands"],
+ label: "Markdown"
+}, {
+ name: "marker",
+ search: ["design", "edit", "sharpie", "update", "write"],
+ styles: ["solid"],
+ label: "Marker"
+}, {
+ name: "mars",
+ search: ["male"],
+ styles: ["solid"],
+ label: "Mars"
+}, {
+ name: "mars-double",
+ search: [],
+ styles: ["solid"],
+ label: "Mars Double"
+}, {
+ name: "mars-stroke",
+ search: [],
+ styles: ["solid"],
+ label: "Mars Stroke"
+}, {
+ name: "mars-stroke-h",
+ search: [],
+ styles: ["solid"],
+ label: "Mars Stroke Horizontal"
+}, {
+ name: "mars-stroke-v",
+ search: [],
+ styles: ["solid"],
+ label: "Mars Stroke Vertical"
+}, {
+ name: "mask",
+ search: ["carnivale", "costume", "disguise", "halloween", "secret", "super hero"],
+ styles: ["solid"],
+ label: "Mask"
+}, {
+ name: "mastodon",
+ search: [],
+ styles: ["brands"],
+ label: "Mastodon"
+}, {
+ name: "maxcdn",
+ search: [],
+ styles: ["brands"],
+ label: "MaxCDN"
+}, {
+ name: "mdb",
+ search: [],
+ styles: ["brands"],
+ label: "Material Design for Bootstrap"
+}, {
+ name: "medal",
+ search: ["award", "ribbon", "star", "trophy"],
+ styles: ["solid"],
+ label: "Medal"
+}, {
+ name: "medapps",
+ search: [],
+ styles: ["brands"],
+ label: "MedApps"
+}, {
+ name: "medium",
+ search: [],
+ styles: ["brands"],
+ label: "Medium"
+}, {
+ name: "medium-m",
+ search: [],
+ styles: ["brands"],
+ label: "Medium M"
+}, {
+ name: "medkit",
+ search: ["first aid", "firstaid", "health", "help", "support"],
+ styles: ["solid"],
+ label: "medkit"
+}, {
+ name: "medrt",
+ search: [],
+ styles: ["brands"],
+ label: "MRT"
+}, {
+ name: "meetup",
+ search: [],
+ styles: ["brands"],
+ label: "Meetup"
+}, {
+ name: "megaport",
+ search: [],
+ styles: ["brands"],
+ label: "Megaport"
+}, {
+ name: "meh",
+ search: ["emoticon", "face", "neutral", "rating"],
+ styles: ["solid", "regular"],
+ label: "Neutral Face"
+}, {
+ name: "meh-blank",
+ search: ["emoticon", "face", "neutral", "rating"],
+ styles: ["solid", "regular"],
+ label: "Face Without Mouth"
+}, {
+ name: "meh-rolling-eyes",
+ search: ["emoticon", "face", "neutral", "rating"],
+ styles: ["solid", "regular"],
+ label: "Face With Rolling Eyes"
+}, {
+ name: "memory",
+ search: ["DIMM", "RAM", "hardware", "storage", "technology"],
+ styles: ["solid"],
+ label: "Memory"
+}, {
+ name: "mendeley",
+ search: [],
+ styles: ["brands"],
+ label: "Mendeley"
+}, {
+ name: "menorah",
+ search: ["candle", "hanukkah", "jewish", "judaism", "light"],
+ styles: ["solid"],
+ label: "Menorah"
+}, {
+ name: "mercury",
+ search: ["transgender"],
+ styles: ["solid"],
+ label: "Mercury"
+}, {
+ name: "meteor",
+ search: ["armageddon", "asteroid", "comet", "shooting star", "space"],
+ styles: ["solid"],
+ label: "Meteor"
+}, {
+ name: "microblog",
+ search: [],
+ styles: ["brands"],
+ label: "Micro.blog"
+}, {
+ name: "microchip",
+ search: ["cpu", "hardware", "processor", "technology"],
+ styles: ["solid"],
+ label: "Microchip"
+}, {
+ name: "microphone",
+ search: ["audio", "podcast", "record", "sing", "sound", "voice"],
+ styles: ["solid"],
+ label: "microphone"
+}, {
+ name: "microphone-alt",
+ search: ["audio", "podcast", "record", "sing", "sound", "voice"],
+ styles: ["solid"],
+ label: "Alternate Microphone"
+}, {
+ name: "microphone-alt-slash",
+ search: ["audio", "disable", "mute", "podcast", "record", "sing", "sound", "voice"],
+ styles: ["solid"],
+ label: "Alternate Microphone Slash"
+}, {
+ name: "microphone-slash",
+ search: ["audio", "disable", "mute", "podcast", "record", "sing", "sound", "voice"],
+ styles: ["solid"],
+ label: "Microphone Slash"
+}, {
+ name: "microscope",
+ search: ["covid-19", "electron", "lens", "optics", "science", "shrink"],
+ styles: ["solid"],
+ label: "Microscope"
+}, {
+ name: "microsoft",
+ search: [],
+ styles: ["brands"],
+ label: "Microsoft"
+}, {
+ name: "minus",
+ search: ["collapse", "delete", "hide", "minify", "negative", "remove", "trash"],
+ styles: ["solid"],
+ label: "minus"
+}, {
+ name: "minus-circle",
+ search: ["delete", "hide", "negative", "remove", "shape", "trash"],
+ styles: ["solid"],
+ label: "Minus Circle"
+}, {
+ name: "minus-square",
+ search: ["collapse", "delete", "hide", "minify", "negative", "remove", "shape", "trash"],
+ styles: ["solid", "regular"],
+ label: "Minus Square"
+}, {
+ name: "mitten",
+ search: ["clothing", "cold", "glove", "hands", "knitted", "seasonal", "warmth"],
+ styles: ["solid"],
+ label: "Mitten"
+}, {
+ name: "mix",
+ search: [],
+ styles: ["brands"],
+ label: "Mix"
+}, {
+ name: "mixcloud",
+ search: [],
+ styles: ["brands"],
+ label: "Mixcloud"
+}, {
+ name: "mixer",
+ search: [],
+ styles: ["brands"],
+ label: "Mixer"
+}, {
+ name: "mizuni",
+ search: [],
+ styles: ["brands"],
+ label: "Mizuni"
+}, {
+ name: "mobile",
+ search: ["apple", "call", "cell phone", "cellphone", "device", "iphone", "number", "screen", "telephone"],
+ styles: ["solid"],
+ label: "Mobile Phone"
+}, {
+ name: "mobile-alt",
+ search: ["apple", "call", "cell phone", "cellphone", "device", "iphone", "number", "screen", "telephone"],
+ styles: ["solid"],
+ label: "Alternate Mobile"
+}, {
+ name: "modx",
+ search: [],
+ styles: ["brands"],
+ label: "MODX"
+}, {
+ name: "monero",
+ search: [],
+ styles: ["brands"],
+ label: "Monero"
+}, {
+ name: "money-bill",
+ search: ["buy", "cash", "checkout", "money", "payment", "price", "purchase"],
+ styles: ["solid"],
+ label: "Money Bill"
+}, {
+ name: "money-bill-alt",
+ search: ["buy", "cash", "checkout", "money", "payment", "price", "purchase"],
+ styles: ["solid", "regular"],
+ label: "Alternate Money Bill"
+}, {
+ name: "money-bill-wave",
+ search: ["buy", "cash", "checkout", "money", "payment", "price", "purchase"],
+ styles: ["solid"],
+ label: "Wavy Money Bill"
+}, {
+ name: "money-bill-wave-alt",
+ search: ["buy", "cash", "checkout", "money", "payment", "price", "purchase"],
+ styles: ["solid"],
+ label: "Alternate Wavy Money Bill"
+}, {
+ name: "money-check",
+ search: ["bank check", "buy", "checkout", "cheque", "money", "payment", "price", "purchase"],
+ styles: ["solid"],
+ label: "Money Check"
+}, {
+ name: "money-check-alt",
+ search: ["bank check", "buy", "checkout", "cheque", "money", "payment", "price", "purchase"],
+ styles: ["solid"],
+ label: "Alternate Money Check"
+}, {
+ name: "monument",
+ search: ["building", "historic", "landmark", "memorable"],
+ styles: ["solid"],
+ label: "Monument"
+}, {
+ name: "moon",
+ search: ["contrast", "crescent", "dark", "lunar", "night"],
+ styles: ["solid", "regular"],
+ label: "Moon"
+}, {
+ name: "mortar-pestle",
+ search: ["crush", "culinary", "grind", "medical", "mix", "pharmacy", "prescription", "spices"],
+ styles: ["solid"],
+ label: "Mortar Pestle"
+}, {
+ name: "mosque",
+ search: ["building", "islam", "landmark", "muslim"],
+ styles: ["solid"],
+ label: "Mosque"
+}, {
+ name: "motorcycle",
+ search: ["bike", "machine", "transportation", "vehicle"],
+ styles: ["solid"],
+ label: "Motorcycle"
+}, {
+ name: "mountain",
+ search: ["glacier", "hiking", "hill", "landscape", "travel", "view"],
+ styles: ["solid"],
+ label: "Mountain"
+}, {
+ name: "mouse",
+ search: ["click", "computer", "cursor", "input", "peripheral"],
+ styles: ["solid"],
+ label: "Mouse"
+}, {
+ name: "mouse-pointer",
+ search: ["arrow", "cursor", "select"],
+ styles: ["solid"],
+ label: "Mouse Pointer"
+}, {
+ name: "mug-hot",
+ search: ["caliente", "cocoa", "coffee", "cup", "drink", "holiday", "hot chocolate", "steam", "tea", "warmth"],
+ styles: ["solid"],
+ label: "Mug Hot"
+}, {
+ name: "music",
+ search: ["lyrics", "melody", "note", "sing", "sound"],
+ styles: ["solid"],
+ label: "Music"
+}, {
+ name: "napster",
+ search: [],
+ styles: ["brands"],
+ label: "Napster"
+}, {
+ name: "neos",
+ search: [],
+ styles: ["brands"],
+ label: "Neos"
+}, {
+ name: "network-wired",
+ search: ["computer", "connect", "ethernet", "internet", "intranet"],
+ styles: ["solid"],
+ label: "Wired Network"
+}, {
+ name: "neuter",
+ search: [],
+ styles: ["solid"],
+ label: "Neuter"
+}, {
+ name: "newspaper",
+ search: ["article", "editorial", "headline", "journal", "journalism", "news", "press"],
+ styles: ["solid", "regular"],
+ label: "Newspaper"
+}, {
+ name: "nimblr",
+ search: [],
+ styles: ["brands"],
+ label: "Nimblr"
+}, {
+ name: "node",
+ search: [],
+ styles: ["brands"],
+ label: "Node.js"
+}, {
+ name: "node-js",
+ search: [],
+ styles: ["brands"],
+ label: "Node.js JS"
+}, {
+ name: "not-equal",
+ search: ["arithmetic", "compare", "math"],
+ styles: ["solid"],
+ label: "Not Equal"
+}, {
+ name: "notes-medical",
+ search: ["clipboard", "doctor", "ehr", "health", "history", "records"],
+ styles: ["solid"],
+ label: "Medical Notes"
+}, {
+ name: "npm",
+ search: [],
+ styles: ["brands"],
+ label: "npm"
+}, {
+ name: "ns8",
+ search: [],
+ styles: ["brands"],
+ label: "NS8"
+}, {
+ name: "nutritionix",
+ search: [],
+ styles: ["brands"],
+ label: "Nutritionix"
+}, {
+ name: "object-group",
+ search: ["combine", "copy", "design", "merge", "select"],
+ styles: ["solid", "regular"],
+ label: "Object Group"
+}, {
+ name: "object-ungroup",
+ search: ["copy", "design", "merge", "select", "separate"],
+ styles: ["solid", "regular"],
+ label: "Object Ungroup"
+}, {
+ name: "odnoklassniki",
+ search: [],
+ styles: ["brands"],
+ label: "Odnoklassniki"
+}, {
+ name: "odnoklassniki-square",
+ search: [],
+ styles: ["brands"],
+ label: "Odnoklassniki Square"
+}, {
+ name: "oil-can",
+ search: ["auto", "crude", "gasoline", "grease", "lubricate", "petroleum"],
+ styles: ["solid"],
+ label: "Oil Can"
+}, {
+ name: "old-republic",
+ search: ["politics", "star wars"],
+ styles: ["brands"],
+ label: "Old Republic"
+}, {
+ name: "om",
+ search: ["buddhism", "hinduism", "jainism", "mantra"],
+ styles: ["solid"],
+ label: "Om"
+}, {
+ name: "opencart",
+ search: [],
+ styles: ["brands"],
+ label: "OpenCart"
+}, {
+ name: "openid",
+ search: [],
+ styles: ["brands"],
+ label: "OpenID"
+}, {
+ name: "opera",
+ search: [],
+ styles: ["brands"],
+ label: "Opera"
+}, {
+ name: "optin-monster",
+ search: [],
+ styles: ["brands"],
+ label: "Optin Monster"
+}, {
+ name: "orcid",
+ search: [],
+ styles: ["brands"],
+ label: "ORCID"
+}, {
+ name: "osi",
+ search: [],
+ styles: ["brands"],
+ label: "Open Source Initiative"
+}, {
+ name: "otter",
+ search: ["animal", "badger", "fauna", "fur", "mammal", "marten"],
+ styles: ["solid"],
+ label: "Otter"
+}, {
+ name: "outdent",
+ search: ["align", "justify", "paragraph", "tab"],
+ styles: ["solid"],
+ label: "Outdent"
+}, {
+ name: "page4",
+ search: [],
+ styles: ["brands"],
+ label: "page4 Corporation"
+}, {
+ name: "pagelines",
+ search: ["eco", "flora", "leaf", "leaves", "nature", "plant", "tree"],
+ styles: ["brands"],
+ label: "Pagelines"
+}, {
+ name: "pager",
+ search: ["beeper", "cellphone", "communication"],
+ styles: ["solid"],
+ label: "Pager"
+}, {
+ name: "paint-brush",
+ search: ["acrylic", "art", "brush", "color", "fill", "paint", "pigment", "watercolor"],
+ styles: ["solid"],
+ label: "Paint Brush"
+}, {
+ name: "paint-roller",
+ search: ["acrylic", "art", "brush", "color", "fill", "paint", "pigment", "watercolor"],
+ styles: ["solid"],
+ label: "Paint Roller"
+}, {
+ name: "palette",
+ search: ["acrylic", "art", "brush", "color", "fill", "paint", "pigment", "watercolor"],
+ styles: ["solid"],
+ label: "Palette"
+}, {
+ name: "palfed",
+ search: [],
+ styles: ["brands"],
+ label: "Palfed"
+}, {
+ name: "pallet",
+ search: ["archive", "box", "inventory", "shipping", "warehouse"],
+ styles: ["solid"],
+ label: "Pallet"
+}, {
+ name: "paper-plane",
+ search: ["air", "float", "fold", "mail", "paper", "send"],
+ styles: ["solid", "regular"],
+ label: "Paper Plane"
+}, {
+ name: "paperclip",
+ search: ["attach", "attachment", "connect", "link"],
+ styles: ["solid"],
+ label: "Paperclip"
+}, {
+ name: "parachute-box",
+ search: ["aid", "assistance", "rescue", "supplies"],
+ styles: ["solid"],
+ label: "Parachute Box"
+}, {
+ name: "paragraph",
+ search: ["edit", "format", "text", "writing"],
+ styles: ["solid"],
+ label: "paragraph"
+}, {
+ name: "parking",
+ search: ["auto", "car", "garage", "meter"],
+ styles: ["solid"],
+ label: "Parking"
+}, {
+ name: "passport",
+ search: ["document", "id", "identification", "issued", "travel"],
+ styles: ["solid"],
+ label: "Passport"
+}, {
+ name: "pastafarianism",
+ search: ["agnosticism", "atheism", "flying spaghetti monster", "fsm"],
+ styles: ["solid"],
+ label: "Pastafarianism"
+}, {
+ name: "paste",
+ search: ["clipboard", "copy", "document", "paper"],
+ styles: ["solid"],
+ label: "Paste"
+}, {
+ name: "patreon",
+ search: [],
+ styles: ["brands"],
+ label: "Patreon"
+}, {
+ name: "pause",
+ search: ["hold", "wait"],
+ styles: ["solid"],
+ label: "pause"
+}, {
+ name: "pause-circle",
+ search: ["hold", "wait"],
+ styles: ["solid", "regular"],
+ label: "Pause Circle"
+}, {
+ name: "paw",
+ search: ["animal", "cat", "dog", "pet", "print"],
+ styles: ["solid"],
+ label: "Paw"
+}, {
+ name: "paypal",
+ search: [],
+ styles: ["brands"],
+ label: "Paypal"
+}, {
+ name: "peace",
+ search: ["serenity", "tranquility", "truce", "war"],
+ styles: ["solid"],
+ label: "Peace"
+}, {
+ name: "pen",
+ search: ["design", "edit", "update", "write"],
+ styles: ["solid"],
+ label: "Pen"
+}, {
+ name: "pen-alt",
+ search: ["design", "edit", "update", "write"],
+ styles: ["solid"],
+ label: "Alternate Pen"
+}, {
+ name: "pen-fancy",
+ search: ["design", "edit", "fountain pen", "update", "write"],
+ styles: ["solid"],
+ label: "Pen Fancy"
+}, {
+ name: "pen-nib",
+ search: ["design", "edit", "fountain pen", "update", "write"],
+ styles: ["solid"],
+ label: "Pen Nib"
+}, {
+ name: "pen-square",
+ search: ["edit", "pencil-square", "update", "write"],
+ styles: ["solid"],
+ label: "Pen Square"
+}, {
+ name: "pencil-alt",
+ search: ["design", "edit", "pencil", "update", "write"],
+ styles: ["solid"],
+ label: "Alternate Pencil"
+}, {
+ name: "pencil-ruler",
+ search: ["design", "draft", "draw", "pencil"],
+ styles: ["solid"],
+ label: "Pencil Ruler"
+}, {
+ name: "penny-arcade",
+ search: ["Dungeons & Dragons", "d&d", "dnd", "fantasy", "game", "gaming", "pax", "tabletop"],
+ styles: ["brands"],
+ label: "Penny Arcade"
+}, {
+ name: "people-arrows",
+ search: ["covid-19", "personal space", "social distance", "space", "spread", "users"],
+ styles: ["solid"],
+ label: "People Arrows"
+}, {
+ name: "people-carry",
+ search: ["box", "carry", "fragile", "help", "movers", "package"],
+ styles: ["solid"],
+ label: "People Carry"
+}, {
+ name: "pepper-hot",
+ search: ["buffalo wings", "capsicum", "chili", "chilli", "habanero", "jalapeno", "mexican", "spicy", "tabasco", "vegetable"],
+ styles: ["solid"],
+ label: "Hot Pepper"
+}, {
+ name: "percent",
+ search: ["discount", "fraction", "proportion", "rate", "ratio"],
+ styles: ["solid"],
+ label: "Percent"
+}, {
+ name: "percentage",
+ search: ["discount", "fraction", "proportion", "rate", "ratio"],
+ styles: ["solid"],
+ label: "Percentage"
+}, {
+ name: "periscope",
+ search: [],
+ styles: ["brands"],
+ label: "Periscope"
+}, {
+ name: "person-booth",
+ search: ["changing", "changing room", "election", "human", "person", "vote", "voting"],
+ styles: ["solid"],
+ label: "Person Entering Booth"
+}, {
+ name: "phabricator",
+ search: [],
+ styles: ["brands"],
+ label: "Phabricator"
+}, {
+ name: "phoenix-framework",
+ search: [],
+ styles: ["brands"],
+ label: "Phoenix Framework"
+}, {
+ name: "phoenix-squadron",
+ search: [],
+ styles: ["brands"],
+ label: "Phoenix Squadron"
+}, {
+ name: "phone",
+ search: ["call", "earphone", "number", "support", "telephone", "voice"],
+ styles: ["solid"],
+ label: "Phone"
+}, {
+ name: "phone-alt",
+ search: ["call", "earphone", "number", "support", "telephone", "voice"],
+ styles: ["solid"],
+ label: "Alternate Phone"
+}, {
+ name: "phone-slash",
+ search: ["call", "cancel", "earphone", "mute", "number", "support", "telephone", "voice"],
+ styles: ["solid"],
+ label: "Phone Slash"
+}, {
+ name: "phone-square",
+ search: ["call", "earphone", "number", "support", "telephone", "voice"],
+ styles: ["solid"],
+ label: "Phone Square"
+}, {
+ name: "phone-square-alt",
+ search: ["call", "earphone", "number", "support", "telephone", "voice"],
+ styles: ["solid"],
+ label: "Alternate Phone Square"
+}, {
+ name: "phone-volume",
+ search: ["call", "earphone", "number", "sound", "support", "telephone", "voice", "volume-control-phone"],
+ styles: ["solid"],
+ label: "Phone Volume"
+}, {
+ name: "photo-video",
+ search: ["av", "film", "image", "library", "media"],
+ styles: ["solid"],
+ label: "Photo Video"
+}, {
+ name: "php",
+ search: [],
+ styles: ["brands"],
+ label: "PHP"
+}, {
+ name: "pied-piper",
+ search: [],
+ styles: ["brands"],
+ label: "Pied Piper Logo"
+}, {
+ name: "pied-piper-alt",
+ search: [],
+ styles: ["brands"],
+ label: "Alternate Pied Piper Logo (Old)"
+}, {
+ name: "pied-piper-hat",
+ search: ["clothing"],
+ styles: ["brands"],
+ label: "Pied Piper Hat (Old)"
+}, {
+ name: "pied-piper-pp",
+ search: [],
+ styles: ["brands"],
+ label: "Pied Piper PP Logo (Old)"
+}, {
+ name: "pied-piper-square",
+ search: [],
+ styles: ["brands"],
+ label: "Pied Piper Square Logo (Old)"
+}, {
+ name: "piggy-bank",
+ search: ["bank", "save", "savings"],
+ styles: ["solid"],
+ label: "Piggy Bank"
+}, {
+ name: "pills",
+ search: ["drugs", "medicine", "prescription", "tablets"],
+ styles: ["solid"],
+ label: "Pills"
+}, {
+ name: "pinterest",
+ search: [],
+ styles: ["brands"],
+ label: "Pinterest"
+}, {
+ name: "pinterest-p",
+ search: [],
+ styles: ["brands"],
+ label: "Pinterest P"
+}, {
+ name: "pinterest-square",
+ search: [],
+ styles: ["brands"],
+ label: "Pinterest Square"
+}, {
+ name: "pizza-slice",
+ search: ["cheese", "chicago", "italian", "mozzarella", "new york", "pepperoni", "pie", "slice", "teenage mutant ninja turtles", "tomato"],
+ styles: ["solid"],
+ label: "Pizza Slice"
+}, {
+ name: "place-of-worship",
+ search: ["building", "church", "holy", "mosque", "synagogue"],
+ styles: ["solid"],
+ label: "Place of Worship"
+}, {
+ name: "plane",
+ search: ["airplane", "destination", "fly", "location", "mode", "travel", "trip"],
+ styles: ["solid"],
+ label: "plane"
+}, {
+ name: "plane-arrival",
+ search: ["airplane", "arriving", "destination", "fly", "land", "landing", "location", "mode", "travel", "trip"],
+ styles: ["solid"],
+ label: "Plane Arrival"
+}, {
+ name: "plane-departure",
+ search: ["airplane", "departing", "destination", "fly", "location", "mode", "take off", "taking off", "travel", "trip"],
+ styles: ["solid"],
+ label: "Plane Departure"
+}, {
+ name: "plane-slash",
+ search: ["airplane mode", "canceled", "covid-19", "delayed", "grounded", "travel"],
+ styles: ["solid"],
+ label: "Plane Slash"
+}, {
+ name: "play",
+ search: ["audio", "music", "playing", "sound", "start", "video"],
+ styles: ["solid"],
+ label: "play"
+}, {
+ name: "play-circle",
+ search: ["audio", "music", "playing", "sound", "start", "video"],
+ styles: ["solid", "regular"],
+ label: "Play Circle"
+}, {
+ name: "playstation",
+ search: [],
+ styles: ["brands"],
+ label: "PlayStation"
+}, {
+ name: "plug",
+ search: ["connect", "electric", "online", "power"],
+ styles: ["solid"],
+ label: "Plug"
+}, {
+ name: "plus",
+ search: ["add", "create", "expand", "new", "positive", "shape"],
+ styles: ["solid"],
+ label: "plus"
+}, {
+ name: "plus-circle",
+ search: ["add", "create", "expand", "new", "positive", "shape"],
+ styles: ["solid"],
+ label: "Plus Circle"
+}, {
+ name: "plus-square",
+ search: ["add", "create", "expand", "new", "positive", "shape"],
+ styles: ["solid", "regular"],
+ label: "Plus Square"
+}, {
+ name: "podcast",
+ search: ["audio", "broadcast", "music", "sound"],
+ styles: ["solid"],
+ label: "Podcast"
+}, {
+ name: "poll",
+ search: ["results", "survey", "trend", "vote", "voting"],
+ styles: ["solid"],
+ label: "Poll"
+}, {
+ name: "poll-h",
+ search: ["results", "survey", "trend", "vote", "voting"],
+ styles: ["solid"],
+ label: "Poll H"
+}, {
+ name: "poo",
+ search: ["crap", "poop", "shit", "smile", "turd"],
+ styles: ["solid"],
+ label: "Poo"
+}, {
+ name: "poo-storm",
+ search: ["bolt", "cloud", "euphemism", "lightning", "mess", "poop", "shit", "turd"],
+ styles: ["solid"],
+ label: "Poo Storm"
+}, {
+ name: "poop",
+ search: ["crap", "poop", "shit", "smile", "turd"],
+ styles: ["solid"],
+ label: "Poop"
+}, {
+ name: "portrait",
+ search: ["id", "image", "photo", "picture", "selfie"],
+ styles: ["solid"],
+ label: "Portrait"
+}, {
+ name: "pound-sign",
+ search: ["currency", "gbp", "money"],
+ styles: ["solid"],
+ label: "Pound Sign"
+}, {
+ name: "power-off",
+ search: ["cancel", "computer", "on", "reboot", "restart"],
+ styles: ["solid"],
+ label: "Power Off"
+}, {
+ name: "pray",
+ search: ["kneel", "preach", "religion", "worship"],
+ styles: ["solid"],
+ label: "Pray"
+}, {
+ name: "praying-hands",
+ search: ["kneel", "preach", "religion", "worship"],
+ styles: ["solid"],
+ label: "Praying Hands"
+}, {
+ name: "prescription",
+ search: ["drugs", "medical", "medicine", "pharmacy", "rx"],
+ styles: ["solid"],
+ label: "Prescription"
+}, {
+ name: "prescription-bottle",
+ search: ["drugs", "medical", "medicine", "pharmacy", "rx"],
+ styles: ["solid"],
+ label: "Prescription Bottle"
+}, {
+ name: "prescription-bottle-alt",
+ search: ["drugs", "medical", "medicine", "pharmacy", "rx"],
+ styles: ["solid"],
+ label: "Alternate Prescription Bottle"
+}, {
+ name: "print",
+ search: ["business", "copy", "document", "office", "paper"],
+ styles: ["solid"],
+ label: "print"
+}, {
+ name: "procedures",
+ search: ["EKG", "bed", "electrocardiogram", "health", "hospital", "life", "patient", "vital"],
+ styles: ["solid"],
+ label: "Procedures"
+}, {
+ name: "product-hunt",
+ search: [],
+ styles: ["brands"],
+ label: "Product Hunt"
+}, {
+ name: "project-diagram",
+ search: ["chart", "graph", "network", "pert"],
+ styles: ["solid"],
+ label: "Project Diagram"
+}, {
+ name: "pump-medical",
+ search: ["anti-bacterial", "clean", "covid-19", "disinfect", "hygiene", "medical grade", "sanitizer", "soap"],
+ styles: ["solid"],
+ label: "Pump Medical"
+}, {
+ name: "pump-soap",
+ search: ["anti-bacterial", "clean", "covid-19", "disinfect", "hygiene", "sanitizer", "soap"],
+ styles: ["solid"],
+ label: "Pump Soap"
+}, {
+ name: "pushed",
+ search: [],
+ styles: ["brands"],
+ label: "Pushed"
+}, {
+ name: "puzzle-piece",
+ search: ["add-on", "addon", "game", "section"],
+ styles: ["solid"],
+ label: "Puzzle Piece"
+}, {
+ name: "python",
+ search: [],
+ styles: ["brands"],
+ label: "Python"
+}, {
+ name: "qq",
+ search: [],
+ styles: ["brands"],
+ label: "QQ"
+}, {
+ name: "qrcode",
+ search: ["barcode", "info", "information", "scan"],
+ styles: ["solid"],
+ label: "qrcode"
+}, {
+ name: "question",
+ search: ["help", "information", "support", "unknown"],
+ styles: ["solid"],
+ label: "Question"
+}, {
+ name: "question-circle",
+ search: ["help", "information", "support", "unknown"],
+ styles: ["solid", "regular"],
+ label: "Question Circle"
+}, {
+ name: "quidditch",
+ search: ["ball", "bludger", "broom", "golden snitch", "harry potter", "hogwarts", "quaffle", "sport", "wizard"],
+ styles: ["solid"],
+ label: "Quidditch"
+}, {
+ name: "quinscape",
+ search: [],
+ styles: ["brands"],
+ label: "QuinScape"
+}, {
+ name: "quora",
+ search: [],
+ styles: ["brands"],
+ label: "Quora"
+}, {
+ name: "quote-left",
+ search: ["mention", "note", "phrase", "text", "type"],
+ styles: ["solid"],
+ label: "quote-left"
+}, {
+ name: "quote-right",
+ search: ["mention", "note", "phrase", "text", "type"],
+ styles: ["solid"],
+ label: "quote-right"
+}, {
+ name: "quran",
+ search: ["book", "islam", "muslim", "religion"],
+ styles: ["solid"],
+ label: "Quran"
+}, {
+ name: "r-project",
+ search: [],
+ styles: ["brands"],
+ label: "R Project"
+}, {
+ name: "radiation",
+ search: ["danger", "dangerous", "deadly", "hazard", "nuclear", "radioactive", "warning"],
+ styles: ["solid"],
+ label: "Radiation"
+}, {
+ name: "radiation-alt",
+ search: ["danger", "dangerous", "deadly", "hazard", "nuclear", "radioactive", "warning"],
+ styles: ["solid"],
+ label: "Alternate Radiation"
+}, {
+ name: "rainbow",
+ search: ["gold", "leprechaun", "prism", "rain", "sky"],
+ styles: ["solid"],
+ label: "Rainbow"
+}, {
+ name: "random",
+ search: ["arrows", "shuffle", "sort", "swap", "switch", "transfer"],
+ styles: ["solid"],
+ label: "random"
+}, {
+ name: "raspberry-pi",
+ search: [],
+ styles: ["brands"],
+ label: "Raspberry Pi"
+}, {
+ name: "ravelry",
+ search: [],
+ styles: ["brands"],
+ label: "Ravelry"
+}, {
+ name: "react",
+ search: [],
+ styles: ["brands"],
+ label: "React"
+}, {
+ name: "reacteurope",
+ search: [],
+ styles: ["brands"],
+ label: "ReactEurope"
+}, {
+ name: "readme",
+ search: [],
+ styles: ["brands"],
+ label: "ReadMe"
+}, {
+ name: "rebel",
+ search: [],
+ styles: ["brands"],
+ label: "Rebel Alliance"
+}, {
+ name: "receipt",
+ search: ["check", "invoice", "money", "pay", "table"],
+ styles: ["solid"],
+ label: "Receipt"
+}, {
+ name: "record-vinyl",
+ search: ["LP", "album", "analog", "music", "phonograph", "sound"],
+ styles: ["solid"],
+ label: "Record Vinyl"
+}, {
+ name: "recycle",
+ search: ["Waste", "compost", "garbage", "reuse", "trash"],
+ styles: ["solid"],
+ label: "Recycle"
+}, {
+ name: "red-river",
+ search: [],
+ styles: ["brands"],
+ label: "red river"
+}, {
+ name: "reddit",
+ search: [],
+ styles: ["brands"],
+ label: "reddit Logo"
+}, {
+ name: "reddit-alien",
+ search: [],
+ styles: ["brands"],
+ label: "reddit Alien"
+}, {
+ name: "reddit-square",
+ search: [],
+ styles: ["brands"],
+ label: "reddit Square"
+}, {
+ name: "redhat",
+ search: ["linux", "operating system", "os"],
+ styles: ["brands"],
+ label: "Redhat"
+}, {
+ name: "redo",
+ search: ["forward", "refresh", "reload", "repeat"],
+ styles: ["solid"],
+ label: "Redo"
+}, {
+ name: "redo-alt",
+ search: ["forward", "refresh", "reload", "repeat"],
+ styles: ["solid"],
+ label: "Alternate Redo"
+}, {
+ name: "registered",
+ search: ["copyright", "mark", "trademark"],
+ styles: ["solid", "regular"],
+ label: "Registered Trademark"
+}, {
+ name: "remove-format",
+ search: ["cancel", "font", "format", "remove", "style", "text"],
+ styles: ["solid"],
+ label: "Remove Format"
+}, {
+ name: "renren",
+ search: [],
+ styles: ["brands"],
+ label: "Renren"
+}, {
+ name: "reply",
+ search: ["mail", "message", "respond"],
+ styles: ["solid"],
+ label: "Reply"
+}, {
+ name: "reply-all",
+ search: ["mail", "message", "respond"],
+ styles: ["solid"],
+ label: "reply-all"
+}, {
+ name: "replyd",
+ search: [],
+ styles: ["brands"],
+ label: "replyd"
+}, {
+ name: "republican",
+ search: ["american", "conservative", "election", "elephant", "politics", "republican party", "right", "right-wing", "usa"],
+ styles: ["solid"],
+ label: "Republican"
+}, {
+ name: "researchgate",
+ search: [],
+ styles: ["brands"],
+ label: "Researchgate"
+}, {
+ name: "resolving",
+ search: [],
+ styles: ["brands"],
+ label: "Resolving"
+}, {
+ name: "restroom",
+ search: ["bathroom", "john", "loo", "potty", "washroom", "waste", "wc"],
+ styles: ["solid"],
+ label: "Restroom"
+}, {
+ name: "retweet",
+ search: ["refresh", "reload", "share", "swap"],
+ styles: ["solid"],
+ label: "Retweet"
+}, {
+ name: "rev",
+ search: [],
+ styles: ["brands"],
+ label: "Rev.io"
+}, {
+ name: "ribbon",
+ search: ["badge", "cause", "lapel", "pin"],
+ styles: ["solid"],
+ label: "Ribbon"
+}, {
+ name: "ring",
+ search: ["Dungeons & Dragons", "Gollum", "band", "binding", "d&d", "dnd", "engagement", "fantasy", "gold", "jewelry", "marriage", "precious"],
+ styles: ["solid"],
+ label: "Ring"
+}, {
+ name: "road",
+ search: ["highway", "map", "pavement", "route", "street", "travel"],
+ styles: ["solid"],
+ label: "road"
+}, {
+ name: "robot",
+ search: ["android", "automate", "computer", "cyborg"],
+ styles: ["solid"],
+ label: "Robot"
+}, {
+ name: "rocket",
+ search: ["aircraft", "app", "jet", "launch", "nasa", "space"],
+ styles: ["solid"],
+ label: "rocket"
+}, {
+ name: "rocketchat",
+ search: [],
+ styles: ["brands"],
+ label: "Rocket.Chat"
+}, {
+ name: "rockrms",
+ search: [],
+ styles: ["brands"],
+ label: "Rockrms"
+}, {
+ name: "route",
+ search: ["directions", "navigation", "travel"],
+ styles: ["solid"],
+ label: "Route"
+}, {
+ name: "rss",
+ search: ["blog", "feed", "journal", "news", "writing"],
+ styles: ["solid"],
+ label: "rss"
+}, {
+ name: "rss-square",
+ search: ["blog", "feed", "journal", "news", "writing"],
+ styles: ["solid"],
+ label: "RSS Square"
+}, {
+ name: "ruble-sign",
+ search: ["currency", "money", "rub"],
+ styles: ["solid"],
+ label: "Ruble Sign"
+}, {
+ name: "ruler",
+ search: ["design", "draft", "length", "measure", "planning"],
+ styles: ["solid"],
+ label: "Ruler"
+}, {
+ name: "ruler-combined",
+ search: ["design", "draft", "length", "measure", "planning"],
+ styles: ["solid"],
+ label: "Ruler Combined"
+}, {
+ name: "ruler-horizontal",
+ search: ["design", "draft", "length", "measure", "planning"],
+ styles: ["solid"],
+ label: "Ruler Horizontal"
+}, {
+ name: "ruler-vertical",
+ search: ["design", "draft", "length", "measure", "planning"],
+ styles: ["solid"],
+ label: "Ruler Vertical"
+}, {
+ name: "running",
+ search: ["exercise", "health", "jog", "person", "run", "sport", "sprint"],
+ styles: ["solid"],
+ label: "Running"
+}, {
+ name: "rupee-sign",
+ search: ["currency", "indian", "inr", "money"],
+ styles: ["solid"],
+ label: "Indian Rupee Sign"
+}, {
+ name: "sad-cry",
+ search: ["emoticon", "face", "tear", "tears"],
+ styles: ["solid", "regular"],
+ label: "Crying Face"
+}, {
+ name: "sad-tear",
+ search: ["emoticon", "face", "tear", "tears"],
+ styles: ["solid", "regular"],
+ label: "Loudly Crying Face"
+}, {
+ name: "safari",
+ search: ["browser"],
+ styles: ["brands"],
+ label: "Safari"
+}, {
+ name: "salesforce",
+ search: [],
+ styles: ["brands"],
+ label: "Salesforce"
+}, {
+ name: "sass",
+ search: [],
+ styles: ["brands"],
+ label: "Sass"
+}, {
+ name: "satellite",
+ search: ["communications", "hardware", "orbit", "space"],
+ styles: ["solid"],
+ label: "Satellite"
+}, {
+ name: "satellite-dish",
+ search: ["SETI", "communications", "hardware", "receiver", "saucer", "signal", "space"],
+ styles: ["solid"],
+ label: "Satellite Dish"
+}, {
+ name: "save",
+ search: ["disk", "download", "floppy", "floppy-o"],
+ styles: ["solid", "regular"],
+ label: "Save"
+}, {
+ name: "schlix",
+ search: [],
+ styles: ["brands"],
+ label: "SCHLIX"
+}, {
+ name: "school",
+ search: ["building", "education", "learn", "student", "teacher"],
+ styles: ["solid"],
+ label: "School"
+}, {
+ name: "screwdriver",
+ search: ["admin", "fix", "mechanic", "repair", "settings", "tool"],
+ styles: ["solid"],
+ label: "Screwdriver"
+}, {
+ name: "scribd",
+ search: [],
+ styles: ["brands"],
+ label: "Scribd"
+}, {
+ name: "scroll",
+ search: ["Dungeons & Dragons", "announcement", "d&d", "dnd", "fantasy", "paper", "script"],
+ styles: ["solid"],
+ label: "Scroll"
+}, {
+ name: "sd-card",
+ search: ["image", "memory", "photo", "save"],
+ styles: ["solid"],
+ label: "Sd Card"
+}, {
+ name: "search",
+ search: ["bigger", "enlarge", "find", "magnify", "preview", "zoom"],
+ styles: ["solid"],
+ label: "Search"
+}, {
+ name: "search-dollar",
+ search: ["bigger", "enlarge", "find", "magnify", "money", "preview", "zoom"],
+ styles: ["solid"],
+ label: "Search Dollar"
+}, {
+ name: "search-location",
+ search: ["bigger", "enlarge", "find", "magnify", "preview", "zoom"],
+ styles: ["solid"],
+ label: "Search Location"
+}, {
+ name: "search-minus",
+ search: ["minify", "negative", "smaller", "zoom", "zoom out"],
+ styles: ["solid"],
+ label: "Search Minus"
+}, {
+ name: "search-plus",
+ search: ["bigger", "enlarge", "magnify", "positive", "zoom", "zoom in"],
+ styles: ["solid"],
+ label: "Search Plus"
+}, {
+ name: "searchengin",
+ search: [],
+ styles: ["brands"],
+ label: "Searchengin"
+}, {
+ name: "seedling",
+ search: ["flora", "grow", "plant", "vegan"],
+ styles: ["solid"],
+ label: "Seedling"
+}, {
+ name: "sellcast",
+ search: ["eercast"],
+ styles: ["brands"],
+ label: "Sellcast"
+}, {
+ name: "sellsy",
+ search: [],
+ styles: ["brands"],
+ label: "Sellsy"
+}, {
+ name: "server",
+ search: ["computer", "cpu", "database", "hardware", "network"],
+ styles: ["solid"],
+ label: "Server"
+}, {
+ name: "servicestack",
+ search: [],
+ styles: ["brands"],
+ label: "Servicestack"
+}, {
+ name: "shapes",
+ search: ["blocks", "build", "circle", "square", "triangle"],
+ styles: ["solid"],
+ label: "Shapes"
+}, {
+ name: "share",
+ search: ["forward", "save", "send", "social"],
+ styles: ["solid"],
+ label: "Share"
+}, {
+ name: "share-alt",
+ search: ["forward", "save", "send", "social"],
+ styles: ["solid"],
+ label: "Alternate Share"
+}, {
+ name: "share-alt-square",
+ search: ["forward", "save", "send", "social"],
+ styles: ["solid"],
+ label: "Alternate Share Square"
+}, {
+ name: "share-square",
+ search: ["forward", "save", "send", "social"],
+ styles: ["solid", "regular"],
+ label: "Share Square"
+}, {
+ name: "shekel-sign",
+ search: ["currency", "ils", "money"],
+ styles: ["solid"],
+ label: "Shekel Sign"
+}, {
+ name: "shield-alt",
+ search: ["achievement", "award", "block", "defend", "security", "winner"],
+ styles: ["solid"],
+ label: "Alternate Shield"
+}, {
+ name: "shield-virus",
+ search: ["antibodies", "barrier", "covid-19", "health", "protect"],
+ styles: ["solid"],
+ label: "Shield Virus"
+}, {
+ name: "ship",
+ search: ["boat", "sea", "water"],
+ styles: ["solid"],
+ label: "Ship"
+}, {
+ name: "shipping-fast",
+ search: ["express", "fedex", "mail", "overnight", "package", "ups"],
+ styles: ["solid"],
+ label: "Shipping Fast"
+}, {
+ name: "shirtsinbulk",
+ search: [],
+ styles: ["brands"],
+ label: "Shirts in Bulk"
+}, {
+ name: "shoe-prints",
+ search: ["feet", "footprints", "steps", "walk"],
+ styles: ["solid"],
+ label: "Shoe Prints"
+}, {
+ name: "shopify",
+ search: [],
+ styles: ["brands"],
+ label: "Shopify"
+}, {
+ name: "shopping-bag",
+ search: ["buy", "checkout", "grocery", "payment", "purchase"],
+ styles: ["solid"],
+ label: "Shopping Bag"
+}, {
+ name: "shopping-basket",
+ search: ["buy", "checkout", "grocery", "payment", "purchase"],
+ styles: ["solid"],
+ label: "Shopping Basket"
+}, {
+ name: "shopping-cart",
+ search: ["buy", "checkout", "grocery", "payment", "purchase"],
+ styles: ["solid"],
+ label: "shopping-cart"
+}, {
+ name: "shopware",
+ search: [],
+ styles: ["brands"],
+ label: "Shopware"
+}, {
+ name: "shower",
+ search: ["bath", "clean", "faucet", "water"],
+ styles: ["solid"],
+ label: "Shower"
+}, {
+ name: "shuttle-van",
+ search: ["airport", "machine", "public-transportation", "transportation", "travel", "vehicle"],
+ styles: ["solid"],
+ label: "Shuttle Van"
+}, {
+ name: "sign",
+ search: ["directions", "real estate", "signage", "wayfinding"],
+ styles: ["solid"],
+ label: "Sign"
+}, {
+ name: "sign-in-alt",
+ search: ["arrow", "enter", "join", "log in", "login", "sign in", "sign up", "sign-in", "signin", "signup"],
+ styles: ["solid"],
+ label: "Alternate Sign In"
+}, {
+ name: "sign-language",
+ search: ["Translate", "asl", "deaf", "hands"],
+ styles: ["solid"],
+ label: "Sign Language"
+}, {
+ name: "sign-out-alt",
+ search: ["arrow", "exit", "leave", "log out", "logout", "sign-out"],
+ styles: ["solid"],
+ label: "Alternate Sign Out"
+}, {
+ name: "signal",
+ search: ["bars", "graph", "online", "reception", "status"],
+ styles: ["solid"],
+ label: "signal"
+}, {
+ name: "signature",
+ search: ["John Hancock", "cursive", "name", "writing"],
+ styles: ["solid"],
+ label: "Signature"
+}, {
+ name: "sim-card",
+ search: ["hard drive", "hardware", "portable", "storage", "technology", "tiny"],
+ styles: ["solid"],
+ label: "SIM Card"
+}, {
+ name: "simplybuilt",
+ search: [],
+ styles: ["brands"],
+ label: "SimplyBuilt"
+}, {
+ name: "sistrix",
+ search: [],
+ styles: ["brands"],
+ label: "SISTRIX"
+}, {
+ name: "sitemap",
+ search: ["directory", "hierarchy", "ia", "information architecture", "organization"],
+ styles: ["solid"],
+ label: "Sitemap"
+}, {
+ name: "sith",
+ search: [],
+ styles: ["brands"],
+ label: "Sith"
+}, {
+ name: "skating",
+ search: ["activity", "figure skating", "fitness", "ice", "person", "winter"],
+ styles: ["solid"],
+ label: "Skating"
+}, {
+ name: "sketch",
+ search: ["app", "design", "interface"],
+ styles: ["brands"],
+ label: "Sketch"
+}, {
+ name: "skiing",
+ search: ["activity", "downhill", "fast", "fitness", "olympics", "outdoors", "person", "seasonal", "slalom"],
+ styles: ["solid"],
+ label: "Skiing"
+}, {
+ name: "skiing-nordic",
+ search: ["activity", "cross country", "fitness", "outdoors", "person", "seasonal"],
+ styles: ["solid"],
+ label: "Skiing Nordic"
+}, {
+ name: "skull",
+ search: ["bones", "skeleton", "x-ray", "yorick"],
+ styles: ["solid"],
+ label: "Skull"
+}, {
+ name: "skull-crossbones",
+ search: ["Dungeons & Dragons", "alert", "bones", "d&d", "danger", "dead", "deadly", "death", "dnd", "fantasy", "halloween", "holiday", "jolly-roger", "pirate", "poison", "skeleton", "warning"],
+ styles: ["solid"],
+ label: "Skull & Crossbones"
+}, {
+ name: "skyatlas",
+ search: [],
+ styles: ["brands"],
+ label: "skyatlas"
+}, {
+ name: "skype",
+ search: [],
+ styles: ["brands"],
+ label: "Skype"
+}, {
+ name: "slack",
+ search: ["anchor", "hash", "hashtag"],
+ styles: ["brands"],
+ label: "Slack Logo"
+}, {
+ name: "slack-hash",
+ search: ["anchor", "hash", "hashtag"],
+ styles: ["brands"],
+ label: "Slack Hashtag"
+}, {
+ name: "slash",
+ search: ["cancel", "close", "mute", "off", "stop", "x"],
+ styles: ["solid"],
+ label: "Slash"
+}, {
+ name: "sleigh",
+ search: ["christmas", "claus", "fly", "holiday", "santa", "sled", "snow", "xmas"],
+ styles: ["solid"],
+ label: "Sleigh"
+}, {
+ name: "sliders-h",
+ search: ["adjust", "settings", "sliders", "toggle"],
+ styles: ["solid"],
+ label: "Horizontal Sliders"
+}, {
+ name: "slideshare",
+ search: [],
+ styles: ["brands"],
+ label: "Slideshare"
+}, {
+ name: "smile",
+ search: ["approve", "emoticon", "face", "happy", "rating", "satisfied"],
+ styles: ["solid", "regular"],
+ label: "Smiling Face"
+}, {
+ name: "smile-beam",
+ search: ["emoticon", "face", "happy", "positive"],
+ styles: ["solid", "regular"],
+ label: "Beaming Face With Smiling Eyes"
+}, {
+ name: "smile-wink",
+ search: ["emoticon", "face", "happy", "hint", "joke"],
+ styles: ["solid", "regular"],
+ label: "Winking Face"
+}, {
+ name: "smog",
+ search: ["dragon", "fog", "haze", "pollution", "smoke", "weather"],
+ styles: ["solid"],
+ label: "Smog"
+}, {
+ name: "smoking",
+ search: ["cancer", "cigarette", "nicotine", "smoking status", "tobacco"],
+ styles: ["solid"],
+ label: "Smoking"
+}, {
+ name: "smoking-ban",
+ search: ["ban", "cancel", "no smoking", "non-smoking"],
+ styles: ["solid"],
+ label: "Smoking Ban"
+}, {
+ name: "sms",
+ search: ["chat", "conversation", "message", "mobile", "notification", "phone", "sms", "texting"],
+ styles: ["solid"],
+ label: "SMS"
+}, {
+ name: "snapchat",
+ search: [],
+ styles: ["brands"],
+ label: "Snapchat"
+}, {
+ name: "snapchat-ghost",
+ search: [],
+ styles: ["brands"],
+ label: "Snapchat Ghost"
+}, {
+ name: "snapchat-square",
+ search: [],
+ styles: ["brands"],
+ label: "Snapchat Square"
+}, {
+ name: "snowboarding",
+ search: ["activity", "fitness", "olympics", "outdoors", "person"],
+ styles: ["solid"],
+ label: "Snowboarding"
+}, {
+ name: "snowflake",
+ search: ["precipitation", "rain", "winter"],
+ styles: ["solid", "regular"],
+ label: "Snowflake"
+}, {
+ name: "snowman",
+ search: ["decoration", "frost", "frosty", "holiday"],
+ styles: ["solid"],
+ label: "Snowman"
+}, {
+ name: "snowplow",
+ search: ["clean up", "cold", "road", "storm", "winter"],
+ styles: ["solid"],
+ label: "Snowplow"
+}, {
+ name: "soap",
+ search: ["bubbles", "clean", "covid-19", "hygiene", "wash"],
+ styles: ["solid"],
+ label: "Soap"
+}, {
+ name: "socks",
+ search: ["business socks", "business time", "clothing", "feet", "flight of the conchords", "wednesday"],
+ styles: ["solid"],
+ label: "Socks"
+}, {
+ name: "solar-panel",
+ search: ["clean", "eco-friendly", "energy", "green", "sun"],
+ styles: ["solid"],
+ label: "Solar Panel"
+}, {
+ name: "sort",
+ search: ["filter", "order"],
+ styles: ["solid"],
+ label: "Sort"
+}, {
+ name: "sort-alpha-down",
+ search: ["alphabetical", "arrange", "filter", "order", "sort-alpha-asc"],
+ styles: ["solid"],
+ label: "Sort Alphabetical Down"
+}, {
+ name: "sort-alpha-down-alt",
+ search: ["alphabetical", "arrange", "filter", "order", "sort-alpha-asc"],
+ styles: ["solid"],
+ label: "Alternate Sort Alphabetical Down"
+}, {
+ name: "sort-alpha-up",
+ search: ["alphabetical", "arrange", "filter", "order", "sort-alpha-desc"],
+ styles: ["solid"],
+ label: "Sort Alphabetical Up"
+}, {
+ name: "sort-alpha-up-alt",
+ search: ["alphabetical", "arrange", "filter", "order", "sort-alpha-desc"],
+ styles: ["solid"],
+ label: "Alternate Sort Alphabetical Up"
+}, {
+ name: "sort-amount-down",
+ search: ["arrange", "filter", "number", "order", "sort-amount-asc"],
+ styles: ["solid"],
+ label: "Sort Amount Down"
+}, {
+ name: "sort-amount-down-alt",
+ search: ["arrange", "filter", "order", "sort-amount-asc"],
+ styles: ["solid"],
+ label: "Alternate Sort Amount Down"
+}, {
+ name: "sort-amount-up",
+ search: ["arrange", "filter", "order", "sort-amount-desc"],
+ styles: ["solid"],
+ label: "Sort Amount Up"
+}, {
+ name: "sort-amount-up-alt",
+ search: ["arrange", "filter", "order", "sort-amount-desc"],
+ styles: ["solid"],
+ label: "Alternate Sort Amount Up"
+}, {
+ name: "sort-down",
+ search: ["arrow", "descending", "filter", "order", "sort-desc"],
+ styles: ["solid"],
+ label: "Sort Down (Descending)"
+}, {
+ name: "sort-numeric-down",
+ search: ["arrange", "filter", "numbers", "order", "sort-numeric-asc"],
+ styles: ["solid"],
+ label: "Sort Numeric Down"
+}, {
+ name: "sort-numeric-down-alt",
+ search: ["arrange", "filter", "numbers", "order", "sort-numeric-asc"],
+ styles: ["solid"],
+ label: "Alternate Sort Numeric Down"
+}, {
+ name: "sort-numeric-up",
+ search: ["arrange", "filter", "numbers", "order", "sort-numeric-desc"],
+ styles: ["solid"],
+ label: "Sort Numeric Up"
+}, {
+ name: "sort-numeric-up-alt",
+ search: ["arrange", "filter", "numbers", "order", "sort-numeric-desc"],
+ styles: ["solid"],
+ label: "Alternate Sort Numeric Up"
+}, {
+ name: "sort-up",
+ search: ["arrow", "ascending", "filter", "order", "sort-asc"],
+ styles: ["solid"],
+ label: "Sort Up (Ascending)"
+}, {
+ name: "soundcloud",
+ search: [],
+ styles: ["brands"],
+ label: "SoundCloud"
+}, {
+ name: "sourcetree",
+ search: [],
+ styles: ["brands"],
+ label: "Sourcetree"
+}, {
+ name: "spa",
+ search: ["flora", "massage", "mindfulness", "plant", "wellness"],
+ styles: ["solid"],
+ label: "Spa"
+}, {
+ name: "space-shuttle",
+ search: ["astronaut", "machine", "nasa", "rocket", "space", "transportation"],
+ styles: ["solid"],
+ label: "Space Shuttle"
+}, {
+ name: "speakap",
+ search: [],
+ styles: ["brands"],
+ label: "Speakap"
+}, {
+ name: "speaker-deck",
+ search: [],
+ styles: ["brands"],
+ label: "Speaker Deck"
+}, {
+ name: "spell-check",
+ search: ["dictionary", "edit", "editor", "grammar", "text"],
+ styles: ["solid"],
+ label: "Spell Check"
+}, {
+ name: "spider",
+ search: ["arachnid", "bug", "charlotte", "crawl", "eight", "halloween"],
+ styles: ["solid"],
+ label: "Spider"
+}, {
+ name: "spinner",
+ search: ["circle", "loading", "progress"],
+ styles: ["solid"],
+ label: "Spinner"
+}, {
+ name: "splotch",
+ search: ["Ink", "blob", "blotch", "glob", "stain"],
+ styles: ["solid"],
+ label: "Splotch"
+}, {
+ name: "spotify",
+ search: [],
+ styles: ["brands"],
+ label: "Spotify"
+}, {
+ name: "spray-can",
+ search: ["Paint", "aerosol", "design", "graffiti", "tag"],
+ styles: ["solid"],
+ label: "Spray Can"
+}, {
+ name: "square",
+ search: ["block", "box", "shape"],
+ styles: ["solid", "regular"],
+ label: "Square"
+}, {
+ name: "square-full",
+ search: ["block", "box", "shape"],
+ styles: ["solid"],
+ label: "Square Full"
+}, {
+ name: "square-root-alt",
+ search: ["arithmetic", "calculus", "division", "math"],
+ styles: ["solid"],
+ label: "Alternate Square Root"
+}, {
+ name: "squarespace",
+ search: [],
+ styles: ["brands"],
+ label: "Squarespace"
+}, {
+ name: "stack-exchange",
+ search: [],
+ styles: ["brands"],
+ label: "Stack Exchange"
+}, {
+ name: "stack-overflow",
+ search: [],
+ styles: ["brands"],
+ label: "Stack Overflow"
+}, {
+ name: "stackpath",
+ search: [],
+ styles: ["brands"],
+ label: "Stackpath"
+}, {
+ name: "stamp",
+ search: ["art", "certificate", "imprint", "rubber", "seal"],
+ styles: ["solid"],
+ label: "Stamp"
+}, {
+ name: "star",
+ search: ["achievement", "award", "favorite", "important", "night", "rating", "score"],
+ styles: ["solid", "regular"],
+ label: "Star"
+}, {
+ name: "star-and-crescent",
+ search: ["islam", "muslim", "religion"],
+ styles: ["solid"],
+ label: "Star and Crescent"
+}, {
+ name: "star-half",
+ search: ["achievement", "award", "rating", "score", "star-half-empty", "star-half-full"],
+ styles: ["solid", "regular"],
+ label: "star-half"
+}, {
+ name: "star-half-alt",
+ search: ["achievement", "award", "rating", "score", "star-half-empty", "star-half-full"],
+ styles: ["solid"],
+ label: "Alternate Star Half"
+}, {
+ name: "star-of-david",
+ search: ["jewish", "judaism", "religion"],
+ styles: ["solid"],
+ label: "Star of David"
+}, {
+ name: "star-of-life",
+ search: ["doctor", "emt", "first aid", "health", "medical"],
+ styles: ["solid"],
+ label: "Star of Life"
+}, {
+ name: "staylinked",
+ search: [],
+ styles: ["brands"],
+ label: "StayLinked"
+}, {
+ name: "steam",
+ search: [],
+ styles: ["brands"],
+ label: "Steam"
+}, {
+ name: "steam-square",
+ search: [],
+ styles: ["brands"],
+ label: "Steam Square"
+}, {
+ name: "steam-symbol",
+ search: [],
+ styles: ["brands"],
+ label: "Steam Symbol"
+}, {
+ name: "step-backward",
+ search: ["beginning", "first", "previous", "rewind", "start"],
+ styles: ["solid"],
+ label: "step-backward"
+}, {
+ name: "step-forward",
+ search: ["end", "last", "next"],
+ styles: ["solid"],
+ label: "step-forward"
+}, {
+ name: "stethoscope",
+ search: ["covid-19", "diagnosis", "doctor", "general practitioner", "hospital", "infirmary", "medicine", "office", "outpatient"],
+ styles: ["solid"],
+ label: "Stethoscope"
+}, {
+ name: "sticker-mule",
+ search: [],
+ styles: ["brands"],
+ label: "Sticker Mule"
+}, {
+ name: "sticky-note",
+ search: ["message", "note", "paper", "reminder", "sticker"],
+ styles: ["solid", "regular"],
+ label: "Sticky Note"
+}, {
+ name: "stop",
+ search: ["block", "box", "square"],
+ styles: ["solid"],
+ label: "stop"
+}, {
+ name: "stop-circle",
+ search: ["block", "box", "circle", "square"],
+ styles: ["solid", "regular"],
+ label: "Stop Circle"
+}, {
+ name: "stopwatch",
+ search: ["clock", "reminder", "time"],
+ styles: ["solid"],
+ label: "Stopwatch"
+}, {
+ name: "stopwatch-20",
+ search: ["ABCs", "countdown", "covid-19", "happy birthday", "i will survive", "reminder", "seconds", "time", "timer"],
+ styles: ["solid"],
+ label: "Stopwatch 20"
+}, {
+ name: "store",
+ search: ["building", "buy", "purchase", "shopping"],
+ styles: ["solid"],
+ label: "Store"
+}, {
+ name: "store-alt",
+ search: ["building", "buy", "purchase", "shopping"],
+ styles: ["solid"],
+ label: "Alternate Store"
+}, {
+ name: "store-alt-slash",
+ search: ["building", "buy", "closed", "covid-19", "purchase", "shopping"],
+ styles: ["solid"],
+ label: "Alternate Store Slash"
+}, {
+ name: "store-slash",
+ search: ["building", "buy", "closed", "covid-19", "purchase", "shopping"],
+ styles: ["solid"],
+ label: "Store Slash"
+}, {
+ name: "strava",
+ search: [],
+ styles: ["brands"],
+ label: "Strava"
+}, {
+ name: "stream",
+ search: ["flow", "list", "timeline"],
+ styles: ["solid"],
+ label: "Stream"
+}, {
+ name: "street-view",
+ search: ["directions", "location", "map", "navigation"],
+ styles: ["solid"],
+ label: "Street View"
+}, {
+ name: "strikethrough",
+ search: ["cancel", "edit", "font", "format", "text", "type"],
+ styles: ["solid"],
+ label: "Strikethrough"
+}, {
+ name: "stripe",
+ search: [],
+ styles: ["brands"],
+ label: "Stripe"
+}, {
+ name: "stripe-s",
+ search: [],
+ styles: ["brands"],
+ label: "Stripe S"
+}, {
+ name: "stroopwafel",
+ search: ["caramel", "cookie", "dessert", "sweets", "waffle"],
+ styles: ["solid"],
+ label: "Stroopwafel"
+}, {
+ name: "studiovinari",
+ search: [],
+ styles: ["brands"],
+ label: "Studio Vinari"
+}, {
+ name: "stumbleupon",
+ search: [],
+ styles: ["brands"],
+ label: "StumbleUpon Logo"
+}, {
+ name: "stumbleupon-circle",
+ search: [],
+ styles: ["brands"],
+ label: "StumbleUpon Circle"
+}, {
+ name: "subscript",
+ search: ["edit", "font", "format", "text", "type"],
+ styles: ["solid"],
+ label: "subscript"
+}, {
+ name: "subway",
+ search: ["machine", "railway", "train", "transportation", "vehicle"],
+ styles: ["solid"],
+ label: "Subway"
+}, {
+ name: "suitcase",
+ search: ["baggage", "luggage", "move", "suitcase", "travel", "trip"],
+ styles: ["solid"],
+ label: "Suitcase"
+}, {
+ name: "suitcase-rolling",
+ search: ["baggage", "luggage", "move", "suitcase", "travel", "trip"],
+ styles: ["solid"],
+ label: "Suitcase Rolling"
+}, {
+ name: "sun",
+ search: ["brighten", "contrast", "day", "lighter", "sol", "solar", "star", "weather"],
+ styles: ["solid", "regular"],
+ label: "Sun"
+}, {
+ name: "superpowers",
+ search: [],
+ styles: ["brands"],
+ label: "Superpowers"
+}, {
+ name: "superscript",
+ search: ["edit", "exponential", "font", "format", "text", "type"],
+ styles: ["solid"],
+ label: "superscript"
+}, {
+ name: "supple",
+ search: [],
+ styles: ["brands"],
+ label: "Supple"
+}, {
+ name: "surprise",
+ search: ["emoticon", "face", "shocked"],
+ styles: ["solid", "regular"],
+ label: "Hushed Face"
+}, {
+ name: "suse",
+ search: ["linux", "operating system", "os"],
+ styles: ["brands"],
+ label: "Suse"
+}, {
+ name: "swatchbook",
+ search: ["Pantone", "color", "design", "hue", "palette"],
+ styles: ["solid"],
+ label: "Swatchbook"
+}, {
+ name: "swift",
+ search: [],
+ styles: ["brands"],
+ label: "Swift"
+}, {
+ name: "swimmer",
+ search: ["athlete", "head", "man", "olympics", "person", "pool", "water"],
+ styles: ["solid"],
+ label: "Swimmer"
+}, {
+ name: "swimming-pool",
+ search: ["ladder", "recreation", "swim", "water"],
+ styles: ["solid"],
+ label: "Swimming Pool"
+}, {
+ name: "symfony",
+ search: [],
+ styles: ["brands"],
+ label: "Symfony"
+}, {
+ name: "synagogue",
+ search: ["building", "jewish", "judaism", "religion", "star of david", "temple"],
+ styles: ["solid"],
+ label: "Synagogue"
+}, {
+ name: "sync",
+ search: ["exchange", "refresh", "reload", "rotate", "swap"],
+ styles: ["solid"],
+ label: "Sync"
+}, {
+ name: "sync-alt",
+ search: ["exchange", "refresh", "reload", "rotate", "swap"],
+ styles: ["solid"],
+ label: "Alternate Sync"
+}, {
+ name: "syringe",
+ search: ["covid-19", "doctor", "immunizations", "medical", "needle"],
+ styles: ["solid"],
+ label: "Syringe"
+}, {
+ name: "table",
+ search: ["data", "excel", "spreadsheet"],
+ styles: ["solid"],
+ label: "table"
+}, {
+ name: "table-tennis",
+ search: ["ball", "paddle", "ping pong"],
+ styles: ["solid"],
+ label: "Table Tennis"
+}, {
+ name: "tablet",
+ search: ["apple", "device", "ipad", "kindle", "screen"],
+ styles: ["solid"],
+ label: "tablet"
+}, {
+ name: "tablet-alt",
+ search: ["apple", "device", "ipad", "kindle", "screen"],
+ styles: ["solid"],
+ label: "Alternate Tablet"
+}, {
+ name: "tablets",
+ search: ["drugs", "medicine", "pills", "prescription"],
+ styles: ["solid"],
+ label: "Tablets"
+}, {
+ name: "tachometer-alt",
+ search: ["dashboard", "fast", "odometer", "speed", "speedometer"],
+ styles: ["solid"],
+ label: "Alternate Tachometer"
+}, {
+ name: "tag",
+ search: ["discount", "label", "price", "shopping"],
+ styles: ["solid"],
+ label: "tag"
+}, {
+ name: "tags",
+ search: ["discount", "label", "price", "shopping"],
+ styles: ["solid"],
+ label: "tags"
+}, {
+ name: "tape",
+ search: ["design", "package", "sticky"],
+ styles: ["solid"],
+ label: "Tape"
+}, {
+ name: "tasks",
+ search: ["checklist", "downloading", "downloads", "loading", "progress", "project management", "settings", "to do"],
+ styles: ["solid"],
+ label: "Tasks"
+}, {
+ name: "taxi",
+ search: ["cab", "cabbie", "car", "car service", "lyft", "machine", "transportation", "travel", "uber", "vehicle"],
+ styles: ["solid"],
+ label: "Taxi"
+}, {
+ name: "teamspeak",
+ search: [],
+ styles: ["brands"],
+ label: "TeamSpeak"
+}, {
+ name: "teeth",
+ search: ["bite", "dental", "dentist", "gums", "mouth", "smile", "tooth"],
+ styles: ["solid"],
+ label: "Teeth"
+}, {
+ name: "teeth-open",
+ search: ["dental", "dentist", "gums bite", "mouth", "smile", "tooth"],
+ styles: ["solid"],
+ label: "Teeth Open"
+}, {
+ name: "telegram",
+ search: [],
+ styles: ["brands"],
+ label: "Telegram"
+}, {
+ name: "telegram-plane",
+ search: [],
+ styles: ["brands"],
+ label: "Telegram Plane"
+}, {
+ name: "temperature-high",
+ search: ["cook", "covid-19", "mercury", "summer", "thermometer", "warm"],
+ styles: ["solid"],
+ label: "High Temperature"
+}, {
+ name: "temperature-low",
+ search: ["cold", "cool", "covid-19", "mercury", "thermometer", "winter"],
+ styles: ["solid"],
+ label: "Low Temperature"
+}, {
+ name: "tencent-weibo",
+ search: [],
+ styles: ["brands"],
+ label: "Tencent Weibo"
+}, {
+ name: "tenge",
+ search: ["currency", "kazakhstan", "money", "price"],
+ styles: ["solid"],
+ label: "Tenge"
+}, {
+ name: "terminal",
+ search: ["code", "command", "console", "development", "prompt"],
+ styles: ["solid"],
+ label: "Terminal"
+}, {
+ name: "text-height",
+ search: ["edit", "font", "format", "text", "type"],
+ styles: ["solid"],
+ label: "text-height"
+}, {
+ name: "text-width",
+ search: ["edit", "font", "format", "text", "type"],
+ styles: ["solid"],
+ label: "Text Width"
+}, {
+ name: "th",
+ search: ["blocks", "boxes", "grid", "squares"],
+ styles: ["solid"],
+ label: "th"
+}, {
+ name: "th-large",
+ search: ["blocks", "boxes", "grid", "squares"],
+ styles: ["solid"],
+ label: "th-large"
+}, {
+ name: "th-list",
+ search: ["checklist", "completed", "done", "finished", "ol", "todo", "ul"],
+ styles: ["solid"],
+ label: "th-list"
+}, {
+ name: "the-red-yeti",
+ search: [],
+ styles: ["brands"],
+ label: "The Red Yeti"
+}, {
+ name: "theater-masks",
+ search: ["comedy", "perform", "theatre", "tragedy"],
+ styles: ["solid"],
+ label: "Theater Masks"
+}, {
+ name: "themeco",
+ search: [],
+ styles: ["brands"],
+ label: "Themeco"
+}, {
+ name: "themeisle",
+ search: [],
+ styles: ["brands"],
+ label: "ThemeIsle"
+}, {
+ name: "thermometer",
+ search: ["covid-19", "mercury", "status", "temperature"],
+ styles: ["solid"],
+ label: "Thermometer"
+}, {
+ name: "thermometer-empty",
+ search: ["cold", "mercury", "status", "temperature"],
+ styles: ["solid"],
+ label: "Thermometer Empty"
+}, {
+ name: "thermometer-full",
+ search: ["fever", "hot", "mercury", "status", "temperature"],
+ styles: ["solid"],
+ label: "Thermometer Full"
+}, {
+ name: "thermometer-half",
+ search: ["mercury", "status", "temperature"],
+ styles: ["solid"],
+ label: "Thermometer 1/2 Full"
+}, {
+ name: "thermometer-quarter",
+ search: ["mercury", "status", "temperature"],
+ styles: ["solid"],
+ label: "Thermometer 1/4 Full"
+}, {
+ name: "thermometer-three-quarters",
+ search: ["mercury", "status", "temperature"],
+ styles: ["solid"],
+ label: "Thermometer 3/4 Full"
+}, {
+ name: "think-peaks",
+ search: [],
+ styles: ["brands"],
+ label: "Think Peaks"
+}, {
+ name: "thumbs-down",
+ search: ["disagree", "disapprove", "dislike", "hand", "social", "thumbs-o-down"],
+ styles: ["solid", "regular"],
+ label: "thumbs-down"
+}, {
+ name: "thumbs-up",
+ search: ["agree", "approve", "favorite", "hand", "like", "ok", "okay", "social", "success", "thumbs-o-up", "yes", "you got it dude"],
+ styles: ["solid", "regular"],
+ label: "thumbs-up"
+}, {
+ name: "thumbtack",
+ search: ["coordinates", "location", "marker", "pin", "thumb-tack"],
+ styles: ["solid"],
+ label: "Thumbtack"
+}, {
+ name: "ticket-alt",
+ search: ["movie", "pass", "support", "ticket"],
+ styles: ["solid"],
+ label: "Alternate Ticket"
+}, {
+ name: "times",
+ search: ["close", "cross", "error", "exit", "incorrect", "notice", "notification", "notify", "problem", "wrong", "x"],
+ styles: ["solid"],
+ label: "Times"
+}, {
+ name: "times-circle",
+ search: ["close", "cross", "exit", "incorrect", "notice", "notification", "notify", "problem", "wrong", "x"],
+ styles: ["solid", "regular"],
+ label: "Times Circle"
+}, {
+ name: "tint",
+ search: ["color", "drop", "droplet", "raindrop", "waterdrop"],
+ styles: ["solid"],
+ label: "tint"
+}, {
+ name: "tint-slash",
+ search: ["color", "drop", "droplet", "raindrop", "waterdrop"],
+ styles: ["solid"],
+ label: "Tint Slash"
+}, {
+ name: "tired",
+ search: ["angry", "emoticon", "face", "grumpy", "upset"],
+ styles: ["solid", "regular"],
+ label: "Tired Face"
+}, {
+ name: "toggle-off",
+ search: ["switch"],
+ styles: ["solid"],
+ label: "Toggle Off"
+}, {
+ name: "toggle-on",
+ search: ["switch"],
+ styles: ["solid"],
+ label: "Toggle On"
+}, {
+ name: "toilet",
+ search: ["bathroom", "flush", "john", "loo", "pee", "plumbing", "poop", "porcelain", "potty", "restroom", "throne", "washroom", "waste", "wc"],
+ styles: ["solid"],
+ label: "Toilet"
+}, {
+ name: "toilet-paper",
+ search: ["bathroom", "covid-19", "halloween", "holiday", "lavatory", "prank", "restroom", "roll"],
+ styles: ["solid"],
+ label: "Toilet Paper"
+}, {
+ name: "toilet-paper-slash",
+ search: ["bathroom", "covid-19", "halloween", "holiday", "lavatory", "leaves", "prank", "restroom", "roll", "trouble", "ut oh"],
+ styles: ["solid"],
+ label: "Toilet Paper Slash"
+}, {
+ name: "toolbox",
+ search: ["admin", "container", "fix", "repair", "settings", "tools"],
+ styles: ["solid"],
+ label: "Toolbox"
+}, {
+ name: "tools",
+ search: ["admin", "fix", "repair", "screwdriver", "settings", "tools", "wrench"],
+ styles: ["solid"],
+ label: "Tools"
+}, {
+ name: "tooth",
+ search: ["bicuspid", "dental", "dentist", "molar", "mouth", "teeth"],
+ styles: ["solid"],
+ label: "Tooth"
+}, {
+ name: "torah",
+ search: ["book", "jewish", "judaism", "religion", "scroll"],
+ styles: ["solid"],
+ label: "Torah"
+}, {
+ name: "torii-gate",
+ search: ["building", "shintoism"],
+ styles: ["solid"],
+ label: "Torii Gate"
+}, {
+ name: "tractor",
+ search: ["agriculture", "farm", "vehicle"],
+ styles: ["solid"],
+ label: "Tractor"
+}, {
+ name: "trade-federation",
+ search: [],
+ styles: ["brands"],
+ label: "Trade Federation"
+}, {
+ name: "trademark",
+ search: ["copyright", "register", "symbol"],
+ styles: ["solid"],
+ label: "Trademark"
+}, {
+ name: "traffic-light",
+ search: ["direction", "road", "signal", "travel"],
+ styles: ["solid"],
+ label: "Traffic Light"
+}, {
+ name: "trailer",
+ search: ["carry", "haul", "moving", "travel"],
+ styles: ["solid"],
+ label: "Trailer"
+}, {
+ name: "train",
+ search: ["bullet", "commute", "locomotive", "railway", "subway"],
+ styles: ["solid"],
+ label: "Train"
+}, {
+ name: "tram",
+ search: ["crossing", "machine", "mountains", "seasonal", "transportation"],
+ styles: ["solid"],
+ label: "Tram"
+}, {
+ name: "transgender",
+ search: ["intersex"],
+ styles: ["solid"],
+ label: "Transgender"
+}, {
+ name: "transgender-alt",
+ search: ["intersex"],
+ styles: ["solid"],
+ label: "Alternate Transgender"
+}, {
+ name: "trash",
+ search: ["delete", "garbage", "hide", "remove"],
+ styles: ["solid"],
+ label: "Trash"
+}, {
+ name: "trash-alt",
+ search: ["delete", "garbage", "hide", "remove", "trash-o"],
+ styles: ["solid", "regular"],
+ label: "Alternate Trash"
+}, {
+ name: "trash-restore",
+ search: ["back", "control z", "oops", "undo"],
+ styles: ["solid"],
+ label: "Trash Restore"
+}, {
+ name: "trash-restore-alt",
+ search: ["back", "control z", "oops", "undo"],
+ styles: ["solid"],
+ label: "Alternative Trash Restore"
+}, {
+ name: "tree",
+ search: ["bark", "fall", "flora", "forest", "nature", "plant", "seasonal"],
+ styles: ["solid"],
+ label: "Tree"
+}, {
+ name: "trello",
+ search: ["atlassian"],
+ styles: ["brands"],
+ label: "Trello"
+}, {
+ name: "tripadvisor",
+ search: [],
+ styles: ["brands"],
+ label: "TripAdvisor"
+}, {
+ name: "trophy",
+ search: ["achievement", "award", "cup", "game", "winner"],
+ styles: ["solid"],
+ label: "trophy"
+}, {
+ name: "truck",
+ search: ["cargo", "delivery", "shipping", "vehicle"],
+ styles: ["solid"],
+ label: "truck"
+}, {
+ name: "truck-loading",
+ search: ["box", "cargo", "delivery", "inventory", "moving", "rental", "vehicle"],
+ styles: ["solid"],
+ label: "Truck Loading"
+}, {
+ name: "truck-monster",
+ search: ["offroad", "vehicle", "wheel"],
+ styles: ["solid"],
+ label: "Truck Monster"
+}, {
+ name: "truck-moving",
+ search: ["cargo", "inventory", "rental", "vehicle"],
+ styles: ["solid"],
+ label: "Truck Moving"
+}, {
+ name: "truck-pickup",
+ search: ["cargo", "vehicle"],
+ styles: ["solid"],
+ label: "Truck Side"
+}, {
+ name: "tshirt",
+ search: ["clothing", "fashion", "garment", "shirt"],
+ styles: ["solid"],
+ label: "T-Shirt"
+}, {
+ name: "tty",
+ search: ["communication", "deaf", "telephone", "teletypewriter", "text"],
+ styles: ["solid"],
+ label: "TTY"
+}, {
+ name: "tumblr",
+ search: [],
+ styles: ["brands"],
+ label: "Tumblr"
+}, {
+ name: "tumblr-square",
+ search: [],
+ styles: ["brands"],
+ label: "Tumblr Square"
+}, {
+ name: "tv",
+ search: ["computer", "display", "monitor", "television"],
+ styles: ["solid"],
+ label: "Television"
+}, {
+ name: "twitch",
+ search: [],
+ styles: ["brands"],
+ label: "Twitch"
+}, {
+ name: "twitter",
+ search: ["social network", "tweet"],
+ styles: ["brands"],
+ label: "Twitter"
+}, {
+ name: "twitter-square",
+ search: ["social network", "tweet"],
+ styles: ["brands"],
+ label: "Twitter Square"
+}, {
+ name: "typo3",
+ search: [],
+ styles: ["brands"],
+ label: "Typo3"
+}, {
+ name: "uber",
+ search: [],
+ styles: ["brands"],
+ label: "Uber"
+}, {
+ name: "ubuntu",
+ search: ["linux", "operating system", "os"],
+ styles: ["brands"],
+ label: "Ubuntu"
+}, {
+ name: "uikit",
+ search: [],
+ styles: ["brands"],
+ label: "UIkit"
+}, {
+ name: "umbraco",
+ search: [],
+ styles: ["brands"],
+ label: "Umbraco"
+}, {
+ name: "umbrella",
+ search: ["protection", "rain", "storm", "wet"],
+ styles: ["solid"],
+ label: "Umbrella"
+}, {
+ name: "umbrella-beach",
+ search: ["protection", "recreation", "sand", "shade", "summer", "sun"],
+ styles: ["solid"],
+ label: "Umbrella Beach"
+}, {
+ name: "underline",
+ search: ["edit", "emphasis", "format", "text", "writing"],
+ styles: ["solid"],
+ label: "Underline"
+}, {
+ name: "undo",
+ search: ["back", "control z", "exchange", "oops", "return", "rotate", "swap"],
+ styles: ["solid"],
+ label: "Undo"
+}, {
+ name: "undo-alt",
+ search: ["back", "control z", "exchange", "oops", "return", "swap"],
+ styles: ["solid"],
+ label: "Alternate Undo"
+}, {
+ name: "uniregistry",
+ search: [],
+ styles: ["brands"],
+ label: "Uniregistry"
+}, {
+ name: "unity",
+ search: [],
+ styles: ["brands"],
+ label: "Unity 3D"
+}, {
+ name: "universal-access",
+ search: ["accessibility", "hearing", "person", "seeing", "visual impairment"],
+ styles: ["solid"],
+ label: "Universal Access"
+}, {
+ name: "university",
+ search: ["bank", "building", "college", "higher education - students", "institution"],
+ styles: ["solid"],
+ label: "University"
+}, {
+ name: "unlink",
+ search: ["attachment", "chain", "chain-broken", "remove"],
+ styles: ["solid"],
+ label: "unlink"
+}, {
+ name: "unlock",
+ search: ["admin", "lock", "password", "private", "protect"],
+ styles: ["solid"],
+ label: "unlock"
+}, {
+ name: "unlock-alt",
+ search: ["admin", "lock", "password", "private", "protect"],
+ styles: ["solid"],
+ label: "Alternate Unlock"
+}, {
+ name: "untappd",
+ search: [],
+ styles: ["brands"],
+ label: "Untappd"
+}, {
+ name: "upload",
+ search: ["hard drive", "import", "publish"],
+ styles: ["solid"],
+ label: "Upload"
+}, {
+ name: "ups",
+ search: ["United Parcel Service", "package", "shipping"],
+ styles: ["brands"],
+ label: "UPS"
+}, {
+ name: "usb",
+ search: [],
+ styles: ["brands"],
+ label: "USB"
+}, {
+ name: "user",
+ search: ["account", "avatar", "head", "human", "man", "person", "profile"],
+ styles: ["solid", "regular"],
+ label: "User"
+}, {
+ name: "user-alt",
+ search: ["account", "avatar", "head", "human", "man", "person", "profile"],
+ styles: ["solid"],
+ label: "Alternate User"
+}, {
+ name: "user-alt-slash",
+ search: ["account", "avatar", "head", "human", "man", "person", "profile"],
+ styles: ["solid"],
+ label: "Alternate User Slash"
+}, {
+ name: "user-astronaut",
+ search: ["avatar", "clothing", "cosmonaut", "nasa", "space", "suit"],
+ styles: ["solid"],
+ label: "User Astronaut"
+}, {
+ name: "user-check",
+ search: ["accept", "check", "person", "verified"],
+ styles: ["solid"],
+ label: "User Check"
+}, {
+ name: "user-circle",
+ search: ["account", "avatar", "head", "human", "man", "person", "profile"],
+ styles: ["solid", "regular"],
+ label: "User Circle"
+}, {
+ name: "user-clock",
+ search: ["alert", "person", "remind", "time"],
+ styles: ["solid"],
+ label: "User Clock"
+}, {
+ name: "user-cog",
+ search: ["admin", "cog", "person", "settings"],
+ styles: ["solid"],
+ label: "User Cog"
+}, {
+ name: "user-edit",
+ search: ["edit", "pen", "pencil", "person", "update", "write"],
+ styles: ["solid"],
+ label: "User Edit"
+}, {
+ name: "user-friends",
+ search: ["group", "people", "person", "team", "users"],
+ styles: ["solid"],
+ label: "User Friends"
+}, {
+ name: "user-graduate",
+ search: ["cap", "clothing", "commencement", "gown", "graduation", "person", "student"],
+ styles: ["solid"],
+ label: "User Graduate"
+}, {
+ name: "user-injured",
+ search: ["cast", "injury", "ouch", "patient", "person", "sling"],
+ styles: ["solid"],
+ label: "User Injured"
+}, {
+ name: "user-lock",
+ search: ["admin", "lock", "person", "private", "unlock"],
+ styles: ["solid"],
+ label: "User Lock"
+}, {
+ name: "user-md",
+ search: ["covid-19", "job", "medical", "nurse", "occupation", "physician", "profile", "surgeon"],
+ styles: ["solid"],
+ label: "Doctor"
+}, {
+ name: "user-minus",
+ search: ["delete", "negative", "remove"],
+ styles: ["solid"],
+ label: "User Minus"
+}, {
+ name: "user-ninja",
+ search: ["assassin", "avatar", "dangerous", "deadly", "sneaky"],
+ styles: ["solid"],
+ label: "User Ninja"
+}, {
+ name: "user-nurse",
+ search: ["covid-19", "doctor", "midwife", "practitioner", "surgeon"],
+ styles: ["solid"],
+ label: "Nurse"
+}, {
+ name: "user-plus",
+ search: ["add", "avatar", "positive", "sign up", "signup", "team"],
+ styles: ["solid"],
+ label: "User Plus"
+}, {
+ name: "user-secret",
+ search: ["clothing", "coat", "hat", "incognito", "person", "privacy", "spy", "whisper"],
+ styles: ["solid"],
+ label: "User Secret"
+}, {
+ name: "user-shield",
+ search: ["admin", "person", "private", "protect", "safe"],
+ styles: ["solid"],
+ label: "User Shield"
+}, {
+ name: "user-slash",
+ search: ["ban", "delete", "remove"],
+ styles: ["solid"],
+ label: "User Slash"
+}, {
+ name: "user-tag",
+ search: ["avatar", "discount", "label", "person", "role", "special"],
+ styles: ["solid"],
+ label: "User Tag"
+}, {
+ name: "user-tie",
+ search: ["avatar", "business", "clothing", "formal", "professional", "suit"],
+ styles: ["solid"],
+ label: "User Tie"
+}, {
+ name: "user-times",
+ search: ["archive", "delete", "remove", "x"],
+ styles: ["solid"],
+ label: "Remove User"
+}, {
+ name: "users",
+ search: ["friends", "group", "people", "persons", "profiles", "team"],
+ styles: ["solid"],
+ label: "Users"
+}, {
+ name: "users-cog",
+ search: ["admin", "cog", "group", "person", "settings", "team"],
+ styles: ["solid"],
+ label: "Users Cog"
+}, {
+ name: "usps",
+ search: ["american", "package", "shipping", "usa"],
+ styles: ["brands"],
+ label: "United States Postal Service"
+}, {
+ name: "ussunnah",
+ search: [],
+ styles: ["brands"],
+ label: "us-Sunnah Foundation"
+}, {
+ name: "utensil-spoon",
+ search: ["cutlery", "dining", "scoop", "silverware", "spoon"],
+ styles: ["solid"],
+ label: "Utensil Spoon"
+}, {
+ name: "utensils",
+ search: ["cutlery", "dining", "dinner", "eat", "food", "fork", "knife", "restaurant"],
+ styles: ["solid"],
+ label: "Utensils"
+}, {
+ name: "vaadin",
+ search: [],
+ styles: ["brands"],
+ label: "Vaadin"
+}, {
+ name: "vector-square",
+ search: ["anchors", "lines", "object", "render", "shape"],
+ styles: ["solid"],
+ label: "Vector Square"
+}, {
+ name: "venus",
+ search: ["female"],
+ styles: ["solid"],
+ label: "Venus"
+}, {
+ name: "venus-double",
+ search: ["female"],
+ styles: ["solid"],
+ label: "Venus Double"
+}, {
+ name: "venus-mars",
+ search: ["Gender"],
+ styles: ["solid"],
+ label: "Venus Mars"
+}, {
+ name: "viacoin",
+ search: [],
+ styles: ["brands"],
+ label: "Viacoin"
+}, {
+ name: "viadeo",
+ search: [],
+ styles: ["brands"],
+ label: "Video"
+}, {
+ name: "viadeo-square",
+ search: [],
+ styles: ["brands"],
+ label: "Video Square"
+}, {
+ name: "vial",
+ search: ["experiment", "lab", "sample", "science", "test", "test tube"],
+ styles: ["solid"],
+ label: "Vial"
+}, {
+ name: "vials",
+ search: ["experiment", "lab", "sample", "science", "test", "test tube"],
+ styles: ["solid"],
+ label: "Vials"
+}, {
+ name: "viber",
+ search: [],
+ styles: ["brands"],
+ label: "Viber"
+}, {
+ name: "video",
+ search: ["camera", "film", "movie", "record", "video-camera"],
+ styles: ["solid"],
+ label: "Video"
+}, {
+ name: "video-slash",
+ search: ["add", "create", "film", "new", "positive", "record", "video"],
+ styles: ["solid"],
+ label: "Video Slash"
+}, {
+ name: "vihara",
+ search: ["buddhism", "buddhist", "building", "monastery"],
+ styles: ["solid"],
+ label: "Vihara"
+}, {
+ name: "vimeo",
+ search: [],
+ styles: ["brands"],
+ label: "Vimeo"
+}, {
+ name: "vimeo-square",
+ search: [],
+ styles: ["brands"],
+ label: "Vimeo Square"
+}, {
+ name: "vimeo-v",
+ search: ["vimeo"],
+ styles: ["brands"],
+ label: "Vimeo"
+}, {
+ name: "vine",
+ search: [],
+ styles: ["brands"],
+ label: "Vine"
+}, {
+ name: "virus",
+ search: ["bug", "covid-19", "flu", "health", "sick", "viral"],
+ styles: ["solid"],
+ label: "Virus"
+}, {
+ name: "virus-slash",
+ search: ["bug", "covid-19", "cure", "eliminate", "flu", "health", "sick", "viral"],
+ styles: ["solid"],
+ label: "Virus Slash"
+}, {
+ name: "viruses",
+ search: ["bugs", "covid-19", "flu", "health", "multiply", "sick", "spread", "viral"],
+ styles: ["solid"],
+ label: "Viruses"
+}, {
+ name: "vk",
+ search: [],
+ styles: ["brands"],
+ label: "VK"
+}, {
+ name: "vnv",
+ search: [],
+ styles: ["brands"],
+ label: "VNV"
+}, {
+ name: "voicemail",
+ search: ["answer", "inbox", "message", "phone"],
+ styles: ["solid"],
+ label: "Voicemail"
+}, {
+ name: "volleyball-ball",
+ search: ["beach", "olympics", "sport"],
+ styles: ["solid"],
+ label: "Volleyball Ball"
+}, {
+ name: "volume-down",
+ search: ["audio", "lower", "music", "quieter", "sound", "speaker"],
+ styles: ["solid"],
+ label: "Volume Down"
+}, {
+ name: "volume-mute",
+ search: ["audio", "music", "quiet", "sound", "speaker"],
+ styles: ["solid"],
+ label: "Volume Mute"
+}, {
+ name: "volume-off",
+ search: ["audio", "ban", "music", "mute", "quiet", "silent", "sound"],
+ styles: ["solid"],
+ label: "Volume Off"
+}, {
+ name: "volume-up",
+ search: ["audio", "higher", "louder", "music", "sound", "speaker"],
+ styles: ["solid"],
+ label: "Volume Up"
+}, {
+ name: "vote-yea",
+ search: ["accept", "cast", "election", "politics", "positive", "yes"],
+ styles: ["solid"],
+ label: "Vote Yea"
+}, {
+ name: "vr-cardboard",
+ search: ["3d", "augment", "google", "reality", "virtual"],
+ styles: ["solid"],
+ label: "Cardboard VR"
+}, {
+ name: "vuejs",
+ search: [],
+ styles: ["brands"],
+ label: "Vue.js"
+}, {
+ name: "walking",
+ search: ["exercise", "health", "pedometer", "person", "steps"],
+ styles: ["solid"],
+ label: "Walking"
+}, {
+ name: "wallet",
+ search: ["billfold", "cash", "currency", "money"],
+ styles: ["solid"],
+ label: "Wallet"
+}, {
+ name: "warehouse",
+ search: ["building", "capacity", "garage", "inventory", "storage"],
+ styles: ["solid"],
+ label: "Warehouse"
+}, {
+ name: "water",
+ search: ["lake", "liquid", "ocean", "sea", "swim", "wet"],
+ styles: ["solid"],
+ label: "Water"
+}, {
+ name: "wave-square",
+ search: ["frequency", "pulse", "signal"],
+ styles: ["solid"],
+ label: "Square Wave"
+}, {
+ name: "waze",
+ search: [],
+ styles: ["brands"],
+ label: "Waze"
+}, {
+ name: "weebly",
+ search: [],
+ styles: ["brands"],
+ label: "Weebly"
+}, {
+ name: "weibo",
+ search: [],
+ styles: ["brands"],
+ label: "Weibo"
+}, {
+ name: "weight",
+ search: ["health", "measurement", "scale", "weight"],
+ styles: ["solid"],
+ label: "Weight"
+}, {
+ name: "weight-hanging",
+ search: ["anvil", "heavy", "measurement"],
+ styles: ["solid"],
+ label: "Hanging Weight"
+}, {
+ name: "weixin",
+ search: [],
+ styles: ["brands"],
+ label: "Weixin (WeChat)"
+}, {
+ name: "whatsapp",
+ search: [],
+ styles: ["brands"],
+ label: "What's App"
+}, {
+ name: "whatsapp-square",
+ search: [],
+ styles: ["brands"],
+ label: "What's App Square"
+}, {
+ name: "wheelchair",
+ search: ["accessible", "handicap", "person"],
+ styles: ["solid"],
+ label: "Wheelchair"
+}, {
+ name: "whmcs",
+ search: [],
+ styles: ["brands"],
+ label: "WHMCS"
+}, {
+ name: "wifi",
+ search: ["connection", "hotspot", "internet", "network", "wireless"],
+ styles: ["solid"],
+ label: "WiFi"
+}, {
+ name: "wikipedia-w",
+ search: [],
+ styles: ["brands"],
+ label: "Wikipedia W"
+}, {
+ name: "wind",
+ search: ["air", "blow", "breeze", "fall", "seasonal", "weather"],
+ styles: ["solid"],
+ label: "Wind"
+}, {
+ name: "window-close",
+ search: ["browser", "cancel", "computer", "development"],
+ styles: ["solid", "regular"],
+ label: "Window Close"
+}, {
+ name: "window-maximize",
+ search: ["browser", "computer", "development", "expand"],
+ styles: ["solid", "regular"],
+ label: "Window Maximize"
+}, {
+ name: "window-minimize",
+ search: ["browser", "collapse", "computer", "development"],
+ styles: ["solid", "regular"],
+ label: "Window Minimize"
+}, {
+ name: "window-restore",
+ search: ["browser", "computer", "development"],
+ styles: ["solid", "regular"],
+ label: "Window Restore"
+}, {
+ name: "windows",
+ search: ["microsoft", "operating system", "os"],
+ styles: ["brands"],
+ label: "Windows"
+}, {
+ name: "wine-bottle",
+ search: ["alcohol", "beverage", "cabernet", "drink", "glass", "grapes", "merlot", "sauvignon"],
+ styles: ["solid"],
+ label: "Wine Bottle"
+}, {
+ name: "wine-glass",
+ search: ["alcohol", "beverage", "cabernet", "drink", "grapes", "merlot", "sauvignon"],
+ styles: ["solid"],
+ label: "Wine Glass"
+}, {
+ name: "wine-glass-alt",
+ search: ["alcohol", "beverage", "cabernet", "drink", "grapes", "merlot", "sauvignon"],
+ styles: ["solid"],
+ label: "Alternate Wine Glas"
+}, {
+ name: "wix",
+ search: [],
+ styles: ["brands"],
+ label: "Wix"
+}, {
+ name: "wizards-of-the-coast",
+ search: ["Dungeons & Dragons", "d&d", "dnd", "fantasy", "game", "gaming", "tabletop"],
+ styles: ["brands"],
+ label: "Wizards of the Coast"
+}, {
+ name: "wolf-pack-battalion",
+ search: [],
+ styles: ["brands"],
+ label: "Wolf Pack Battalion"
+}, {
+ name: "won-sign",
+ search: ["currency", "krw", "money"],
+ styles: ["solid"],
+ label: "Won Sign"
+}, {
+ name: "wordpress",
+ search: [],
+ styles: ["brands"],
+ label: "WordPress Logo"
+}, {
+ name: "wordpress-simple",
+ search: [],
+ styles: ["brands"],
+ label: "Wordpress Simple"
+}, {
+ name: "wpbeginner",
+ search: [],
+ styles: ["brands"],
+ label: "WPBeginner"
+}, {
+ name: "wpexplorer",
+ search: [],
+ styles: ["brands"],
+ label: "WPExplorer"
+}, {
+ name: "wpforms",
+ search: [],
+ styles: ["brands"],
+ label: "WPForms"
+}, {
+ name: "wpressr",
+ search: ["rendact"],
+ styles: ["brands"],
+ label: "wpressr"
+}, {
+ name: "wrench",
+ search: ["construction", "fix", "mechanic", "plumbing", "settings", "spanner", "tool", "update"],
+ styles: ["solid"],
+ label: "Wrench"
+}, {
+ name: "x-ray",
+ search: ["health", "medical", "radiological images", "radiology", "skeleton"],
+ styles: ["solid"],
+ label: "X-Ray"
+}, {
+ name: "xbox",
+ search: [],
+ styles: ["brands"],
+ label: "Xbox"
+}, {
+ name: "xing",
+ search: [],
+ styles: ["brands"],
+ label: "Xing"
+}, {
+ name: "xing-square",
+ search: [],
+ styles: ["brands"],
+ label: "Xing Square"
+}, {
+ name: "y-combinator",
+ search: [],
+ styles: ["brands"],
+ label: "Y Combinator"
+}, {
+ name: "yahoo",
+ search: [],
+ styles: ["brands"],
+ label: "Yahoo Logo"
+}, {
+ name: "yammer",
+ search: [],
+ styles: ["brands"],
+ label: "Yammer"
+}, {
+ name: "yandex",
+ search: [],
+ styles: ["brands"],
+ label: "Yandex"
+}, {
+ name: "yandex-international",
+ search: [],
+ styles: ["brands"],
+ label: "Yandex International"
+}, {
+ name: "yarn",
+ search: [],
+ styles: ["brands"],
+ label: "Yarn"
+}, {
+ name: "yelp",
+ search: [],
+ styles: ["brands"],
+ label: "Yelp"
+}, {
+ name: "yen-sign",
+ search: ["currency", "jpy", "money"],
+ styles: ["solid"],
+ label: "Yen Sign"
+}, {
+ name: "yin-yang",
+ search: ["daoism", "opposites", "taoism"],
+ styles: ["solid"],
+ label: "Yin Yang"
+}, {
+ name: "yoast",
+ search: [],
+ styles: ["brands"],
+ label: "Yoast"
+}, {
+ name: "youtube",
+ search: ["film", "video", "youtube-play", "youtube-square"],
+ styles: ["brands"],
+ label: "YouTube"
+}, {
+ name: "youtube-square",
+ search: [],
+ styles: ["brands"],
+ label: "YouTube Square"
+}, {
+ name: "zhihu",
+ search: [],
+ styles: ["brands"],
+ label: "Zhihu"
+}];
diff --git a/src/component/form/feedback/index.css b/src/component/form/feedback/index.css
new file mode 100644
index 00000000..5cb498cb
--- /dev/null
+++ b/src/component/form/feedback/index.css
@@ -0,0 +1,39 @@
+:root {
+ --form-feedback-background: var(--theme-primary-020);
+ --form-feedback-background-disabled: var(--theme-primary-010);
+ --form-feedback-text: var(--theme-primary-text-020);
+ --form-feedback-text-muted: var(--theme-primary-070);
+ --form-feedback-text-disabled: var(--theme-primary-030);
+ --form-feedback-border: var(--theme-primary-030);
+ --form-feedback-border-disabled: var(--theme-primary-010);
+}
+
+.form-feedback {
+ padding: 0.75em 1.25em;
+ background-color: hsl(var(--form-feedback-background));
+ border: 0;
+ border-left-width: calc(var(--layout-line-width) * 2);
+ border-left-style: solid;
+ border-left-color: hsl(var(--form-feedback-border));
+ border-top-right-radius: calc(var(--theme-radius) * 0.01em);
+ border-bottom-right-radius: calc(var(--theme-radius) * 0.01em);
+ width: 100%;
+ transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast);
+}
+
+.form-feedback p {
+ color: hsl(var(--form-feedback-text));
+}
+
+.form-feedback p.muted {
+ color: hsl(var(--form-feedback-text-muted));
+}
+
+.form-feedback.disabled {
+ background-color: hsl(var(--form-feedback-background-disabled));
+ border-color: hsl(var(--form-feedback-border-disabled));
+}
+
+.form-feedback.disabled p {
+ color: hsl(var(--form-feedback-text-disabled));
+}
diff --git a/src/component/form/feedback/index.js b/src/component/form/feedback/index.js
new file mode 100644
index 00000000..86f091ea
--- /dev/null
+++ b/src/component/form/feedback/index.js
@@ -0,0 +1,27 @@
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+
+import './index.css';
+
+export const feedback = ({
+ text = false
+} = {}) => {
+
+ const feedback = node('div|class:form-feedback');
+
+ if (text) {
+ const feedbackText = complexNode({
+ tag: 'p',
+ text: text,
+ attr: [{
+ key: 'class',
+ value: 'muted small'
+ }]
+ });
+
+ feedback.appendChild(feedbackText);
+ };
+
+ return feedback;
+
+};
diff --git a/src/component/form/fieldset/index.css b/src/component/form/fieldset/index.css
new file mode 100644
index 00000000..3d529730
--- /dev/null
+++ b/src/component/form/fieldset/index.css
@@ -0,0 +1,5 @@
+.form-fieldset {
+ position: relative;
+ width: 100%;
+ display: block;
+}
diff --git a/src/component/form/fieldset/index.js b/src/component/form/fieldset/index.js
new file mode 100644
index 00000000..66142dd3
--- /dev/null
+++ b/src/component/form/fieldset/index.js
@@ -0,0 +1,11 @@
+import { node } from '../../../utility/node';
+
+import './index.css';
+
+export const fieldset = function({
+ children = false
+} = {}) {
+
+ return node('fieldset|class:form-fieldset', children);
+
+};
\ No newline at end of file
diff --git a/src/component/form/grid/index.css b/src/component/form/grid/index.css
new file mode 100644
index 00000000..852ca572
--- /dev/null
+++ b/src/component/form/grid/index.css
@@ -0,0 +1,158 @@
+:root {
+ --form-grid-background: var(--theme-primary-020);
+ --form-grid-background-hover: var(--theme-primary-020);
+ --form-grid-background-focus: var(--theme-primary-020);
+ --form-grid-background-disabled: var(--theme-primary-010);
+ --form-grid-border: var(--theme-primary-030);
+ --form-grid-border-hover-focus: var(--theme-primary-030);
+ --form-grid-border-active: var(--theme-accent);
+ --form-grid-border-checked: var(--theme-accent);
+ --form-grid-border-disabled: var(--theme-primary-010);
+}
+
+.form-grid {
+ background-color: hsl(var(--form-grid-background));
+ padding: calc((var(--form-thumb-size) / 4) * 1em);
+ display: inline-grid;
+ gap: calc((var(--form-thumb-size) / 4) * 1em);
+ overflow: hidden;
+ transition: background-color var(--layout-transition-extra-fast);
+}
+
+.form-grid:hover {
+ outline: none;
+ background-color: hsl(var(--form-grid-background-hover));
+}
+
+.form-grid:focus,
+.form-grid:focus-within {
+ outline: none;
+ background-color: hsl(var(--form-grid-background-focus));
+}
+
+.form-grid.disabled,
+.form-grid.disabled:focus,
+.form-grid.disabled:focus-within {
+ background-color: hsl(var(--form-grid-background-disabled));
+}
+
+.form-grid-2x2 {
+ grid-template-columns: repeat(2, 1fr);
+ grid-template-rows: repeat(2, 1fr);
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ grid-template-areas:
+ "cell-1 cell-2"
+ "cell-3 cell-4";
+}
+
+.form-grid-3x3 {
+ grid-template-columns: repeat(3, 1fr);
+ grid-template-rows: repeat(3, 1fr);
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ grid-template-areas:
+ "cell-1 cell-2 cell-3"
+ "cell-4 cell-5 cell-6"
+ "cell-7 cell-8 cell-9";
+}
+
+.form-grid-3x1 {
+ grid-template-columns: repeat(3, 1fr);
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ grid-template-areas:
+ "cell-1 cell-2 cell-3";
+}
+
+.form-grid-1x3 {
+ grid-template-rows: repeat(3, 1fr);
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ grid-template-areas:
+ "cell-1"
+ "cell-2"
+ "cell-3";
+}
+
+.form-grid-3x3>*,
+.form-grid-3x1>*,
+.form-grid-1x3>* {
+ grid-area: var(--form-grid-cell);
+}
+
+.form-grid .form-wrap {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.form-grid input[type="checkbox"]+label,
+.form-grid input[type="radio"]+label {
+ background-color: transparent;
+ padding: 0;
+ margin: 0;
+ display: block;
+ width: var(--form-thumb);
+ height: var(--form-thumb);
+ position: relative;
+ transition: none;
+ z-index: 1;
+}
+
+.form-grid input[type="checkbox"]:hover+label,
+.form-grid input[type="checkbox"]:focus+label,
+.form-grid input[type="radio"]:hover+label,
+.form-grid input[type="radio"]:focus+label {
+ box-shadow: none;
+}
+
+.form-grid input[type="checkbox"]+label .label-icon,
+.form-grid input[type="radio"]+label .label-icon {
+ margin-right: 0;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+
+.form-grid-3x3 {
+ --grid-radius-offset: calc((var(--theme-radius) / 100) * 0.1em);
+ --grid-radius-positive: calc(var(--grid-radius-offset) + -50%);
+ --grid-radius-negative: calc((var(--grid-radius-offset) * -1) + -50%);
+}
+
+.form-grid-3x3 .form-wrap:nth-child(1) input[type="checkbox"]+label .label-icon,
+.form-grid-3x3 .form-wrap:nth-child(1) input[type="radio"]+label .label-icon {
+ transform: translate(var(--grid-radius-positive), var(--grid-radius-positive));
+}
+
+.form-grid-3x3 .form-wrap:nth-child(2) input[type="checkbox"]+label .label-icon,
+.form-grid-3x3 .form-wrap:nth-child(2) input[type="radio"]+label .label-icon {
+ transform: translate(-50%, var(--grid-radius-positive));
+}
+
+.form-grid-3x3 .form-wrap:nth-child(3) input[type="checkbox"]+label .label-icon,
+.form-grid-3x3 .form-wrap:nth-child(3) input[type="radio"]+label .label-icon {
+ transform: translate(var(--grid-radius-negative), var(--grid-radius-positive));
+}
+
+.form-grid-3x3 .form-wrap:nth-child(4) input[type="checkbox"]+label .label-icon,
+.form-grid-3x3 .form-wrap:nth-child(4) input[type="radio"]+label .label-icon {
+ transform: translate(var(--grid-radius-positive), -50%);
+}
+
+.form-grid-3x3 .form-wrap:nth-child(6) input[type="checkbox"]+label .label-icon,
+.form-grid-3x3 .form-wrap:nth-child(6) input[type="radio"]+label .label-icon {
+ transform: translate(var(--grid-radius-negative), -50%);
+}
+
+.form-grid-3x3 .form-wrap:nth-child(7) input[type="checkbox"]+label .label-icon,
+.form-grid-3x3 .form-wrap:nth-child(7) input[type="radio"]+label .label-icon {
+ transform: translate(var(--grid-radius-positive), var(--grid-radius-negative));
+}
+
+.form-grid-3x3 .form-wrap:nth-child(8) input[type="checkbox"]+label .label-icon,
+.form-grid-3x3 .form-wrap:nth-child(8) input[type="radio"]+label .label-icon {
+ transform: translate(-50%, var(--grid-radius-negative));
+}
+
+.form-grid-3x3 .form-wrap:nth-child(9) input[type="checkbox"]+label .label-icon,
+.form-grid-3x3 .form-wrap:nth-child(9) input[type="radio"]+label .label-icon {
+ transform: translate(var(--grid-radius-negative), var(--grid-radius-negative));
+}
diff --git a/src/component/form/grid/index.js b/src/component/form/grid/index.js
new file mode 100644
index 00000000..04b11e62
--- /dev/null
+++ b/src/component/form/grid/index.js
@@ -0,0 +1,11 @@
+import { node } from '../../../utility/node';
+
+import './index.css';
+
+export const grid = ({
+ children = false
+} = {}) => {
+
+ return node('div|class:form-grid', children);
+
+};
diff --git a/src/component/form/group/index.css b/src/component/form/group/index.css
new file mode 100644
index 00000000..5393b853
--- /dev/null
+++ b/src/component/form/group/index.css
@@ -0,0 +1,507 @@
+:root {
+ --form-group-border: var(--theme-primary-050);
+}
+
+.form-group {
+ position: relative;
+ display: inline-flex;
+ justify-content: flex-start;
+ align-items: stretch;
+}
+
+.form-group-horizontal {
+ flex-direction: row;
+}
+
+.form-group-vertical {
+ flex-direction: column;
+}
+
+.form-group-horizontal.form-group-reverse {
+ flex-direction: row-reverse;
+}
+
+.form-group-vertical.form-group-reverse {
+ flex-direction: column-reverse;
+}
+
+.form-group .form-wrap {
+ margin-top: 0;
+ margin-bottom: 0;
+ margin-right: calc(var(--form-space) * 0.1em);
+ display: flex;
+ align-items: center;
+}
+
+.form-group-block {
+ display: flex;
+ width: 100%;
+}
+
+.form-group-justify-left {
+ justify-content: flex-start;
+}
+
+.form-group-justify-right {
+ justify-content: flex-end;
+}
+
+.form-group-justify-space-between {
+ justify-content: space-between;
+}
+
+.form-group .form-group-text,
+.form-group .button,
+.form-group .form-input-button input[type="checkbox"]+label,
+.form-group .form-input-button input[type="radio"]+label,
+.form-group .form-input-button input[type="color"]+label,
+.form-group .form-input-button input[type="file"]+label,
+.form-group>select,
+.form-group>input[type="email"],
+.form-group>input[type="number"],
+.form-group>input[type="password"],
+.form-group>input[type="search"],
+.form-group>input[type="tel"],
+.form-group>input[type="text"],
+.form-group>input[type="color"],
+.form-group>input[type="range"] {
+ margin: 0;
+ border-radius: 0;
+ height: inherit;
+ min-height: 2.5em;
+ flex-grow: 1;
+ flex-shrink: 1;
+ flex-basis: auto;
+ z-index: 1;
+}
+
+.form-group .form-group-text {
+ flex-shrink: 0;
+}
+
+.form-group .form-group-text:focus,
+.form-group .button:focus,
+.form-group .form-input-button input[type="checkbox"]:focus+label,
+.form-group .form-input-button input[type="radio"]:focus+label,
+.form-group .form-input-button input[type="color"]:focus+label,
+.form-group .form-input-button input[type="file"]:focus+label,
+.form-group>select:focus,
+.form-group>input[type="email"]:focus,
+.form-group>input[type="number"]:focus,
+.form-group>input[type="password"]:focus,
+.form-group>input[type="search"]:focus,
+.form-group>input[type="tel"]:focus,
+.form-group>input[type="text"]:focus,
+.form-group>input[type="color"]:focus,
+.form-group>input[type="range"]:focus {
+ z-index: 2;
+}
+
+.form-group .form-group-text:hover,
+.form-group .form-group-text:active,
+.form-group .button:hover,
+.form-group .button:active,
+.form-group .form-input-button input[type="checkbox"]:hover+label,
+.form-group .form-input-button input[type="checkbox"]:active+label,
+.form-group .form-input-button input[type="radio"]:hover+label,
+.form-group .form-input-button input[type="radio"]:active+label,
+.form-group .form-input-button input[type="color"]:hover+label,
+.form-group .form-input-button input[type="color"]:active+label,
+.form-group .form-input-button input[type="file"]:hover+label,
+.form-group .form-input-button input[type="file"]:active+label,
+.form-group>select:hover,
+.form-group>select:active,
+.form-group>input[type="email"]:hover,
+.form-group>input[type="email"]:active,
+.form-group>input[type="number"]:hover,
+.form-group>input[type="number"]:active,
+.form-group>input[type="password"]:hover,
+.form-group>input[type="password"]:active,
+.form-group>input[type="search"]:hover,
+.form-group>input[type="search"]:active,
+.form-group>input[type="tel"]:hover,
+.form-group>input[type="tel"]:active,
+.form-group>input[type="text"]:hover,
+.form-group>input[type="text"]:active,
+.form-group>input[type="color"]:hover,
+.form-group>input[type="color"]:active,
+.form-group>input[type="range"]:hover,
+.form-group>input[type="range"]:active {
+ z-index: 3;
+}
+
+.form-group .form-input-button input[type="checkbox"]:checked+label,
+.form-group .form-input-button input[type="radio"]:checked+label,
+.form-group .form-input-button input[type="color"]:checked+label,
+.form-group .form-input-button input[type="file"]:checked+label {
+ z-index: 3;
+}
+
+.form-group .button-line:after,
+.form-group .form-input-button-line input[type="checkbox"]+label:after,
+.form-group .form-input-button-line input[type="radio"]+label:after,
+.form-group .form-input-button-line input[type="color"]+label:after,
+.form-group .form-input-button-line input[type="file"]+label:after {
+ border-radius: 0;
+}
+
+.form-group.form-group-horizontal .form-group-text:first-child,
+.form-group.form-group-horizontal .button:first-child,
+.form-group.form-group-horizontal .button-line:first-child:after,
+.form-group.form-group-horizontal .form-input-button:first-child input[type="checkbox"]+label,
+.form-group.form-group-horizontal .form-input-button:first-child input[type="radio"]+label,
+.form-group.form-group-horizontal .form-input-button:first-child input[type="color"]+label,
+.form-group.form-group-horizontal .form-input-button:first-child input[type="file"]+label,
+.form-group.form-group-horizontal .form-input-button-line:first-child input[type="checkbox"]+label:after,
+.form-group.form-group-horizontal .form-input-button-line:first-child input[type="radio"]+label:after,
+.form-group.form-group-horizontal .form-input-button-line:first-child input[type="color"]+label:after,
+.form-group.form-group-horizontal .form-input-button-line:first-child input[type="file"]+label:after,
+.form-group.form-group-horizontal>select:first-child,
+.form-group.form-group-horizontal>input[type="email"]:first-child,
+.form-group.form-group-horizontal>input[type="number"]:first-child,
+.form-group.form-group-horizontal>input[type="password"]:first-child,
+.form-group.form-group-horizontal>input[type="search"]:first-child,
+.form-group.form-group-horizontal>input[type="tel"]:first-child,
+.form-group.form-group-horizontal>input[type="text"]:first-child,
+.form-group.form-group-horizontal>input[type="color"]:first-child,
+.form-group.form-group-horizontal>input[type="range"]:first-child {
+ border-radius: calc(var(--theme-radius) * 0.01em) 0 0 calc(var(--theme-radius) * 0.01em);
+}
+
+.form-group.form-group-horizontal .form-group-text:last-child,
+.form-group.form-group-horizontal .button:last-child,
+.form-group.form-group-horizontal .button-line:last-child:after,
+.form-group.form-group-horizontal .form-input-button:last-child input[type="checkbox"]+label,
+.form-group.form-group-horizontal .form-input-button:last-child input[type="radio"]+label,
+.form-group.form-group-horizontal .form-input-button:last-child input[type="color"]+label,
+.form-group.form-group-horizontal .form-input-button:last-child input[type="file"]+label,
+.form-group.form-group-horizontal .form-input-button-line:last-child input[type="checkbox"]+label:after,
+.form-group.form-group-horizontal .form-input-button-line:last-child input[type="radio"]+label:after,
+.form-group.form-group-horizontal .form-input-button-line:last-child input[type="color"]+label:after,
+.form-group.form-group-horizontal .form-input-button-line:last-child input[type="file"]+label:after,
+.form-group.form-group-horizontal>select:last-child,
+.form-group.form-group-horizontal>input[type="email"]:last-child,
+.form-group.form-group-horizontal>input[type="number"]:last-child,
+.form-group.form-group-horizontal>input[type="password"]:last-child,
+.form-group.form-group-horizontal>input[type="search"]:last-child,
+.form-group.form-group-horizontal>input[type="tel"]:last-child,
+.form-group.form-group-horizontal>input[type="text"]:last-child,
+.form-group.form-group-horizontal>input[type="color"]:last-child,
+.form-group.form-group-horizontal>input[type="range"]:last-child {
+ border-radius: 0 calc(var(--theme-radius) * 0.01em) calc(var(--theme-radius) * 0.01em) 0;
+}
+
+.form-group.form-group-vertical .form-group-text:first-child,
+.form-group.form-group-vertical .button:first-child,
+.form-group.form-group-vertical .button-line:first-child:after,
+.form-group.form-group-vertical .form-input-button:first-child input[type="checkbox"]+label,
+.form-group.form-group-vertical .form-input-button:first-child input[type="radio"]+label,
+.form-group.form-group-vertical .form-input-button:first-child input[type="color"]+label,
+.form-group.form-group-vertical .form-input-button:first-child input[type="file"]+label,
+.form-group.form-group-vertical .form-input-button-line:first-child input[type="checkbox"]+label:after,
+.form-group.form-group-vertical .form-input-button-line:first-child input[type="radio"]+label:after,
+.form-group.form-group-vertical .form-input-button-line:first-child input[type="color"]+label:after,
+.form-group.form-group-vertical .form-input-button-line:first-child input[type="file"]+label:after,
+.form-group.form-group-vertical>select:first-child,
+.form-group.form-group-vertical>input[type="email"]:first-child,
+.form-group.form-group-vertical>input[type="number"]:first-child,
+.form-group.form-group-vertical>input[type="password"]:first-child,
+.form-group.form-group-vertical>input[type="search"]:first-child,
+.form-group.form-group-vertical>input[type="tel"]:first-child,
+.form-group.form-group-vertical>input[type="text"]:first-child,
+.form-group.form-group-vertical>input[type="color"]:first-child,
+.form-group.form-group-vertical>input[type="range"]:first-child {
+ border-radius: calc(var(--theme-radius) * 0.01em) calc(var(--theme-radius) * 0.01em) 0 0;
+}
+
+.form-group.form-group-vertical .form-group-text:last-child,
+.form-group.form-group-vertical .button:last-child,
+.form-group.form-group-vertical .button-line:last-child:after,
+.form-group.form-group-vertical .form-input-button:last-child input[type="checkbox"]+label,
+.form-group.form-group-vertical .form-input-button:last-child input[type="radio"]+label,
+.form-group.form-group-vertical .form-input-button:last-child input[type="color"]+label,
+.form-group.form-group-vertical .form-input-button:last-child input[type="file"]+label,
+.form-group.form-group-vertical .form-input-button-line:last-child input[type="checkbox"]+label:after,
+.form-group.form-group-vertical .form-input-button-line:last-child input[type="radio"]+label:after,
+.form-group.form-group-vertical .form-input-button-line:last-child input[type="color"]+label:after,
+.form-group.form-group-vertical .form-input-button-line:last-child input[type="file"]+label:after,
+.form-group.form-group-vertical>select:last-child,
+.form-group.form-group-vertical>input[type="email"]:last-child,
+.form-group.form-group-vertical>input[type="number"]:last-child,
+.form-group.form-group-vertical>input[type="password"]:last-child,
+.form-group.form-group-vertical>input[type="search"]:last-child,
+.form-group.form-group-vertical>input[type="tel"]:last-child,
+.form-group.form-group-vertical>input[type="text"]:last-child,
+.form-group.form-group-vertical>input[type="color"]:last-child,
+.form-group.form-group-vertical>input[type="range"]:last-child {
+ border-radius: 0 0 calc(var(--theme-radius) * 0.01em) calc(var(--theme-radius) * 0.01em);
+}
+
+.form-group.form-group-horizontal .form-group-text:only-child,
+.form-group.form-group-horizontal .button:only-child,
+.form-group.form-group-horizontal .button-line:only-child:after,
+.form-group.form-group-horizontal>select:only-child,
+.form-group.form-group-horizontal>input[type="email"]:only-child,
+.form-group.form-group-horizontal>input[type="number"]:only-child,
+.form-group.form-group-horizontal>input[type="password"]:only-child,
+.form-group.form-group-horizontal>input[type="search"]:only-child,
+.form-group.form-group-horizontal>input[type="tel"]:only-child,
+.form-group.form-group-horizontal>input[type="text"]:only-child,
+.form-group.form-group-horizontal>input[type="color"]:only-child,
+.form-group.form-group-horizontal>input[type="range"]:only-child,
+.form-group.form-group-vertical .form-group-text:only-child,
+.form-group.form-group-vertical .button:only-child,
+.form-group.form-group-vertical .button-line:only-child:after,
+.form-group.form-group-vertical>select:only-child,
+.form-group.form-group-vertical>input[type="email"]:only-child,
+.form-group.form-group-vertical>input[type="number"]:only-child,
+.form-group.form-group-vertical>input[type="password"]:only-child,
+.form-group.form-group-vertical>input[type="search"]:only-child,
+.form-group.form-group-vertical>input[type="tel"]:only-child,
+.form-group.form-group-vertical>input[type="text"]:only-child,
+.form-group.form-group-vertical>input[type="color"]:only-child,
+.form-group.form-group-vertical>input[type="range"]:only-child {
+ border-radius: calc(var(--theme-radius) * 0.01em);
+}
+
+.form-group.form-group-nested-button * .button,
+.form-group.form-group-nested-button * .button-line:after,
+.form-group.form-group-nested-button * input[type="checkbox"]+label,
+.form-group.form-group-nested-button * input[type="radio"]+label,
+.form-group.form-group-nested-button * input[type="color"]+label {
+ border-radius: 0;
+}
+
+.form-group.form-group-nested-button *:first-child .button,
+.form-group.form-group-nested-button *:first-child .button-line:after,
+.form-group.form-group-nested-button *:first-child input[type="checkbox"]+label,
+.form-group.form-group-nested-button *:first-child input[type="radio"]+label,
+.form-group.form-group-nested-button *:first-child input[type="color"]+label {
+ border-radius: calc(var(--theme-radius) * 0.01em) 0 0 calc(var(--theme-radius) * 0.01em);
+}
+
+.form-group.form-group-nested-button *:last-child .button,
+.form-group.form-group-nested-button *:last-child .button-line:after,
+.form-group.form-group-nested-button *:last-child input[type="checkbox"]+label,
+.form-group.form-group-nested-button *:last-child input[type="radio"]+label,
+.form-group.form-group-nested-button *:last-child input[type="color"]+label {
+ border-radius: 0 calc(var(--theme-radius) * 0.01em) calc(var(--theme-radius) * 0.01em) 0;
+}
+
+.form-group .form-group-radius-left.form-group-text,
+.form-group .form-group-radius-left.button,
+.form-group .form-group-radius-left.button-line:after,
+.form-group>select.form-group-radius-left,
+.form-group>input.form-group-radius-left[type="email"],
+.form-group>input.form-group-radius-left[type="number"],
+.form-group>input.form-group-radius-left[type="password"],
+.form-group>input.form-group-radius-left[type="search"],
+.form-group>input.form-group-radius-left[type="tel"],
+.form-group>input.form-group-radius-left[type="text"],
+.form-group>input.form-group-radius-left[type="color"],
+.form-group>input.form-group-radius-left[type="range"] {
+ border-top-left-radius: calc(var(--theme-radius) * 0.01em);
+ border-bottom-left-radius: calc(var(--theme-radius) * 0.01em);
+}
+
+.form-group .form-group-radius-right.form-group-text,
+.form-group .form-group-radius-right.button,
+.form-group .form-group-radius-right.butbutton-lineton:after,
+.form-group>select.form-group-radius-right,
+.form-group>input.form-group-radius-right[type="email"],
+.form-group>input.form-group-radius-right[type="number"],
+.form-group>input.form-group-radius-right[type="password"],
+.form-group>input.form-group-radius-right[type="search"],
+.form-group>input.form-group-radius-right[type="tel"],
+.form-group>input.form-group-radius-right[type="text"],
+.form-group>input.form-group-radius-right[type="color"],
+.form-group>input.form-group-radius-right[type="range"] {
+ border-top-right-radius: calc(var(--theme-radius) * 0.01em);
+ border-bottom-right-radius: calc(var(--theme-radius) * 0.01em);
+}
+
+.form-group.form-group-reverse .form-group-text:first-child,
+.form-group.form-group-reverse .button:first-child,
+.form-group.form-group-reverse .button-line:first-child:after,
+.form-group.form-group-reverse .form-input-button:first-child input[type="checkbox"]+label,
+.form-group.form-group-reverse .form-input-button:first-child input[type="radio"]+label,
+.form-group.form-group-reverse .form-input-button:first-child input[type="color"]+label,
+.form-group.form-group-reverse .form-input-button:first-child input[type="file"]+label,
+.form-group.form-group-reverse .form-input-button-line:first-child input[type="checkbox"]+label:after,
+.form-group.form-group-reverse .form-input-button-line:first-child input[type="radio"]+label:after,
+.form-group.form-group-reverse .form-input-button-line:first-child input[type="color"]+label:after,
+.form-group.form-group-reverse .form-input-button-line:first-child input[type="file"]+label:after,
+.form-group.form-group-reverse>select:first-child,
+.form-group.form-group-reverse>input[type="email"]:first-child,
+.form-group.form-group-reverse>input[type="number"]:first-child,
+.form-group.form-group-reverse>input[type="password"]:first-child,
+.form-group.form-group-reverse>input[type="search"]:first-child,
+.form-group.form-group-reverse>input[type="tel"]:first-child,
+.form-group.form-group-reverse>input[type="text"]:first-child,
+.form-group.form-group-reverse>input[type="color"]:first-child,
+.form-group.form-group-reverse>input[type="range"]:first-child {
+ border-radius: 0 calc(var(--theme-radius) * 0.01em) calc(var(--theme-radius) * 0.01em) 0;
+}
+
+.form-group.form-group-reverse .form-group-text:last-child,
+.form-group.form-group-reverse .button:last-child,
+.form-group.form-group-reverse .button-line:last-child:after,
+.form-group.form-group-reverse .form-input-button:last-child input[type="checkbox"]+label,
+.form-group.form-group-reverse .form-input-button:last-child input[type="radio"]+label,
+.form-group.form-group-reverse .form-input-button:last-child input[type="color"]+label,
+.form-group.form-group-reverse .form-input-button:last-child input[type="file"]+label,
+.form-group.form-group-reverse .form-input-button-line:last-child input[type="checkbox"]+label:after,
+.form-group.form-group-reverse .form-input-button-line:last-child input[type="radio"]+label:after,
+.form-group.form-group-reverse .form-input-button-line:last-child input[type="color"]+label:after,
+.form-group.form-group-reverse .form-input-button-line:last-child input[type="file"]+label:after,
+.form-group.form-group-reverse>select:last-child,
+.form-group.form-group-reverse>input[type="email"]:last-child,
+.form-group.form-group-reverse>input[type="number"]:last-child,
+.form-group.form-group-reverse>input[type="password"]:last-child,
+.form-group.form-group-reverse>input[type="search"]:last-child,
+.form-group.form-group-reverse>input[type="tel"]:last-child,
+.form-group.form-group-reverse>input[type="text"]:last-child,
+.form-group.form-group-reverse>input[type="color"]:last-child,
+.form-group.form-group-reverse>input[type="range"]:last-child {
+ border-radius: calc(var(--theme-radius) * 0.01em) 0 0 calc(var(--theme-radius) * 0.01em);
+}
+
+.form-group.form-group-reverse .form-group-text:only-child,
+.form-group.form-group-reverse .button:only-child,
+.form-group.form-group-reverse .button-line:only-child:after,
+.form-group.form-group-reverse>select:only-child,
+.form-group.form-group-reverse>input[type="email"]:only-child,
+.form-group.form-group-reverse>input[type="number"]:only-child,
+.form-group.form-group-reverse>input[type="password"]:only-child,
+.form-group.form-group-reverse>input[type="search"]:only-child,
+.form-group.form-group-reverse>input[type="tel"]:only-child,
+.form-group.form-group-reverse>input[type="text"]:only-child,
+.form-group.form-group-reverse>input[type="color"]:only-child,
+.form-group.form-group-reverse>input[type="range"]:only-child {
+ border-radius: calc(var(--theme-radius) * 0.01em);
+}
+
+.form-group.form-group-reverse.form-group-nested-button * .button,
+.form-group.form-group-reverse.form-group-nested-button * .button-line:after,
+.form-group.form-group-reverse.form-group-nested-button * input[type="checkbox"]+label,
+.form-group.form-group-reverse.form-group-nested-button * input[type="radio"]+label,
+.form-group.form-group-reverse.form-group-nested-button * input[type="color"]+label {
+ border-radius: 0;
+}
+
+.form-group.form-group-reverse.form-group-nested-button *:first-child .button,
+.form-group.form-group-reverse.form-group-nested-button *:first-child .button-line:after,
+.form-group.form-group-reverse.form-group-nested-button *:first-child input[type="checkbox"]+label,
+.form-group.form-group-reverse.form-group-nested-button *:first-child input[type="radio"]+label,
+.form-group.form-group-reverse.form-group-nested-button *:first-child input[type="color"]+label {
+ border-radius: 0 calc(var(--theme-radius) * 0.01em) calc(var(--theme-radius) * 0.01em) 0;
+}
+
+.form-group.form-group-reverse.form-group-nested-button *:last-child .button,
+.form-group.form-group-reverse.form-group-nested-button *:last-child .button-line:after,
+.form-group.form-group-reverse.form-group-nested-button *:last-child input[type="checkbox"]+label,
+.form-group.form-group-reverse.form-group-nested-button *:last-child input[type="radio"]+label,
+.form-group.form-group-reverse.form-group-nested-button *:last-child input[type="color"]+label {
+ border-radius: calc(var(--theme-radius) * 0.01em) 0 0 calc(var(--theme-radius) * 0.01em);
+}
+
+.form-group-border {
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ border-width: var(--layout-line-width);
+ border-color: hsl(var(--form-group-border));
+ border-style: solid;
+ overflow: hidden;
+}
+
+.form-group-border-theme-color {
+ border-color: hsl(var(--theme-primary-050));
+}
+
+.form-group.form-group-border .form-group-text,
+.form-group.form-group-border .button,
+.form-group.form-group-border .button-line:after,
+.form-group.form-group-border>select,
+.form-group.form-group-border>input[type="email"],
+.form-group.form-group-border>input[type="number"],
+.form-group.form-group-border>input[type="password"],
+.form-group.form-group-border>input[type="search"],
+.form-group.form-group-border>input[type="tel"],
+.form-group.form-group-border>input[type="text"],
+.form-group.form-group-border>input[type="color"],
+.form-group.form-group-border>input[type="range"],
+.form-group.form-group-border.form-group-nested-button * .button,
+.form-group.form-group-border.form-group-nested-button * .button-line:after,
+.form-group.form-group-border.form-group-nested-button * input[type="checkbox"]+label,
+.form-group.form-group-border.form-group-nested-button * input[type="radio"]+label,
+.form-group.form-group-border.form-group-nested-button * input[type="file"]+label,
+.form-group.form-group-border.form-group-nested-button * input[type="color"]+label {
+ border-radius: 0;
+}
+
+.form-group-item-small,
+.form-group-item-medium,
+.form-group-item-large,
+.form-group>.button.form-group-item-small,
+.form-group>.button.form-group-item-medium,
+.form-group>.button.form-group-item-large,
+.form-group>select.form-group-item-small,
+.form-group>select.form-group-item-medium,
+.form-group>select.form-group-item-large,
+.form-group>input[type].form-group-item-small,
+.form-group>input[type].form-group-item-medium,
+.form-group>input[type].form-group-item-large {
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+}
+
+.form-group-item-small,
+.form-group>.button.form-group-item-small,
+.form-group>select.form-group-item-small,
+.form-group>input[type].form-group-item-small {
+ width: 4em;
+ flex-shrink: 0;
+}
+
+.form-group-item-medium,
+.form-group>.button.form-group-item-medium,
+.form-group>select.form-group-item-medium,
+.form-group>input[type].form-group-item-medium {
+ width: 6em;
+ flex-shrink: 0;
+}
+
+.form-group-item-large,
+.form-group>.button.form-group-item-large,
+.form-group>select.form-group-item-large,
+.form-group>input[type].form-group-item-large {
+ width: 8em;
+ flex-shrink: 0;
+}
+
+.form-group-item-shrink,
+.form-group>.button.form-group-item-shrink,
+.form-group>select.form-group-item-shrink,
+.form-group>input[type].form-group-item-shrink {
+ flex-grow: 0;
+}
+
+.form-group-item-grow,
+.form-group>.button.form-group-item-grow,
+.form-group>select.form-group-item-grow,
+.form-group>input[type].form-group-item-grow {
+ flex-grow: 1;
+}
+
+.form-group-item-half,
+.form-group>.button.form-group-item-half,
+.form-group>select.form-group-item-half,
+.form-group>input[type].form-group-item-half {
+ flex-basis: 50%;
+}
+
+.form-group-item-equal,
+.form-group>.button.form-group-item-equal,
+.form-group>select.form-group-item-equal,
+.form-group>input[type].form-group-item-equal {
+ flex-basis: 0;
+}
diff --git a/src/component/form/group/index.js b/src/component/form/group/index.js
new file mode 100644
index 00000000..45195e6b
--- /dev/null
+++ b/src/component/form/group/index.js
@@ -0,0 +1,56 @@
+import { node } from '../../../utility/node';
+
+import './index.css';
+
+export const group = function({
+ direction = 'horizontal',
+ reverse = false,
+ block = false,
+ border = false,
+ children = false,
+ justify = 'left'
+} = {}) {
+
+ const group = node('div|class:form-group', children);
+
+ switch (direction) {
+ case 'horizontal':
+ group.classList.add('form-group-horizontal');
+ break;
+
+ case 'vertical':
+ group.classList.add('form-group-vertical');
+ break;
+ };
+
+ if (reverse) {
+ group.classList.add('form-group-reverse');
+ };
+
+ if (block) {
+ group.classList.add('form-group-block');
+ };
+
+ if (border) {
+ group.classList.add('form-group-border');
+ };
+
+ switch (justify) {
+
+ case 'left':
+ group.classList.add('form-group-justify-left');
+ break;
+
+ case 'right':
+ group.classList.add('form-group-justify-right');
+ break;
+
+ case 'space-between':
+ group.classList.add('form-group-justify-space-between');
+ break;
+
+ };
+
+ return group;
+
+};
diff --git a/src/component/form/groupText/index.css b/src/component/form/groupText/index.css
new file mode 100644
index 00000000..35783774
--- /dev/null
+++ b/src/component/form/groupText/index.css
@@ -0,0 +1,87 @@
+:root {
+ --form-group-text-background: var(--theme-primary-020);
+ --form-group-text-background-focus-hover: var(--theme-primary-020);
+ --form-group-text-background-active: var(--theme-primary-020);
+ --form-group-text-background-disabled: var(--theme-primary-010);
+ --form-group-text-border: var(--theme-primary-020);
+ --form-group-text-border-focus-hover: var(--theme-primary-020);
+ --form-group-text-border-active: var(--theme-primary-020);
+ --form-group-text-border-disabled: var(--theme-primary-010);
+}
+
+.form-group-text {
+ background-color: hsl(var(--form-group-text-background));
+ padding: 0 1.25em;
+ margin: 0;
+ color: hsl(var(--form-input-text));
+ min-width: 4em;
+ font-size: 1em;
+ font-family: var(--theme-font-ui-name);
+ font-weight: var(--theme-font-ui-weight);
+ font-style: var(--theme-font-ui-style);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 0;
+ border-width: var(--layout-line-width);
+ border-color: hsl(var(--form-group-text-border));
+ border-style: solid;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ white-space: nowrap;
+ transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast);
+}
+
+.form-group-text:hover,
+.form-group-text:focus {
+ background-color: hsl(var(--form-group-text-background-focus-hover));
+ border-color: hsl(var(--form-group-text-border-focus-hover));
+ color: hsl(var(--form-input-text-hover));
+ outline: none;
+}
+
+.form-group-text:active {
+ background-color: hsl(var(--form-group-text-background-active));
+ border-color: hsl(var(--form-group-text-border-active));
+ color: hsl(var(--form-input-text-hover));
+ outline: none;
+}
+
+.form-group-text.disabled,
+.form-group-text.disabled:hover,
+.form-group-text.disabled:focus,
+.form-group-text.disable:active {
+ background-color: hsl(var(--form-group-text-background-disabled));
+ border-color: hsl(var(--form-group-text-border-disabled));
+ color: hsl(var(--form-input-text-disabled));
+ box-shadow: none;
+ cursor: default;
+}
+
+.form-group-text-left {
+ justify-content: flex-start;
+}
+
+.form-group-text-right {
+ justify-content: flex-end;
+}
+
+.form-group-text-borderless {
+ padding: 0;
+ border-width: 0;
+ min-width: inherit;
+}
+
+.form-group-text-transparent,
+.form-group-text-transparent:hover,
+.form-group-text-transparent:focus,
+.form-group-text-transparent:active {
+ background-color: transparent;
+}
+
+.form-group-text-transparent.disabled,
+.form-group-text-transparent.disabled:hover,
+.form-group-text-transparent.disabled:focus,
+.form-group-text-transparent.disable:active {
+ background-color: transparent;
+ color: hsl(var(--form-label-disabled));
+}
diff --git a/src/component/form/groupText/index.js b/src/component/form/groupText/index.js
new file mode 100644
index 00000000..73b1a42f
--- /dev/null
+++ b/src/component/form/groupText/index.js
@@ -0,0 +1,26 @@
+import { node } from '../../../utility/node';
+
+import './index.css';
+
+export const groupText = ({
+ text = false,
+ classList = []
+} = {}) => {
+
+ const textElement = node('div|class:form-group-text,tabindex:1');
+
+ if (text) {
+ textElement.textContent = text;
+ };
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ textElement.classList.add(item);
+ });
+
+ };
+
+ return textElement;
+
+};
diff --git a/src/component/form/helper/index.css b/src/component/form/helper/index.css
new file mode 100644
index 00000000..1be2656e
--- /dev/null
+++ b/src/component/form/helper/index.css
@@ -0,0 +1,24 @@
+:root {
+ --form-helper: var(--theme-primary-140);
+ --form-helper-disabled: var(--theme-primary-030);
+}
+
+.form-helper-item {
+ font-size: 0.8em;
+ color: hsl(var(--form-helper));
+ transition: color var(--layout-transition-extra-fast);
+}
+
+.form-helper-item.disabled {
+ color: hsl(var(--form-helper-disabled));
+}
+
+.form-helper-item.disabled a,
+.form-helper-item.disabled a:link,
+.form-helper-item.disabled a:visited,
+.form-helper-item.disabled a:focus,
+.form-helper-item.disabled a:hover,
+.form-helper-item.disabled a:active {
+ color: hsl(var(--form-helper-disabled));
+ text-decoration: none;
+}
diff --git a/src/component/form/helper/index.js b/src/component/form/helper/index.js
new file mode 100644
index 00000000..a494f434
--- /dev/null
+++ b/src/component/form/helper/index.js
@@ -0,0 +1,30 @@
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+
+import './index.css';
+
+export const helper = function({
+ text = 'text',
+ classList = []
+} = {}) {
+
+ const helper = complexNode({
+ tag: 'p',
+ text: text,
+ attr: [{
+ key: 'class',
+ value: 'form-helper-item'
+ }]
+ });
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ helper.classList.add(item);
+ });
+
+ };
+
+ return helper;
+
+};
\ No newline at end of file
diff --git a/src/component/form/indent/index.css b/src/component/form/indent/index.css
new file mode 100644
index 00000000..a84983c6
--- /dev/null
+++ b/src/component/form/indent/index.css
@@ -0,0 +1,8 @@
+:root {
+ --indent-size: 5;
+ --indent-space: calc((var(--indent-size) / 2) * 1em);
+}
+
+.form-indent {
+ margin-left: var(--indent-space);
+}
diff --git a/src/component/form/indent/index.js b/src/component/form/indent/index.js
new file mode 100644
index 00000000..ff61d16d
--- /dev/null
+++ b/src/component/form/indent/index.js
@@ -0,0 +1,11 @@
+import { node } from '../../../utility/node';
+
+import './index.css';
+
+export const indent = ({
+ children = false
+} = {}) => {
+
+ return node('div|class:form-indent', children);
+
+};
diff --git a/src/component/form/index.css b/src/component/form/index.css
new file mode 100644
index 00000000..efa984e6
--- /dev/null
+++ b/src/component/form/index.css
@@ -0,0 +1,18 @@
+:root {
+ --form-space: 8;
+}
+
+:root {
+ --form-placeholder: var(--theme-primary-040);
+ --form-placeholder-focus-hover: var(--theme-primary-040);
+ --form-placeholder-disabled: var(--theme-primary-020);
+}
+
+:root {
+ --form-ring-hover: 0 0 0 var(--layout-line-width) hsl(var(--theme-primary-080));
+ --form-ring-focus:
+ 0 0 0 var(--layout-line-width) hsl(var(--theme-primary-090)),
+ 0 0 0 calc(var(--layout-line-width) * 2) hsla(var(--theme-primary-090), 0.25);
+ --form-ring-accent: 0 0 0 var(--layout-line-width) rgb(var(--theme-accent)),
+ 0 0 0 calc(var(--layout-line-width) * 2) rgba(var(--theme-accent), 0.25);
+}
diff --git a/src/component/form/index.js b/src/component/form/index.js
new file mode 100644
index 00000000..aef59c37
--- /dev/null
+++ b/src/component/form/index.js
@@ -0,0 +1,30 @@
+import { feedback } from './feedback';
+import { fieldset } from './fieldset';
+import { group } from './group';
+import { groupText } from './groupText';
+import { helper } from './helper';
+import { indent } from './indent';
+import { inline } from './inline';
+import { label } from './label';
+import { sticky } from './sticky';
+import { wrap } from './wrap';
+import { grid } from './grid';
+
+import * as input from './input';
+
+import './index.css';
+
+export {
+ feedback,
+ fieldset,
+ grid,
+ group,
+ groupText,
+ helper,
+ indent,
+ inline,
+ label,
+ sticky,
+ wrap,
+ input
+};
diff --git a/src/component/form/inline/index.css b/src/component/form/inline/index.css
new file mode 100644
index 00000000..d76079c9
--- /dev/null
+++ b/src/component/form/inline/index.css
@@ -0,0 +1,76 @@
+:root {
+ --form-inline-gap: 4;
+ --form-inline-gap-small: calc(var(--form-inline-gap) * 1);
+ --form-inline-gap-medium: calc(var(--form-inline-gap) * 2);
+ --form-inline-gap-large: calc(var(--form-inline-gap) * 4);
+}
+
+.form-inline {
+ position: relative;
+ display: inline-flex;
+ justify-content: flex-start;
+ align-items: center;
+}
+
+.form-inline-horizontal {
+ flex-direction: row;
+}
+
+.form-inline-vertical {
+ flex-direction: column;
+}
+
+.form-inline-gap-small {
+ row-gap: calc((var(--form-inline-gap-small) / 12) * 1em);
+ column-gap: calc((var(--form-inline-gap-small) / 4) * 1em);
+}
+
+.form-inline-gap-medium {
+ row-gap: calc((var(--form-inline-gap-medium) / 12) * 1em);
+ column-gap: calc((var(--form-inline-gap-medium) / 4) * 1em);
+}
+
+.form-inline-gap-large {
+ row-gap: calc((var(--form-inline-gap-large) / 12) * 1em);
+ column-gap: calc((var(--form-inline-gap-large) / 4) * 1em);
+}
+
+.form-inline-gap-equal.form-inline-gap-small {
+ gap: calc((var(--form-inline-gap-small) / 4) * 1em);
+}
+
+.form-inline-gap-equal.form-inline-gap-medium {
+ gap: calc((var(--form-inline-gap-medium) / 4) * 1em);
+}
+
+.form-inline-gap-equal.form-inline-gap-large {
+ gap: calc((var(--form-inline-gap-large) / 4) * 1em);
+}
+
+.form-inline-wrap {
+ flex-wrap: wrap;
+}
+
+.form-inline-block {
+ display: flex;
+}
+
+.form-inline .form-wrap:not(:first-child),
+.form-inline .form-wrap:not(:last-child) {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.form-inline .form-wrap {
+ flex-grow: 0;
+ flex-shrink: 1;
+ flex-basis: 0;
+}
+
+.form-inline .form-wrap label {
+ white-space: nowrap;
+}
+
+.form-inline label:not(:only-child):not(:last-child) {
+ padding-bottom: 0;
+}
diff --git a/src/component/form/inline/index.js b/src/component/form/inline/index.js
new file mode 100644
index 00000000..4937d080
--- /dev/null
+++ b/src/component/form/inline/index.js
@@ -0,0 +1,61 @@
+import { node } from '../../../utility/node';
+
+import './index.css';
+
+export const inline = function({
+ direction = 'horizontal',
+ reverse = false,
+ block = false,
+ wrap = false,
+ gap = 'medium',
+ equalGap = false,
+ children = false
+} = {}) {
+
+ const inline = node('div|class:form-inline', children);
+
+ switch (direction) {
+ case 'horizontal':
+ inline.classList.add('form-inline-horizontal');
+ break;
+
+ case 'vertical':
+ inline.classList.add('form-inline-vertical');
+ break;
+ };
+
+ switch (gap) {
+
+ case 'small':
+ inline.classList.add('form-inline-gap-small');
+ break;
+
+ case 'medium':
+ inline.classList.add('form-inline-gap-medium');
+ break;
+
+ case 'large':
+ inline.classList.add('form-inline-gap-large');
+ break;
+
+ };
+
+ if (equalGap) {
+ inline.classList.add('form-inline-gap-equal');
+ };
+
+ if (reverse) {
+ inline.classList.add('form-inline-reverse');
+ };
+
+ if (block) {
+ inline.classList.add('form-inline-block');
+ };
+
+ if (wrap) {
+ inline.classList.add('form-inline-wrap');
+ };
+
+ return inline;
+
+};
diff --git a/src/component/form/input/checkbox/index.css b/src/component/form/input/checkbox/index.css
new file mode 100644
index 00000000..8a43607d
--- /dev/null
+++ b/src/component/form/input/checkbox/index.css
@@ -0,0 +1,234 @@
+input[type="checkbox"] {
+ margin-bottom: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ opacity: 0;
+ display: block;
+ font-size: 1em;
+ line-height: 1;
+ cursor: pointer;
+ pointer-events: none;
+ box-sizing: border-box;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ transition: color var(--layout-transition-extra-fast);
+}
+
+input[type="checkbox"]+label {
+ padding: 0;
+ margin: 0;
+ font-size: 1em;
+ font-family: var(--theme-font-ui-name);
+ font-weight: var(--theme-font-ui-weight);
+ font-style: var(--theme-font-ui-style);
+ color: hsl(var(--form-label));
+ cursor: pointer;
+ display: flex;
+ gap: var(--form-thumb);
+ flex-direction: row;
+ justify-content: flex-start;
+ align-items: flex-start;
+ transition: transform var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast);
+}
+
+input[type="checkbox"]:hover+label,
+input[type="checkbox"]:focus+label {
+ color: hsl(var(--form-label-hover));
+}
+
+input[type="checkbox"]:active+label {
+ color: hsl(var(--form-label-focus-active));
+}
+
+input[type="checkbox"]:checked+label {
+ color: hsl(var(--form-label-checked));
+}
+
+input[type="checkbox"]:disabled+label,
+input[type="checkbox"]:disabled:hover+label,
+input[type="checkbox"]:disabled:focus+label {
+ color: hsl(var(--form-label-disabled));
+ cursor: default;
+}
+
+input[type="checkbox"]+label .label-icon {
+ background-color: hsl(var(--form-icon));
+ width: var(--form-thumb);
+ height: var(--form-thumb);
+ position: relative;
+ top: calc((-1 * (var(--form-thumb) * 0.5)) + (1em * 0.8));
+ display: block;
+ flex-grow: 0;
+ flex-shrink: 0;
+ z-index: 1;
+ box-shadow: none;
+ transition: background-color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
+}
+
+input[type="checkbox"]+label .label-icon {
+ border-radius: 0.25em;
+}
+
+input[type="checkbox"]:hover+label .label-icon,
+input[type="checkbox"]:focus+label .label-icon {
+ background-color: hsl(var(--form-icon-hover));
+ box-shadow: var(--form-ring-hover);
+}
+
+input[type="checkbox"]:active+label .label-icon {
+ background-color: hsl(var(--form-icon-active));
+ box-shadow: var(--form-ring-accent);
+ transition: none;
+}
+
+input[type="checkbox"]:checked+label .label-icon {
+ background-color: hsl(var(--form-icon-checked));
+}
+
+input[type="checkbox"]:checked:focus+label .label-icon,
+input[type="checkbox"]:checked:active+label .label-icon {
+ box-shadow: var(--form-ring-accent);
+}
+
+input[type="checkbox"]:disabled+label .label-icon,
+input[type="checkbox"]:disabled:hover+label .label-icon,
+input[type="checkbox"]:disabled:focus+label .label-icon,
+input[type="checkbox"]:checked:disabled+label .label-icon,
+input[type="checkbox"]:checked:disabled:hover+label .label-icon,
+input[type="checkbox"]:checked:disabled:focus+label .label-icon {
+ background-color: hsl(var(--form-icon-disabled));
+ box-shadow: none;
+}
+
+input[type="checkbox"]+label .label-icon:before {
+ content: "";
+ background-color: hsl(var(--form-icon-symbol));
+ width: 100%;
+ height: 100%;
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ transform: scale(0.7);
+ transform-origin: center;
+ z-index: 2;
+ transition: background-color var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast), transform var(--layout-transition-extra-fast);
+}
+
+input[type="checkbox"]+label .label-icon:before {
+ border-radius: 0.1em;
+}
+
+input[type="checkbox"]:active+label .label-icon:before {
+ background-color: hsl(var(--form-icon-symbol-active));
+ transition: none;
+}
+
+input[type="checkbox"]:checked+label .label-icon:before {
+ background-color: hsl(var(--form-icon-symbol-active));
+ border-radius: 50%;
+}
+
+input[type="checkbox"]:checked+label .label-icon:before {
+ transform: scale(0);
+}
+
+input[type="checkbox"]:disabled+label .label-icon:before,
+input[type="checkbox"]:disabled:hover+label .label-icon:before,
+input[type="checkbox"]:disabled:focus+label .label-icon:before,
+input[type="checkbox"]:disabled:active+label .label-icon:before,
+input[type="checkbox"]:checked:disabled+label .label-icon:before,
+input[type="checkbox"]:checked:disabled:hover+label .label-icon:before,
+input[type="checkbox"]:checked:disabled:focus+label .label-icon:before,
+input[type="checkbox"]:checked:disabled:active+label .label-icon:before {
+ background-color: hsl(var(--form-icon-symbol-disabled));
+}
+
+input[type="checkbox"]+label .label-icon:after {
+ content: "";
+ background-color: hsl(var(--form-icon-symbol));
+ width: 100%;
+ height: 100%;
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ transform: scale(0);
+ transform-origin: center;
+ z-index: 2;
+ transition: transform var(--layout-transition-extra-fast);
+ clip-path: polygon(7% 56%, 37% 86%, 95% 27%, 84% 16%, 37% 64%, 18% 45%);
+}
+
+input[type="checkbox"]:checked+label .label-icon:after {
+ background-color: hsl(var(--form-icon-symbol-active));
+ transform: scale(0.8);
+}
+
+input[type="checkbox"]:disabled+label .label-icon:after,
+input[type="checkbox"]:disabled:hover+label .label-icon:after,
+input[type="checkbox"]:disabled:focus+label .label-icon:after,
+input[type="checkbox"]:disabled:active+label .label-icon:after,
+input[type="checkbox"]:checked:disabled+label .label-icon:after,
+input[type="checkbox"]:checked:disabled:hover+label .label-icon:after,
+input[type="checkbox"]:checked:disabled:focus+label .label-icon:after,
+input[type="checkbox"]:checked:disabled:active+label .label-icon:after {
+ background-color: hsl(var(--form-icon-symbol-disabled));
+}
+
+input[type="checkbox"]+label .label-block-item {
+ color: hsl(var(--form-label));
+ transition: color var(--layout-transition-extra-fast);
+}
+
+input[type="checkbox"]:hover+label .label-block-item,
+input[type="checkbox"]:focus+label .label-block-item {
+ color: hsl(var(--form-label-hover));
+}
+
+input[type="checkbox"]:active+label .label-block-item {
+ color: hsl(var(--form-label-focus-active));
+}
+
+input[type="checkbox"]:checked+label .label-block-item {
+ color: hsl(var(--form-label-checked));
+}
+
+input[type="checkbox"]:disabled+label .label-block-item,
+input[type="checkbox"]:disabled:hover+label .label-block-item,
+input[type="checkbox"]:disabled:focus+label .label-block-item {
+ color: hsl(var(--form-label-disabled));
+ cursor: default;
+}
+
+input[type="checkbox"]+label .label-block-item.muted {
+ color: hsl(var(--utility-muted));
+ transition: color var(--layout-transition-extra-fast);
+}
+
+input[type="checkbox"]:hover+label .label-block-item.muted,
+input[type="checkbox"]:focus+label .label-block-item.muted {
+ color: hsl(var(--utility-muted-hover));
+}
+
+input[type="checkbox"]:active+label .label-block-item.muted {
+ color: hsl(var(--utility-muted-focus-active));
+}
+
+input[type="checkbox"]:checked+label .label-block-item.muted {
+ color: hsl(var(--utility-muted-checked));
+}
+
+input[type="checkbox"]:disabled+label .label-block-item.muted,
+input[type="checkbox"]:disabled:hover+label .label-block-item.muted,
+input[type="checkbox"]:disabled:focus+label .label-block-item.muted {
+ color: hsl(var(--utility-muted-disabled));
+ cursor: default;
+}
+
+input[type="checkbox"]:disabled+label .label-block-item,
+input[type="checkbox"]:disabled:hover+label .label-block-item,
+input[type="checkbox"]:disabled:focus+label .label-block-item {
+ color: hsl(var(--form-label-disabled));
+ cursor: default;
+}
diff --git a/src/component/form/input/checkbox/index.js b/src/component/form/input/checkbox/index.js
new file mode 100644
index 00000000..4b7dff7f
--- /dev/null
+++ b/src/component/form/input/checkbox/index.js
@@ -0,0 +1,45 @@
+import { node } from '../../../../utility/node';
+
+import './index.css';
+
+export const checkbox = ({
+ id = false,
+ value = false,
+ checked = false,
+ classList = [],
+ func = false
+} = {}) => {
+
+ const input = node('input|type:checkbox,tabindex:1');
+
+ if (id) {
+ input.setAttribute('id', id);
+ };
+
+ if (value) {
+ input.setAttribute('value', value);
+ };
+
+ if (checked) {
+ input.setAttribute('checked', '');
+ };
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ input.classList.add(item);
+ });
+
+ };
+
+ if (func) {
+
+ input.addEventListener('change', (event) => {
+ func();
+ });
+
+ };
+
+ return input;
+
+};
diff --git a/src/component/form/input/color/index.css b/src/component/form/input/color/index.css
new file mode 100644
index 00000000..2109b28a
--- /dev/null
+++ b/src/component/form/input/color/index.css
@@ -0,0 +1,99 @@
+input[type="color"] {
+ background-color: transparent;
+ padding: 0;
+ margin: 0;
+ width: 100%;
+ min-width: 4em;
+ height: 2.5em;
+ display: block;
+ border: 0;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ overflow: hidden;
+ cursor: pointer;
+ opacity: 1;
+ transition: box-shadow var(--layout-transition-extra-fast), opacity var(--layout-transition-extra-fast);
+}
+
+input[type="color"]:hover {
+ outline: none;
+ box-shadow: var(--form-ring-hover);
+}
+
+input[type="color"]:focus {
+ outline: none;
+ box-shadow: var(--form-ring-focus);
+}
+
+input[type="color"]:disabled {
+ opacity: 0.25;
+ cursor: default;
+}
+
+input[type="color"]:disabled:hover,
+input[type="color"]:disabled:focus {
+ box-shadow: none;
+}
+
+input[type="color"]::-webkit-color-swatch-wrapper {
+ border: 0;
+ padding: 0;
+ outline: none;
+}
+
+input[type="color"]::-webkit-color-swatch {
+ border: 0;
+ padding: 0;
+ outline: none;
+}
+
+input[type="color"]::-moz-color-swatch-wrapper {
+ border: 0;
+ padding: 0;
+ outline: none;
+}
+
+input[type="color"]::-moz-color-swatch {
+ border: 0;
+ padding: 0;
+ outline: none;
+}
+
+input[type="color"]::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+ outline: none;
+}
+
+.input-color-dot input[type="color"] {
+ margin: 0;
+ border-radius: 50%;
+ position: absolute;
+ top: 50%;
+ right: 1em;
+ width: var(--form-thumb);
+ height: var(--form-thumb);
+ min-width: inherit;
+ z-index: 4;
+ transform: translateY(-50%);
+ transition: none;
+}
+
+.input-color-dot input[type="color"]:hover {
+ outline: none;
+ box-shadow: none;
+}
+
+.input-color-dot input[type="color"]:focus {
+ outline: none;
+ box-shadow: none;
+}
+
+.input-color-dot input[type="color"]+label {
+ padding-right: calc(var(--form-thumb) + 2em);
+ position: relative;
+}
+
+.input-color-dot.form-input-button-link input[type="color"] {
+ box-shadow: 0 0 0 calc(var(--layout-line-width) * 0.75) hsl(var(--button-link-text));
+ transition: box-shadow var(--layout-transition-extra-fast);
+}
diff --git a/src/component/form/input/color/index.js b/src/component/form/input/color/index.js
new file mode 100644
index 00000000..0ca0ef08
--- /dev/null
+++ b/src/component/form/input/color/index.js
@@ -0,0 +1,36 @@
+import { node } from '../../../../utility/node';
+
+import './index.css';
+
+export const color = function({
+ id = false,
+ value = '#000000',
+ classList = [],
+ func = false
+} = {}) {
+
+ const input = node('input|type:color,value:' + value + ',tabindex:1');
+
+ if (id) {
+ input.setAttribute('id', id);
+ };
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ input.classList.add(item);
+ });
+
+ };
+
+ if (func) {
+
+ input.addEventListener('change', (event) => {
+ func();
+ });
+
+ };
+
+ return input;
+
+};
diff --git a/src/component/form/input/file/index.css b/src/component/form/input/file/index.css
new file mode 100644
index 00000000..e69de29b
diff --git a/src/component/form/input/file/index.js b/src/component/form/input/file/index.js
new file mode 100644
index 00000000..7337500b
--- /dev/null
+++ b/src/component/form/input/file/index.js
@@ -0,0 +1,35 @@
+import { node } from '../../../../utility/node';
+
+import './index.css';
+
+export const file = ({
+ id = false,
+ classList = [],
+ func = false
+} = {}) => {
+
+ const input = node('input|type:file,tabindex:1');
+
+ if (id) {
+ input.setAttribute('id', id);
+ };
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ input.classList.add(item);
+ });
+
+ };
+
+ if (func) {
+
+ input.addEventListener('change', (event) => {
+ func();
+ });
+
+ };
+
+ return input;
+
+};
diff --git a/src/component/form/input/index.css b/src/component/form/input/index.css
new file mode 100644
index 00000000..50116c23
--- /dev/null
+++ b/src/component/form/input/index.css
@@ -0,0 +1,30 @@
+:root {
+ --form-thumb-size: 5;
+ --form-thumb: calc((var(--form-thumb-size) / 4) * 1em);
+}
+
+:root {
+ --form-input-background: var(--theme-primary-020);
+ --form-input-background-hover: var(--theme-primary-020);
+ --form-input-background-focus-active: var(--theme-primary-010);
+ --form-input-background-disabled: var(--theme-primary-010);
+ --form-input-text: var(--theme-primary-text-020);
+ --form-input-text-hover: var(--theme-primary-text-020);
+ --form-input-text-focus-active: var(--theme-primary-text-010);
+ --form-input-text-disabled: var(--theme-primary-030);
+}
+
+:root {
+ --form-icon: var(--theme-primary-060);
+ --form-icon-hover: var(--theme-primary-040);
+ --form-icon-focus: var(--theme-primary-040);
+ --form-icon-active: var(--theme-primary-text-010);
+ --form-icon-checked: var(--theme-primary-text-010);
+ --form-icon-disabled: var(--theme-primary-020);
+}
+
+:root {
+ --form-icon-symbol: var(--theme-primary-010);
+ --form-icon-symbol-active: var(--theme-primary-010);
+ --form-icon-symbol-disabled: var(--theme-primary-010);
+}
diff --git a/src/component/form/input/index.js b/src/component/form/input/index.js
new file mode 100644
index 00000000..c5d39e28
--- /dev/null
+++ b/src/component/form/input/index.js
@@ -0,0 +1,25 @@
+import { checkbox } from './checkbox';
+import { color } from './color';
+import { file } from './file';
+import { number } from './number';
+import { radio } from './radio';
+import { range } from './range';
+import { text } from './text';
+import { textarea } from './textarea';
+import { inputButton } from './inputButton';
+import { select } from './select';
+
+import './index.css';
+
+export {
+ checkbox,
+ color,
+ file,
+ number,
+ radio,
+ range,
+ text,
+ textarea,
+ inputButton,
+ select
+};
diff --git a/src/component/form/input/inputButton/index.css b/src/component/form/input/inputButton/index.css
new file mode 100644
index 00000000..3cb875de
--- /dev/null
+++ b/src/component/form/input/inputButton/index.css
@@ -0,0 +1,314 @@
+.form-input-button {
+ position: relative;
+ display: flex;
+}
+
+.form-input-button input[type="checkbox"]+label,
+.form-input-button input[type="radio"]+label,
+.form-input-button input[type="color"]+label,
+.form-input-button input[type="file"]+label {
+ background-color: hsl(var(--button-background));
+ padding: 0.25em 1.25em;
+ margin: 0;
+ color: hsl(var(--button-text));
+ font-size: 1em;
+ font-family: var(--theme-font-ui-name);
+ font-weight: var(--theme-font-ui-weight);
+ font-style: var(--theme-font-ui-style);
+ min-height: 2.5em;
+ line-height: 1;
+ border: 0;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ position: relative;
+ text-align: center;
+ text-decoration: none;
+ white-space: nowrap;
+ cursor: pointer;
+ display: inline-flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ overflow: hidden;
+ box-shadow: none;
+ transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast);
+}
+
+.form-input-button input[type="checkbox"]:focus+label,
+.form-input-button input[type="checkbox"]:hover+label,
+.form-input-button input[type="radio"]:focus+label,
+.form-input-button input[type="radio"]:hover+label,
+.form-input-button input[type="color"]:focus+label,
+.form-input-button input[type="color"]:hover+label,
+.form-input-button input[type="file"]:focus+label,
+.form-input-button input[type="file"]:hover+label {
+ background-color: hsl(var(--button-background-focus-hover));
+ color: hsl(var(--button-text-focus-hover));
+ outline: none;
+ text-decoration: none;
+}
+
+.form-input-button input[type="checkbox"]:active+label,
+.form-input-button input[type="radio"]:active+label,
+.form-input-button input[type="color"]:active+label,
+.form-input-button input[type="file"]:active+label {
+ background-color: hsl(var(--button-background-active));
+ color: hsl(var(--button-text-active));
+ outline: none;
+ text-decoration: none;
+ transition: none;
+}
+
+.form-input-button input[type="checkbox"]:checked+label,
+.form-input-button input[type="radio"]:checked+label,
+.form-input-button input[type="color"]:checked+label,
+.form-input-button input[type="file"]:checked+label {
+ background-color: hsl(var(--button-background-active));
+ color: hsl(var(--button-text-active));
+ outline: none;
+ text-decoration: none;
+}
+
+.form-input-button input[type="checkbox"]:disabled+label,
+.form-input-button input[type="checkbox"]:disabled:hover+label,
+.form-input-button input[type="checkbox"]:disabled:focus+label,
+.form-input-button input[type="checkbox"]:disabled:active+label,
+.form-input-button input[type="radio"]:disabled+label,
+.form-input-button input[type="radio"]:disabled:hover+label,
+.form-input-button input[type="radio"]:disabled:focus+label,
+.form-input-button input[type="radio"]:disabled:active+label,
+.form-input-button input[type="color"]:disabled+label,
+.form-input-button input[type="color"]:disabled:hover+label,
+.form-input-button input[type="color"]:disabled:focus+label,
+.form-input-button input[type="color"]:disabled:active+label,
+.form-input-button input[type="file"]:disabled+label,
+.form-input-button input[type="file"]:disabled:hover+label,
+.form-input-button input[type="file"]:disabled:focus+label,
+.form-input-button input[type="file"]:disabled:active+label {
+ background-color: hsl(var(--button-background-disabled));
+ color: hsl(var(--button-text-disabled));
+ cursor: default;
+ text-decoration: none;
+}
+
+.form-input-button input[type="checkbox"]+label .label-icon,
+.form-input-button input[type="radio"]+label .label-icon {
+ top: inherit;
+}
+
+.form-input-button-ring input[type="checkbox"]+label,
+.form-input-button-ring input[type="radio"]+label,
+.form-input-button-ring input[type="color"]+label,
+.form-input-button-ring input[type="file"]+label {
+ transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
+}
+
+.form-input-button-ring input[type="checkbox"]:focus+label,
+.form-input-button-ring input[type="checkbox"]:hover+label,
+.form-input-button-ring input[type="radio"]:focus+label,
+.form-input-button-ring input[type="radio"]:hover+label,
+.form-input-button-ring input[type="color"]:focus+label,
+.form-input-button-ring input[type="color"]:hover+label,
+.form-input-button-ring input[type="file"]:focus+label,
+.form-input-button-ring input[type="file"]:hover+label {
+ box-shadow: var(--form-ring-hover);
+}
+
+.form-input-button-ring input[type="checkbox"]:active+label,
+.form-input-button-ring input[type="radio"]:active+label,
+.form-input-button-ring input[type="color"]:active+label,
+.form-input-button-ring input[type="file"]:active+label {
+ box-shadow: var(--form-ring-accent);
+}
+
+.form-input-button-ring input[type="checkbox"]:checked+label,
+.form-input-button-ring input[type="radio"]:checked+label,
+.form-input-button-ring input[type="color"]:checked+label,
+.form-input-button-ring input[type="file"]:checked+label {
+ box-shadow: var(--form-ring-accent);
+}
+
+.form-input-button-ring input[type="checkbox"]:disabled+label,
+.form-input-button-ring input[type="checkbox"]:disabled:hover+label,
+.form-input-button-ring input[type="checkbox"]:disabled:focus+label,
+.form-input-button-ring input[type="checkbox"]:disabled:active+label,
+.form-input-button-ring input[type="radio"]:disabled+label,
+.form-input-button-ring input[type="radio"]:disabled:hover+label,
+.form-input-button-ring input[type="radio"]:disabled:focus+label,
+.form-input-button-ring input[type="radio"]:disabled:active+label,
+.form-input-button-ring input[type="color"]:disabled+label,
+.form-input-button-ring input[type="color"]:disabled:hover+label,
+.form-input-button-ring input[type="color"]:disabled:focus+label,
+.form-input-button-ring input[type="color"]:disabled:active+label,
+.form-input-button-ring input[type="file"]:disabled+label,
+.form-input-button-ring input[type="file"]:disabled:hover+label,
+.form-input-button-ring input[type="file"]:disabled:focus+label,
+.form-input-button-ring input[type="file"]:disabled:active+label {
+ box-shadow: none;
+}
+
+.form-input-button-line input[type="checkbox"]+label:after,
+.form-input-button-line input[type="radio"]+label:after,
+.form-input-button-line input[type="color"]+label:after,
+.form-input-button-line input[type="file"]+label:after {
+ content: "";
+ background: transparent;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ clip-path: polygon(0 calc(100% - var(--layout-line-width)), 100% calc(100% - var(--layout-line-width)), 100% 100%, 0% 100%);
+ transition: background-color var(--layout-transition-extra-fast);
+ pointer-events: none;
+}
+
+.form-input-button-line input[type="checkbox"]:focus+label:after,
+.form-input-button-line input[type="checkbox"]:hover+label:after,
+.form-input-button-line input[type="radio"]:focus+label:after,
+.form-input-button-line input[type="radio"]:hover+label:after,
+.form-input-button-line input[type="color"]:focus+label:after,
+.form-input-button-line input[type="color"]:hover+label:after,
+.form-input-button-line input[type="file"]:focus+label:after,
+.form-input-button-line input[type="file"]:hover+label:after {
+ background-color: hsl(var(--button-border-focus-hover));
+}
+
+.form-input-button-line input[type="checkbox"]:active+label:after,
+.form-input-button-line input[type="radio"]:active+label:after,
+.form-input-button-line input[type="color"]:active+label:after,
+.form-input-button-line input[type="file"]:active+label:after {
+ background-color: rgb(var(--button-border-active));
+ transition: none;
+}
+
+.form-input-button-line input[type="checkbox"]:checked+label:after,
+.form-input-button-line input[type="radio"]:checked+label:after,
+.form-input-button-line input[type="color"]:checked+label:after,
+.form-input-button-line input[type="file"]:checked+label:after {
+ background-color: rgb(var(--button-border-active));
+ transition: none;
+}
+
+.form-input-button-line input[type="checkbox"]:disabled+label:after,
+.form-input-button-line input[type="checkbox"]:disabled:hover+label:after,
+.form-input-button-line input[type="checkbox"]:disabled:focus+label:after,
+.form-input-button-line input[type="checkbox"]:disabled:active+label:after,
+.form-input-button-line input[type="radio"]:disabled+label:after,
+.form-input-button-line input[type="radio"]:disabled:hover+label:after,
+.form-input-button-line input[type="radio"]:disabled:focus+label:after,
+.form-input-button-line input[type="radio"]:disabled:active+label:after,
+.form-input-button-line input[type="color"]:disabled+label:after,
+.form-input-button-line input[type="color"]:disabled:hover+label:after,
+.form-input-button-line input[type="color"]:disabled:focus+label:after,
+.form-input-button-line input[type="color"]:disabled:active+label:after,
+.form-input-button-line input[type="file"]:disabled+label:after,
+.form-input-button-line input[type="file"]:disabled:hover+label:after,
+.form-input-button-line input[type="file"]:disabled:focus+label:after,
+.form-input-button-line input[type="file"]:disabled:active+label:after {
+ background-color: hsl(var(--button-border-disabled));
+}
+
+.form-input-button-link input[type="checkbox"]+label,
+.form-input-button-link input[type="radio"]+label,
+.form-input-button-link input[type="color"]+label,
+.form-input-button-link input[type="file"]+label {
+ background-color: transparent;
+}
+
+.form-input-button-link input[type="checkbox"]:hover+label,
+.form-input-button-link input[type="checkbox"]:focus+label,
+.form-input-button-link input[type="checkbox"]:checked+label,
+.form-input-button-link input[type="radio"]:hover+label,
+.form-input-button-link input[type="radio"]:focus+label,
+.form-input-button-link input[type="radio"]:checked+label,
+.form-input-button-link input[type="color"]:hover+label,
+.form-input-button-link input[type="color"]:focus+label,
+.form-input-button-link input[type="color"]:checked+label,
+.form-input-button-link input[type="file"]:hover+label,
+.form-input-button-link input[type="file"]:focus+label,
+.form-input-button-link input[type="file"]:checked+label {
+ background-color: transparent;
+}
+
+.form-input-button-link input[type="checkbox"]:active+label,
+.form-input-button-link input[type="radio"]:active+label,
+.form-input-button-link input[type="color"]:active+label,
+.form-input-button-link input[type="file"]:active+label {
+ background-color: transparent;
+}
+
+.form-input-button-link input:disabled[type="checkbox"]+label,
+.form-input-button-link input:disabled[type="radio"]+label,
+.form-input-button-link input:disabled[type="color"]+label,
+.form-input-button-link input:disabled[type="file"]+label {
+ background-color: transparent;
+ pointer-events: none;
+}
+
+.form-input-button-link input:disabled[type="checkbox"]:hover+label,
+.form-input-button-link input:disabled[type="checkbox"]:focus+label,
+.form-input-button-link input:disabled[type="radio"]:hover+label,
+.form-input-button-link input:disabled[type="radio"]:focus+label,
+.form-input-button-link input:disabled[type="color"]:hover+label,
+.form-input-button-link input:disabled[type="color"]:focus+label,
+.form-input-button-link input:disabled[type="file"]:hover+label,
+.form-input-button-link input:disabled[type="file"]:focus+label {
+ background-color: transparent;
+}
+
+.form-input-button-sr-only input[type="checkbox"]+label,
+.form-input-button-sr-only input[type="radio"]+label,
+.form-input-button-sr-only input[type="color"]+label,
+.form-input-button-sr-only input[type="file"]+label {
+ display: block;
+}
+
+.form-input-button-sr-only input[type="checkbox"]+label .label-block,
+.form-input-button-sr-only input[type="radio"]+label .label-block,
+.form-input-button-sr-only input[type="color"]+label .label-block,
+.form-input-button-sr-only input[type="file"]+label .label-block {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border: 0;
+}
+
+.form-input-button-sr-only.input-color-dot input[type="color"]+label {
+ padding: 0.25em 1.75em;
+ min-width: 4em;
+}
+
+.form-input-button-sr-only.input-color-dot input[type="color"] {
+ top: 50%;
+ left: 50%;
+ right: initial;
+ transform: translate(-50%, -50%);
+}
+
+.form-input-hide input[type="checkbox"]+label .label-icon,
+.form-input-hide input[type="checkbox"]:checked+label .label-icon,
+.form-input-hide input[type="radio"]+label .label-icon,
+.form-input-hide input[type="radio"]:checked+label .label-icon,
+.form-input-hide input[type="file"]+label .label-icon,
+.form-input-hide input[type="file"]:checked+label .label-icon {
+ display: none;
+}
+
+.form-input-hide input[type="color"],
+.form-input-hide input[type="file"] {
+ margin: 0;
+ opacity: 0;
+ width: 1px;
+ height: 1px;
+ min-width: 1px;
+ min-height: 1px;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ -webkit-appearance: none;
+}
diff --git a/src/component/form/input/inputButton/index.js b/src/component/form/input/inputButton/index.js
new file mode 100644
index 00000000..22d93d45
--- /dev/null
+++ b/src/component/form/input/inputButton/index.js
@@ -0,0 +1,47 @@
+import { node } from '../../../../utility/node';
+
+import './index.css';
+
+export const inputButton = function({
+ children = false,
+ inputHide = false,
+ srOnly = false,
+ style = []
+} = {}) {
+
+ const inputButtonElement = node('div|class:form-input-button', children);
+
+ if (style.length > 0) {
+ style.forEach((item, i) => {
+ switch (item) {
+ case 'link':
+ inputButtonElement.classList.add('form-input-button-link');
+ break;
+
+ case 'line':
+ inputButtonElement.classList.add('form-input-button-line');
+ break;
+
+ case 'ring':
+ inputButtonElement.classList.add('form-input-button-ring');
+ break;
+
+ case 'dot':
+ inputButtonElement.classList.add('input-color-dot');
+ break;
+
+ };
+ });
+ };
+
+ if (inputHide) {
+ inputButtonElement.classList.add('form-input-hide');
+ };
+
+ if (srOnly) {
+ inputButtonElement.classList.add('form-input-button-sr-only');
+ };
+
+ return inputButtonElement;
+
+};
diff --git a/src/component/form/input/number/index.css b/src/component/form/input/number/index.css
new file mode 100644
index 00000000..e69de29b
diff --git a/src/component/form/input/number/index.js b/src/component/form/input/number/index.js
new file mode 100644
index 00000000..3c5310ad
--- /dev/null
+++ b/src/component/form/input/number/index.js
@@ -0,0 +1,50 @@
+import { node } from '../../../../utility/node';
+
+import './index.css';
+
+export const number = ({
+ id = false,
+ min = 0,
+ max = 100,
+ step = 1,
+ value = false,
+ placeholder = false,
+ classList = [],
+ func = false
+} = {}) => {
+
+ const input = node('input|type:number,min:' + min + ',max:' + max + ',step:' + step + ',tabindex:1');
+
+ let delayUpdate = null;
+
+ if (id) {
+ input.setAttribute('id', id);
+ };
+
+ if (value || (typeof value === 'number' && value === 0)) {
+ input.setAttribute('value', value);
+ };
+
+ if (placeholder) {
+ input.setAttribute('placeholder', placeholder);
+ };
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ input.classList.add(item);
+ });
+
+ };
+
+ if (func) {
+
+ input.addEventListener('input', (event) => {
+ func();
+ });
+
+ };
+
+ return input;
+
+};
diff --git a/src/component/form/input/radio/index.css b/src/component/form/input/radio/index.css
new file mode 100644
index 00000000..4c6007a7
--- /dev/null
+++ b/src/component/form/input/radio/index.css
@@ -0,0 +1,202 @@
+input[type="radio"] {
+ margin-bottom: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ opacity: 0;
+ display: block;
+ font-size: 1em;
+ line-height: 1;
+ cursor: pointer;
+ pointer-events: none;
+ box-sizing: border-box;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ transition: color var(--layout-transition-extra-fast);
+}
+
+input[type="radio"]+label {
+ padding: 0;
+ margin: 0;
+ font-size: 1em;
+ font-family: var(--theme-font-ui-name);
+ font-weight: var(--theme-font-ui-weight);
+ font-style: var(--theme-font-ui-style);
+ color: hsl(var(--form-label));
+ cursor: pointer;
+ display: flex;
+ gap: var(--form-thumb);
+ flex-direction: row;
+ justify-content: flex-start;
+ align-items: flex-start;
+ transition: transform var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast);
+}
+
+input[type="radio"]:hover+label,
+input[type="radio"]:focus+label {
+ color: hsl(var(--form-label-hover));
+}
+
+input[type="radio"]:active+label {
+ color: hsl(var(--form-label-focus-active));
+}
+
+input[type="radio"]:checked+label {
+ color: hsl(var(--form-label-checked));
+}
+
+input[type="radio"]:disabled+label,
+input[type="radio"]:disabled:hover+label,
+input[type="radio"]:disabled:focus+label {
+ color: hsl(var(--form-label-disabled));
+ cursor: default;
+}
+
+input[type="radio"]+label .label-icon {
+ background-color: hsl(var(--form-icon));
+ width: var(--form-thumb);
+ height: var(--form-thumb);
+ position: relative;
+ top: calc((-1 * (var(--form-thumb) * 0.5)) + (1em * 0.8));
+ display: block;
+ flex-grow: 0;
+ flex-shrink: 0;
+ z-index: 1;
+ box-shadow: none;
+ transition: background-color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
+}
+
+input[type="radio"]+label .label-icon {
+ border-radius: 50%;
+}
+
+input[type="radio"]:hover+label .label-icon,
+input[type="radio"]:focus+label .label-icon {
+ background-color: hsl(var(--form-icon-hover));
+ box-shadow: var(--form-ring-hover);
+}
+
+input[type="radio"]:active+label .label-icon {
+ background-color: hsl(var(--form-icon-active));
+ box-shadow: var(--form-ring-accent);
+ transition: none;
+}
+
+input[type="radio"]:checked+label .label-icon {
+ background-color: hsl(var(--form-icon-checked));
+}
+
+input[type="radio"]:checked:focus+label .label-icon,
+input[type="radio"]:checked:active+label .label-icon {
+ box-shadow: var(--form-ring-accent);
+}
+
+input[type="radio"]:disabled+label .label-icon,
+input[type="radio"]:disabled:hover+label .label-icon,
+input[type="radio"]:disabled:focus+label .label-icon,
+input[type="radio"]:checked:disabled+label .label-icon,
+input[type="radio"]:checked:disabled:hover+label .label-icon,
+input[type="radio"]:checked:disabled:focus+label .label-icon {
+ background-color: hsl(var(--form-icon-disabled));
+ box-shadow: none;
+}
+
+input[type="radio"]+label .label-icon:before {
+ content: "";
+ background-color: hsl(var(--form-icon-symbol));
+ width: 100%;
+ height: 100%;
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ transform: scale(0.7);
+ transform-origin: center;
+ z-index: 2;
+ transition: background-color var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast), transform var(--layout-transition-extra-fast);
+}
+
+input[type="radio"]+label .label-icon:before {
+ border-radius: 50%;
+}
+
+input[type="radio"]:active+label .label-icon:before {
+ background-color: hsl(var(--form-icon-symbol-active));
+ transition: none;
+}
+
+input[type="radio"]:checked+label .label-icon:before {
+ background-color: hsl(var(--form-icon-symbol-active));
+ border-radius: 50%;
+}
+
+input[type="radio"]:checked+label .label-icon:before {
+ transform: scale(0.2);
+}
+
+input[type="radio"]:disabled+label .label-icon:before,
+input[type="radio"]:disabled:hover+label .label-icon:before,
+input[type="radio"]:disabled:focus+label .label-icon:before,
+input[type="radio"]:disabled:active+label .label-icon:before,
+input[type="radio"]:checked:disabled+label .label-icon:before,
+input[type="radio"]:checked:disabled:hover+label .label-icon:before,
+input[type="radio"]:checked:disabled:focus+label .label-icon:before,
+input[type="radio"]:checked:disabled:active+label .label-icon:before {
+ background-color: hsl(var(--form-icon-symbol-disabled));
+}
+
+input[type="radio"]+label .label-block-item {
+ color: hsl(var(--form-label));
+ transition: color var(--layout-transition-extra-fast);
+}
+
+input[type="radio"]:hover+label .label-block-item,
+input[type="radio"]:focus+label .label-block-item {
+ color: hsl(var(--form-label-hover));
+}
+
+input[type="radio"]:active+label .label-block-item {
+ color: hsl(var(--form-label-focus-active));
+}
+
+input[type="radio"]:checked+label .label-block-item {
+ color: hsl(var(--form-label-checked));
+}
+
+input[type="radio"]:disabled+label .label-block-item,
+input[type="radio"]:disabled:hover+label .label-block-item,
+input[type="radio"]:disabled:focus+label .label-block-item {
+ color: hsl(var(--form-label-disabled));
+ cursor: default;
+}
+
+input[type="radio"]+label .label-block-item.muted {
+ color: hsl(var(--utility-muted));
+ transition: color var(--layout-transition-extra-fast);
+}
+
+input[type="radio"]:hover+label .label-block-item.muted,
+input[type="radio"]:focus+label .label-block-item.muted {
+ color: hsl(var(--utility-muted-hover));
+}
+
+input[type="radio"]:active+label .label-block-item.muted {
+ color: hsl(var(--utility-muted-focus-active));
+}
+
+input[type="radio"]:checked+label .label-block-item.muted {
+ color: hsl(var(--utility-muted-checked));
+}
+
+input[type="radio"]:disabled+label .label-block-item.muted,
+input[type="radio"]:disabled:hover+label .label-block-item.muted,
+input[type="radio"]:disabled:focus+label .label-block-item.muted {
+ color: hsl(var(--utility-muted-disabled));
+ cursor: default;
+}
+
+input[type="radio"]:disabled+label .label-block-item,
+input[type="radio"]:disabled:hover+label .label-block-item,
+input[type="radio"]:disabled:focus+label .label-block-item {
+ color: hsl(var(--form-label-disabled));
+ cursor: default;
+}
diff --git a/src/component/form/input/radio/index.js b/src/component/form/input/radio/index.js
new file mode 100644
index 00000000..4f23b7f5
--- /dev/null
+++ b/src/component/form/input/radio/index.js
@@ -0,0 +1,48 @@
+import { node } from '../../../../utility/node';
+
+import './index.css';
+
+export const radio = function({
+ id = false,
+ radioGroup = false,
+ value = false,
+ checked = false,
+ classList = [],
+ func = false
+} = {}) {
+
+ const input = node('input|type:radio,tabindex:1');
+
+ if (id) {
+ input.setAttribute('id', id);
+ };
+
+ if (radioGroup) {
+ input.setAttribute('name', radioGroup);
+ };
+
+ if (value) {
+ input.setAttribute('value', value);
+ };
+
+ if (checked) {
+ input.setAttribute('checked', '');
+ };
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ input.classList.add(item);
+ });
+
+ };
+
+ if (func) {
+ input.addEventListener('change', (event) => {
+ func();
+ });
+ };
+
+ return input;
+
+};
diff --git a/src/component/form/input/range/index.css b/src/component/form/input/range/index.css
new file mode 100644
index 00000000..39614577
--- /dev/null
+++ b/src/component/form/input/range/index.css
@@ -0,0 +1,232 @@
+:root {
+ --form-range-track-background: var(--theme-primary-020);
+ --form-range-track-background-hover: var(--theme-primary-020);
+ --form-range-track-background-focus: var(--theme-primary-020);
+ --form-range-track-background-disabled: var(--theme-primary-010);
+}
+
+:root {
+ --form-range-thumb-background: var(--theme-primary-text-010);
+ --form-range-thumb-background-disabled: var(--theme-primary-030);
+ --form-range-thumb-border: var(--theme-primary-010);
+ --form-range-thumb-border-focus: var(--theme-primary-text-010);
+ --form-range-thumb-border-disabled: var(--theme-primary-010);
+}
+
+:root {
+ --form-range-hue: linear-gradient(to right,
+ hsl(0, 100%, 50%),
+ hsl(30, 100%, 50%),
+ hsl(60, 100%, 50%),
+ hsl(90, 100%, 50%),
+ hsl(120, 100%, 50%),
+ hsl(150, 100%, 50%),
+ hsl(180, 100%, 50%),
+ hsl(210, 100%, 50%),
+ hsl(240, 100%, 50%),
+ hsl(270, 100%, 50%),
+ hsl(300, 100%, 50%),
+ hsl(330, 100%, 50%),
+ hsl(360, 100%, 50%));
+}
+
+input[type="range"] {
+ background-color: transparent;
+ padding: 0;
+ margin: 0;
+ font-size: 1em;
+ display: block;
+ height: 2.5em;
+ width: 100%;
+ position: relative;
+ border: 0;
+ cursor: pointer;
+ touch-action: none;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ -webkit-appearance: none;
+}
+
+input[type="range"],
+input[type="range"]:hover,
+input[type="range"]:focus,
+input[type="range"]:active {
+ outline: 0;
+}
+
+input[type="range"]:disabled,
+input[type="range"]:disabled:hover,
+input[type="range"]:disabled:focus,
+input[type="range"]:disabled:active {
+ cursor: default;
+}
+
+input[type="range"]::-webkit-slider-runnable-track {
+ background-color: hsl(var(--form-range-track-background));
+ padding: 0;
+ margin: 0;
+ height: calc(var(--layout-line-width) * 4);
+ border: 0;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ transition: background-color var(--layout-transition-extra-fast);
+}
+
+input[type="range"]:hover::-webkit-slider-runnable-track {
+ background-color: hsl(var(--form-range-track-background-hover));
+}
+
+input[type="range"]:focus::-webkit-slider-runnable-track {
+ background-color: hsl(var(--form-range-track-background-focus));
+}
+
+input[type="range"]:disabled::-webkit-slider-runnable-track,
+input[type="range"]:disabled:hover::-webkit-slider-runnable-track,
+input[type="range"]:disabled:focus::-webkit-slider-runnable-track {
+ background-color: hsl(var(--form-range-track-background-disabled));
+}
+
+input[type="range"]::-webkit-slider-thumb {
+ background-color: hsl(var(--form-range-thumb-background));
+ border: 0;
+ margin: 0;
+ padding: 0;
+ border-radius: 100%;
+ width: var(--form-thumb);
+ height: var(--form-thumb);
+ top: 50%;
+ transform: translateY(-50%);
+ position: relative;
+ cursor: pointer;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ box-shadow: 0 0 0 calc(var(--layout-line-width) * 1.25) hsl(var(--form-range-thumb-border));
+ transition: background-color var(--layout-transition-extra-fast), border var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast);
+}
+
+input[type="range"]:focus::-webkit-slider-thumb {
+ box-shadow: var(--form-ring-accent);
+ border-color: hsl(var(--form-range-thumb-border-focus));
+}
+
+input[type="range"]:disabled::-webkit-slider-thumb,
+input[type="range"]:disabled:hover::-webkit-slider-thumb,
+input[type="range"]:disabled:focus::-webkit-slider-thumb {
+ background-color: hsl(var(--form-range-thumb-background-disabled));
+ border-color: hsl(var(--form-range-thumb-border-disabled));
+ box-shadow: none;
+ cursor: default;
+}
+
+input[type="range"].input-range-hue-spectrum::-webkit-slider-runnable-track {
+ background-image: var(--form-range-hue);
+}
+
+input[type="range"]:disabled.input-range-hue-spectrum::-webkit-slider-runnable-track {
+ background-image: none;
+ background-color: hsl(var(--form-range-track-background-disabled));
+}
+
+input[type="range"]::-moz-range-track {
+ background-color: hsl(var(--form-range-track-background));
+ padding: 0;
+ margin: 0;
+ height: calc(var(--layout-line-width) * 4);
+ border: 0;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ transition: background-color var(--layout-transition-extra-fast);
+}
+
+input[type="range"]:hover::-moz-range-track {
+ background-color: hsl(var(--form-range-track-background-hover));
+}
+
+input[type="range"]:focus::-moz-range-track {
+ background-color: hsl(var(--form-range-track-background-focus));
+}
+
+input[type="range"]:disabled::-moz-range-track,
+input[type="range"]:disabled:hover::-moz-range-track,
+input[type="range"]:disabled:focus::-moz-range-track {
+ background-color: hsl(var(--form-range-track-background-disabled));
+}
+
+input[type="range"]::-moz-range-thumb {
+ background-color: hsl(var(--form-range-thumb-background));
+ border: 0;
+ margin: 0;
+ padding: 0;
+ border-radius: 100%;
+ width: var(--form-thumb);
+ height: var(--form-thumb);
+ position: relative;
+ cursor: pointer;
+ box-sizing: border-box;
+ -webkit-appearance: none;
+ box-shadow: 0 0 0 calc(var(--layout-line-width) * 1.25) hsl(var(--form-range-thumb-border));
+ transition: background-color var(--layout-transition-extra-fast), border var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast);
+}
+
+input[type="range"]:focus::-moz-range-thumb {
+ box-shadow: var(--form-ring-accent);
+ border-color: hsl(var(--form-range-thumb-border-focus));
+}
+
+input[type="range"]:disabled::-moz-range-thumb,
+input[type="range"]:disabled:hover::-moz-range-thumb,
+input[type="range"]:disabled:focus::-moz-range-thumb {
+ background-color: hsl(var(--form-range-thumb-background-disabled));
+ border-color: hsl(var(--form-range-thumb-border-disabled));
+ box-shadow: none;
+ cursor: default;
+}
+
+input[type="range"].input-range-hue-spectrum::-moz-range-track {
+ background-image: var(--form-range-hue);
+}
+
+input[type="range"]:disabled.input-range-hue-spectrum::-moz-range-track {
+ background-image: none;
+ background-color: hsl(var(--form-range-track-background-disabled));
+}
+
+.slider-double {
+ flex-grow: 1;
+ position: relative;
+}
+
+.slider-double input[type="range"]:first-child {
+ width: 100%;
+}
+
+.slider-double input[type="range"]:last-child {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ pointer-events: none;
+}
+
+.slider-double input[type="range"]:last-child::-webkit-slider-thumb {
+ pointer-events: all;
+}
+
+.slider-double input[type="range"]:last-child::-moz-range-thumb {
+ pointer-events: all;
+}
+
+.slider-double input[type="range"]:last-child::-webkit-slider-runnable-track,
+.slider-double input[type="range"]:last-child:hover::-webkit-slider-runnable-track,
+.slider-double input[type="range"]:last-child:focus::-webkit-slider-runnable-track,
+.slider-double input[type="range"]:last-child:disabled::-webkit-slider-runnable-track,
+.slider-double input[type="range"]:last-child:disabled:hover::-webkit-slider-runnable-track,
+.slider-double input[type="range"]:last-child:disabled:focus::-webkit-slider-runnable-track {
+ background-color: transparent;
+}
+
+.slider-double input[type="range"]:last-child::-moz-range-track,
+.slider-double input[type="range"]:last-child:hover::-moz-range-track,
+.slider-double input[type="range"]:last-child:focus::-moz-range-track,
+.slider-double input[type="range"]:last-child:disabled::-moz-range-track,
+.slider-double input[type="range"]:last-child:disabled:hover::-moz-range-track,
+.slider-double input[type="range"]:last-child:disabled:focus::-moz-range-track {
+ background-color: transparent;
+}
diff --git a/src/component/form/input/range/index.js b/src/component/form/input/range/index.js
new file mode 100644
index 00000000..c9a6800a
--- /dev/null
+++ b/src/component/form/input/range/index.js
@@ -0,0 +1,75 @@
+import { node } from '../../../../utility/node';
+
+import './index.css';
+
+export const range = ({
+ id = false,
+ min = 0,
+ max = 100,
+ step = 1,
+ value = 0,
+ classList = [],
+ func = false,
+ focusFunc = false,
+ blurFunc = false,
+ mouseDownFunc = false,
+ mouseUpFunc = false
+} = {}) => {
+
+ const input = node('input|type:range,min:' + min + ',max:' + max + ',step:' + step + ',value:' + value + ',tabindex:1');
+
+ if (id) {
+ input.setAttribute('id', id);
+ };
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ input.classList.add(item);
+ });
+
+ };
+
+ if (func) {
+
+ input.addEventListener('input', (event) => {
+ func();
+ });
+
+ };
+
+ if (focusFunc) {
+
+ input.addEventListener('focus', (event) => {
+ focusFunc();
+ });
+
+ };
+
+ if (blurFunc) {
+
+ input.addEventListener('blur', (event) => {
+ blurFunc();
+ });
+
+ };
+
+ if (mouseDownFunc) {
+
+ input.addEventListener('mousedown', (event) => {
+ mouseDownFunc();
+ });
+
+ };
+
+ if (mouseUpFunc) {
+
+ input.addEventListener('mouseup', (event) => {
+ mouseUpFunc();
+ });
+
+ };
+
+ return input;
+
+};
diff --git a/src/component/form/input/select/index.css b/src/component/form/input/select/index.css
new file mode 100644
index 00000000..aa32e82c
--- /dev/null
+++ b/src/component/form/input/select/index.css
@@ -0,0 +1,66 @@
+select {
+ background-color: hsl(var(--form-input-background));
+ background-image:
+ linear-gradient(45deg, transparent 60%, hsl(var(--form-label)) 60%),
+ linear-gradient(135deg, hsl(var(--form-label)) 40%, transparent 40%);
+ background-position:
+ calc(100% - 1.5em) 50%,
+ calc(100% - 1em) 50%;
+ background-size:
+ 0.5em 0.375em,
+ 0.5em 0.375em;
+ background-repeat: no-repeat;
+ padding: 0 3em 0 1.25em;
+ margin: 0;
+ color: hsl(var(--form-input-text));
+ font-size: 1em;
+ font-family: var(--theme-font-ui-name);
+ font-weight: var(--theme-font-ui-weight);
+ font-style: var(--theme-font-ui-style);
+ line-height: 2.5;
+ min-height: 2.5em;
+ min-width: 0;
+ width: 100%;
+ border-width: 0;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ cursor: pointer;
+ transition: background-color var(--layout-transition-extra-fast), background-image var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ appearance: none;
+}
+
+select:hover {
+ background-image:
+ linear-gradient(45deg, transparent 60%, hsl(var(--form-label-hover)) 60%),
+ linear-gradient(135deg, hsl(var(--form-label-hover)) 40%, transparent 40%);
+ background-color: hsl(var(--form-input-background-hover));
+ color: hsl(var(--form-label-hover));
+ outline: none;
+ box-shadow: var(--form-ring-hover);
+}
+
+select:focus,
+select:active {
+ background-image:
+ linear-gradient(45deg, transparent 60%, hsl(var(--form-label-focus-active)) 60%),
+ linear-gradient(135deg, hsl(var(--form-label-focus-active)) 40%, transparent 40%);
+ background-color: hsl(var(--form-input-background-border-focus-active));
+ color: hsl(var(--form-label-focus-active));
+ outline: none;
+ z-index: 2;
+ box-shadow: var(--form-ring-accent);
+}
+
+select:disabled,
+select:disabled:hover,
+select:disabled:focus,
+select:disabled:active {
+ background-color: hsl(var(--form-input-background-disabled));
+ background-image:
+ linear-gradient(45deg, transparent 60%, hsl(var(--form-input-text-disabled)) 60%),
+ linear-gradient(135deg, hsl(var(--form-input-text-disabled)) 40%, transparent 40%);
+ color: hsl(var(--form-input-text-disabled));
+ cursor: default;
+ box-shadow: none;
+}
diff --git a/src/component/form/input/select/index.js b/src/component/form/input/select/index.js
new file mode 100644
index 00000000..c5d96069
--- /dev/null
+++ b/src/component/form/input/select/index.js
@@ -0,0 +1,57 @@
+import { node } from '../../../../utility/node';
+import { trimString } from '../../../../utility/trimString';
+
+import './index.css';
+
+export const select = function({
+ id = false,
+ classList = [],
+ option = [],
+ selected = 0,
+ func = false
+} = {}) {
+
+ const select = node('select|tabindex:1');
+
+ if (id) {
+ select.setAttribute('id', id);
+ };
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ select.classList.add(item);
+ });
+
+ };
+
+ if (func) {
+
+ select.addEventListener('change', (event) => {
+ func();
+ });
+
+ };
+
+ if (option.length > 0) {
+
+ option.forEach((item, i) => {
+
+ select.appendChild(
+ node(
+ 'option:' +
+ item +
+ '|value:' +
+ trimString(item).replace(/\s+/g, '-').toLowerCase()
+ )
+ );
+
+ });
+
+ select.selectedIndex = selected;
+
+ };
+
+ return select;
+
+};
diff --git a/src/component/form/input/text/index.css b/src/component/form/input/text/index.css
new file mode 100644
index 00000000..939e595c
--- /dev/null
+++ b/src/component/form/input/text/index.css
@@ -0,0 +1,183 @@
+input[type="email"],
+input[type="number"],
+input[type="password"],
+input[type="search"],
+input[type="tel"],
+input[type="text"] {
+ background-color: hsl(var(--form-input-background));
+ padding: 0 1.25em;
+ margin: 0;
+ color: hsl(var(--form-input-text));
+ font-size: 1em;
+ font-family: var(--theme-font-ui-name);
+ font-weight: var(--theme-font-ui-weight);
+ font-style: var(--theme-font-ui-style);
+ line-height: 1.6;
+ height: 2.5em;
+ min-width: 0;
+ width: 100%;
+ border-width: 0;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ cursor: text;
+ transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
+ -moz-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-decoration,
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-results-button,
+input[type="search"]::-webkit-search-results-decoration {
+ -webkit-appearance: none;
+}
+
+input[type="number"] {
+ text-align: center;
+}
+
+input[type=number]::-webkit-inner-spin-button,
+input[type=number]::-webkit-outer-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+
+input[type="email"]:hover,
+input[type="number"]:hover,
+input[type="password"]:hover,
+input[type="search"]:hover,
+input[type="tel"]:hover,
+input[type="text"]:hover {
+ background-color: hsl(var(--form-input-background-hover));
+ color: hsl(var(--form-input-text-hover));
+ outline: none;
+ box-shadow: var(--form-ring-hover);
+}
+
+input[type="email"]:focus,
+input[type="email"]:active,
+input[type="number"]:focus,
+input[type="number"]:active,
+input[type="password"]:focus,
+input[type="password"]:active,
+input[type="search"]:focus,
+input[type="search"]:active,
+input[type="tel"]:focus,
+input[type="tel"]:active,
+input[type="text"]:focus,
+input[type="text"]:active {
+ background-color: hsl(var(--form-input-background-focus-active));
+ color: hsl(var(--form-input-text-focus-active));
+ outline: none;
+ z-index: 2;
+ box-shadow: var(--form-ring-accent);
+}
+
+input[type="email"]:disabled,
+input[type="number"]:disabled,
+input[type="password"]:disabled,
+input[type="search"]:disabled,
+input[type="tel"]:disabled,
+input[type="text"]:disabled {
+ background-color: hsl(var(--form-input-background-disabled));
+ color: hsl(var(--form-input-text-disabled));
+ cursor: default;
+ box-shadow: none;
+}
+
+input[type="email"]:disabled:hover,
+input[type="email"]:disabled:focus,
+input[type="number"]:disabled:hover,
+input[type="number"]:disabled:focus,
+input[type="password"]:disabled:hover,
+input[type="password"]:disabled:focus,
+input[type="search"]:disabled:hover,
+input[type="search"]:disabled:focus,
+input[type="tel"]:disabled:hover,
+input[type="tel"]:disabled:focus,
+input[type="text"]:disabled:hover,
+input[type="text"]:disabled:focus {
+ color: hsl(var(--form-input-text-disabled));
+}
+
+input[type="email"]::placeholder,
+input[type="number"]::placeholder,
+input[type="password"]::placeholder,
+input[type="search"]::placeholder,
+input[type="tel"]::placeholder,
+input[type="text"]::placeholder {
+ color: hsl(var(--form-placeholder));
+ transition: color var(--layout-transition-extra-fast);
+}
+
+input[type="email"]:hover::placeholder,
+input[type="number"]:hover::placeholder,
+input[type="password"]:hover::placeholder,
+input[type="search"]:hover::placeholder,
+input[type="tel"]:hover::placeholder,
+input[type="text"]:hover::placeholder {
+ color: hsl(var(--form-placeholder-focus-hover));
+}
+
+input[type="email"]:focus::placeholder,
+input[type="number"]:focus::placeholder,
+input[type="password"]:focus::placeholder,
+input[type="search"]:focus::placeholder,
+input[type="tel"]:focus::placeholder,
+input[type="text"]:focus::placeholder {
+ color: hsl(var(--form-placeholder-focus-hover));
+}
+
+input[type="email"]:disabled::placeholder,
+input[type="email"]:disabled:hover::placeholder,
+input[type="email"]:disabled:focus::placeholder,
+input[type="number"]:disabled::placeholder,
+input[type="number"]:disabled:hover::placeholder,
+input[type="number"]:disabled:focus::placeholder,
+input[type="password"]:disabled::placeholder,
+input[type="password"]:disabled:hover::placeholder,
+input[type="password"]:disabled:focus::placeholder,
+input[type="search"]:disabled::placeholder,
+input[type="search"]:disabled:hover::placeholder,
+input[type="search"]:disabled:focus::placeholder,
+input[type="tel"]:disabled::placeholder,
+input[type="tel"]:disabled:hover::placeholder,
+input[type="tel"]:disabled:focus::placeholder,
+input[type="text"]:disabled::placeholder,
+input[type="text"]:disabled:hover::placeholder,
+input[type="text"]:disabled:focus::placeholder {
+ color: hsl(var(--form-placeholder-disabled));
+}
+
+.input-clear[type="email"],
+.input-clear[type="number"],
+.input-clear[type="password"],
+.input-clear[type="search"],
+.input-clear[type="tel"],
+.input-clear[type="text"] {
+ background-color: transparent;
+}
+
+.input-clear[type="email"]:hover,
+.input-clear[type="number"]:hover,
+.input-clear[type="password"]:hover,
+.input-clear[type="search"]:hover,
+.input-clear[type="tel"]:hover,
+.input-clear[type="text"]:hover {
+ background-color: transparent;
+ box-shadow: none;
+}
+
+.input-clear[type="email"]:focus,
+.input-clear[type="email"]:active,
+.input-clear[type="number"]:focus,
+.input-clear[type="number"]:active,
+.input-clear[type="password"]:focus,
+.input-clear[type="password"]:active,
+.input-clear[type="search"]:focus,
+.input-clear[type="search"]:active,
+.input-clear[type="tel"]:focus,
+.input-clear[type="tel"]:active,
+.input-clear[type="text"]:focus,
+.input-clear[type="text"]:active {
+ background-color: transparent;
+ box-shadow: var(--form-ring-accent);
+}
diff --git a/src/component/form/input/text/index.js b/src/component/form/input/text/index.js
new file mode 100644
index 00000000..3d3ca463
--- /dev/null
+++ b/src/component/form/input/text/index.js
@@ -0,0 +1,55 @@
+import { node } from '../../../../utility/node';
+
+import './index.css';
+
+export const text = ({
+ id = false,
+ value = false,
+ min = false,
+ max = false,
+ placeholder = false,
+ classList = [],
+ func = false
+} = {}) => {
+
+ const input = node('input|type:text,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false,tabindex:1');
+
+ if (id) {
+ input.setAttribute('id', id);
+ };
+
+ if (value) {
+ input.setAttribute('value', value);
+ };
+
+ if (typeof min === 'number') {
+ input.setAttribute('minlength', min);
+ };
+
+ if (typeof max === 'number') {
+ input.setAttribute('maxlength', max);
+ };
+
+ if (placeholder) {
+ input.setAttribute('placeholder', placeholder);
+ };
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ input.classList.add(item);
+ });
+
+ };
+
+ if (func) {
+
+ input.addEventListener('input', (event) => {
+ func();
+ });
+
+ };
+
+ return input;
+
+};
diff --git a/src/component/form/input/textarea/index.css b/src/component/form/input/textarea/index.css
new file mode 100644
index 00000000..a2bd0271
--- /dev/null
+++ b/src/component/form/input/textarea/index.css
@@ -0,0 +1,69 @@
+textarea {
+ background-color: hsl(var(--form-input-background));
+ padding: 0.5em 1.25em;
+ margin: 0;
+ color: hsl(var(--form-input-text));
+ font-size: 1em;
+ line-height: 1.6;
+ font-family: var(--theme-font-ui-name);
+ font-weight: var(--theme-font-ui-weight);
+ font-style: var(--theme-font-ui-style);
+ height: 10em;
+ min-height: 2.5em;
+ min-width: 0;
+ width: 100%;
+ border-width: 0;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ cursor: text;
+ resize: vertical;
+ display: block;
+ transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
+ -moz-appearance: textfield;
+}
+
+textarea:hover {
+ background-color: hsl(var(--form-input-background-hover));
+ color: hsl(var(--form-input-text-hover));
+ outline: none;
+ box-shadow: var(--form-ring-hover);
+}
+
+textarea:focus,
+textarea:active {
+ background-color: hsl(var(--form-input-background-focus-active));
+ color: hsl(var(--form-input-text-focus-active));
+ outline: none;
+ box-shadow: var(--form-ring-accent);
+}
+
+textarea:disabled {
+ background-color: hsl(var(--form-input-background-disabled));
+ color: hsl(var(--form-input-text-disabled));
+ cursor: default;
+ box-shadow: none;
+ resize: none;
+}
+
+textarea:disabled:hover,
+textarea:disabled:focus {
+ color: hsl(var(--form-input-text-disabled));
+}
+
+textarea::placeholder {
+ color: hsl(var(--form-placeholder));
+ transition: color var(--layout-transition-extra-fast);
+}
+
+textarea:hover::placeholder {
+ color: hsl(var(--form-placeholder-focus-hover));
+}
+
+textarea:focus::placeholder {
+ color: hsl(var(--form-placeholder-focus-hover));
+}
+
+textarea:disabled::placeholder,
+textarea:disabled:hover::placeholder,
+textarea:disabled:focus::placeholder {
+ color: hsl(var(--form-placeholder-disabled));
+}
diff --git a/src/component/form/input/textarea/index.js b/src/component/form/input/textarea/index.js
new file mode 100644
index 00000000..2f724825
--- /dev/null
+++ b/src/component/form/input/textarea/index.js
@@ -0,0 +1,45 @@
+import { node } from '../../../../utility/node';
+
+import './index.css';
+
+export const textarea = function({
+ id = false,
+ value = false,
+ placeholder = false,
+ classList = [],
+ func = false
+} = {}) {
+
+ const textarea = node('textarea|tabindex:1,spellcheck:false');
+
+ if (id) {
+ textarea.setAttribute('id', id);
+ };
+
+ if (value) {
+ textarea.setAttribute('value', value);
+ };
+
+ if (placeholder) {
+ textarea.setAttribute('placeholder', placeholder);
+ };
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ textarea.classList.add(item);
+ });
+
+ };
+
+ if (func) {
+
+ textarea.addEventListener('input', (event) => {
+ func();
+ });
+
+ };
+
+ return textarea;
+
+};
diff --git a/src/component/form/label/index.css b/src/component/form/label/index.css
new file mode 100644
index 00000000..51fa39fd
--- /dev/null
+++ b/src/component/form/label/index.css
@@ -0,0 +1,38 @@
+:root {
+ --form-label: var(--theme-primary-text-010);
+ --form-label-hover: var(--theme-primary-text-010);
+ --form-label-focus-active: var(--theme-primary-text-010);
+ --form-label-checked: var(--theme-primary-text-010);
+ --form-label-disabled: var(--theme-primary-030);
+}
+
+label {
+ padding: 0;
+ color: hsl(var(--form-label));
+ margin-bottom: 0;
+ font-size: 1em;
+ display: block;
+ transition: color var(--layout-transition-extra-fast);
+}
+
+label:not(.label-no-padding):not(:only-child):not(:last-child) {
+ padding-bottom: 1em;
+}
+
+label.disabled {
+ color: hsl(var(--form-label-disabled));
+}
+
+.label-block {
+ display: flex;
+ flex-direction: column;
+ flex-wrap: nowrap;
+ gap: 0.25em;
+}
+
+input:disabled+label .label-block-item,
+input:disabled:hover+label .label-block-item,
+input:disabled:focus+label .label-block-item {
+ color: hsl(var(--form-label-disabled));
+ cursor: default;
+}
diff --git a/src/component/form/label/index.js b/src/component/form/label/index.js
new file mode 100644
index 00000000..03a99bfc
--- /dev/null
+++ b/src/component/form/label/index.js
@@ -0,0 +1,73 @@
+import { node } from '../../../utility/node';
+
+import './index.css';
+
+export const label = ({
+ forInput = false,
+ text = 'label',
+ description = false,
+ srOnly = false,
+ icon = false,
+ noPadding = false,
+ classList = []
+} = {}) => {
+
+ let label;
+
+ if (forInput) {
+ label = node('label|for:' + forInput);
+ } else {
+ label = node('label');
+ };
+
+ if (noPadding) {
+ label.classList.add('label-no-padding');
+ };
+
+ const labelBlock = node('span|class:label-block');
+
+ if (srOnly) {
+ if (icon) {
+ labelBlock.classList.add('sr-only');
+ } else {
+ label.classList.add('sr-only');
+ };
+ };
+
+ if (text) {
+ labelBlock.appendChild(node('span:' + text + '|class:label-block-item'));
+ };
+
+ if (description) {
+ if (Array.isArray(description)) {
+
+ description.forEach((item, i) => {
+ labelBlock.appendChild(node('span:' + item + '|class:label-block-item small muted'));
+ });
+
+ } else if (typeof description === 'string') {
+
+ labelBlock.appendChild(node('span:' + description + '|class:label-block-item small muted'));
+
+ };
+ };
+
+ if (text || description) {
+ label.appendChild(labelBlock);
+ };
+
+ if (icon) {
+ label.prepend(node('span|class:label-icon'));
+ };
+
+ if (classList.length > 0) {
+
+ classList.forEach((item, i) => {
+ label.classList.add(item);
+ });
+
+ };
+
+ return label;
+
+};
diff --git a/src/component/form/sticky/index.css b/src/component/form/sticky/index.css
new file mode 100644
index 00000000..b3e9f9fc
--- /dev/null
+++ b/src/component/form/sticky/index.css
@@ -0,0 +1,9 @@
+.form-sticky {
+ background-color: hsl(var(--theme-primary-010));
+ margin: -1em;
+ padding: 1em;
+ position: sticky;
+ top: 0;
+ z-index: 4;
+ transition: background-color var(--layout-transition-extra-fast);
+}
diff --git a/src/component/form/sticky/index.js b/src/component/form/sticky/index.js
new file mode 100644
index 00000000..d271ae39
--- /dev/null
+++ b/src/component/form/sticky/index.js
@@ -0,0 +1,11 @@
+import { node } from '../../../utility/node';
+
+import './index.css';
+
+export const sticky = function({
+ children = false
+} = {}) {
+
+ return node('div|class:form-sticky', children);
+
+};
\ No newline at end of file
diff --git a/src/component/form/wrap/index.css b/src/component/form/wrap/index.css
new file mode 100644
index 00000000..12fc29f0
--- /dev/null
+++ b/src/component/form/wrap/index.css
@@ -0,0 +1,18 @@
+:root {
+ --wrap-size: 6;
+ --wrap-space: calc((var(--wrap-size) / 4) * 1em);
+}
+
+.form-wrap {
+ position: relative;
+ width: 100%;
+ display: block;
+}
+
+.form-wrap:not(:first-child) {
+ margin-top: var(--wrap-space);
+}
+
+.form-wrap:not(:last-child) {
+ margin-bottom: var(--wrap-space);
+}
diff --git a/src/component/form/wrap/index.js b/src/component/form/wrap/index.js
new file mode 100644
index 00000000..2170a244
--- /dev/null
+++ b/src/component/form/wrap/index.js
@@ -0,0 +1,11 @@
+import { node } from '../../../utility/node';
+
+import './index.css';
+
+export const wrap = ({
+ children = false
+} = {}) => {
+
+ return node('div|class:form-wrap', children);
+
+};
diff --git a/src/css/greeting.css b/src/component/greeting/index.css
old mode 100755
new mode 100644
similarity index 77%
rename from src/css/greeting.css
rename to src/component/greeting/index.css
index 48c73a20..4ecc1524
--- a/src/css/greeting.css
+++ b/src/component/greeting/index.css
@@ -5,14 +5,28 @@
font-family: var(--theme-font-display-name);
font-weight: var(--theme-font-display-weight);
font-style: var(--theme-font-display-style);
- color: rgb(var(--theme-style-text));
display: inline-flex;
flex-direction: row;
- justify-content: center;
flex-wrap: nowrap;
line-height: 1.2;
}
+.greeting-item {
+ font-size: 1.5em;
+ max-width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.is-theme-background-type-accent .greeting-text {
+ color: hsl(var(--theme-accent-rgb-text));
+}
+
+.is-theme-background-type-color .greeting-text {
+ color: hsl(var(--theme-background-color-rgb-text));
+}
+
.is-header-item-justify-left .greeting {
justify-content: flex-start;
text-align: left;
@@ -27,11 +41,3 @@
justify-content: flex-end;
text-align: right;
}
-
-.greeting-item {
- font-size: 1.5em;
- max-width: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
-}
diff --git a/src/component/greeting/index.js b/src/component/greeting/index.js
new file mode 100644
index 00000000..1907643d
--- /dev/null
+++ b/src/component/greeting/index.js
@@ -0,0 +1,95 @@
+import { state } from '../state';
+
+import { node } from '../../utility/node';
+import { trimString } from '../../utility/trimString';
+import { isValidString } from '../../utility/isValidString';
+import { complexNode } from '../../utility/complexNode';
+
+import moment from 'moment';
+
+import './index.css';
+
+export const Greeting = function({} = {}) {
+
+ this.now;
+
+ this.element = {
+ greeting: node('div|class:greeting'),
+ text: node('span|class:greeting-item greeting-text')
+ };
+
+ this.assemble = () => {
+
+ if (state.get.current().header.greeting.show) {
+ this.element.greeting.appendChild(this.element.text);
+ };
+
+ };
+
+ this.message = ['Good night', 'Good morning', 'Good afternoon', 'Good evening'];
+
+ this.update = () => {
+
+ this.now = moment();
+
+ let value;
+
+ switch (state.get.current().header.greeting.type) {
+
+ case 'good':
+
+ value = this.message[Math.floor(this.now.hours() / 6)];
+
+ break;
+
+ case 'hello':
+
+ value = 'Hello';
+
+ break;
+
+ case 'hi':
+
+ value = 'Hi';
+
+ break;
+
+ case 'custom':
+
+ if (isValidString(state.get.current().header.greeting.custom)) {
+ value = trimString(state.get.current().header.greeting.custom);
+ } else {
+ value = this.message[Math.floor(this.now.hours() / 6)];
+ };
+
+ break;
+
+ };
+
+ if (isValidString(state.get.current().header.greeting.name)) {
+
+ if (state.get.current().header.greeting.type === 'custom') {
+ if (isValidString(state.get.current().header.greeting.custom)) {
+ value = value + ', ' + trimString(state.get.current().header.greeting.name)
+ } else {
+ value = value + ', ' + trimString(state.get.current().header.greeting.name)
+ };
+ } else {
+ value = value + ', ' + trimString(state.get.current().header.greeting.name)
+ };
+
+ };
+
+ this.element.text.innerHTML = value;
+
+ };
+
+ this.assemble();
+
+ this.update();
+
+ this.greeting = () => {
+ return this.element.greeting;
+ };
+
+};
diff --git a/src/component/group/index.css b/src/component/group/index.css
new file mode 100644
index 00000000..b37229c7
--- /dev/null
+++ b/src/component/group/index.css
@@ -0,0 +1,181 @@
+.is-bookmark-style-block {
+ --group-cell-width: 11em;
+ --group-cell-height: 10em;
+}
+
+.is-bookmark-style-list {
+ --group-cell-width: 20em;
+ --group-cell-height: 4em;
+}
+
+.group {
+ display: flex;
+ gap: 0;
+ width: 100%;
+ transition: gap var(--layout-transition-extra-fast) var(--layout-duration-04);
+}
+
+.is-group-order-header-body .group {
+ flex-direction: column;
+}
+
+.is-group-order-body-header .group {
+ flex-direction: column-reverse;
+}
+
+.is-edge .group {
+ transition: gap var(--layout-transition-extra-fast);
+}
+
+.group.is-group-header,
+.group.is-group-open-all {
+ gap: calc(var(--layout-space) * var(--layout-gutter));
+}
+
+.is-group-edit .group {
+ gap: calc(var(--layout-space) * var(--layout-gutter));
+ transition: gap var(--layout-transition-extra-fast);
+}
+
+.group-header {
+ position: relative;
+ display: flex;
+ align-items: center;
+ flex-wrap: nowrap;
+ gap: calc(var(--layout-space) * var(--layout-gutter));
+}
+
+.is-group-area-justify-left .group-header {
+ flex-direction: row;
+}
+
+.is-group-area-justify-center .group-header {
+ flex-direction: row;
+ justify-content: center;
+}
+
+.is-group-area-justify-right .group-header {
+ flex-direction: row-reverse;
+}
+
+.group-name {
+ font-size: calc(calc(var(--group-name-size) / 10) * 0.1em);
+ height: 2.5em;
+ display: flex;
+ align-items: center;
+ flex-shrink: 1;
+ overflow: hidden;
+}
+
+.group-name-text {
+ margin-bottom: 0;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.is-theme-background-type-accent .group-name-text {
+ color: hsl(var(--theme-accent-rgb-text));
+}
+
+.is-theme-background-type-color .group-name-text {
+ color: hsl(var(--theme-background-color-rgb-text));
+}
+
+.group-body {
+ position: relative;
+ font-size: calc(calc(var(--bookmark-size) / 10) * 0.1em);
+ min-height: var(--group-cell-height);
+ display: grid;
+ grid-auto-rows: var(--group-cell-height);
+ gap: calc(var(--layout-space) * var(--layout-gutter));
+ grid-template-columns: repeat(auto-fill, minmax(var(--group-cell-width), 1fr));
+ grid-auto-flow: dense;
+}
+
+.group-control {
+ margin-left: calc(calc(var(--layout-space) * var(--layout-gutter)) * -1);
+ height: 0;
+ transition: height var(--layout-transition-extra-fast) var(--layout-duration-04), margin var(--layout-transition-extra-fast);
+}
+
+.is-edge .group-control {
+ transition: height var(--layout-transition-extra-fast), margin var(--layout-transition-extra-fast);
+}
+
+.is-group-edit .group-control {
+ margin: 0;
+ height: 2.5em;
+ transition: height var(--layout-transition-extra-fast), margin var(--layout-transition-extra-fast) var(--layout-duration-04);
+}
+
+.is-edge.is-group-edit .group-control {
+ transition: height var(--layout-transition-extra-fast), margin var(--layout-transition-extra-fast);
+}
+
+.group-control-group {
+ width: 0;
+ overflow: hidden;
+ transition: width var(--layout-transition-extra-fast);
+}
+
+.is-group-edit .group-control-group {
+ width: 20em;
+ transition: width var(--layout-transition-extra-fast) var(--layout-duration-04);
+}
+
+.is-edge.is-group-edit .group-control-group {
+ transition: width var(--layout-transition-extra-fast);
+}
+
+.group-control-open-all {
+ font-size: calc(calc(var(--group-openall-size) / 10) * 0.1em);
+}
+
+.group-control-open-all {
+ background-color: hsl(var(--button-background), calc(var(--theme-group-openall-opacity) / 100));
+}
+
+.group-control-open-all:focus,
+.group-control-open-all:hover {
+ background-color: hsl(var(--button-background-focus-hover), calc(var(--theme-group-openall-opacity) / 100));
+}
+
+.group-control-open-all:active {
+ background-color: hsl(var(--button-background-active), calc(var(--theme-group-openall-opacity) / 100));
+}
+
+.group-sort-placeholder {
+ box-shadow: var(--edge);
+ border-radius: calc(var(--theme-radius) * 0.01em);
+}
+
+.group-sort-placeholder .group-header,
+.group-sort-placeholder .group-body {
+ visibility: hidden;
+}
+
+.is-theme-background-type-accent .group-sort-placeholder {
+ box-shadow: var(--edge-on-accent);
+}
+
+.is-group-open-all-opacity-low .group-control-open-all {
+ --button-text: var(--theme-primary-text-010);
+ --button-text-focus-hover: var(--theme-primary-text-010);
+ --button-text-active: var(--theme-primary-text-010);
+ --button-text-disabled: var(--theme-primary-010);
+}
+
+.is-group-open-all-opacity-low.is-theme-background-type-accent .group-control-open-all {
+ --button-text: var(--theme-accent-rgb-text);
+ --button-text-focus-hover: var(--theme-accent-rgb-text);
+ --button-text-active: var(--theme-accent-rgb-text);
+ --button-text-disabled: var(--theme-accent-rgb-text);
+}
+
+.is-group-open-all-opacity-low.is-theme-background-type-color .group-control-open-all {
+ --button-text: var(--theme-background-color-rgb-text);
+ --button-text-focus-hover: var(--theme-background-color-rgb-text);
+ --button-text-active: var(--theme-background-color-rgb-text);
+ --button-text-disabled: var(--theme-background-color-rgb-text);
+}
diff --git a/src/component/group/index.js b/src/component/group/index.js
new file mode 100644
index 00000000..157b7871
--- /dev/null
+++ b/src/component/group/index.js
@@ -0,0 +1,312 @@
+import { state } from '../state';
+import { data } from '../data';
+import { layout } from '../layout';
+import { bookmark } from '../bookmark';
+import { header } from '../header';
+import { groupDefault } from '../groupDefault';
+import { groupAndBookmark } from '../groupAndBookmark';
+
+import { GroupArea } from '../groupArea';
+import { GroupEmpty } from '../groupEmpty';
+import { StagedGroup } from '../stagedGroup';
+import { GroupForm } from '../groupForm';
+import { Modal } from '../modal';
+import { SearchEmpty } from '../searchEmpty';
+import { BookmarkEmpty } from '../bookmarkEmpty';
+
+import { node } from '../../utility/node';
+import { clearChildNode } from '../../utility/clearChildNode';
+import { isValidString } from '../../utility/isValidString';
+import { trimString } from '../../utility/trimString';
+import { applyCSSVar } from '../../utility/applyCSSVar';
+import { applyCSSClass } from '../../utility/applyCSSClass';
+import { applyCSSState } from '../../utility/applyCSSState';
+
+import Sortable from 'sortablejs';
+
+import './index.css';
+
+const group = {};
+
+group.area = {
+ current: []
+};
+
+group.item = {
+ mod: {
+ add: (groupData) => {
+ bookmark.all.splice(groupData.position.destination, 0, groupData.group);
+ },
+ edit: (groupData) => {
+ bookmark.all.splice(groupData.position.origin, 1);
+ bookmark.all.splice(groupData.position.destination, 0, groupData.group);
+ },
+ move: (groupData) => {
+ groupData.group = bookmark.all.splice(groupData.position.origin, 1)[0];
+ bookmark.all.splice(groupData.position.destination, 0, groupData.group);
+ },
+ remove: (groupData) => {
+ bookmark.all.splice(groupData.position.origin, 1);
+ }
+ },
+ render: () => {
+
+ const addGroup = (groupData, groupIndex) => {
+
+ const currentGroupkData = new StagedGroup(groupData);
+
+ currentGroupkData.position.origin = groupIndex;
+
+ currentGroupkData.position.destination = groupIndex;
+
+ const groupArea = new GroupArea({ groupData: currentGroupkData });
+
+ group.area.current.push(groupArea);
+
+ if (state.get.current().search) {
+
+ if (header.element.search.resultCount().group[groupIndex].searchMatch > 0) {
+
+ bookmark.element.group.appendChild(groupArea.group());
+
+ };
+
+ } else {
+
+ bookmark.element.group.appendChild(groupArea.group());
+
+ };
+
+ };
+
+ const addSearchEmpty = () => {
+
+ const searchEmpty = new SearchEmpty();
+
+ bookmark.element.group.appendChild(searchEmpty.empty());
+
+ };
+
+ const addBookmarkEmpty = () => {
+
+ const bookmarkEmpty = new BookmarkEmpty();
+
+ bookmark.element.group.appendChild(bookmarkEmpty.empty());
+
+ };
+
+ if (bookmark.all.length > 0) {
+
+ if (state.get.current().search) {
+
+ // searching
+
+ if (header.element.search.resultCount().total > 0) {
+
+ bookmark.all.forEach((item, i) => {
+
+ const groupIndex = i;
+
+ addGroup(item, groupIndex);
+
+ });
+
+ } else {
+
+ addSearchEmpty();
+
+ };
+
+ } else {
+
+ // not searching
+
+ bookmark.all.forEach((item, i) => {
+
+ const groupIndex = i;
+
+ addGroup(item, groupIndex);
+
+ });
+
+ };
+
+ } else {
+
+ if (state.get.current().search) {
+
+ // searching
+
+ addSearchEmpty();
+
+ } else {
+
+ // not searching
+
+ addBookmarkEmpty();
+
+ };
+
+ };
+
+ },
+ clear: () => {
+
+ group.area.current = [];
+
+ clearChildNode(bookmark.element.group);
+
+ }
+};
+
+group.edit = {
+ open: () => {
+
+ state.get.current().group.edit = true;
+
+ group.edit.render();
+
+ },
+ close: () => {
+
+ state.get.current().group.edit = false;
+
+ group.edit.render();
+
+ },
+ toggle: () => {
+
+ if (state.get.current().group.edit) {
+ group.edit.close();
+ } else {
+ group.edit.open();
+ };
+
+ },
+ render: () => {
+
+ applyCSSState('group.edit');
+
+ if (group.area.current.length > 0) {
+ group.area.current.forEach((item, i) => {
+
+ if (state.get.current().group.edit) {
+ item.control.enable();
+ } else {
+ item.control.disable();
+ };
+
+ });
+ };
+
+ }
+};
+
+group.add = {
+ mod: {
+ open: () => { state.get.current().group.add = true; },
+ close: () => { state.get.current().group.add = false; }
+ },
+ render: () => {
+
+ const newGroupData = new StagedGroup();
+
+ newGroupData.newGroup();
+
+ const groupForm = new GroupForm({ groupData: newGroupData });
+
+ const addModal = new Modal({
+ heading: 'Add a new Group',
+ content: groupForm.form(),
+ successText: 'Add',
+ width: 40,
+ openAction: () => {
+
+ group.add.mod.open();
+
+ data.save();
+
+ },
+ closeAction: () => {
+
+ group.add.mod.close();
+
+ data.save();
+
+ },
+ successAction: () => {
+
+ group.item.mod.add(newGroupData);
+
+ group.add.mod.close();
+
+ groupAndBookmark.render();
+
+ layout.area.assemble();
+
+ data.save();
+
+ },
+ dismissAction: () => {
+
+ group.add.mod.close();
+
+ data.save();
+
+ }
+ });
+
+ addModal.open();
+
+ }
+};
+
+group.sort = {
+ sortable: null,
+ bind: () => {
+
+ group.sort.sortable = null;
+
+ group.sort.sortable = Sortable.create(bookmark.element.group, {
+ handle: '.group-control-sort',
+ ghostClass: 'group-sort-placeholder',
+ animation: 500,
+ easing: 'cubic-bezier(0.8, 0.8, 0.4, 1.4)',
+ onEnd: (event) => {
+
+ // console.log('============ debug sort ============');
+ // console.log(event);
+ // console.log('item:', 'origin', event.oldIndex, 'destination', event.newIndex);
+
+ const newGroupData = new StagedGroup();
+
+ newGroupData.position.origin = event.oldIndex;
+
+ newGroupData.position.destination = event.newIndex;
+
+ group.item.mod.move(newGroupData);
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ });
+
+ }
+};
+
+group.init = () => {
+ applyCSSVar([
+ 'group.name.size',
+ 'group.openAll.size'
+ ]);
+ applyCSSClass([
+ 'group.area.justify',
+ 'group.order'
+ ]);
+ group.add.mod.close();
+ group.edit.render();
+};
+
+export { group };
diff --git a/src/component/groupAndBookmark/index.js b/src/component/groupAndBookmark/index.js
new file mode 100644
index 00000000..4f41a30e
--- /dev/null
+++ b/src/component/groupAndBookmark/index.js
@@ -0,0 +1,51 @@
+import { data } from '../data';
+import { state } from '../state';
+import { bookmark } from '../bookmark';
+import { group } from '../group';
+
+const groupAndBookmark = {};
+
+groupAndBookmark.render = () => {
+
+ group.item.clear();
+
+ bookmark.item.clear();
+
+ group.item.render();
+
+ bookmark.item.render();
+
+ if (state.get.current().search) {
+
+ if (group.sort.sortable) {
+
+ group.sort.sortable.option('disabled', true);
+
+ };
+
+ if (bookmark.sort.sortable.length > 0) {
+
+ bookmark.sort.sortable.forEach((item, i) => {
+
+ item.option('disabled', true);
+
+ });
+
+ };
+
+
+ } else {
+
+ group.sort.bind();
+
+ bookmark.sort.bind();
+
+ };
+
+};
+
+groupAndBookmark.init = () => {
+ groupAndBookmark.render();
+};
+
+export { groupAndBookmark };
diff --git a/src/component/groupArea/index.js b/src/component/groupArea/index.js
new file mode 100644
index 00000000..4a3c1ad6
--- /dev/null
+++ b/src/component/groupArea/index.js
@@ -0,0 +1,324 @@
+import { state } from '../state';
+import { data } from '../data';
+import { theme } from '../theme';
+import { group } from '../group';
+import { layout } from '../layout';
+import { bookmark } from '../bookmark';
+import { groupAndBookmark } from '../groupAndBookmark';
+
+import { Button } from '../button';
+import { Modal } from '../modal';
+import { GroupForm } from '../groupForm';
+import { StagedGroup } from '../stagedGroup';
+
+import { node } from '../../utility/node';
+import { complexNode } from '../../utility/complexNode';
+import { isValidString } from '../../utility/isValidString';
+import { trimString } from '../../utility/trimString';
+import { clearChildNode } from '../../utility/clearChildNode';
+
+export const GroupArea = function({
+ groupData = {}
+} = {}) {
+
+ this.element = {
+ group: node('div|class:group'),
+ header: node('div|class:group-header'),
+ name: {
+ name: node('div|class:group-name'),
+ text: node('h1|class:group-name-text')
+ },
+ control: {
+ control: node('div|class:group-control'),
+ group: node('div|class:group-control-group form-group form-group-horizontal')
+ },
+ body: node('div|class:group-body')
+ };
+
+ this.control = {};
+
+ this.control.button = {
+ up: new Button({
+ text: 'Move this group up',
+ srOnly: true,
+ iconName: 'arrowKeyboardUp',
+ style: ['line'],
+ title: 'Move this group up',
+ classList: ['group-control-button', 'group-control-up'],
+ func: () => {
+
+ groupData.position.destination--;
+
+ if (groupData.position.destination < 0) {
+ groupData.position.destination = 0;
+ };
+
+ group.item.mod.move(groupData);
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ }),
+ sort: new Button({
+ text: 'Drag group to reorder',
+ srOnly: true,
+ iconName: 'drag',
+ style: ['line'],
+ title: 'Drag group to reorder',
+ classList: ['group-control-button', 'group-control-sort'],
+ }),
+ down: new Button({
+ text: 'Move this group down',
+ srOnly: true,
+ iconName: 'arrowKeyboardDown',
+ style: ['line'],
+ title: 'Move this group right',
+ classList: ['group-control-button', 'group-control-up'],
+ func: () => {
+
+ groupData.position.destination++;
+
+ if (groupData.position.destination > bookmark.all.length - 1) {
+ groupData.position.destination = bookmark.all.length - 1;
+ };
+
+ group.item.mod.move(groupData);
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ }),
+ edit: new Button({
+ text: 'Edit this group',
+ srOnly: true,
+ iconName: 'edit',
+ style: ['line'],
+ title: 'Edit this group',
+ classList: ['group-control-button', 'group-control-edit'],
+ func: () => {
+
+ let newGroupData = new StagedGroup();
+
+ newGroupData.group = JSON.parse(JSON.stringify(groupData.group));
+
+ newGroupData.position = JSON.parse(JSON.stringify(groupData.position));
+
+ newGroupData.type.existing = true;
+
+ const groupForm = new GroupForm({ groupData: newGroupData });
+
+ const editModal = new Modal({
+ heading: isValidString(newGroupData.group.name.text) ? 'Edit ' + newGroupData.group.name.text : 'Edit unnamed group',
+ content: groupForm.form(),
+ successText: 'Save',
+ width: 40,
+ successAction: () => {
+
+ group.item.mod.edit(newGroupData);
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ });
+
+ editModal.open();
+
+ }
+ }),
+ remove: new Button({
+ text: 'Remove this group',
+ srOnly: true,
+ iconName: 'cross',
+ style: ['line'],
+ title: 'Remove this group',
+ classList: ['group-control-button', 'group-control-remove'],
+ func: () => {
+
+ const removeModal = new Modal({
+ heading: isValidString(groupData.group.name.text) ? 'Remove ' + groupData.group.name.text : 'Remove unnamed bookmark',
+ content: 'Are you sure you want to remove this Group and all the Bookmarks within? This can not be undone.',
+ successText: 'Remove',
+ width: 'small',
+ successAction: () => {
+
+ group.item.mod.remove(groupData);
+
+ layout.area.assemble();
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ });
+
+ removeModal.open();
+
+ }
+ })
+ };
+
+ this.openAll = {
+ button: new Button({
+ text: 'Open all',
+ style: ['line'],
+ title: 'Open all Bookmarks in this Group',
+ classList: ['group-control-button', 'group-control-open-all'],
+ func: () => {
+ this.openAll.open();
+ }
+ }),
+ open: () => {
+
+ if (state.get.current().bookmark.newTab) {
+
+ groupData.group.items.forEach((item, i) => {
+ chrome.tabs.create({ url: item.url });
+ });
+
+ } else {
+
+ const first = groupData.group.items.shift();
+
+ groupData.group.items.forEach((item, i) => {
+ chrome.tabs.create({ url: item.url });
+ });
+
+ window.location.href = first.url;
+
+ };
+
+ }
+ };
+
+ this.style = () => {
+
+ if (groupData.group.name.show && isValidString(groupData.group.name.text)) {
+ this.element.group.classList.add('is-group-header');
+ };
+
+ if (groupData.group.openAll.show && groupData.group.items.length > 0) {
+ this.element.group.classList.add('is-group-open-all');
+ };
+
+ };
+
+ this.control.disable = () => {
+
+ for (var key in this.control.button) {
+ this.control.button[key].disable();
+ };
+
+ this.control.searchState();
+
+ };
+
+ this.control.enable = () => {
+
+ for (var key in this.control.button) {
+ this.control.button[key].enable();
+ };
+
+ this.control.searchState();
+
+ };
+
+ this.control.searchState = () => {
+
+ if (state.get.current().search) {
+ this.control.button.up.disable();
+ this.control.button.down.disable();
+ this.control.button.sort.disable();
+ } else if (state.get.current().group.edit && !state.get.current().search) {
+ this.control.button.up.enable();
+ this.control.button.down.enable();
+ this.control.button.sort.enable();
+ };
+
+ };
+
+ this.assemble = () => {
+
+ this.element.name.text.innerHTML = groupData.group.name.text;
+
+ this.element.name.name.appendChild(this.element.name.text);
+
+ this.element.control.group.appendChild(this.control.button.up.button);
+
+ this.element.control.group.appendChild(this.control.button.sort.button);
+
+ this.element.control.group.appendChild(this.control.button.down.button);
+
+ this.element.control.group.appendChild(this.control.button.edit.button);
+
+ this.element.control.group.appendChild(this.control.button.remove.button);
+
+ this.element.control.control.appendChild(this.element.control.group);
+
+ this.element.header.appendChild(this.element.control.control);
+
+ if (groupData.group.name.show && isValidString(groupData.group.name.text)) {
+ this.element.header.appendChild(this.element.name.name);
+ };
+
+ if (groupData.group.openAll.show && groupData.group.items.length > 0) {
+ this.element.header.appendChild(this.openAll.button.button);
+ };
+
+ this.element.group.appendChild(this.element.header);
+
+ this.element.group.appendChild(this.element.body);
+
+ this.element.body.position = groupData.position;
+
+ if (state.get.current().group.edit) {
+ this.control.enable();
+ } else {
+ this.control.disable();
+ };
+
+ };
+
+ this.clear = () => {
+
+ clearChildNode(this.element.body);
+
+ };
+
+ this.group = () => {
+
+ return this.element.group;
+
+ };
+
+ this.update = {};
+
+ this.update.style = () => {
+
+ const html = document.querySelector('html');
+
+ if (state.get.current().theme.group.openAll.opacity < 40) {
+
+ html.classList.add('is-group-open-all-opacity-low');
+
+ } else {
+
+ html.classList.remove('is-group-open-all-opacity-low');
+
+ };
+
+ };
+
+ this.style();
+
+ this.assemble();
+
+ this.update.style();
+
+};
diff --git a/src/component/groupDefault/index.js b/src/component/groupDefault/index.js
new file mode 100644
index 00000000..43579e1b
--- /dev/null
+++ b/src/component/groupDefault/index.js
@@ -0,0 +1,5 @@
+export const groupDefault = {
+ name: { text: '', show: true },
+ openAll: { show: true },
+ items: []
+};
diff --git a/src/component/groupEmpty/index.css b/src/component/groupEmpty/index.css
new file mode 100644
index 00000000..247d456b
--- /dev/null
+++ b/src/component/groupEmpty/index.css
@@ -0,0 +1,26 @@
+.group-empty {
+ background-color: hsla(var(--theme-primary-040), 0.2);
+ padding: 0.5em 1em;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ height: inherit;
+ text-align: center;
+ display: flex;
+ grid-column-start: 1;
+ grid-column-end: -1;
+ gap: 1em;
+ justify-content: center;
+ align-items: center;
+ flex-wrap: wrap;
+}
+
+.is-bookmark-style-block .group-empty {
+ flex-direction: column;
+}
+
+.is-bookmark-style-list .group-empty {
+ flex-direction: row;
+}
+
+.group-empty-headline:not(:last-child) {
+ margin-bottom: 0;
+}
diff --git a/src/component/groupEmpty/index.js b/src/component/groupEmpty/index.js
new file mode 100644
index 00000000..9a93e881
--- /dev/null
+++ b/src/component/groupEmpty/index.js
@@ -0,0 +1,53 @@
+import { state } from '../state';
+import { bookmark } from '../bookmark';
+
+import { Button } from '../button';
+
+import { node } from '../../utility/node';
+
+import './index.css';
+
+export const GroupEmpty = function({
+ groupIndex = false
+} = {}) {
+
+ this.element = {
+ empty: node('div|class:group-empty'),
+ control: node('div|class:group-empty-control'),
+ headline: node('p:Empty Group|class:group-empty-headline small muted')
+ };
+
+ this.control = {};
+
+ this.control.button = {
+ remove: new Button({
+ text: 'Add a Bookmark',
+ size: 'small',
+ iconName: 'addBookmark',
+ func: () => {
+ bookmark.add.render({
+ groupIndex: groupIndex
+ });
+ }
+ })
+ };
+
+ this.assemble = () => {
+
+ this.element.control.appendChild(this.control.button.remove.button);
+
+ this.element.empty.appendChild(this.element.headline);
+
+ this.element.empty.appendChild(this.element.control);
+
+ };
+
+ this.empty = () => {
+
+ this.assemble();
+
+ return this.element.empty;
+
+ };
+
+};
diff --git a/src/component/groupForm/index.css b/src/component/groupForm/index.css
new file mode 100644
index 00000000..7b48f6d4
--- /dev/null
+++ b/src/component/groupForm/index.css
@@ -0,0 +1,3 @@
+.group-form {
+ display: block;
+}
diff --git a/src/component/groupForm/index.js b/src/component/groupForm/index.js
new file mode 100644
index 00000000..c7ad0b8d
--- /dev/null
+++ b/src/component/groupForm/index.js
@@ -0,0 +1,256 @@
+import { state } from '../state';
+import { data } from '../data';
+import { theme } from '../theme';
+import { bookmark } from '../bookmark';
+import { groupDefault } from '../groupDefault';
+
+import * as form from '../form';
+
+import { Button } from '../button';
+import { Suggest } from '../suggest';
+import { Collapse } from '../collapse';
+import { Tab } from '../tab';
+
+import { Control_helperText } from '../control/helperText';
+import { Control_inputButton } from '../control/inputButton';
+import { Control_groupText } from '../control/groupText';
+import { Control_radio } from '../control/radio';
+import { Control_radioGrid } from '../control/radioGrid';
+import { Control_checkbox } from '../control/checkbox';
+import { Control_slider } from '../control/slider';
+import { Control_sliderSlim } from '../control/sliderSlim';
+import { Control_colorMixer } from '../control/colorMixer';
+import { Control_color } from '../control/color';
+import { Control_text } from '../control/text';
+import { Control_select } from '../control/select';
+
+import { node } from '../../utility/node';
+import { complexNode } from '../../utility/complexNode';
+import { isValidString } from '../../utility/isValidString';
+import { trimString } from '../../utility/trimString';
+import { ordinalNumber } from '../../utility/ordinalNumber';
+import { randomString } from '../../utility/randomString';
+import { randomNumber } from '../../utility/randomNumber';
+
+import './index.css';
+
+export const GroupForm = function({
+ groupData = false
+} = {}) {
+
+ this.element = {
+ form: node('form|class:group-form'),
+ main: node('div|class:group-form-main')
+ };
+
+ this.selectOption = {};
+
+ this.selectOption.group = () => {
+
+ const option = [];
+
+ if (bookmark.all.length > 0) {
+
+ let count = bookmark.all.length;
+
+ if (groupData.type.new) {
+ count++;
+ };
+
+ for (var i = 1; i <= count; i++) {
+
+ option.push(ordinalNumber(i));
+
+ };
+
+ } else {
+
+ option.push(ordinalNumber(1));
+
+ };
+
+ return option;
+
+ };
+
+ this.control = {};
+
+ this.control.group = {
+ name: {
+ text: new Control_text({
+ object: groupData.group,
+ path: 'name.text',
+ id: 'name-text',
+ value: groupData.group.name.text,
+ placeholder: 'Example group',
+ labelText: 'Group name',
+ srOnly: true
+ }),
+ show: new Control_checkbox({
+ object: groupData.group,
+ path: 'name.show',
+ id: 'name-show',
+ labelText: 'Show Group name',
+ action: () => {
+ this.disable();
+ }
+ }),
+ random: new Button({
+ text: 'Random Group name',
+ style: ['line'],
+ func: () => {
+ groupData.group.name.text = randomString({ adjectivesCount: randomNumber(1, 3) });
+ this.control.group.name.text.update();
+ }
+ })
+ },
+ openAll: {
+ show: new Control_checkbox({
+ object: groupData.group,
+ path: 'openAll.show',
+ id: 'openAll-show',
+ labelText: 'Show Open all',
+ description: 'Open all button will appear if there is at least one Bookmark in this Group.'
+ })
+ },
+ };
+
+ this.control.destination = new Control_select({
+ object: groupData,
+ path: 'position.destination',
+ id: 'position-destination',
+ labelText: 'Position',
+ option: this.selectOption.group(),
+ selected: groupData.position.destination
+ });
+
+ this.disable = () => {
+
+ if (groupData.group.name.show) {
+ this.control.group.name.text.enable();
+ this.control.group.name.random.enable();
+ } else {
+ this.control.group.name.text.disable();
+ this.control.group.name.random.disable();
+ };
+
+ };
+
+ this.update = () => {
+ this.control.group.name.text.update();
+ this.control.group.name.show.update();
+ };
+
+ this.assemble = () => {
+
+ this.element.main.appendChild(
+ form.fieldset({
+ children: [
+ form.wrap({
+ children: [
+ node('h2:Name|class:mb-2'),
+ node('p:Display a Name above this Group.|class:mb-5')
+ ]
+ }),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.group.name.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.group.name.text.wrap(),
+ this.control.group.name.random.wrap()
+ ]
+ })
+ ]
+ })
+ ]
+ })
+ ]
+ })
+ ]
+ })
+ );
+
+ this.element.main.appendChild(
+ node('hr'),
+ );
+
+ this.element.main.appendChild(
+ form.fieldset({
+ children: [
+ form.wrap({
+ children: [
+ node('h2:Open all|class:mb-2'),
+ node('p:Display a button to open all Bookmarks in this Group.|class:mb-5')
+ ]
+ }),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.group.openAll.show.wrap()
+ ]
+ })
+ ]
+ })
+ ]
+ })
+ );
+
+ this.element.main.appendChild(
+ node('hr'),
+ );
+
+ this.element.main.appendChild(
+ form.fieldset({
+ children: [
+ form.wrap({
+ children: [
+ node('h2:Ordering|class:mb-2'),
+ node('p:The position of this Group.|class:mb-5')
+ ]
+ }),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ this.control.destination.wrap()
+ ]
+ })
+ ]
+ })
+ ]
+ })
+ );
+
+ this.element.form.appendChild(this.element.main);
+
+ };
+
+ this.bind = () => {
+
+ this.element.form.addEventListener('keydown', (event) => {
+
+ if (event.keyCode == 13) { event.preventDefault(); return false; };
+
+ });
+
+ };
+
+ this.form = () => {
+
+ return this.element.form;
+
+ };
+
+ this.assemble();
+
+ this.disable();
+
+ this.update();
+
+};
diff --git a/src/component/header/index.css b/src/component/header/index.css
new file mode 100644
index 00000000..286266da
--- /dev/null
+++ b/src/component/header/index.css
@@ -0,0 +1,60 @@
+:root {
+ --header-item-opacity: 100;
+}
+
+.header-area {
+ flex-grow: 1;
+ padding: calc(var(--layout-space) * var(--layout-padding));
+ gap: calc(var(--layout-space) * var(--layout-padding));
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+.is-theme-header-color-by-custom .header-area {
+ background-color: hsla(var(--theme-header-color-hsl-h), calc(var(--theme-header-color-hsl-s) * 1%), calc(var(--theme-header-color-hsl-l) * 1%), calc(var(--theme-header-color-opacity) / 100));
+}
+
+.header {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ flex-grow: 1;
+ gap: calc(var(--layout-space) * var(--layout-gutter));
+}
+
+.is-header-item-justify-left .header {
+ justify-content: flex-start;
+}
+
+.is-header-item-justify-center .header {
+ justify-content: center;
+}
+
+.is-header-item-justify-right .header {
+ justify-content: flex-end;
+}
+
+.is-layout-direction-horizontal .header-area {
+ flex-grow: 0;
+ justify-self: center;
+}
+
+.is-layout-direction-horizontal .header {
+ flex-grow: 0;
+}
+
+.header-border-top,
+.header-border-bottom {
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ width: 100%;
+}
+
+.header-border-top {
+ border-top: calc(var(--layout-line-width) * var(--header-border-top)) solid rgb(var(--theme-accent));
+}
+
+.header-border-bottom {
+ border-bottom: calc(var(--layout-line-width) * var(--header-border-bottom)) solid rgb(var(--theme-accent));
+}
diff --git a/src/component/header/index.js b/src/component/header/index.js
new file mode 100644
index 00000000..6d5ead8d
--- /dev/null
+++ b/src/component/header/index.js
@@ -0,0 +1,521 @@
+import { state } from '../state';
+import { data } from '../data';
+import { layout } from '../layout';
+import { toolbar } from '../toolbar';
+
+import { Clock } from '../clock';
+import { Date } from '../date';
+import { Greeting } from '../greeting';
+import { Transitional } from '../transitional';
+import { Search } from '../search';
+import { HeaderItem } from '../headerItem';
+
+import { node } from '../../utility/node';
+import { clearChildNode } from '../../utility/clearChildNode';
+import { applyCSSVar } from '../../utility/applyCSSVar';
+import { applyCSSClass } from '../../utility/applyCSSClass';
+import { applyCSSState } from '../../utility/applyCSSState';
+
+import Sortable from 'sortablejs';
+
+import './index.css';
+
+const header = {};
+
+header.element = {
+ header: node('header|class:header'),
+ area: node('div|class:header-area'),
+ greeting: false,
+ transitional: false,
+ clock: false,
+ date: false,
+ search: false,
+ border: {
+ top: node('div|class:header-border-top'),
+ bottom: node('div|class:header-border-bottom')
+ }
+};
+
+header.item = {};
+
+header.item.mod = {
+ move: (origin, destination) => {
+
+ const itemToMove = state.get.current().header.order.splice(origin, 1);
+
+ state.get.current().header.order.splice(destination, 0, itemToMove[0]);
+
+ },
+ order: () => {
+
+ const headerItems = ['greeting', 'transitional', 'clock', 'date', 'search', 'toolbar'];
+
+ headerItems.reverse().forEach((item, i) => {
+
+ switch (item) {
+
+ case 'clock':
+
+ if (state.get.current().header.clock.second.show ||
+ state.get.current().header.clock.minute.show ||
+ state.get.current().header.clock.hour.show) {
+
+ if (!state.get.current().header.order.includes(item)) {
+
+ let position = 0;
+
+ if (state.get.current().header.date.day.show ||
+ state.get.current().header.date.date.show ||
+ state.get.current().header.date.month.show ||
+ state.get.current().header.date.year.show) {
+
+ position = state.get.current().header.order.indexOf('date');
+
+ } else if (state.get.current().header.transitional.show) {
+
+ position = state.get.current().header.order.indexOf('transitional') + 1;
+
+ } else if (state.get.current().header.greeting.show) {
+
+ position = state.get.current().header.order.indexOf('greeting') + 1;
+
+ };
+
+ state.get.current().header.order.splice(position, 0, item);
+
+ };
+
+ } else {
+
+ if (state.get.current().header.order.includes(item)) {
+ state.get.current().header.order.splice(state.get.current().header.order.indexOf(item), 1);
+ };
+
+ };
+
+ break;
+
+ case 'date':
+
+ if (state.get.current().header.date.day.show ||
+ state.get.current().header.date.date.show ||
+ state.get.current().header.date.month.show ||
+ state.get.current().header.date.year.show) {
+
+ if (!state.get.current().header.order.includes(item)) {
+
+ let position = 0;
+
+ if (state.get.current().header.clock.second.show ||
+ state.get.current().header.clock.minute.show ||
+ state.get.current().header.clock.hour.show) {
+
+ position = state.get.current().header.order.indexOf('clock') + 1;
+
+ } else if (state.get.current().header.transitional.show) {
+
+ position = state.get.current().header.order.indexOf('transitional') + 1;
+
+ } else if (state.get.current().header.greeting.show) {
+
+ position = state.get.current().header.order.indexOf('greeting') + 1;
+
+ };
+
+ state.get.current().header.order.splice(position, 0, item);
+
+ };
+
+ } else {
+
+ if (state.get.current().header.order.includes(item)) {
+ state.get.current().header.order.splice(state.get.current().header.order.indexOf(item), 1)
+ };
+
+ };
+
+ break;
+
+ case 'transitional':
+
+ if (state.get.current().header.transitional.show) {
+
+ if (!state.get.current().header.order.includes(item)) {
+
+ let position = 0;
+
+ if (state.get.current().header.clock.second.show ||
+ state.get.current().header.clock.minute.show ||
+ state.get.current().header.clock.hour.show) {
+
+ position = state.get.current().header.order.indexOf('clock');
+
+ } else if (state.get.current().header.date.day.show ||
+ state.get.current().header.date.date.show ||
+ state.get.current().header.date.month.show ||
+ state.get.current().header.date.year.show) {
+
+ position = state.get.current().header.order.indexOf('date');
+
+ };
+
+ state.get.current().header.order.splice(position, 0, item);
+
+ };
+
+ } else {
+
+ if (state.get.current().header.order.includes(item)) {
+ state.get.current().header.order.splice(state.get.current().header.order.indexOf(item), 1)
+ };
+
+ };
+
+ break;
+
+ case 'greeting':
+
+ if (state.get.current().header.greeting.show) {
+
+ if (!state.get.current().header.order.includes(item)) {
+
+ state.get.current().header.order.unshift(item);
+
+ };
+
+ } else {
+
+ if (state.get.current().header.order.includes(item)) {
+ state.get.current().header.order.splice(state.get.current().header.order.indexOf(item), 1)
+ };
+
+ };
+
+ break;
+
+ case 'search':
+
+ if (state.get.current().header.search.show) {
+
+ if (!state.get.current().header.order.includes(item)) {
+
+ let position = 0;
+
+ switch (state.get.current().toolbar.location) {
+
+ case 'header':
+
+ position = state.get.current().header.order.indexOf('toolbar');
+
+ break;
+
+ default:
+
+ position = state.get.current().header.order.length;
+
+ };
+
+ state.get.current().header.order.splice(position, 0, item);
+
+ };
+
+ } else {
+
+ if (state.get.current().header.order.includes(item)) {
+ state.get.current().header.order.splice(state.get.current().header.order.indexOf(item), 1)
+ };
+
+ };
+
+ break;
+
+ case 'toolbar':
+
+ switch (state.get.current().toolbar.location) {
+
+ case 'corner':
+
+ if (state.get.current().header.order.includes(item)) {
+ state.get.current().header.order.splice(state.get.current().header.order.indexOf(item), 1);
+ };
+
+ break;
+
+ case 'header':
+
+ if (!state.get.current().header.order.includes(item)) {
+ state.get.current().header.order.push(item);
+ };
+
+ break;
+
+ };
+
+ break;
+
+ };
+
+ });
+
+ }
+};
+
+header.item.current = [];
+
+header.item.render = () => {
+
+ const order = state.get.current().header.order;
+
+ header.element.clock = new Clock();
+
+ header.element.date = new Date();
+
+ header.element.greeting = new Greeting();
+
+ header.element.transitional = new Transitional();
+
+ header.element.search = new Search();
+
+ order.forEach((item, i) => {
+
+ switch (item) {
+
+ case 'clock':
+
+ if (state.get.current().header.clock.second.show ||
+ state.get.current().header.clock.minute.show ||
+ state.get.current().header.clock.hour.show) {
+
+ const headerItem = new HeaderItem({
+ name: item,
+ child: header.element.clock.clock()
+ });
+
+ header.item.current.push(headerItem);
+
+ header.element.header.appendChild(headerItem.item());
+
+ };
+
+ break;
+
+ case 'date':
+
+ if (state.get.current().header.date.day.show || state.get.current().header.date.date.show || state.get.current().header.date.month.show || state.get.current().header.date.year.show) {
+
+ const headerItem = new HeaderItem({
+ name: item,
+ child: header.element.date.date()
+ });
+
+ header.item.current.push(headerItem);
+
+ header.element.header.appendChild(headerItem.item());
+
+ };
+
+ break;
+
+ case 'greeting':
+
+ if (state.get.current().header.greeting.show) {
+
+ const headerItem = new HeaderItem({
+ name: item,
+ child: header.element.greeting.greeting()
+ });
+
+ header.item.current.push(headerItem);
+
+ header.element.header.appendChild(headerItem.item());
+
+ };
+
+ break;
+
+ case 'transitional':
+
+ if (
+ ((
+ state.get.current().header.clock.second.show ||
+ state.get.current().header.clock.minute.show ||
+ state.get.current().header.clock.hour.show ||
+ state.get.current().header.date.day.show ||
+ state.get.current().header.date.date.show ||
+ state.get.current().header.date.month.show ||
+ state.get.current().header.date.year.show
+ )) &&
+ state.get.current().header.transitional.show
+ ) {
+
+ const headerItem = new HeaderItem({
+ name: item,
+ child: header.element.transitional.transitional()
+ });
+
+ header.item.current.push(headerItem);
+
+ header.element.header.appendChild(headerItem.item());
+
+ };
+
+ break;
+
+ case 'search':
+
+ if (state.get.current().header.search.show) {
+
+ const headerItem = new HeaderItem({
+ name: item,
+ child: header.element.search.search()
+ });
+
+ header.item.current.push(headerItem);
+
+ header.element.header.appendChild(headerItem.item());
+
+ };
+
+ break;
+
+ case 'toolbar':
+
+ switch (state.get.current().toolbar.location) {
+
+ case 'header':
+
+ const headerItem = new HeaderItem({
+ name: item,
+ child: toolbar.current.toolbar()
+ });
+
+ header.item.current.push(headerItem);
+
+ header.element.header.appendChild(headerItem.item());
+
+ break;
+
+ };
+
+ break;
+
+ };
+
+ });
+
+ layout.element.header.appendChild(header.element.area);
+
+ const sortable = Sortable.create(header.element.header, {
+ handle: '.header-control-sort',
+ ghostClass: 'header-sort-placeholder',
+ animation: 500,
+ easing: 'cubic-bezier(0.8, 0.8, 0.4, 1.4)',
+ onEnd: (event) => {
+
+ // console.log('============ debug sort ============');
+ // console.log(event);
+ // console.log('item:', 'origin', event.oldIndex, 'destination', event.newIndex);
+
+ header.item.mod.move(event.oldIndex, event.newIndex);
+
+ data.save();
+
+ }
+ });
+
+ const html = document.querySelector('html');
+
+ if (state.get.current().header.order.length > 0) {
+ html.classList.add('is-header-show');
+ } else {
+ html.classList.remove('is-header-show');
+ };
+
+};
+
+header.item.clear = () => {
+
+ clearChildNode(header.element.header);
+
+};
+
+header.area = {
+ render: () => {
+
+ header.element.area.appendChild(header.element.header);
+
+ }
+};
+
+header.edit = {
+ open: () => {
+
+ state.get.current().header.edit = true;
+
+ header.edit.render();
+
+ },
+ close: () => {
+
+ state.get.current().header.edit = false;
+
+ header.edit.render();
+
+ },
+ toggle: () => {
+
+ if (state.get.current().header.edit) {
+ header.edit.close();
+ } else {
+ header.edit.open();
+ };
+
+ },
+ render: () => {
+
+ applyCSSState('header.edit');
+
+ if (header.item.current.length > 0) {
+ header.item.current.forEach((item, i) => {
+
+ if (state.get.current().header.edit) {
+ item.control.enable();
+ } else {
+ item.control.disable();
+ };
+
+ });
+ };
+
+ }
+};
+
+header.init = () => {
+ state.get.current().search = false;
+ header.item.mod.order();
+ header.area.render();
+ header.edit.render();
+ header.item.render();
+ applyCSSVar([
+ 'header.greeting.size',
+ 'header.transitional.size',
+ 'header.clock.size',
+ 'header.date.size',
+ 'header.search.size',
+ 'header.search.width.size'
+ ]);
+ applyCSSClass([
+ 'header.item.justify',
+ 'header.search.width.by',
+ 'header.search.text.justify'
+ ]);
+ applyCSSState([
+ 'header.greeting.newLine',
+ 'header.clock.newLine',
+ 'header.transitional.newLine',
+ 'header.date.newLine',
+ 'header.search.newLine'
+ ]);
+};
+
+export { header };
diff --git a/src/component/headerItem/index.css b/src/component/headerItem/index.css
new file mode 100644
index 00000000..e0f94e99
--- /dev/null
+++ b/src/component/headerItem/index.css
@@ -0,0 +1,185 @@
+.header-item {
+ min-height: 2.5em;
+ display: flex;
+ flex-direction: row;
+ align-items: stretch;
+}
+
+.header-item-content {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ gap: calc(var(--layout-space) * var(--layout-gutter));
+ transition: gap var(--layout-transition-extra-fast) var(--layout-duration-04);
+}
+
+.is-layout-direction-horizontal.is-header-item-justify-right .header-item-content {
+ flex-direction: row-reverse;
+}
+
+.is-header-item-justify-left .header-item {
+ justify-content: flex-start;
+}
+
+.is-header-item-justify-center .header-item {
+ justify-content: center;
+}
+
+.is-header-item-justify-right .header-item {
+ justify-content: flex-end;
+}
+
+.is-edge .header-item {
+ transition: gap var(--layout-transition-extra-fast);
+}
+
+.is-header-edit .header-item {
+ transition: gap var(--layout-transition-extra-fast);
+}
+
+.header-sort-placeholder {
+ box-shadow: var(--edge);
+ border-radius: calc(var(--theme-radius) * 0.01em);
+}
+
+.is-theme-background-type-accent .header-sort-placeholder {
+ box-shadow: var(--edge-on-accent);
+}
+
+.header-sort-placeholder.header-item>* {
+ visibility: hidden;
+}
+
+.header-item-body {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: stretch;
+}
+
+.header-item-body>* {
+ flex-grow: 1;
+}
+
+.header-item-control {
+ margin-left: calc(calc(var(--layout-space) * var(--layout-gutter)) * -1);
+ height: 0;
+ flex-grow: 0;
+ transition: height var(--layout-transition-extra-fast) var(--layout-duration-04), margin var(--layout-transition-extra-fast);
+}
+
+.is-edge .header-item-control {
+ transition: height var(--layout-transition-extra-fast), margin var(--layout-transition-extra-fast);
+}
+
+.is-header-edit .header-item-control {
+ margin: 0;
+ height: 2.5em;
+ transition: height var(--layout-transition-extra-fast), margin var(--layout-transition-extra-fast) var(--layout-duration-04);
+}
+
+.is-edge.is-header-edit .header-item-control {
+ transition: height var(--layout-transition-extra-fast), margin var(--layout-transition-extra-fast);
+}
+
+.header-item-control-group {
+ width: 0;
+ overflow: hidden;
+ transition: width var(--layout-transition-extra-fast);
+}
+
+.is-header-edit .header-item-control-group {
+ width: 4em;
+ transition: width var(--layout-transition-extra-fast) var(--layout-duration-04);
+}
+
+.is-edge.is-header-edit .header-item-control-group {
+ transition: width var(--layout-transition-extra-fast);
+}
+
+.header-sort-placeholder.header-item>* {
+ visibility: hidden;
+}
+
+.is-header-greeting-newline .header-item-greeting {
+ flex-basis: 100%;
+}
+
+.is-header-transitional-newline .header-item-transitional {
+ flex-basis: 100%;
+}
+
+.is-header-clock-newline .header-item-clock {
+ flex-basis: 100%;
+}
+
+.is-header-date-newline .header-item-date {
+ flex-basis: 100%;
+}
+
+.is-header-search-newline .header-item-search {
+ flex-basis: 100%;
+}
+
+.is-toolbar-location-header.is-toolbar-newline .header-item-toolbar {
+ flex-basis: 100%;
+}
+
+.header-item-greeting .header-item-body {
+ font-size: calc(var(--header-greeting-size) * 0.01em);
+}
+
+.header-item-transitional .header-item-body {
+ font-size: calc(var(--header-transitional-size) * 0.01em);
+}
+
+.header-item-clock .header-item-body {
+ font-size: calc(var(--header-clock-size) * 0.01em);
+}
+
+.header-item-date .header-item-body {
+ font-size: calc(var(--header-date-size) * 0.01em);
+}
+
+.header-item-search .header-item-body {
+ font-size: calc(var(--header-search-size) * 0.01em);
+}
+
+.is-header-search-width-by-auto .header-item-search {
+ flex-grow: 1;
+}
+
+.is-header-search-width-by-auto .header-item-search .header-item-content,
+.is-header-search-width-by-auto .header-item-search .header-item-body {
+ flex-grow: 1;
+}
+
+.is-header-search-width-by-custom .header-item-search {
+ width: calc(var(--header-search-width-size) * 1%);
+ flex-grow: 0;
+}
+
+.is-header-search-width-by-custom .header-item-search .header-item-content {
+ flex-grow: 1;
+}
+
+.is-header-search-width-by-custom .header-item-search .header-item-body {
+ flex-grow: 1;
+}
+
+.is-header-search-newline.is-header-search-width-by-custom .header-item-search .header-item-content {
+ flex-grow: 0;
+ width: calc(var(--header-search-width-size) * 1%);
+}
+
+.is-header-item-justify-left.is-header-search-width-by-custom .header-item-search .header-item-content {
+ justify-content: flex-start;
+}
+
+.is-header-item-justify-center.is-header-search-width-by-custom .header-item-search .header-item-content {
+ justify-content: center;
+}
+
+.is-header-item-justify-right.is-header-search-width-by-custom .header-item-search .header-item-content {
+ justify-content: flex-end;
+}
diff --git a/src/component/headerItem/index.js b/src/component/headerItem/index.js
new file mode 100644
index 00000000..8e5e1320
--- /dev/null
+++ b/src/component/headerItem/index.js
@@ -0,0 +1,85 @@
+import { state } from '../state';
+import { data } from '../data';
+import { header } from '../header';
+
+import { Button } from '../button';
+
+import { node } from '../../utility/node';
+
+import './index.css';
+
+export const HeaderItem = function({
+ name = false,
+ index = false,
+ child = false
+} = {}) {
+
+ this.element = {
+ item: node('div|class:header-item header-item-' + name),
+ content: node('div|class:header-item-content'),
+ body: node('div|class:header-item-body'),
+ control: {
+ control: node('div|class:header-item-control'),
+ group: node('div|class:header-item-control-group form-group form-group-horizontal')
+ }
+ };
+
+ this.control = {};
+
+ this.control.button = {
+ sort: new Button({
+ text: 'Drag header item to reorder',
+ srOnly: true,
+ iconName: 'drag',
+ style: ['line'],
+ title: 'Drag header item to reorder',
+ classList: ['header-control-button', 'header-control-sort'],
+ })
+ };
+
+ this.control.disable = () => {
+ for (var key in this.control.button) {
+ this.control.button[key].disable();
+ };
+ };
+
+ this.control.enable = () => {
+ for (var key in this.control.button) {
+ this.control.button[key].enable();
+ };
+ };
+
+ this.assemble = () => {
+ this.element.control.group.appendChild(this.control.button.sort.button);
+
+ this.element.control.control.appendChild(this.element.control.group);
+
+ this.element.content.appendChild(this.element.control.control);
+
+ if (child) {
+
+ this.element.body.appendChild(child);
+
+ this.element.content.appendChild(this.element.body);
+
+ };
+
+ this.element.item.appendChild(this.element.content);
+
+ };
+
+ this.item = () => {
+
+ this.assemble();
+
+ if (state.get.current().group.edit) {
+ this.control.enable();
+ } else {
+ this.control.disable();
+ };
+
+ return this.element.item;
+
+ };
+
+};
diff --git a/src/component/icon/index.css b/src/component/icon/index.css
new file mode 100644
index 00000000..aff74152
--- /dev/null
+++ b/src/component/icon/index.css
@@ -0,0 +1,15 @@
+.icon {
+ width: 1em;
+ height: 1em;
+ font-size: 1.5em;
+ display: flex;
+}
+
+.icon svg {
+ width: 100%;
+ height: 100%;
+ fill: currentColor;
+ vertical-align: middle;
+ overflow: hidden;
+ display: block;
+}
diff --git a/src/component/icon/index.js b/src/component/icon/index.js
new file mode 100644
index 00000000..2a6375a7
--- /dev/null
+++ b/src/component/icon/index.js
@@ -0,0 +1,144 @@
+import { node } from '../../utility/node';
+
+import './index.css';
+
+const icon = {};
+
+icon.all = {
+ add: {
+ name: 'add',
+ path: 'M18.984 12.984h-6v6h-1.969v-6h-6v-1.969h6v-6h1.969v6h6v1.969z'
+ },
+ arrowBack: {
+ name: 'arrow-back',
+ path: 'M20.016 11.016v1.969h-12.188l5.578 5.625-1.406 1.406-8.016-8.016 8.016-8.016 1.406 1.406-5.578 5.625h12.188z'
+ },
+ arrowDownward: {
+ name: 'arrow-downward',
+ path: 'M20.016 12l-8.016 8.016-8.016-8.016 1.453-1.406 5.578 5.578v-12.188h1.969v12.188l5.625-5.578z'
+ },
+ arrowForward: {
+ name: 'arrow-forward',
+ path: 'M12 3.984l8.016 8.016-8.016 8.016-1.406-1.406 5.578-5.625h-12.188v-1.969h12.188l-5.578-5.625z'
+ },
+ arrowUpward: {
+ name: 'arrow-upward',
+ path: 'M3.984 12l8.016-8.016 8.016 8.016-1.453 1.406-5.578-5.578v12.188h-1.969v-12.188l-5.625 5.578z'
+ },
+ check: {
+ name: 'check',
+ path: 'M9 16.172l10.594-10.594 1.406 1.406-12 12-5.578-5.578 1.406-1.406z'
+ },
+ cross: {
+ name: 'cross',
+ path: 'M18.984 6.422l-5.578 5.578 5.578 5.578-1.406 1.406-5.578-5.578-5.578 5.578-1.406-1.406 5.578-5.578-5.578-5.578 1.406-1.406 5.578 5.578 5.578-5.578z'
+ },
+ arrowKeyboardDown: {
+ name: 'arrow-keyboard-down',
+ path: 'M7.406 7.828l4.594 4.594 4.594-4.594 1.406 1.406-6 6-6-6z'
+ },
+ arrowKeyboardLeft: {
+ name: 'arrow-keyboard-left',
+ path: 'M15.422 16.078l-1.406 1.406-6-6 6-6 1.406 1.406-4.594 4.594z'
+ },
+ arrowKeyboardRight: {
+ name: 'arrow-keyboard-right',
+ path: 'M8.578 16.359l4.594-4.594-4.594-4.594 1.406-1.406 6 6-6 6z'
+ },
+ arrowKeyboardUp: {
+ name: 'arrow-keyboard-up',
+ path: 'M7.406 15.422l-1.406-1.406 6-6 6 6-1.406 1.406-4.594-4.594z'
+ },
+ edit: {
+ name: 'edit',
+ path: 'M20.719 7.031l-1.828 1.828-3.75-3.75 1.828-1.828c0.375-0.375 1.031-0.375 1.406 0l2.344 2.344c0.375 0.375 0.375 1.031 0 1.406zM3 17.25l11.063-11.063 3.75 3.75-11.063 11.063h-3.75v-3.75z'
+ },
+ moreHorizontal: {
+ name: 'more-horizontal',
+ path: 'M12 9.984c1.078 0 2.016 0.938 2.016 2.016s-0.938 2.016-2.016 2.016-2.016-0.938-2.016-2.016 0.938-2.016 2.016-2.016zM18 9.984c1.078 0 2.016 0.938 2.016 2.016s-0.938 2.016-2.016 2.016-2.016-0.938-2.016-2.016 0.938-2.016 2.016-2.016zM6 9.984c1.078 0 2.016 0.938 2.016 2.016s-0.938 2.016-2.016 2.016-2.016-0.938-2.016-2.016 0.938-2.016 2.016-2.016z'
+ },
+ moreVertical: {
+ name: 'more-vertical',
+ path: 'M12 15.984c1.078 0 2.016 0.938 2.016 2.016s-0.938 2.016-2.016 2.016-2.016-0.938-2.016-2.016 0.938-2.016 2.016-2.016zM12 9.984c1.078 0 2.016 0.938 2.016 2.016s-0.938 2.016-2.016 2.016-2.016-0.938-2.016-2.016 0.938-2.016 2.016-2.016zM12 8.016c-1.078 0-2.016-0.938-2.016-2.016s0.938-2.016 2.016-2.016 2.016 0.938 2.016 2.016-0.938 2.016-2.016 2.016z'
+ },
+ redo: {
+ name: 'redo',
+ path: 'M18.422 10.594l3.563-3.609v9h-9l3.656-3.609q-2.25-1.875-5.156-1.875-2.391 0-4.617 1.594t-2.977 3.891l-2.344-0.75q1.031-3.188 3.773-5.203t6.164-2.016q3.984 0 6.938 2.578z'
+ },
+ refresh: {
+ name: 'refresh',
+ path: 'M17.672 6.328l2.344-2.344v7.031h-7.031l3.234-3.234c-1.078-1.078-2.578-1.781-4.219-1.781-3.328 0-6 2.672-6 6s2.672 6 6 6c2.625 0 4.875-1.641 5.672-3.984h2.063c-0.891 3.469-3.984 6-7.734 6-4.406 0-7.969-3.609-7.969-8.016s3.563-8.016 7.969-8.016c2.203 0 4.219 0.891 5.672 2.344z'
+ },
+ remove: {
+ name: 'remove',
+ path: 'M18.984 12.984h-13.969v-1.969h13.969v1.969z'
+ },
+ reorder: {
+ name: 'reorder',
+ path: 'M3 5.016h18v1.969h-18v-1.969zM3 11.016v-2.016h18v2.016h-18zM3 18.984v-1.969h18v1.969h-18zM3 15v-2.016h18v2.016h-18z'
+ },
+ replay: {
+ name: 'replay',
+ path: 'M12 5.016q3.328 0 5.672 2.344t2.344 5.625q0 3.328-2.367 5.672t-5.648 2.344-5.648-2.344-2.367-5.672h2.016q0 2.484 1.758 4.242t4.242 1.758 4.242-1.758 1.758-4.242-1.758-4.242-4.242-1.758v4.031l-5.016-5.016 5.016-5.016v4.031z'
+ },
+ settings: {
+ name: 'settings',
+ path: 'M12 15.516c1.922 0 3.516-1.594 3.516-3.516s-1.594-3.516-3.516-3.516-3.516 1.594-3.516 3.516 1.594 3.516 3.516 3.516zM19.453 12.984l2.109 1.641c0.188 0.141 0.234 0.422 0.094 0.656l-2.016 3.469c-0.141 0.234-0.375 0.281-0.609 0.188l-2.484-0.984c-0.516 0.375-1.078 0.75-1.688 0.984l-0.375 2.625c-0.047 0.234-0.234 0.422-0.469 0.422h-4.031c-0.234 0-0.422-0.188-0.469-0.422l-0.375-2.625c-0.609-0.234-1.172-0.563-1.688-0.984l-2.484 0.984c-0.234 0.094-0.469 0.047-0.609-0.188l-2.016-3.469c-0.141-0.234-0.094-0.516 0.094-0.656l2.109-1.641c-0.047-0.328-0.047-0.656-0.047-0.984s0-0.656 0.047-0.984l-2.109-1.641c-0.188-0.141-0.234-0.422-0.094-0.656l2.016-3.469c0.141-0.234 0.375-0.281 0.609-0.188l2.484 0.984c0.516-0.375 1.078-0.75 1.688-0.984l0.375-2.625c0.047-0.234 0.234-0.422 0.469-0.422h4.031c0.234 0 0.422 0.188 0.469 0.422l0.375 2.625c0.609 0.234 1.172 0.563 1.688 0.984l2.484-0.984c0.234-0.094 0.469-0.047 0.609 0.188l2.016 3.469c0.141 0.234 0.094 0.516-0.094 0.656l-2.109 1.641c0.047 0.328 0.047 0.656 0.047 0.984s0 0.656-0.047 0.984z'
+ },
+ undo: {
+ name: 'undo',
+ path: 'M12.516 8.016q3.422 0 6.141 2.016t3.797 5.203l-2.344 0.75q-0.797-2.438-2.883-3.961t-4.711-1.523q-2.906 0-5.156 1.875l3.656 3.609h-9v-9l3.563 3.609q2.953-2.578 6.938-2.578z'
+ },
+ unfoldLess: {
+ name: 'unfold-less',
+ path: 'M16.594 5.391l-4.594 4.594-4.594-4.594 1.406-1.406 3.188 3.188 3.188-3.188zM7.406 18.609l4.594-4.594 4.594 4.594-1.406 1.406-3.188-3.188-3.188 3.188z'
+ },
+ unfoldMore: {
+ name: 'unfold-more',
+ path: 'M12 18.188l3.188-3.188 1.406 1.406-4.594 4.594-4.594-4.594 1.406-1.406zM12 5.813l-3.188 3.188-1.406-1.406 4.594-4.594 4.594 4.594-1.406 1.406z'
+ },
+ coffee: {
+ name: 'coffee',
+ path: 'M20 3H4v10c0 2.21 1.79 4 4 4h6c2.21 0 4-1.79 4-4v-3h2c1.11 0 2-.9 2-2V5c0-1.11-.89-2-2-2zm0 5h-2V5h2v3zM4 19h16v2H4z'
+ },
+ drag: {
+ name: 'drag',
+ path: 'M11 18c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2zm-2-8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 4c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z'
+ },
+ bookmark: {
+ name: 'bookmark',
+ path: 'M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z'
+ },
+ addBookmark: {
+ name: 'add-bookmark',
+ path: 'M17,11v6.97l-5-2.14l-5,2.14V5h6V3H7C5.9,3,5,3.9,5,5v16l7-3l7,3V11H17z M21,7h-2v2h-2V7h-2V5h2V3h2v2h2V7z'
+ },
+ folder: {
+ name: 'folder',
+ path: 'M9.17 6l2 2H20v10H4V6h5.17M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z'
+ },
+ addFolder: {
+ name: 'add-folder',
+ path: 'M20 6h-8l-2-2H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm0 12H4V6h5.17l2 2H20v10zm-8-4h2v2h2v-2h2v-2h-2v-2h-2v2h-2z'
+ }
+};
+
+icon.render = (name) => {
+ const iconElement = node('span|class:icon');
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+ svg.setAttribute('version', '1.1');
+ svg.setAttribute('viewBox', '0 0 24 24');
+ svg.setAttribute('width', '24');
+ svg.setAttribute('height', '24');
+ svg.setAttribute('fill', 'currentColor');
+
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
+ path.setAttribute('d', icon.all[name].path);
+
+ svg.appendChild(path);
+ iconElement.appendChild(svg);
+
+ return iconElement;
+};
+
+export { icon };
diff --git a/src/component/index.js b/src/component/index.js
new file mode 100644
index 00000000..f5fe90bf
--- /dev/null
+++ b/src/component/index.js
@@ -0,0 +1,72 @@
+import { reset } from './reset';
+
+import { Button } from './button';
+import { Collapse } from './collapse';
+import { Dropdown } from './dropdown';
+import { Edge } from './edge';
+import { KeyboardShortcut } from './keyboardShortcut';
+import { Modal } from './modal';
+import { Shade } from './shade';
+import { Suggest } from './suggest';
+import { Tab } from './tab';
+import { ToolbarControl } from './toolbarControl';
+
+import { Control_checkbox } from './control/checkbox';
+import { Control_color } from './control/color';
+import { Control_colorMixer } from './control/colorMixer';
+import { Control_groupText } from './control/groupText';
+import { Control_helperText } from './control/helperText';
+import { Control_inputButton } from './control/inputButton';
+import { Control_radio } from './control/radio';
+import { Control_radioGrid } from './control/radioGrid';
+import { Control_slider } from './control/slider';
+import { Control_sliderSlim } from './control/sliderSlim';
+import { Control_text } from './control/text';
+import { Control_select } from './control/select';
+
+import { appName } from './appName';
+import { base } from './base';
+import { state } from './state';
+import { data } from './data';
+import { version } from './version';
+import { fontawesome } from './fontawesome';
+import { icon } from './icon';
+import { keyboard } from './keyboard';
+import { layout } from './layout';
+import { link } from './link';
+import { logo } from './logo';
+import { menu } from './menu';
+import { pageLock } from './pageLock';
+import { theme } from './theme';
+import { update } from './update';
+import { bookmark } from './bookmark';
+import { header } from './header';
+import { group } from './group';
+import { toolbar } from './toolbar';
+import { groupAndBookmark } from './groupAndBookmark';
+
+import * as form from './form';
+
+export const component = {
+ appName,
+ base,
+ state,
+ data,
+ version,
+ fontawesome,
+ icon,
+ keyboard,
+ layout,
+ link,
+ logo,
+ menu,
+ pageLock,
+ theme,
+ update,
+ bookmark,
+ header,
+ group,
+ form,
+ toolbar,
+ groupAndBookmark
+};
diff --git a/src/component/keyboard/index.js b/src/component/keyboard/index.js
new file mode 100644
index 00000000..44719417
--- /dev/null
+++ b/src/component/keyboard/index.js
@@ -0,0 +1,93 @@
+import { state } from '../state';
+import { data } from '../data';
+import { toolbar } from '../toolbar';
+import { menu } from '../menu';
+import { bookmark } from '../bookmark';
+import { header } from '../header';
+import { group } from '../group';
+import { theme } from '../theme';
+import { themeSetting } from '../menuContent/themeSetting';
+
+import { KeyboardShortcut } from '../keyboardShortcut';
+
+const keyboard = {};
+
+keyboard.esc = new KeyboardShortcut({
+ keycode: 27,
+ action: () => {
+ if (state.get.current().bookmark.edit && !state.get.current().modal && !state.get.current().menu) {
+ bookmark.edit.close();
+ toolbar.current.update.edit();
+ };
+ data.save();
+ }
+});
+
+keyboard.ctrAltD = new KeyboardShortcut({
+ keycode: 68,
+ ctrl: true,
+ alt: true,
+ action: () => {
+ theme.style.toggle();
+ if (themeSetting.control.style.update) {
+ themeSetting.control.style.update();
+ };
+ data.save();
+ }
+});
+
+keyboard.ctrAltA = new KeyboardShortcut({
+ keycode: 65,
+ ctrl: true,
+ alt: true,
+ action: () => {
+ if (!state.get.current().bookmark.add) {
+ bookmark.add.render();
+ };
+ }
+});
+
+keyboard.ctrAltE = new KeyboardShortcut({
+ keycode: 69,
+ ctrl: true,
+ alt: true,
+ action: () => {
+ bookmark.edit.toggle();
+ group.edit.toggle();
+ header.edit.toggle();
+ toolbar.current.update.edit();
+ data.save();
+ }
+});
+
+keyboard.ctrAltG = new KeyboardShortcut({
+ keycode: 71,
+ ctrl: true,
+ alt: true,
+ action: () => {
+ if (!state.get.current().group.add) {
+ group.add.render();
+ };
+ data.save();
+ }
+});
+
+keyboard.ctrAltM = new KeyboardShortcut({
+ keycode: 77,
+ ctrl: true,
+ alt: true,
+ action: () => {
+ menu.toggle();
+ }
+});
+
+keyboard.init = () => {
+ keyboard.esc.add();
+ keyboard.ctrAltA.add();
+ keyboard.ctrAltE.add();
+ keyboard.ctrAltD.add();
+ keyboard.ctrAltG.add();
+ keyboard.ctrAltM.add();
+};
+
+export { keyboard };
diff --git a/src/component/keyboardShortcut/index.js b/src/component/keyboardShortcut/index.js
new file mode 100644
index 00000000..97386651
--- /dev/null
+++ b/src/component/keyboardShortcut/index.js
@@ -0,0 +1,26 @@
+export const KeyboardShortcut = function({
+ keycode = false,
+ ctrl = false,
+ alt = false,
+ action = false
+} = {}) {
+
+ this.action = () => {
+ if (keycode) {
+ if ((event.keyCode == keycode) && (ctrl == event.ctrlKey) && (alt == event.altKey)) {
+
+ event.preventDefault();
+
+ if (action) {
+ action();
+ };
+
+ };
+ };
+ };
+
+ this.add = () => { window.addEventListener('keydown', this.action); };
+
+ this.remove = () => { window.removeEventListener('keydown', this.action); };
+
+};
diff --git a/src/component/layout/index.css b/src/component/layout/index.css
new file mode 100644
index 00000000..aaa431b2
--- /dev/null
+++ b/src/component/layout/index.css
@@ -0,0 +1,201 @@
+:root {
+ --layout-size: 1;
+}
+
+:root {
+ --layout-space: 0.05em;
+ --layout-line-width: 0.2em;
+}
+
+:root {
+ --layout-duration-01: 0.1s;
+ --layout-duration-02: 0.2s;
+ --layout-duration-03: 0.3s;
+ --layout-duration-04: 0.4s;
+ --layout-duration-05: 0.5s;
+ --layout-duration-06: 0.6s;
+ --layout-duration-07: 0.7s;
+ --layout-duration-08: 0.8s;
+ --layout-duration-09: 0.9s;
+ --layout-duration-10: 1s;
+ --layout-timing-ease: ease-in-out;
+ --layout-timing-bounce: cubic-bezier(0.8, 0.8, 0.4, 1.4);
+ --layout-transition-extra-fast: var(--layout-duration-02) var(--layout-timing-ease);
+ --layout-transition-fast: var(--layout-duration-04) var(--layout-timing-ease);
+ --layout-transition-medium: var(--layout-duration-06) var(--layout-timing-ease);
+ --layout-transition-slow: var(--layout-duration-08) var(--layout-timing-ease);
+ --layout-transition-extra-slow: var(--layout-duration-10) var(--layout-timing-ease);
+}
+
+:root {
+ --layout-horizontal-rule-small: 1px solid hsl(var(--theme-primary-020));
+ --layout-horizontal-rule-large: 2px solid hsl(var(--theme-primary-020));
+}
+
+.layout {
+ width: calc(var(--layout-width) * 1%);
+ font-size: calc(var(--layout-size) * 0.01rem);
+ z-index: var(--z-index-layout);
+ display: flex;
+ position: relative;
+}
+
+.is-layout-order-header-bookmark.is-layout-direction-horizontal .layout {
+ flex-direction: row;
+ align-items: center;
+}
+
+.is-layout-order-bookmark-header.is-layout-direction-horizontal .layout {
+ flex-direction: row-reverse;
+ align-items: center;
+}
+
+.is-layout-direction-vertical.is-layout-order-header-bookmark .layout {
+ flex-direction: column;
+}
+
+.is-layout-direction-vertical.is-layout-order-bookmark-header .layout {
+ flex-direction: column-reverse;
+}
+
+.layout-header {
+ display: flex;
+ flex-direction: column;
+ align-items: stretch;
+ justify-content: stretch;
+ z-index: 2;
+}
+
+.layout-bookmark {
+ display: flex;
+ flex-direction: column;
+ align-items: stretch;
+ justify-content: stretch;
+ z-index: 1;
+}
+
+.layout-divider {
+ background-color: rgb(var(--theme-accent));
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ flex-shrink: 0;
+ flex-grow: 0;
+ align-self: stretch;
+ justify-self: stretch;
+}
+
+.is-theme-background-type-accent .layout-divider {
+ background-color: hsl(var(--theme-accent-rgb-text));
+}
+
+.is-layout-direction-horizontal .layout-divider {
+ width: calc(var(--layout-line-width) * var(--theme-layout-divider-size));
+}
+
+.is-layout-direction-vertical .layout-divider {
+ height: calc(var(--layout-line-width) * var(--theme-layout-divider-size));
+}
+
+.is-layout-direction-horizontal.is-bookmark-show .layout-header,
+.is-layout-direction-horizontal.is-header-show .layout-bookmark {
+ flex-grow: 1;
+}
+
+.is-layout-direction-horizontal .layout-header {
+ align-self: stretch;
+ max-height: 100vh;
+ position: sticky;
+ top: 0;
+ left: initial;
+ align-items: center;
+ justify-content: center;
+}
+
+.is-layout-direction-vertical.is-layout-area-header-justify-left .layout-header {
+ align-self: flex-start;
+}
+
+.is-layout-direction-vertical.is-layout-area-header-justify-center .layout-header {
+ align-self: center;
+}
+
+.is-layout-direction-vertical.is-layout-area-header-justify-right .layout-header {
+ align-self: flex-end;
+}
+
+.is-layout-direction-vertical.is-layout-area-bookmark-justify-left .layout-bookmark {
+ align-self: flex-start;
+}
+
+.is-layout-direction-vertical.is-layout-area-bookmark-justify-center .layout-bookmark {
+ align-self: center;
+}
+
+.is-layout-direction-vertical.is-layout-area-bookmark-justify-right .layout-bookmark {
+ align-self: flex-end;
+}
+
+.is-layout-direction-horizontal .layout-header {
+ width: calc(var(--layout-area-header-width) * 1%);
+}
+
+.is-layout-direction-horizontal .layout-bookmark {
+ width: calc(var(--layout-area-bookmark-width) * 1%);
+}
+
+.is-layout-direction-horizontal.is-bookmark-show .layout-header {
+ width: calc((var(--layout-area-header-width) - (var(--layout-area-bookmark-width) / 2)) * 1%);
+}
+
+.is-layout-direction-horizontal.is-header-show .layout-bookmark {
+ width: calc((var(--layout-area-bookmark-width) - (var(--layout-area-header-width) / 2)) * 1%);
+}
+
+.is-layout-direction-vertical .layout-header {
+ width: calc(var(--layout-area-header-width) * 1%);
+}
+
+.is-layout-direction-vertical .layout-bookmark {
+ width: calc(var(--layout-area-bookmark-width) * 1%);
+}
+
+:not(.is-theme-layout-divider-size).is-theme-header-color-by-theme.is-theme-bookmark-color-by-theme.is-bookmark-show.is-layout-direction-vertical.is-layout-order-bookmark-header .layout-header {
+ margin-top: calc((var(--layout-space) * var(--layout-padding)) * -1);
+}
+
+:not(.is-theme-layout-divider-size).is-theme-header-color-by-theme.is-theme-bookmark-color-by-theme.is-bookmark-show.is-layout-direction-vertical.is-layout-order-header-bookmark .layout-header {
+ margin-bottom: calc((var(--layout-space) * var(--layout-padding)) * -1);
+}
+
+:not(.is-theme-layout-divider-size).is-theme-header-color-by-theme.is-theme-bookmark-color-by-theme.is-bookmark-show.is-layout-direction-horizontal.is-layout-order-bookmark-header .layout-header {
+ margin-left: calc((var(--layout-space) * var(--layout-padding)) * -1);
+}
+
+:not(.is-theme-layout-divider-size).is-theme-header-color-by-theme.is-theme-bookmark-color-by-theme.is-bookmark-show.is-layout-direction-horizontal.is-layout-order-header-bookmark .layout-header {
+ margin-right: calc((var(--layout-space) * var(--layout-padding)) * -1);
+}
+
+.is-layout-overscroll body {
+ margin-bottom: 75vh;
+}
+
+html.is-layout-scrollbar-auto,
+.is-layout-scrollbar-auto body,
+.is-layout-scrollbar-auto * {
+ scrollbar-width: auto;
+}
+
+html.is-layout-scrollbar-thin,
+.is-layout-scrollbar-thin body,
+.is-layout-scrollbar-thin * {
+ scrollbar-width: thin;
+}
+
+html.is-layout-scrollbar-none,
+.is-layout-scrollbar-none body,
+.is-layout-scrollbar-none * {
+ scrollbar-width: none;
+}
+
+.is-layout-scrollbar-none ::-webkit-scrollbar {
+ display: none;
+}
diff --git a/src/component/layout/index.js b/src/component/layout/index.js
new file mode 100644
index 00000000..8b50b8ea
--- /dev/null
+++ b/src/component/layout/index.js
@@ -0,0 +1,228 @@
+import { state } from '../state';
+import { data } from '../data';
+import { bookmark } from '../bookmark';
+
+import { node } from '../../utility/node';
+import { get } from '../../utility/get';
+import { set } from '../../utility/set';
+import { clearChildNode } from '../../utility/clearChildNode';
+import { applyCSSVar } from '../../utility/applyCSSVar';
+import { applyCSSClass } from '../../utility/applyCSSClass';
+import { applyCSSState } from '../../utility/applyCSSState';
+import { trimString } from '../../utility/trimString';
+import { isValidString } from '../../utility/isValidString';
+
+import './index.css';
+
+const layout = {}
+
+layout.element = {
+ layout: node('div|class:layout'),
+ header: node('div|class:layout-header'),
+ bookmark: node('div|class:layout-bookmark'),
+ divider: node('div|class:layout-divider')
+};
+
+layout.area = {
+ render: () => {
+
+ layout.area.assemble();
+
+ const body = document.querySelector('body');
+
+ body.appendChild(layout.element.layout);
+
+ const resize = new ResizeObserver((entries) => {
+
+ const size = { sm: 550, md: 700, lg: 900, xl: 1100, xxl: 1600 };
+
+ let breakpoint;
+
+ entries.forEach(function(entry) {
+
+ if (entry.contentRect.width <= size.sm) {
+ breakpoint = 'xs';
+ } else if (entry.contentRect.width > size.sm && entry.contentRect.width <= size.md) {
+ breakpoint = 'sm';
+ } else if (entry.contentRect.width > size.md && entry.contentRect.width <= size.lg) {
+ breakpoint = 'md';
+ } else if (entry.contentRect.width > size.lg && entry.contentRect.width <= size.xl) {
+ breakpoint = 'lg';
+ } else if (entry.contentRect.width > size.xl && entry.contentRect.width <= size.xxl) {
+ breakpoint = 'xl';
+ } else if (entry.contentRect.width > size.xxl) {
+ breakpoint = 'xxl';
+ };
+
+ });
+
+ set({
+ object: state.get.current(),
+ path: 'layout.breakpoint',
+ value: breakpoint
+ });
+
+ layout.breakpoint.bind();
+
+ });
+
+ resize.observe(layout.element.bookmark);
+
+ },
+ assemble: () => {
+
+ if (
+ (state.get.current().header.clock.second.show ||
+ state.get.current().header.clock.minute.show ||
+ state.get.current().header.clock.hour.show) ||
+ (state.get.current().header.date.day.show ||
+ state.get.current().header.date.date.show ||
+ state.get.current().header.date.month.show ||
+ state.get.current().header.date.year.show) ||
+ state.get.current().header.greeting.show ||
+ state.get.current().header.search.show ||
+ state.get.current().toolbar.location === 'header'
+ ) {
+
+ layout.element.layout.appendChild(layout.element.header);
+
+ } else {
+
+ if (layout.element.layout.contains(layout.element.header)) {
+
+ layout.element.layout.removeChild(layout.element.header);
+
+ };
+
+ };
+
+ if (state.get.current().theme.layout.divider.size > 0) {
+
+ layout.element.layout.appendChild(layout.element.divider);
+
+ } else {
+
+ if (layout.element.layout.contains(layout.element.divider)) {
+
+ layout.element.layout.removeChild(layout.element.divider);
+
+ };
+
+ };
+
+ if (state.get.current().bookmark.show) {
+
+ layout.element.layout.appendChild(layout.element.bookmark);
+
+ } else {
+
+ if (layout.element.layout.contains(layout.element.bookmark)) {
+
+ layout.element.layout.removeChild(layout.element.bookmark);
+
+ };
+
+ };
+
+ },
+ clear: () => {
+ clearChildNode(layout.element.layout);
+ }
+};
+
+layout.header = {
+ clear: () => {
+ clearChildNode(layout.element.header);
+ }
+};
+
+layout.bookmark = {
+ clear: () => {
+ clearChildNode(layout.element.bookmark);
+ }
+};
+
+layout.breakpoint = {
+ bind: () => {
+
+ const html = document.querySelector('html');
+
+ const size = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];
+
+ size.forEach((item, i) => {
+ html.classList.remove('is-layout-breakpoint-' + item);
+ });
+
+ switch (state.get.current().layout.breakpoint) {
+ case 'xs':
+ html.classList.add('is-layout-breakpoint-xs');
+ break;
+
+ case 'sm':
+ html.classList.add('is-layout-breakpoint-sm');
+ break;
+
+ case 'md':
+ html.classList.add('is-layout-breakpoint-md');
+ break;
+
+ case 'lg':
+ html.classList.add('is-layout-breakpoint-lg');
+ break;
+
+ case 'xl':
+ html.classList.add('is-layout-breakpoint-xl');
+ break;
+
+ case 'xxl':
+ html.classList.add('is-layout-breakpoint-xxl');
+ break;
+
+ };
+ }
+};
+
+layout.title = {
+ render: () => {
+
+ const title = document.querySelector('title');
+
+ if (isValidString(state.get.current().layout.title)) {
+
+ title.textContent = trimString(state.get.current().layout.title);
+
+ } else {
+
+ title.textContent = 'New Tab';
+
+ };
+
+ }
+};
+
+layout.init = () => {
+ applyCSSVar([
+ 'layout.size',
+ 'layout.width',
+ 'layout.area.header.width',
+ 'layout.area.bookmark.width',
+ 'layout.padding',
+ 'layout.gutter'
+ ]);
+ applyCSSClass([
+ 'layout.alignment',
+ 'layout.direction',
+ 'layout.order',
+ 'layout.area.header.justify',
+ 'layout.area.bookmark.justify',
+ 'layout.scrollbar'
+ ]);
+ applyCSSState([
+ 'layout.overscroll'
+ ]);
+ layout.area.render();
+ layout.breakpoint.bind();
+ layout.title.render();
+};
+
+export { layout };
diff --git a/src/component/link/index.js b/src/component/link/index.js
new file mode 100644
index 00000000..b625adfc
--- /dev/null
+++ b/src/component/link/index.js
@@ -0,0 +1,101 @@
+import { icon } from '../icon';
+import { form } from '../form';
+
+import { node } from '../../utility/node';
+
+const link = {};
+
+link.render = ({
+ text = 'Link',
+ href = '#',
+ iconName = false,
+ iconPosition = 'right',
+ image = false,
+ linkButton = false,
+ style = [],
+ title = false,
+ openNew = false,
+ classList = [],
+ func = false
+} = {}) => {
+
+ const linkElement = node('a|tabindex:1');
+
+ if (linkButton) {
+ linkElement.classList.add('button');
+
+ if (style.length > 0) {
+ style.forEach((item, i) => {
+ switch (item) {
+ case 'link':
+ linkElement.classList.add('button-link');
+ break;
+
+ case 'line':
+ linkElement.classList.add('button-line');
+ break;
+
+ case 'ring':
+ linkElement.classList.add('button-ring');
+ break;
+ };
+ });
+ };
+ };
+
+ if (image) {
+ const linkImage = node('img|src:' + image + ',class:mr-2');
+
+ linkElement.appendChild(linkImage);
+ };
+
+ if (text) {
+ const linkText = node('span:' + text);
+
+ if (linkButton) {
+ linkText.classList.add('button-text');
+ };
+ linkElement.appendChild(linkText);
+ };
+
+ if (iconName) {
+ switch (iconPosition) {
+ case 'left':
+ linkElement.prepend(icon.render(iconName));
+ break;
+
+ case 'right':
+ linkElement.append(icon.render(iconName));
+ break;
+ };
+ };
+
+ if (href) {
+ linkElement.setAttribute('href', href);
+ };
+
+ if (openNew) {
+ linkElement.setAttribute('target', '_blank');
+ };
+
+ if (title) {
+ linkElement.setAttribute('title', title);
+ };
+
+ if (classList.length > 0) {
+ classList.forEach((item, i) => {
+ linkElement.classList.add(item);
+ });
+ };
+
+ if (func) {
+ linkElement.addEventListener('click', (event) => {
+ func();
+ });
+ };
+
+ return linkElement;
+
+};
+
+export { link };
diff --git a/src/component/logo/index.css b/src/component/logo/index.css
new file mode 100644
index 00000000..3d9e3dc7
--- /dev/null
+++ b/src/component/logo/index.css
@@ -0,0 +1,113 @@
+.logo {
+ transform: scale(1) rotate(0deg);
+ transition: transform var(--layout-transition-extra-fast);
+}
+
+.logo:hover {
+ transform: scale(1.2) rotate(180deg);
+}
+
+.logo:active {
+ transform: scale(1.4) rotate(180deg);
+}
+
+.logo,
+.logo-circle,
+.logo-cross-x,
+.logo-cross-y {
+ transform-origin: center;
+}
+
+.logo {
+ animation-name: shrink;
+ animation-duration: 0.4s;
+ animation-timing-function: var(--layout-timing-bounce);
+ animation-iteration-count: 1;
+ animation-delay: 1.2s;
+ animation-fill-mode: backwards;
+}
+
+.logo-circle {
+ animation-name: grow;
+ animation-duration: 0.4s;
+ animation-timing-function: var(--layout-timing-ease);
+ animation-iteration-count: 1;
+ animation-fill-mode: forwards;
+}
+
+.logo-cross-x {
+ animation-name: grow-x, spin;
+ animation-duration: 0.4s, 0.6s;
+ animation-timing-function: var(--layout-timing-bounce), var(--layout-timing-ease);
+ animation-iteration-count: 1, 1;
+ animation-delay: 0.4s, 0.8s;
+ animation-fill-mode: backwards, forwards;
+}
+
+.logo-cross-y {
+ animation-name: grow-y, spin;
+ animation-duration: 0.4s, 0.6s;
+ animation-timing-function: var(--layout-timing-bounce), var(--layout-timing-ease);
+ animation-iteration-count: 1, 1;
+ animation-delay: 0.2s, 0.8s;
+ animation-fill-mode: backwards, forwards;
+}
+
+.logo-circle {
+ fill: hsl(var(--theme-primary-120));
+}
+
+.logo-cross-x,
+.logo-cross-y {
+ fill: hsl(var(--theme-primary-010));
+}
+
+@keyframes grow {
+ 0% {
+ transform: scale(0);
+ }
+
+ 100% {
+ transform: scale(1);
+ }
+}
+
+@keyframes grow-x {
+ 0% {
+ transform: scaleX(0);
+ }
+
+ 100% {
+ transform: scaleX(1);
+ }
+}
+
+@keyframes grow-y {
+ 0% {
+ transform: scaleY(0);
+ }
+
+ 100% {
+ transform: scaleY(1);
+ }
+}
+
+@keyframes shrink {
+ 0% {
+ transform: scale(1.2);
+ }
+
+ 100% {
+ transform: scale(1);
+ }
+}
+
+@keyframes spin {
+ 0% {
+ transform: rotate(-360deg);
+ }
+
+ 100% {
+ transform: rotate(0);
+ }
+}
diff --git a/src/component/logo/index.js b/src/component/logo/index.js
new file mode 100644
index 00000000..c7daa3db
--- /dev/null
+++ b/src/component/logo/index.js
@@ -0,0 +1,27 @@
+import { easterEgg } from '../easterEgg';
+
+import { node } from '../../utility/node';
+
+import './index.css';
+
+const logo = {};
+
+logo.svg =
+ '';
+
+logo.render = () => {
+
+ const versionIcon = node('div|class:version-icon');
+
+ versionIcon.innerHTML = logo.svg;
+
+ versionIcon.addEventListener('dblclick', () => { easterEgg.toaster.bind.add(); });
+
+ return versionIcon;
+};
+
+export { logo };
diff --git a/src/component/menu/index.js b/src/component/menu/index.js
new file mode 100644
index 00000000..2c0101e2
--- /dev/null
+++ b/src/component/menu/index.js
@@ -0,0 +1,80 @@
+import { state } from '../state';
+import { data } from '../data';
+import { form } from '../form';
+import { bookmark } from '../bookmark';
+import { theme } from '../theme';
+import { appName } from '../appName';
+
+import { Button } from '../button';
+import { MenuFrame } from '../menuFrame';
+import { MenuNav } from '../menuNav';
+import { Shade } from '../shade';
+
+import { node } from '../../utility/node';
+import { clearChildNode } from '../../utility/clearChildNode';
+
+const menu = {};
+
+menu.navData = [
+ // { name: 'Form', active: true, overscroll: true, sub: ['Input', 'Button'] },
+ // { name: 'Debug', active: true, overscroll: true, sub: ['Bookmark'] },
+ { name: 'Theme', active: true, overscroll: true, sub: ['Preset', 'Saved', 'Style', 'Accent', 'Colour', 'Font', 'Radius', 'Shadow', 'Shade', 'Opacity', 'Background', 'Layout', 'Header', 'Bookmark'] },
+ { name: 'Layout', active: false, overscroll: true, sub: ['Scaling', 'Area', 'Padding', 'Gutter', 'Alignment', 'Page'] },
+ { name: 'Header', active: false, overscroll: true, sub: ['Area', 'Greeting', 'Transitional words', 'Clock', 'Date', 'Search'] },
+ { name: 'Bookmark', active: false, overscroll: true, sub: ['General', 'Style', 'Orientation', 'Sort'] },
+ { name: 'Group', active: false, overscroll: true, sub: ['Alignment', 'Name', 'Open All'] },
+ { name: 'Toolbar', active: false, overscroll: true, sub: ['Size', 'Location', 'Position', 'Controls'] },
+ { name: 'Data', active: false, overscroll: true, sub: ['Import', 'Backup', 'Clear'] },
+ { name: 'Coffee', active: false, overscroll: false },
+ { name: appName, active: false, overscroll: false }
+];
+
+menu.mod = {};
+
+menu.element = {
+ frame: null
+};
+
+menu.firefoxSpecific = () => {
+
+ const firefoxBrowser = typeof InstallTrigger !== "undefined";
+
+ if (firefoxBrowser) {
+ menu.navData.splice((menu.navData.length - 2), 0, { name: 'Firefox', active: false, overscroll: false })
+ };
+
+};
+
+menu.open = () => {
+
+ menu.element.frame = new MenuFrame({
+ navData: menu.navData
+ });
+
+ menu.element.frame.open();
+
+};
+
+menu.close = () => {
+
+ if (menu.element.frame) {
+ menu.element.frame.close();
+ };
+
+};
+
+menu.toggle = () => {
+
+ if (state.get.current().menu) {
+ menu.close();
+ } else {
+ menu.open();
+ };
+
+};
+
+menu.init = () => {
+ menu.firefoxSpecific();
+};
+
+export { menu };
diff --git a/src/component/menuClose/index.css b/src/component/menuClose/index.css
new file mode 100644
index 00000000..00ed008d
--- /dev/null
+++ b/src/component/menuClose/index.css
@@ -0,0 +1,38 @@
+:root {
+ --menu-close-size: 12;
+ --menu-close-space: calc((var(--menu-close-size) / 4) * 1em);
+}
+
+@media (min-width: 700px) {
+ :root {
+ --menu-close-size: 14;
+ }
+}
+
+.menu-close {
+ grid-column-start: 3;
+ grid-column-end: 4;
+ grid-row-start: 1;
+ grid-row-end: 2;
+ align-self: start;
+ z-index: 3;
+}
+
+.menu-close-button {
+ background-color: transparent;
+ margin: 0;
+ padding: 0;
+ border-radius: 0;
+ line-height: 1;
+ position: relative;
+ top: calc((var(--theme-radius) * 0.25) * 0.01em);
+ right: calc((var(--theme-radius) * 0.25) * 0.01em);
+ height: var(--menu-close-space);
+ width: var(--menu-close-space);
+}
+
+@media (min-width: 700px) {
+ .menu-close-button {
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ }
+}
diff --git a/src/component/menuClose/index.js b/src/component/menuClose/index.js
new file mode 100644
index 00000000..724dfc98
--- /dev/null
+++ b/src/component/menuClose/index.js
@@ -0,0 +1,40 @@
+import { menu } from '../menu';
+
+import { Button } from '../button';
+
+import { node } from '../../utility/node';
+
+import './index.css';
+
+export const MenuClose = function() {
+
+ this.element = {
+ close: node('div|class:menu-close')
+ };
+
+ this.button = new Button({
+ text: 'Close settings menu',
+ srOnly: true,
+ style: ['link'],
+ iconName: 'cross',
+ classList: ['menu-close-button'],
+ func: () => {
+ menu.close();
+ }
+ });
+
+ this.assemble = () => {
+
+ this.element.close.appendChild(this.button.button);
+
+ };
+
+ this.close = () => {
+
+ return this.element.close;
+
+ };
+
+ this.assemble();
+
+};
diff --git a/src/component/menuContent/appSetting/index.js b/src/component/menuContent/appSetting/index.js
new file mode 100644
index 00000000..c5fc2c21
--- /dev/null
+++ b/src/component/menuContent/appSetting/index.js
@@ -0,0 +1,65 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+import { appName } from '../../appName';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+
+const appSetting = {};
+
+appSetting[appName.toLowerCase()] = (parent) => {
+
+ parent.appendChild(
+ node('div', [
+ node('div|class:version', [
+ logo.render(),
+ node('div|class:version-details', [
+ node('h1:' + appName + '|class:version-app-name'),
+ node('p:Version ' + version.number + '|class:version-number'),
+ node('p:' + version.name + '|class:version-name small')
+ ])
+ ]),
+ node('hr'),
+ complexNode({ tag: 'p', text: 'Project repository on ', node: [link.render({ text: 'GitHub.', href: 'https://github.com/zombieFox/' + appName, openNew: true })] }),
+ complexNode({ tag: 'p', text: 'For feedback and support, submit an Issue or check the Wiki.' }),
+ complexNode({ tag: 'p', text: appName + ' uses the GNU General Public License v3.0.' })
+ ])
+ );
+
+};
+
+export { appSetting }
diff --git a/src/component/menuContent/bookmarkSetting/index.js b/src/component/menuContent/bookmarkSetting/index.js
new file mode 100644
index 00000000..5862ed7b
--- /dev/null
+++ b/src/component/menuContent/bookmarkSetting/index.js
@@ -0,0 +1,366 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+import { groupAndBookmark } from '../../groupAndBookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+
+const bookmarkSetting = {};
+
+bookmarkSetting.control = {
+ general: {},
+ style: {},
+ orientation: {},
+ sort: {}
+};
+
+bookmarkSetting.disable = () => {
+
+ if (state.get.current().bookmark.show) {
+ bookmarkSetting.control.general.size.enable();
+ bookmarkSetting.control.general.urlShow.enable();
+ bookmarkSetting.control.general.lineShow.enable();
+ bookmarkSetting.control.general.shadowShow.enable();
+ bookmarkSetting.control.general.hoverScaleShow.enable();
+ bookmarkSetting.control.general.newTab.enable();
+ bookmarkSetting.control.style.enable();
+ bookmarkSetting.control.orientation.orientationElement.enable();
+ bookmarkSetting.control.orientation.orientationHelper.enable();
+ bookmarkSetting.control.sort.letter.enable();
+ bookmarkSetting.control.sort.icon.enable();
+ bookmarkSetting.control.sort.name.enable();
+ } else {
+ bookmarkSetting.control.general.size.disable();
+ bookmarkSetting.control.general.urlShow.disable();
+ bookmarkSetting.control.general.lineShow.disable();
+ bookmarkSetting.control.general.shadowShow.disable();
+ bookmarkSetting.control.general.hoverScaleShow.disable();
+ bookmarkSetting.control.general.newTab.disable();
+ bookmarkSetting.control.style.disable();
+ bookmarkSetting.control.orientation.orientationElement.disable();
+ bookmarkSetting.control.orientation.orientationHelper.disable();
+ bookmarkSetting.control.sort.letter.disable();
+ bookmarkSetting.control.sort.icon.disable();
+ bookmarkSetting.control.sort.name.disable();
+ };
+
+};
+
+bookmarkSetting.edge = {
+ general: {},
+ style: {},
+ orientation: {}
+};
+
+bookmarkSetting.general = (parent) => {
+
+ if (state.get.current().bookmark.show && bookmark.tile.current.length > 0) {
+
+ bookmarkSetting.edge.general.size = new Edge({ primary: bookmark.tile.current[0].tile(), secondary: [bookmark.element.area] });
+
+ };
+
+ bookmarkSetting.control.general.show = new Control_checkbox({
+ object: state.get.current(),
+ id: 'bookmark-show',
+ path: 'bookmark.show',
+ labelText: 'Show Bookmarks',
+ action: () => {
+
+ layout.area.assemble();
+
+ applyCSSState('bookmark.show');
+
+ bookmarkSetting.disable();
+
+ if (bookmarkSetting.edge.general.size) {
+
+ if (state.get.current().bookmark.show && bookmark.tile.current.length > 0) {
+
+ bookmarkSetting.edge.general.size.update.primary(bookmark.tile.current[0].tile());
+
+ };
+
+ } else {
+
+ bookmarkSetting.edge.general.size = new Edge({ primary: bookmark.tile.current[0].tile(), secondary: [bookmark.element.area] });
+
+ };
+
+ bookmarkSetting.control.general.collapse.update();
+
+ data.save();
+
+ }
+ });
+
+ bookmarkSetting.control.general.urlShow = new Control_checkbox({
+ object: state.get.current(),
+ id: 'bookmark-url-show',
+ path: 'bookmark.url.show',
+ labelText: 'Show URL on Bookmark hover',
+ action: () => {
+ applyCSSState('bookmark.url.show');
+ data.save();
+ }
+ });
+
+ bookmarkSetting.control.general.lineShow = new Control_checkbox({
+ object: state.get.current(),
+ id: 'bookmark-line-show',
+ path: 'bookmark.line.show',
+ labelText: 'Show Bookmark line',
+ action: () => {
+ applyCSSState('bookmark.line.show');
+ data.save();
+ }
+ });
+
+ bookmarkSetting.control.general.shadowShow = new Control_checkbox({
+ object: state.get.current(),
+ id: 'bookmark-shadow-show',
+ path: 'bookmark.shadow.show',
+ labelText: 'Show shadow on Bookmark hover',
+ description: 'Effects may not be visible if Theme Shadow is set to 0.',
+ action: () => {
+ applyCSSState('bookmark.shadow.show');
+ data.save();
+ }
+ });
+
+ bookmarkSetting.control.general.hoverScaleShow = new Control_checkbox({
+ object: state.get.current(),
+ id: 'bookmark-hoverScale-show',
+ path: 'bookmark.hoverScale.show',
+ labelText: 'Grow on Bookmark hover',
+ action: () => {
+ applyCSSState('bookmark.hoverScale.show');
+ data.save();
+ }
+ });
+
+ bookmarkSetting.control.general.newTab = new Control_checkbox({
+ object: state.get.current(),
+ id: 'bookmark-newTab',
+ path: 'bookmark.newTab',
+ labelText: 'Open Bookmarks in a new tab',
+ action: () => {
+ groupAndBookmark.render();
+ data.save();
+ }
+ });
+
+ bookmarkSetting.control.general.size = new Control_slider({
+ object: state.get.current(),
+ path: 'bookmark.size',
+ id: 'bookmark-size',
+ labelText: 'Bookmark size',
+ value: state.get.current().bookmark.size,
+ defaultValue: state.get.default().bookmark.size,
+ min: state.get.minMax().bookmark.size.min,
+ max: state.get.minMax().bookmark.size.max,
+ action: () => {
+ applyCSSVar('bookmark.size');
+ data.save();
+ },
+ sliderAction: () => {
+ if (state.get.current().bookmark.show && bookmark.tile.current.length > 0 && bookmarkSetting.edge.general.size) { bookmarkSetting.edge.general.size.track(); };
+ },
+ mouseDownAction: () => {
+ if (state.get.current().bookmark.show && bookmark.tile.current.length > 0 && bookmarkSetting.edge.general.size) { bookmarkSetting.edge.general.size.show(); };
+ },
+ mouseUpAction: () => {
+ if (state.get.current().bookmark.show && bookmark.tile.current.length > 0 && bookmarkSetting.edge.general.size) { bookmarkSetting.edge.general.size.hide(); };
+ }
+ });
+
+ bookmarkSetting.control.general.area = node('div', [
+ bookmarkSetting.control.general.urlShow.wrap(),
+ bookmarkSetting.control.general.lineShow.wrap(),
+ bookmarkSetting.control.general.shadowShow.wrap(),
+ bookmarkSetting.control.general.hoverScaleShow.wrap(),
+ bookmarkSetting.control.general.newTab.wrap(),
+ bookmarkSetting.control.general.size.wrap()
+ ]);
+
+ bookmarkSetting.control.general.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: bookmarkSetting.control.general.show,
+ target: [{
+ content: bookmarkSetting.control.general.area
+ }]
+ });
+
+ parent.appendChild(
+ node('div', [
+ bookmarkSetting.control.general.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ bookmarkSetting.control.general.collapse.collapse()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+bookmarkSetting.style = (parent) => {
+
+ bookmarkSetting.control.style = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'bookmark-style-block', labelText: 'Block', description: 'Square shaped Bookmark tiles.', value: 'block' },
+ { id: 'bookmark-style-list', labelText: 'List', description: 'Short and wide Bookmark tiles.', value: 'list' }
+ ],
+ groupName: 'bookmark-style',
+ path: 'bookmark.style',
+ action: () => {
+
+ switch (state.get.current().bookmark.style) {
+
+ case 'block':
+ bookmark.direction.mod.vertical();
+ break;
+
+ case 'list':
+ bookmark.direction.mod.horizontal();
+ break;
+
+ };
+
+ applyCSSClass('bookmark.style');
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ bookmarkSetting.control.style.wrap(),
+ ])
+ );
+
+};
+
+bookmarkSetting.orientation = (parent) => {
+
+ bookmarkSetting.control.orientation.orientationElement = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'bookmark-orientation-top', labelText: 'Top', value: 'top' },
+ { id: 'bookmark-orientation-bottom', labelText: 'Bottom', value: 'bottom' }
+ ],
+ groupName: 'bookmark-orientation',
+ path: 'bookmark.orientation',
+ action: () => {
+ applyCSSClass('bookmark.orientation');
+ data.save();
+ }
+ });
+
+ bookmarkSetting.control.orientation.orientationHelper = new Control_helperText({
+ text: ['Display the URL and Controls either at the top or bottom of a Bookmark Tile.']
+ });
+
+ parent.appendChild(
+ node('div', [
+ bookmarkSetting.control.orientation.orientationElement.inline(),
+ bookmarkSetting.control.orientation.orientationHelper.wrap()
+ ])
+ );
+
+};
+
+bookmarkSetting.sort = (parent) => {
+
+ bookmarkSetting.control.sort.letter = new Button({
+ text: 'By letter',
+ style: ['line'],
+ func: () => {
+ bookmark.item.mod.sort.letter();
+ groupAndBookmark.render();
+ data.save();
+ }
+ });
+
+ bookmarkSetting.control.sort.icon = new Button({
+ text: 'By icon',
+ style: ['line'],
+ func: () => {
+ bookmark.item.mod.sort.icon();
+ groupAndBookmark.render();
+ data.save();
+ }
+ });
+
+ bookmarkSetting.control.sort.name = new Button({
+ text: 'By name',
+ style: ['line'],
+ func: () => {
+ bookmark.item.mod.sort.name();
+ groupAndBookmark.render();
+ data.save();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ form.wrap({
+ children: [
+ form.inline({
+ gap: 'small',
+ children: [
+ bookmarkSetting.control.sort.letter.wrap(),
+ bookmarkSetting.control.sort.icon.wrap(),
+ bookmarkSetting.control.sort.name.wrap()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+export { bookmarkSetting }
diff --git a/src/component/menuContent/coffeeSetting/index.js b/src/component/menuContent/coffeeSetting/index.js
new file mode 100644
index 00000000..fb39d792
--- /dev/null
+++ b/src/component/menuContent/coffeeSetting/index.js
@@ -0,0 +1,70 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+import { appName } from '../../appName';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+
+const coffeeSetting = {};
+
+coffeeSetting.coffee = (parent) => {
+
+ parent.appendChild(
+ node('div', [
+ complexNode({
+ tag: 'p',
+ text: appName + ' is free, appreciation is welcome in the form of coffee!'
+ }),
+ form.wrap({
+ children: [
+ link.render({
+ text: 'Buy me a coffee',
+ href: 'https://www.buymeacoffee.com/zombieFox',
+ iconName: 'coffee',
+ iconPosition: 'left',
+ linkButton: true,
+ style: ['line'],
+ classList: ['button-line', 'button-large', 'px-4', 'py-3']
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+export { coffeeSetting }
diff --git a/src/component/menuContent/dataSetting/index.js b/src/component/menuContent/dataSetting/index.js
new file mode 100644
index 00000000..26514582
--- /dev/null
+++ b/src/component/menuContent/dataSetting/index.js
@@ -0,0 +1,132 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+import { appName } from '../../appName';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+
+const dataSetting = {};
+
+dataSetting.control = {
+ import: {},
+ backup: {},
+ clear: {}
+};
+
+dataSetting.import = (parent) => {
+
+ const importFeedback = form.feedback();
+
+ data.feedback.empty.render(importFeedback);
+
+ dataSetting.control.import.importElement = new Control_inputButton({
+ id: 'import-data',
+ type: 'file',
+ inputHide: true,
+ labelText: 'Import data',
+ inputButtonStyle: ['line'],
+ action: () => {
+ data.import(dataSetting.control.import.importElement.input, importFeedback)
+ }
+ });
+
+ dataSetting.control.import.importHelper = new Control_helperText({
+ text: ['Restore a previously exported ' + appName + ' backup.']
+ });
+
+ parent.appendChild(
+ node('div', [
+ dataSetting.control.import.importElement.wrap(),
+ dataSetting.control.import.importHelper.wrap(),
+ form.wrap({
+ children: [
+ importFeedback
+ ]
+ })
+ ])
+ );
+
+};
+
+dataSetting.backup = (parent) => {
+
+ dataSetting.control.backup.button = new Button({
+ text: 'Export data',
+ style: ['line'],
+ func: () => {
+ data.export();
+ }
+ });
+
+ dataSetting.control.backup.buttonHelper = new Control_helperText({
+ text: ['Download a backup of your ' + appName + ' Bookmarks and Settings.', 'This file can later be imported on this or another deivce.']
+ });
+
+ parent.appendChild(
+ node('div', [
+ dataSetting.control.backup.button.wrap(),
+ dataSetting.control.backup.buttonHelper.wrap()
+ ])
+ );
+
+};
+
+dataSetting.clear = (parent) => {
+
+ dataSetting.control.clear.button = new Button({
+ text: 'Clear all data',
+ style: ['line'],
+ func: () => {
+ menu.close();
+ data.clear.render();
+ }
+ });
+
+ dataSetting.control.clear.buttonHelper = new Control_helperText({
+ text: ['Wipe all data and restore ' + appName + ' to the default state.']
+ });
+
+ parent.appendChild(
+ node('div', [
+ dataSetting.control.clear.button.wrap(),
+ dataSetting.control.clear.buttonHelper.wrap()
+ ])
+ );
+
+};
+
+export { dataSetting }
diff --git a/src/component/menuContent/debugSetting/index.js b/src/component/menuContent/debugSetting/index.js
new file mode 100644
index 00000000..14883833
--- /dev/null
+++ b/src/component/menuContent/debugSetting/index.js
@@ -0,0 +1,172 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { group } from '../../group';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+import { groupAndBookmark } from '../../groupAndBookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+
+const debugSetting = {};
+
+debugSetting.control = {
+ alignment: {},
+ name: {},
+ open: {}
+};
+
+debugSetting.bookmark = (parent) => {
+
+ debugSetting.bookmark.letter = new Button({
+ text: 'Only letters',
+ style: ['line'],
+ func: () => {
+ bookmark.all.forEach(item => {
+ item.items.forEach(item => {
+
+ item.display.visual.type = 'letter';
+
+ });
+ });
+ groupAndBookmark.render();
+ data.save();
+ }
+ });
+
+ debugSetting.bookmark.icon = new Button({
+ text: 'Only icons',
+ style: ['line'],
+ func: () => {
+ bookmark.all.forEach(item => {
+ item.items.forEach(item => {
+
+ item.display.visual.type = 'icon';
+
+ });
+ });
+ groupAndBookmark.render();
+ data.save();
+ }
+ });
+
+ debugSetting.bookmark.image = new Button({
+ text: 'Only images',
+ style: ['line'],
+ func: () => {
+ bookmark.all.forEach(item => {
+ item.items.forEach(item => {
+
+ item.display.visual.type = 'image';
+
+ });
+ });
+ groupAndBookmark.render();
+ data.save();
+ }
+ });
+
+ debugSetting.bookmark.image = new Button({
+ text: 'Only images',
+ style: ['line'],
+ func: () => {
+ bookmark.all.forEach(item => {
+ item.items.forEach(item => {
+
+ item.display.visual.type = 'image';
+
+ });
+ });
+ groupAndBookmark.render();
+ data.save();
+ }
+ });
+
+ debugSetting.bookmark.nameHide = new Button({
+ text: 'Name hide',
+ style: ['line'],
+ func: () => {
+ bookmark.all.forEach(item => {
+ item.items.forEach(item => {
+
+ item.display.name.show = false;
+
+ });
+ });
+ groupAndBookmark.render();
+ data.save();
+ }
+ });
+
+ debugSetting.bookmark.nameShow = new Button({
+ text: 'Name show',
+ style: ['line'],
+ func: () => {
+ bookmark.all.forEach(item => {
+ item.items.forEach(item => {
+
+ item.display.name.show = true;
+
+ });
+ });
+ groupAndBookmark.render();
+ data.save();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ form.wrap({
+ children: [
+ form.inline({
+ gap: 'small',
+ wrap: true,
+ equalGap: true,
+ children: [
+ debugSetting.bookmark.letter.wrap(),
+ debugSetting.bookmark.icon.wrap(),
+ debugSetting.bookmark.image.wrap(),
+ debugSetting.bookmark.nameHide.wrap(),
+ debugSetting.bookmark.nameShow.wrap(),
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+export { debugSetting }
diff --git a/src/component/menuContent/firefoxSetting/index.js b/src/component/menuContent/firefoxSetting/index.js
new file mode 100644
index 00000000..92cc260e
--- /dev/null
+++ b/src/component/menuContent/firefoxSetting/index.js
@@ -0,0 +1,68 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+import { appName } from '../../appName';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+
+const firefoxSetting = {};
+
+firefoxSetting.firefox = (parent) => {
+
+ parent.appendChild(
+ node('div', [
+ complexNode({
+ tag: 'p',
+ text: 'Firefox does not allow addons to replace the "homepage". However there is a workaround:'
+ }),
+ form.wrap({
+ children: [
+ node('ol', [
+ node('li:Open a new Firefox window'),
+ node('li:Open Firefox Preferences
and open a new tab (nightTab)'),
+ node('li:In Firefox preferences under Home
, change Homepage and new windows
to Custom URLs...
'),
+ node('li:Then click Use Current Page
'),
+ ]),
+ node('p:nightTab will now appear as the homepage.'),
+ ]
+ })
+ ])
+ );
+
+};
+
+export { firefoxSetting }
diff --git a/src/component/menuContent/formSetting/index.js b/src/component/menuContent/formSetting/index.js
new file mode 100644
index 00000000..4a731a55
--- /dev/null
+++ b/src/component/menuContent/formSetting/index.js
@@ -0,0 +1,240 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+
+const formSetting = {};
+
+formSetting.state = {
+ input: {
+ radio: { a: 'a', b: 'a', c: 'a', d: 'a', e: 'a', grid3x3: 'a', grid3x1: 'a', grid1x3: 'a' },
+ checkbox: { a: true, b: true, c: false }
+ }
+};
+
+formSetting.control = {
+ input: {},
+ button: {}
+};
+
+formSetting.input = (parent) => {
+
+ formSetting.input.radio = {
+ a: new Control_radio({
+ object: formSetting.state,
+ radioGroup: [
+ { id: 'input-radio-a-a', labelText: 'Radio A A', description: 'Description for radio A A.', value: 'a' },
+ { id: 'input-radio-a-b', labelText: 'Radio A B', description: 'Description for radio A B.', value: 'b' },
+ { id: 'input-radio-a-c', labelText: 'Radio A C', description: 'Description for radio A C.', value: 'c' }
+ ],
+ label: 'Radio group A',
+ groupName: 'input-radio-a',
+ path: 'input.radio.a',
+ action: () => { console.log(formSetting.state); }
+ }),
+ b: new Control_radio({
+ object: formSetting.state,
+ radioGroup: [
+ { id: 'input-radio-b-a', labelText: 'B A', value: 'a' },
+ { id: 'input-radio-b-b', labelText: 'B B', value: 'b' },
+ { id: 'input-radio-b-c', labelText: 'B C', value: 'c' }
+ ],
+ label: 'Radio group',
+ groupName: 'input-radio-b',
+ path: 'input.radio.b',
+ action: () => { console.log(formSetting.state); }
+ }),
+ c: new Control_radio({
+ object: formSetting.state,
+ radioGroup: [
+ { id: 'input-radio-c-a', labelText: 'C A', value: 'a' },
+ { id: 'input-radio-c-b', labelText: 'C B', value: 'b' },
+ { id: 'input-radio-c-c', labelText: 'C C', value: 'c' }
+ ],
+ label: 'Radio group',
+ groupName: 'input-radio-c',
+ path: 'input.radio.c',
+ inputButton: true,
+ action: () => { console.log(formSetting.state); }
+ }),
+ d: new Control_radio({
+ object: formSetting.state,
+ radioGroup: [
+ { id: 'input-radio-d-a', labelText: 'D A', value: 'a' },
+ { id: 'input-radio-d-b', labelText: 'D B', value: 'b' },
+ { id: 'input-radio-d-c', labelText: 'D C', value: 'c' }
+ ],
+ label: 'Radio group',
+ groupName: 'input-radio-d',
+ path: 'input.radio.d',
+ inputButton: true,
+ inputButtonStyle: ['line'],
+ action: () => { console.log(formSetting.state); }
+ }),
+ e: new Control_radio({
+ object: formSetting.state,
+ radioGroup: [
+ { id: 'input-radio-e-a', labelText: 'E A', value: 'a' },
+ { id: 'input-radio-e-b', labelText: 'E B', value: 'b' },
+ { id: 'input-radio-e-c', labelText: 'E C', value: 'c' }
+ ],
+ label: 'Radio group',
+ groupName: 'input-radio-e',
+ path: 'input.radio.e',
+ inputButton: true,
+ inputHide: true,
+ inputButtonStyle: ['ring'],
+ action: () => { console.log(formSetting.state); }
+ }),
+ grid3x3: new Control_radioGrid({
+ object: formSetting.state,
+ radioGroup: [
+ { id: 'input-radio-grid3x3-a', labelText: 'A', value: 'a', position: 1 },
+ { id: 'input-radio-grid3x3-b', labelText: 'B', value: 'b', position: 2 },
+ { id: 'input-radio-grid3x3-c', labelText: 'C', value: 'c', position: 3 },
+ { id: 'input-radio-grid3x3-d', labelText: 'D', value: 'd', position: 4 },
+ { id: 'input-radio-grid3x3-e', labelText: 'E', value: 'e', position: 5 },
+ { id: 'input-radio-grid3x3-f', labelText: 'F', value: 'f', position: 6 },
+ { id: 'input-radio-grid3x3-g', labelText: 'G', value: 'g', position: 7 },
+ { id: 'input-radio-grid3x3-h', labelText: 'H', value: 'h', position: 8 },
+ { id: 'input-radio-grid3x3-i', labelText: 'I', value: 'i', position: 9 }
+ ],
+ label: 'Radio group grid 3x3',
+ groupName: 'input-radio-grid3x3',
+ path: 'input.radio.grid3x3',
+ gridSize: '3x3',
+ action: () => { console.log(formSetting.state); }
+ }),
+ grid3x1: new Control_radioGrid({
+ object: formSetting.state,
+ radioGroup: [
+ { id: 'input-radio-grid3x1-a', labelText: 'A', value: 'a', position: 1 },
+ { id: 'input-radio-grid3x1-b', labelText: 'B', value: 'b', position: 2 },
+ { id: 'input-radio-grid3x1-c', labelText: 'C', value: 'c', position: 3 }
+ ],
+ label: 'Radio group grid 3x1',
+ groupName: 'input-radio-grid3x1',
+ path: 'input.radio.grid3x1',
+ gridSize: '3x1',
+ action: () => { console.log(formSetting.state); }
+ }),
+ grid1x3: new Control_radioGrid({
+ object: formSetting.state,
+ radioGroup: [
+ { id: 'input-radio-grid1x3-a', labelText: 'A', value: 'a', position: 1 },
+ { id: 'input-radio-grid1x3-b', labelText: 'B', value: 'b', position: 2 },
+ { id: 'input-radio-grid1x3-c', labelText: 'C', value: 'c', position: 3 }
+ ],
+ label: 'Radio group grid 1x3',
+ groupName: 'input-radio-grid1x3',
+ path: 'input.radio.grid1x3',
+ gridSize: '1x3',
+ action: () => { console.log(formSetting.state); }
+ })
+ };
+
+ formSetting.input.checkbox = {
+ a: new Control_checkbox({
+ object: formSetting.state,
+ id: 'input-checkbox-a',
+ path: 'input.checkbox.a',
+ labelText: 'Checkbox A',
+ action: () => { console.log(formSetting.state); }
+ }),
+ b: new Control_checkbox({
+ object: formSetting.state,
+ id: 'input-checkbox-b',
+ path: 'input.checkbox.b',
+ labelText: 'Checkbox B',
+ action: () => { console.log(formSetting.state); }
+ }),
+ c: new Control_checkbox({
+ object: formSetting.state,
+ id: 'input-checkbox-c',
+ path: 'input.checkbox.c',
+ labelText: 'Checkbox C',
+ action: () => { console.log(formSetting.state); }
+ })
+ };
+
+ parent.appendChild(
+ node('div', [
+ formSetting.input.radio.a.wrap(),
+ node('hr'),
+ formSetting.input.radio.b.inline(),
+ formSetting.input.radio.c.inputButton(),
+ formSetting.input.radio.d.inputButton(),
+ formSetting.input.radio.e.inputButton(),
+ node('hr'),
+ formSetting.input.radio.grid3x3.wrap(),
+ formSetting.input.radio.grid3x1.wrap(),
+ formSetting.input.radio.grid1x3.wrap(),
+ node('hr'),
+ formSetting.input.checkbox.a.wrap(),
+ formSetting.input.checkbox.b.wrap(),
+ formSetting.input.checkbox.c.wrap()
+ ])
+ );
+
+};
+
+formSetting.button = (parent) => {
+
+ formSetting.button = {
+ small: new Button({ text: 'Small button', size: 'small' }),
+ medium: new Button({ text: 'Medium button', size: 'medium' }),
+ large: new Button({ text: 'Large button', size: 'large' }),
+ ring: new Button({ text: 'Ring button', size: 'medium', style: ['ring'] }),
+ line: new Button({ text: 'Line button', size: 'medium', style: ['line'] }),
+ link: new Button({ text: 'Link button', size: 'medium', style: ['link'] })
+ };
+
+ parent.appendChild(
+ node('div', [
+ formSetting.button.small.wrap(),
+ formSetting.button.medium.wrap(),
+ formSetting.button.large.wrap(),
+ formSetting.button.ring.wrap(),
+ formSetting.button.line.wrap(),
+ formSetting.button.link.wrap(),
+ ])
+ );
+
+};
+
+export { formSetting }
diff --git a/src/component/menuContent/groupSetting/index.js b/src/component/menuContent/groupSetting/index.js
new file mode 100644
index 00000000..4b3a475a
--- /dev/null
+++ b/src/component/menuContent/groupSetting/index.js
@@ -0,0 +1,413 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { group } from '../../group';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+import { groupAndBookmark } from '../../groupAndBookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+
+const groupSetting = {};
+
+groupSetting.control = {
+ alignment: {},
+ name: {},
+ open: {}
+};
+
+groupSetting.edge = {
+ name: {},
+ open: {}
+};
+
+groupSetting.disable = () => {
+
+ if (state.get.current().bookmark.show) {
+ groupSetting.control.alignment.justify.enable();
+ groupSetting.control.alignment.order.enable();
+ groupSetting.control.name.size.enable();
+ groupSetting.control.name.hide.enable();
+ groupSetting.control.name.show.enable();
+ groupSetting.control.name.helper.enable();
+ groupSetting.control.open.size.enable();
+ groupSetting.control.open.hide.enable();
+ groupSetting.control.open.show.enable();
+ groupSetting.control.open.helper.enable();
+ } else {
+ groupSetting.control.alignment.justify.disable();
+ groupSetting.control.alignment.order.disable();
+ groupSetting.control.name.size.disable();
+ groupSetting.control.name.hide.disable();
+ groupSetting.control.name.show.disable();
+ groupSetting.control.name.helper.disable();
+ groupSetting.control.open.size.disable();
+ groupSetting.control.open.hide.disable();
+ groupSetting.control.open.show.disable();
+ groupSetting.control.open.helper.disable();
+ };
+
+};
+
+groupSetting.alignment = (parent) => {
+
+ groupSetting.control.alignment.justify = new Control_radioGrid({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'group-area-justify-left', labelText: 'Left', value: 'left', position: 1 },
+ { id: 'group-area-justify-center', labelText: 'Center', value: 'center', position: 2 },
+ { id: 'group-area-justify-right', labelText: 'Right', value: 'right', position: 3 }
+ ],
+ label: 'Group details area alignment',
+ groupName: 'group-area-justify',
+ path: 'group.area.justify',
+ gridSize: '3x1',
+ action: () => {
+ applyCSSClass('group.area.justify');
+ data.save();
+ }
+ });
+
+ groupSetting.control.alignment.order = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'group-order-header-body', labelText: 'Group details then Bookmarks', description: 'Order the Group details area to appear before the Bookmarks area.', value: 'header-body' },
+ { id: 'group-order-body-header', labelText: 'Bookmarks then Group details', description: 'Order the Bookmarks area to appear before the Group details area.', value: 'body-header' }
+ ],
+ groupName: 'group-order',
+ path: 'group.order',
+ action: () => {
+ applyCSSClass('group.order');
+ data.save();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ groupSetting.control.alignment.justify.wrap(),
+ node('hr'),
+ groupSetting.control.alignment.order.wrap()
+ ])
+ );
+
+};
+
+groupSetting.name = (parent) => {
+
+ if (state.get.current().bookmark.show && bookmark.all[0].name.show && group.area.current.length > 0) {
+
+ groupSetting.edge.name.size = new Edge({ primary: group.area.current[0].element.name.name, secondary: [group.area.current[0].element.header] });
+
+ };
+
+ groupSetting.control.name.size = new Control_slider({
+ object: state.get.current(),
+ path: 'group.name.size',
+ id: 'group-name-size',
+ labelText: 'Name size',
+ value: state.get.current().group.name.size,
+ defaultValue: state.get.default().group.name.size,
+ min: state.get.minMax().group.name.size.min,
+ max: state.get.minMax().group.name.size.max,
+ action: () => {
+ applyCSSVar('group.name.size');
+ data.save();
+ },
+ sliderAction: () => {
+ if (state.get.current().bookmark.show && group.area.current.length > 0 && bookmark.all[0].name.show && groupSetting.edge.name.size) { groupSetting.edge.name.size.track(); };
+ },
+ mouseDownAction: () => {
+ if (state.get.current().bookmark.show && group.area.current.length > 0 && bookmark.all[0].name.show && groupSetting.edge.name.size) { groupSetting.edge.name.size.show(); };
+ },
+ mouseUpAction: () => {
+ if (state.get.current().bookmark.show && group.area.current.length > 0 && bookmark.all[0].name.show && groupSetting.edge.name.size) { groupSetting.edge.name.size.hide(); };
+ }
+ });
+
+ groupSetting.control.name.hide = new Button({
+ text: 'Show all',
+ style: ['line'],
+ func: () => {
+
+ bookmark.all.forEach(item => { item.name.show = true; });
+
+ groupAndBookmark.render();
+
+ if (groupSetting.edge.name.size) {
+
+ if (state.get.current().bookmark.show && group.area.current.length > 0) {
+
+ groupSetting.edge.name.size.update.primary(group.area.current[0].element.name.name);
+
+ groupSetting.edge.name.size.update.secondary([group.area.current[0].element.header]);
+
+ };
+
+ } else {
+
+ groupSetting.edge.name.size = new Edge({ primary: group.area.current[0].element.name.name, secondary: [group.area.current[0].element.header] });
+
+ };
+
+ if (groupSetting.edge.open.size) {
+
+ if (state.get.current().bookmark.show && group.area.current.length > 0) {
+
+ groupSetting.edge.open.size.update.primary(group.area.current[0].openAll.button.button);
+
+ groupSetting.edge.open.size.update.secondary([group.area.current[0].element.header]);
+
+ };
+
+ } else {
+
+ groupSetting.edge.open.size = new Edge({ primary: group.area.current[0].openAll.button.button, secondary: [group.area.current[0].element.header] });
+
+ };
+
+ data.save();
+
+ }
+ });
+
+ groupSetting.control.name.show = new Button({
+ text: 'Hide all',
+ style: ['line'],
+ func: () => {
+
+ bookmark.all.forEach(item => { item.name.show = false; });
+
+ groupAndBookmark.render();
+
+ if (groupSetting.edge.name.size) {
+
+ if (state.get.current().bookmark.show && group.area.current.length > 0) {
+
+ groupSetting.edge.name.size.update.primary(group.area.current[0].element.name.name);
+
+ groupSetting.edge.name.size.update.secondary([group.area.current[0].element.header]);
+
+ };
+
+ } else {
+
+ groupSetting.edge.name.size = new Edge({ primary: group.area.current[0].element.name.name, secondary: [group.area.current[0].element.header] });
+
+ };
+
+ if (groupSetting.edge.open.size) {
+
+ if (state.get.current().bookmark.show && group.area.current.length > 0) {
+
+ groupSetting.edge.open.size.update.primary(group.area.current[0].openAll.button.button);
+
+ groupSetting.edge.open.size.update.secondary([group.area.current[0].element.header]);
+
+ };
+
+ } else {
+
+ groupSetting.edge.open.size = new Edge({ primary: group.area.current[0].openAll.button.button, secondary: [group.area.current[0].element.header] });
+
+ };
+
+ data.save();
+
+ }
+ });
+
+ groupSetting.control.name.helper = new Control_helperText({
+ text: ['Group Names can also be changed by editing individual Groups.']
+ });
+
+ parent.appendChild(
+ node('div', [
+ groupSetting.control.name.size.wrap(),
+ form.inline({
+ children: [
+ groupSetting.control.name.hide.wrap(),
+ groupSetting.control.name.show.wrap()
+ ]
+ }),
+ groupSetting.control.name.helper.wrap()
+ ])
+ );
+
+};
+
+groupSetting.open = (parent) => {
+
+ if (state.get.current().bookmark.show && bookmark.all[0].openAll.show && group.area.current.length > 0) {
+
+ groupSetting.edge.open.size = new Edge({ primary: group.area.current[0].openAll.button.button, secondary: [group.area.current[0].element.header] });
+
+ };
+
+ groupSetting.control.open.size = new Control_slider({
+ object: state.get.current(),
+ path: 'group.openAll.size',
+ id: 'group-openAll-size',
+ labelText: 'Open all size',
+ value: state.get.current().group.openAll.size,
+ defaultValue: state.get.default().group.openAll.size,
+ min: state.get.minMax().group.openAll.size.min,
+ max: state.get.minMax().group.openAll.size.max,
+ action: () => {
+ applyCSSVar('group.openAll.size');
+ data.save();
+ },
+ sliderAction: () => {
+ if (state.get.current().bookmark.show && group.area.current.length > 0 && bookmark.all[0].openAll.show && groupSetting.edge.open.size) { groupSetting.edge.open.size.track(); };
+ },
+ mouseDownAction: () => {
+ if (state.get.current().bookmark.show && group.area.current.length > 0 && bookmark.all[0].openAll.show && groupSetting.edge.open.size) { groupSetting.edge.open.size.show(); };
+ },
+ mouseUpAction: () => {
+ if (state.get.current().bookmark.show && group.area.current.length > 0 && bookmark.all[0].openAll.show && groupSetting.edge.open.size) { groupSetting.edge.open.size.hide(); };
+ }
+ });
+
+ groupSetting.control.open.hide = new Button({
+ text: 'Show all',
+ style: ['line'],
+ func: () => {
+
+ bookmark.all.forEach(item => { item.openAll.show = true; });
+
+ groupAndBookmark.render();
+
+ if (groupSetting.edge.name.size) {
+
+ if (state.get.current().bookmark.show && group.area.current.length > 0) {
+
+ groupSetting.edge.name.size.update.primary(group.area.current[0].element.name.name);
+
+ groupSetting.edge.name.size.update.secondary([group.area.current[0].element.header]);
+
+ };
+
+ } else {
+
+ groupSetting.edge.name.size = new Edge({ primary: group.area.current[0].element.name.name, secondary: [group.area.current[0].element.header] });
+
+ };
+
+ if (groupSetting.edge.open.size) {
+
+ if (state.get.current().bookmark.show && group.area.current.length > 0) {
+
+ groupSetting.edge.open.size.update.primary(group.area.current[0].openAll.button.button);
+
+ groupSetting.edge.open.size.update.secondary([group.area.current[0].element.header]);
+
+ };
+
+ } else {
+
+ groupSetting.edge.open.size = new Edge({ primary: group.area.current[0].openAll.button.button, secondary: [group.area.current[0].element.header] });
+
+ };
+
+ data.save();
+
+ }
+ });
+
+ groupSetting.control.open.show = new Button({
+ text: 'Hide all',
+ style: ['line'],
+ func: () => {
+
+ bookmark.all.forEach(item => { item.openAll.show = false; });
+
+ groupAndBookmark.render();
+
+ if (groupSetting.edge.name.size) {
+
+ if (state.get.current().bookmark.show && group.area.current.length > 0) {
+
+ groupSetting.edge.name.size.update.primary(group.area.current[0].element.name.name);
+
+ groupSetting.edge.name.size.update.secondary([group.area.current[0].element.header]);
+
+ };
+
+ } else {
+
+ groupSetting.edge.name.size = new Edge({ primary: group.area.current[0].element.name.name, secondary: [group.area.current[0].element.header] });
+
+ };
+
+ if (groupSetting.edge.open.size) {
+
+ if (state.get.current().bookmark.show && group.area.current.length > 0) {
+
+ groupSetting.edge.open.size.update.primary(group.area.current[0].openAll.button.button);
+
+ groupSetting.edge.open.size.update.secondary([group.area.current[0].element.header]);
+
+ };
+
+ } else {
+
+ groupSetting.edge.open.size = new Edge({ primary: group.area.current[0].openAll.button.button, secondary: [group.area.current[0].element.header] });
+
+ };
+
+ data.save();
+
+ }
+ });
+
+ groupSetting.control.open.helper = new Control_helperText({
+ text: ['Group Names can also be changed by editing individual Groups.']
+ });
+
+ parent.appendChild(
+ node('div', [
+ groupSetting.control.open.size.wrap(),
+ form.inline({
+ children: [
+ groupSetting.control.open.hide.wrap(),
+ groupSetting.control.open.show.wrap()
+ ]
+ }),
+ groupSetting.control.open.helper.wrap()
+ ])
+ );
+
+};
+
+export { groupSetting }
diff --git a/src/component/menuContent/headerSetting/index.js b/src/component/menuContent/headerSetting/index.js
new file mode 100644
index 00000000..9fce0480
--- /dev/null
+++ b/src/component/menuContent/headerSetting/index.js
@@ -0,0 +1,1819 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+import { searchEnginePreset } from '../../searchEnginePreset';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+
+const headerSetting = {};
+
+headerSetting.control = {
+ area: {},
+ greeting: {},
+ transitional: {},
+ clock: {},
+ date: {},
+ search: {}
+};
+
+headerSetting.disable = () => {
+
+ if (state.get.current().header.greeting.show) {
+ headerSetting.control.greeting.size.enable();
+ headerSetting.control.greeting.newLine.enable();
+ headerSetting.control.greeting.type.enable();
+ headerSetting.control.greeting.name.enable();
+ } else {
+ headerSetting.control.greeting.size.disable();
+ headerSetting.control.greeting.newLine.disable();
+ headerSetting.control.greeting.type.disable();
+ headerSetting.control.greeting.name.disable();
+ };
+
+ if (state.get.current().header.greeting.show) {
+
+ switch (state.get.current().header.greeting.type) {
+
+ case 'good':
+ case 'hello':
+ case 'hi':
+ headerSetting.control.greeting.custom.text.disable();
+ break;
+
+ case 'custom':
+ headerSetting.control.greeting.custom.text.enable();
+ break;
+
+ };
+
+ } else {
+
+ headerSetting.control.greeting.custom.text.disable();
+
+ };
+
+ if (state.get.current().header.clock.second.show ||
+ state.get.current().header.clock.minute.show ||
+ state.get.current().header.clock.hour.show) {
+
+ headerSetting.control.clock.hour24.show.enable();
+ headerSetting.control.clock.size.enable();
+ headerSetting.control.clock.newLine.enable();
+
+ if (state.get.current().header.clock.second.show) {
+ headerSetting.control.clock.second.display.enable();
+ } else {
+ headerSetting.control.clock.second.display.disable();
+ };
+
+ if (state.get.current().header.clock.hour.show) {
+ headerSetting.control.clock.hour.display.enable();
+ } else {
+ headerSetting.control.clock.hour.display.disable();
+ };
+
+ if (state.get.current().header.clock.second.show) {
+ headerSetting.control.clock.second.display.enable();
+ } else {
+ headerSetting.control.clock.second.display.disable();
+ };
+
+ if (state.get.current().header.clock.hour24.show) {
+ headerSetting.control.clock.meridiem.show.disable();
+ } else {
+ headerSetting.control.clock.meridiem.show.enable();
+ };
+
+ } else {
+
+ headerSetting.control.clock.hour24.show.disable();
+ headerSetting.control.clock.meridiem.show.disable();
+ headerSetting.control.clock.size.disable();
+ headerSetting.control.clock.newLine.disable();
+
+ };
+
+ if ([state.get.current().header.clock.second.show, state.get.current().header.clock.minute.show, state.get.current().header.clock.hour.show].filter(Boolean).length > 1) {
+
+ headerSetting.control.clock.separator.show.enable();
+
+ } else {
+
+ headerSetting.control.clock.separator.show.disable();
+
+ };
+
+ if (
+ [state.get.current().header.clock.second.show, state.get.current().header.clock.minute.show, state.get.current().header.clock.hour.show].filter(Boolean).length > 1 &&
+ state.get.current().header.clock.separator.show
+ ) {
+
+ headerSetting.control.clock.separator.text.enable();
+
+ } else {
+
+ headerSetting.control.clock.separator.text.disable();
+
+ };
+
+ if (
+ (state.get.current().header.clock.second.show && state.get.current().header.clock.minute.show) ||
+ (state.get.current().header.clock.second.show && state.get.current().header.clock.hour.show) ||
+ (state.get.current().header.clock.minute.show && state.get.current().header.clock.hour.show)
+ ) {
+
+ headerSetting.control.clock.separator.show.enable();
+
+ } else {
+
+ headerSetting.control.clock.separator.show.disable();
+
+ };
+
+ if (
+ ((state.get.current().header.clock.second.show && state.get.current().header.clock.minute.show) ||
+ (state.get.current().header.clock.second.show && state.get.current().header.clock.hour.show) ||
+ (state.get.current().header.clock.minute.show && state.get.current().header.clock.hour.show)) &&
+ state.get.current().header.clock.separator.show
+ ) {
+
+ headerSetting.control.clock.separator.text.enable();
+
+ } else {
+
+ headerSetting.control.clock.separator.text.disable();
+
+ };
+
+ if (state.get.current().header.date.day.show ||
+ state.get.current().header.date.date.show ||
+ state.get.current().header.date.month.show ||
+ state.get.current().header.date.year.show) {
+
+ headerSetting.control.date.size.enable();
+ headerSetting.control.date.newLine.enable();
+
+ } else {
+
+ headerSetting.control.date.size.disable();
+ headerSetting.control.date.newLine.disable();
+
+ };
+
+ if (state.get.current().header.date.date.show && state.get.current().header.date.month.show) {
+
+ headerSetting.control.date.format.enable();
+
+ } else {
+
+ headerSetting.control.date.format.disable();
+
+ };
+
+ if (state.get.current().header.date.day.show) {
+
+ headerSetting.control.date.day.display.enable();
+
+ switch (state.get.current().header.date.day.display) {
+
+ case 'word':
+ headerSetting.control.date.day.length.enable();
+ headerSetting.control.date.day.weekStart.disable();
+ break;
+
+ case 'number':
+ headerSetting.control.date.day.length.disable();
+ headerSetting.control.date.day.weekStart.enable();
+ break;
+
+ };
+
+ } else {
+
+ headerSetting.control.date.day.display.disable();
+ headerSetting.control.date.day.length.disable();
+ headerSetting.control.date.day.weekStart.disable();
+
+ };
+
+ if (state.get.current().header.date.date.show) {
+
+ headerSetting.control.date.date.display.enable();
+ headerSetting.control.date.date.ordinal.enable();
+
+ } else {
+
+ headerSetting.control.date.date.display.disable();
+ headerSetting.control.date.date.ordinal.disable();
+
+ };
+
+ if (state.get.current().header.date.month.show) {
+
+ switch (state.get.current().header.date.month.display) {
+
+ case 'word':
+ headerSetting.control.date.month.ordinal.disable();
+ headerSetting.control.date.month.length.enable();
+ break;
+
+ case 'number':
+ headerSetting.control.date.month.ordinal.enable();
+ headerSetting.control.date.month.length.disable();
+ break;
+
+ };
+
+ headerSetting.control.date.month.display.enable();
+
+ } else {
+
+ headerSetting.control.date.month.display.disable();
+ headerSetting.control.date.month.ordinal.disable();
+ headerSetting.control.date.month.length.disable();
+
+ };
+
+ if (state.get.current().header.date.year.show) {
+
+ headerSetting.control.date.year.display.enable();
+
+ } else {
+
+ headerSetting.control.date.year.display.disable();
+
+ };
+
+ if ([state.get.current().header.date.day.show, state.get.current().header.date.date.show, state.get.current().header.date.month.show, state.get.current().header.date.year.show].filter(Boolean).length > 1) {
+
+ headerSetting.control.date.separator.show.enable();
+
+ } else {
+
+ headerSetting.control.date.separator.show.disable();
+
+ };
+
+ if (
+ [state.get.current().header.date.day.show, state.get.current().header.date.date.show, state.get.current().header.date.month.show, state.get.current().header.date.year.show].filter(Boolean).length > 1 &&
+ state.get.current().header.date.separator.show
+ ) {
+
+ headerSetting.control.date.separator.text.enable();
+
+ } else {
+
+ headerSetting.control.date.separator.text.disable();
+
+ };
+
+ if (
+ state.get.current().header.clock.second.show ||
+ state.get.current().header.clock.minute.show ||
+ state.get.current().header.clock.hour.show ||
+ state.get.current().header.date.day.show ||
+ state.get.current().header.date.date.show ||
+ state.get.current().header.date.month.show ||
+ state.get.current().header.date.year.show
+ ) {
+ headerSetting.control.transitional.show.enable();
+ headerSetting.control.transitional.newLine.enable();
+ } else {
+ headerSetting.control.transitional.show.disable();
+ headerSetting.control.transitional.newLine.disable();
+ };
+
+ if ((
+ state.get.current().header.clock.second.show ||
+ state.get.current().header.clock.minute.show ||
+ state.get.current().header.clock.hour.show ||
+ state.get.current().header.date.day.show ||
+ state.get.current().header.date.date.show ||
+ state.get.current().header.date.month.show ||
+ state.get.current().header.date.year.show
+ ) &&
+ state.get.current().header.transitional.show) {
+ headerSetting.control.transitional.type.enable();
+ headerSetting.control.transitional.size.enable();
+ headerSetting.control.transitional.newLine.enable();
+ } else {
+ headerSetting.control.transitional.type.disable();
+ headerSetting.control.transitional.size.disable();
+ headerSetting.control.transitional.newLine.disable();
+ };
+
+ if (state.get.current().header.search.show) {
+ headerSetting.control.search.width.by.enable();
+ headerSetting.control.search.newTab.enable();
+ headerSetting.control.search.size.enable();
+ headerSetting.control.search.newLine.enable();
+ } else {
+ headerSetting.control.search.width.by.disable();
+ headerSetting.control.search.newTab.disable();
+ headerSetting.control.search.size.disable();
+ headerSetting.control.search.newLine.disable();
+ };
+
+ if (state.get.current().header.search.show) {
+
+ switch (state.get.current().header.search.width.by) {
+
+ case 'auto':
+ headerSetting.control.search.width.size.disable();
+ break;
+
+
+ case 'custom':
+ headerSetting.control.search.width.size.enable();
+ break;
+
+ };
+
+ } else {
+
+ headerSetting.control.search.width.size.disable();
+
+ };
+
+ switch (state.get.current().header.search.engine.selected) {
+
+ case 'custom':
+ headerSetting.control.search.engine.custom.name.enable();
+ headerSetting.control.search.engine.custom.url.enable();
+ headerSetting.control.search.engine.custom.urlHelper.enable();
+ headerSetting.control.search.engine.custom.queryName.enable();
+ headerSetting.control.search.engine.custom.queryNameHelper.enable();
+ break;
+
+ default:
+ headerSetting.control.search.engine.custom.name.disable();
+ headerSetting.control.search.engine.custom.url.disable();
+ headerSetting.control.search.engine.custom.urlHelper.disable();
+ headerSetting.control.search.engine.custom.queryName.disable();
+ headerSetting.control.search.engine.custom.queryNameHelper.disable();
+ break;
+
+ };
+
+};
+
+headerSetting.edge = {
+ area: {},
+ greeting: {},
+ transitional: {},
+ clock: {},
+ date: {},
+ search: {}
+};
+
+headerSetting.update = () => {
+
+ for (let key in headerSetting.control) {
+
+ headerSetting.control[key].forEach((item, i) => {
+ item.update();
+ });
+
+ };
+
+};
+
+headerSetting.area = (parent) => {
+
+ headerSetting.area.alignment = new Control_radioGrid({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'header-item-justify-left', labelText: 'Left', value: 'left', position: 1 },
+ { id: 'header-item-justify-center', labelText: 'Center', value: 'center', position: 2 },
+ { id: 'header-item-justify-right', labelText: 'Right', value: 'right', position: 3 }
+ ],
+ label: 'Header item alignment',
+ groupName: 'header-item-justify',
+ path: 'header.item.justify',
+ gridSize: '3x1',
+ action: () => {
+ applyCSSClass('header.item.justify');
+ data.save();
+ }
+ });
+
+ headerSetting.area.alignmentHelper = new Control_helperText({
+ text: ['Effects may not be visible if the Search box size size is set to Auto and grows to fill available space.']
+ });
+
+ parent.appendChild(
+ node('div', [
+ headerSetting.area.alignment.wrap(),
+ headerSetting.area.alignmentHelper.wrap()
+ ])
+ );
+
+};
+
+headerSetting.greeting = (parent) => {
+
+ headerSetting.edge.greeting.size = new Edge({ primary: header.element.greeting.greeting(), secondary: [header.element.area] });
+
+ headerSetting.control.greeting.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.greeting.show',
+ id: 'header-greeting-show',
+ labelText: 'Show Greeting',
+ action: function() {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ headerSetting.control.greeting.collapse.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.greeting.size = new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'header.greeting.size',
+ id: 'header-greeting-size',
+ labelText: 'Size',
+ value: state.get.current().header.greeting.size,
+ defaultValue: state.get.default().header.greeting.size,
+ min: state.get.minMax().header.greeting.size.min,
+ max: state.get.minMax().header.greeting.size.max,
+ action: () => {
+ applyCSSVar('header.greeting.size');
+ data.save();
+ },
+ sliderAction: () => {
+ headerSetting.edge.greeting.size.track();
+ },
+ mouseDownAction: () => {
+ headerSetting.edge.greeting.size.show();
+ },
+ mouseUpAction: () => {
+ headerSetting.edge.greeting.size.hide();
+ }
+ });
+
+ headerSetting.control.greeting.newLine = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.greeting.newLine',
+ id: 'header-greeting-newLine',
+ labelText: 'New line',
+ description: 'Force on to a new line and seperate from other Header items.',
+ action: function() {
+ applyCSSState('header.greeting.newLine');
+ data.save();
+ }
+ });
+
+ headerSetting.control.greeting.type = new Control_radio({
+ object: state.get.current(),
+ label: 'Wording',
+ radioGroup: [
+ { id: 'header-greeting-type-good', labelText: '"Good morning..."', value: 'good' },
+ { id: 'header-greeting-type-hello', labelText: '"Hello..."', value: 'hello' },
+ { id: 'header-greeting-type-hi', labelText: '"Hi..."', value: 'hi' },
+ { id: 'header-greeting-type-custom', labelText: 'Custom', value: 'custom' }
+ ],
+ groupName: 'header-greeting-type',
+ path: 'header.greeting.type',
+ action: () => {
+ header.element.greeting.update();
+ headerSetting.control.greeting.custom.collapse.update();
+ headerSetting.disable();
+ data.save();
+ }
+ });
+
+ headerSetting.control.greeting.custom = {};
+
+ headerSetting.control.greeting.custom.text = new Control_text({
+ object: state.get.current(),
+ path: 'header.greeting.custom',
+ id: 'header-greeting-custom',
+ value: state.get.current().header.greeting.custom,
+ placeholder: 'Howdy',
+ labelText: 'Custom greeting text',
+ srOnly: true,
+ action: () => {
+ header.element.greeting.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.greeting.custom.area = node('div', [
+ headerSetting.control.greeting.custom.text.wrap()
+ ]);
+
+ headerSetting.control.greeting.custom.collapse = new Collapse({
+ type: 'radio',
+ radioGroup: headerSetting.control.greeting.type,
+ target: [{
+ id: headerSetting.control.greeting.type.radioSet[headerSetting.control.greeting.type.radioSet.length - 1].radio.value,
+ content: headerSetting.control.greeting.custom.area
+ }]
+ });
+
+ headerSetting.control.greeting.name = new Control_text({
+ object: state.get.current(),
+ path: 'header.greeting.name',
+ id: 'header-greeting-name',
+ value: state.get.current().header.greeting.name,
+ placeholder: 'Nickname, alias or superhero name',
+ labelText: 'Name',
+ action: () => {
+ header.element.greeting.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.greeting.area = node('div', [
+ headerSetting.control.greeting.type.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.greeting.custom.collapse.collapse()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ headerSetting.control.greeting.name.wrap(),
+ node('hr'),
+ headerSetting.control.greeting.size.wrap(),
+ headerSetting.control.greeting.newLine.wrap()
+ ]);
+
+ headerSetting.control.greeting.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.greeting.show,
+ target: [{
+ content: headerSetting.control.greeting.area
+ }]
+ });
+
+ parent.appendChild(
+ node('div', [
+ headerSetting.control.greeting.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.greeting.collapse.collapse()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+headerSetting.transitional = (parent) => {
+
+ headerSetting.edge.transitional.size = new Edge({ primary: header.element.transitional.transitional(), secondary: [header.element.area] });
+
+ headerSetting.control.transitional.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.transitional.show',
+ id: 'header-transitional-show',
+ labelText: 'Show Transitional words',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ headerSetting.control.transitional.collapse.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.transitional.showHelper = new Control_helperText({
+ text: ['Only available when Date or Time is shown.']
+ });
+
+ headerSetting.control.transitional.size = new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'header.transitional.size',
+ id: 'header-transitional-size',
+ labelText: 'Size',
+ value: state.get.current().header.transitional.size,
+ defaultValue: state.get.default().header.transitional.size,
+ min: state.get.minMax().header.transitional.size.min,
+ max: state.get.minMax().header.transitional.size.max,
+ action: () => {
+ applyCSSVar('header.transitional.size');
+ data.save();
+ },
+ sliderAction: () => {
+ headerSetting.edge.transitional.size.track();
+ },
+ mouseDownAction: () => {
+ headerSetting.edge.transitional.size.show();
+ },
+ mouseUpAction: () => {
+ headerSetting.edge.transitional.size.hide();
+ }
+ });
+
+ headerSetting.control.transitional.newLine = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.transitional.newLine',
+ id: 'header-transitional-newLine',
+ labelText: 'New line',
+ description: 'Force on to a new line and seperate from other Header items.',
+ action: function() {
+ applyCSSState('header.transitional.newLine');
+ data.save();
+ }
+ });
+
+ headerSetting.control.transitional.type = new Control_radio({
+ object: state.get.current(),
+ label: 'Wording',
+ radioGroup: [
+ { id: 'header-transitional-type-timeanddate', labelText: '"The time and date is"', value: 'timeanddate' },
+ { id: 'header-transitional-type-its', labelText: '"It\'s"', value: 'its' }
+ ],
+ groupName: 'header-transitional-type',
+ path: 'header.transitional.type',
+ action: () => {
+ header.element.transitional.update();
+ headerSetting.disable();
+ data.save();
+ }
+ });
+
+ headerSetting.control.transitional.area = node('div', [
+ headerSetting.control.transitional.type.wrap(),
+ node('hr'),
+ headerSetting.control.transitional.size.wrap(),
+ headerSetting.control.transitional.newLine.wrap()
+ ]);
+
+ headerSetting.control.transitional.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.transitional.show,
+ target: [{
+ content: headerSetting.control.transitional.area
+ }]
+ });
+
+ parent.appendChild(
+ node('div', [
+ headerSetting.control.transitional.show.wrap(),
+ headerSetting.control.transitional.showHelper.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.transitional.collapse.collapse()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+headerSetting.clock = (parent) => {
+
+ headerSetting.edge.clock.size = new Edge({ primary: header.element.clock.clock(), secondary: [header.element.area] });
+
+ headerSetting.control.clock.hour = {};
+
+ headerSetting.control.clock.hour.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.clock.hour.show',
+ id: 'header-clock-hour-show',
+ labelText: 'Show hours',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ headerSetting.control.clock.hour.collapse.update();
+ headerSetting.control.clock.collapse.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.clock.hour.display = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'header-clock-hour-display-number', labelText: 'As number', value: 'number' },
+ { id: 'header-clock-hour-display-word', labelText: 'As word', value: 'word' }
+ ],
+ groupName: 'header-clock-hour-display',
+ path: 'header.clock.hour.display',
+ action: () => {
+ header.element.clock.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.clock.hour.area = node('div', [
+ headerSetting.control.clock.hour.display.wrap()
+ ]);
+
+ headerSetting.control.clock.hour.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.clock.hour.show,
+ target: [{
+ content: headerSetting.control.clock.hour.area
+ }]
+ });
+
+ headerSetting.control.clock.minute = {};
+
+ headerSetting.control.clock.minute.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.clock.minute.show',
+ id: 'header-clock-minute-show',
+ labelText: 'Show minutes',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ headerSetting.control.clock.minute.collapse.update();
+ headerSetting.control.clock.collapse.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.clock.minute.display = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'header-clock-minute-display-number', labelText: 'As number', value: 'number' },
+ { id: 'header-clock-minute-display-word', labelText: 'As word', value: 'word' }
+ ],
+ groupName: 'header-clock-minute-display',
+ path: 'header.clock.minute.display',
+ action: () => {
+ header.element.clock.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.clock.minute.area = node('div', [
+ headerSetting.control.clock.minute.display.wrap()
+ ]);
+
+ headerSetting.control.clock.minute.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.clock.minute.show,
+ target: [{
+ content: headerSetting.control.clock.minute.area
+ }]
+ });
+
+ headerSetting.control.clock.second = {};
+
+ headerSetting.control.clock.second.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.clock.second.show',
+ id: 'header-clock-second-show',
+ labelText: 'Show seconds',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ headerSetting.control.clock.second.collapse.update();
+ headerSetting.control.clock.collapse.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.clock.second.display = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'header-clock-second-display-number', labelText: 'As number', value: 'number' },
+ { id: 'header-clock-second-display-word', labelText: 'As word', value: 'word' }
+ ],
+ groupName: 'header-clock-second-display',
+ path: 'header.clock.second.display',
+ action: () => {
+ header.element.clock.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.clock.second.area = node('div', [
+ headerSetting.control.clock.second.display.wrap()
+ ]);
+
+ headerSetting.control.clock.second.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.clock.second.show,
+ target: [{
+ content: headerSetting.control.clock.second.area
+ }]
+ });
+
+ headerSetting.control.clock.hour24 = {
+ show: new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.clock.hour24.show',
+ id: 'header-clock-hour24-show',
+ labelText: '24 hours',
+ action: function() {
+ header.element.clock.update();
+ headerSetting.disable();
+ data.save();
+ }
+ })
+ };
+
+ headerSetting.control.clock.meridiem = {
+ show: new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.clock.meridiem.show',
+ id: 'header-clock-meridiem-show',
+ labelText: 'AM / PM',
+ action: function() {
+ header.element.clock.update();
+ data.save();
+ }
+ })
+ };
+
+ headerSetting.control.clock.size = new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'header.clock.size',
+ id: 'header-clock-size',
+ labelText: 'Size',
+ value: state.get.current().header.clock.size,
+ defaultValue: state.get.default().header.clock.size,
+ min: state.get.minMax().header.clock.size.min,
+ max: state.get.minMax().header.clock.size.max,
+ action: () => {
+ applyCSSVar('header.clock.size');
+ data.save();
+ },
+ sliderAction: () => {
+ headerSetting.edge.clock.size.track();
+ },
+ mouseDownAction: () => {
+ headerSetting.edge.clock.size.show();
+ },
+ mouseUpAction: () => {
+ headerSetting.edge.clock.size.hide();
+ }
+ });
+
+ headerSetting.control.clock.newLine = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.clock.newLine',
+ id: 'header-clock-newLine',
+ labelText: 'New line',
+ description: 'Force on to a new line and seperate from other Header items.',
+ action: function() {
+ applyCSSState('header.clock.newLine');
+ data.save();
+ }
+ });
+
+ headerSetting.control.clock.separator = {};
+
+ headerSetting.control.clock.separator.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.clock.separator.show',
+ id: 'header-clock-separator-show',
+ labelText: 'Show separator',
+ action: () => {
+ header.element.clock.update();
+ headerSetting.control.clock.separator.collapse.update();
+ headerSetting.disable();
+ data.save();
+ }
+ });
+
+ headerSetting.control.clock.separator.text = new Control_textReset({
+ object: state.get.current(),
+ path: 'header.clock.separator.text',
+ id: 'header-clock-separator-text',
+ value: state.get.current().header.clock.separator.text,
+ defaultValue: state.get.default().header.clock.separator.text,
+ placeholder: ':',
+ labelText: 'Separator character',
+ srOnly: true,
+ action: () => {
+ header.element.clock.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.clock.separator.area = node('div', [
+ headerSetting.control.clock.separator.text.wrap()
+ ]);
+
+ headerSetting.control.clock.separator.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.clock.separator.show,
+ target: [{
+ content: headerSetting.control.clock.separator.area
+ }]
+ });
+
+ headerSetting.control.clock.area = node('div', [
+ node('hr'),
+ headerSetting.control.clock.separator.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.clock.separator.collapse.collapse()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ headerSetting.control.clock.hour24.show.wrap(),
+ headerSetting.control.clock.meridiem.show.wrap(),
+ node('hr'),
+ headerSetting.control.clock.size.wrap(),
+ headerSetting.control.clock.newLine.wrap()
+ ]);
+
+ headerSetting.control.clock.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: [headerSetting.control.clock.hour.show, headerSetting.control.clock.minute.show, headerSetting.control.clock.second.show],
+ target: [{
+ content: headerSetting.control.clock.area
+ }]
+ });
+
+ parent.appendChild(
+ node('div', [
+ headerSetting.control.clock.hour.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.clock.hour.collapse.collapse()
+ ]
+ })
+ ]
+ }),
+ headerSetting.control.clock.minute.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.clock.minute.collapse.collapse()
+ ]
+ })
+ ]
+ }),
+ headerSetting.control.clock.second.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.clock.second.collapse.collapse()
+ ]
+ })
+ ]
+ }),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.clock.collapse.collapse()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+headerSetting.date = (parent) => {
+
+ headerSetting.edge.date.size = new Edge({ primary: header.element.date.date(), secondary: [header.element.area] });
+
+ headerSetting.control.date.day = {};
+
+ headerSetting.control.date.day.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.date.day.show',
+ id: 'header-date-day-show',
+ labelText: 'Show Day',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ headerSetting.control.date.day.collapse.update();
+ headerSetting.control.date.collapse.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.day.display = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'header-date-day-display-number', labelText: 'As number', value: 'number' },
+ { id: 'header-date-day-display-word', labelText: 'As word', value: 'word' }
+ ],
+ groupName: 'header-date-day-display',
+ path: 'header.date.day.display',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.day.weekStart = new Control_radio({
+ object: state.get.current(),
+ label: 'Start of the week',
+ radioGroup: [
+ { id: 'header-date-day-week-start-monday', labelText: 'Monday', value: 'monday' },
+ { id: 'header-date-day-week-start-sunday', labelText: 'Sunday', value: 'sunday' }
+ ],
+ groupName: 'header-date-day-week-start',
+ path: 'header.date.day.weekStart',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.day.length = new Control_radio({
+ object: state.get.current(),
+ label: 'Word length',
+ radioGroup: [
+ { id: 'header-date-day-length-long', labelText: 'Long', value: 'long' },
+ { id: 'header-date-day-length-short', labelText: 'Short', value: 'short' }
+ ],
+ groupName: 'header-date-day-length',
+ path: 'header.date.day.length',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.day.area = node('div', [
+ headerSetting.control.date.day.display.radioSet[0].wrap(),
+ form.wrap({ children: [form.indent({ children: [headerSetting.control.date.day.weekStart.wrap()] })] }),
+ headerSetting.control.date.day.display.radioSet[1].wrap(),
+ form.wrap({ children: [form.indent({ children: [headerSetting.control.date.day.length.wrap()] })] })
+ ]);
+
+ headerSetting.control.date.day.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.date.day.show,
+ target: [{
+ content: headerSetting.control.date.day.area
+ }]
+ });
+
+ headerSetting.control.date.date = {};
+
+ headerSetting.control.date.date.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.date.date.show',
+ id: 'header-date-date-show',
+ labelText: 'Show Date',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ headerSetting.control.date.date.collapse.update();
+ headerSetting.control.date.collapse.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.date.display = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'header-date-date-display-number', labelText: 'As number', value: 'number' },
+ { id: 'header-date-date-display-word', labelText: 'As word', value: 'word' }
+ ],
+ groupName: 'header-date-date-display',
+ path: 'header.date.date.display',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.date.ordinal = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.date.date.ordinal',
+ id: 'header-date-date-ordinal',
+ labelText: 'Ordinal numbers',
+ action: () => {
+ header.element.date.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.date.area = node('div', [
+ headerSetting.control.date.date.display.wrap(),
+ headerSetting.control.date.date.ordinal.wrap()
+ ]);
+
+ headerSetting.control.date.date.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.date.date.show,
+ target: [{
+ content: headerSetting.control.date.date.area
+ }]
+ });
+
+ headerSetting.control.date.month = {};
+
+ headerSetting.control.date.month.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.date.month.show',
+ id: 'header-date-month-show',
+ labelText: 'Show Month',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ headerSetting.control.date.month.collapse.update();
+ headerSetting.control.date.collapse.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.month.display = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'header-date-month-display-number', labelText: 'As number', value: 'number' },
+ { id: 'header-date-month-display-word', labelText: 'As word', value: 'word' }
+ ],
+ groupName: 'header-date-month-display',
+ path: 'header.date.month.display',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.month.length = new Control_radio({
+ object: state.get.current(),
+ label: 'Word length',
+ radioGroup: [
+ { id: 'header-date-month-length-long', labelText: 'Long', value: 'long' },
+ { id: 'header-date-month-length-short', labelText: 'Short', value: 'short' }
+ ],
+ groupName: 'header-date-month-length',
+ path: 'header.date.month.length',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.month.ordinal = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.date.month.ordinal',
+ id: 'header-date-month-ordinal',
+ labelText: 'Ordinal numbers',
+ action: () => {
+ header.element.date.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.month.area = node('div', [
+ headerSetting.control.date.month.display.radioSet[0].wrap(),
+ form.wrap({ children: [form.indent({ children: [headerSetting.control.date.month.ordinal.wrap()] })] }),
+ headerSetting.control.date.month.display.radioSet[1].wrap(),
+ form.wrap({ children: [form.indent({ children: [headerSetting.control.date.month.length.wrap()] })] })
+ ]);
+
+ headerSetting.control.date.month.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.date.month.show,
+ target: [{
+ content: headerSetting.control.date.month.area
+ }]
+ });
+
+ headerSetting.control.date.year = {};
+
+ headerSetting.control.date.year.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.date.year.show',
+ id: 'header-date-year-show',
+ labelText: 'Show Year',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ headerSetting.control.date.year.collapse.update();
+ headerSetting.control.date.collapse.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.year.display = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'header-date-year-display-number', labelText: 'As number', value: 'number' },
+ { id: 'header-date-year-display-word', labelText: 'As word', value: 'word' }
+ ],
+ groupName: 'header-date-year-display',
+ path: 'header.date.year.display',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.year.area = node('div', [
+ headerSetting.control.date.year.display.wrap()
+ ]);
+
+ headerSetting.control.date.year.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.date.year.show,
+ target: [{
+ content: headerSetting.control.date.year.area
+ }]
+ });
+
+ headerSetting.control.date.separator = {};
+
+ headerSetting.control.date.separator.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.date.separator.show',
+ id: 'header-date-separator-show',
+ labelText: 'Show separator',
+ action: () => {
+ header.element.date.update();
+ headerSetting.control.date.separator.collapse.update();
+ headerSetting.disable();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.separator.text = new Control_textReset({
+ object: state.get.current(),
+ path: 'header.date.separator.text',
+ id: 'header-date-separator-text',
+ value: state.get.current().header.date.separator.text,
+ defaultValue: state.get.default().header.date.separator.text,
+ placeholder: ':',
+ labelText: 'Separator character',
+ srOnly: true,
+ action: () => {
+ header.element.date.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.separator.area = node('div', [
+ headerSetting.control.date.separator.text.wrap()
+ ]);
+
+ headerSetting.control.date.separator.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.date.separator.show,
+ target: [{
+ content: headerSetting.control.date.separator.area
+ }]
+ });
+
+ headerSetting.control.date.format = new Control_radio({
+ object: state.get.current(),
+ label: 'Format',
+ radioGroup: [
+ { id: 'header-date-format-date-month', labelText: 'Date / Month', value: 'date-month' },
+ { id: 'header-date-format-month-date', labelText: 'Month / Date', value: 'month-date' }
+ ],
+ groupName: 'header-date-format',
+ path: 'header.date.format',
+ action: () => {
+ header.element.date.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.size = new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'header.date.size',
+ id: 'header-date-size',
+ labelText: 'Size',
+ value: state.get.current().header.date.size,
+ defaultValue: state.get.default().header.date.size,
+ min: state.get.minMax().header.date.size.min,
+ max: state.get.minMax().header.date.size.max,
+ action: () => {
+ applyCSSVar('header.date.size');
+ data.save();
+ },
+ sliderAction: () => {
+ headerSetting.edge.date.size.track();
+ },
+ mouseDownAction: () => {
+ headerSetting.edge.date.size.show();
+ },
+ mouseUpAction: () => {
+ headerSetting.edge.date.size.hide();
+ }
+ });
+
+ headerSetting.control.date.newLine = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.date.newLine',
+ id: 'header-date-newLine',
+ labelText: 'New line',
+ description: 'Force on to a new line and seperate from other Header items.',
+ action: function() {
+ applyCSSState('header.date.newLine');
+ data.save();
+ }
+ });
+
+ headerSetting.control.date.area = node('div', [
+ node('hr'),
+ headerSetting.control.date.separator.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.date.separator.collapse.collapse()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ headerSetting.control.date.format.wrap(),
+ node('hr'),
+ headerSetting.control.date.size.wrap(),
+ headerSetting.control.date.newLine.wrap()
+ ]);
+
+ headerSetting.control.date.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: [headerSetting.control.date.day.show, headerSetting.control.date.date.show, headerSetting.control.date.month.show, headerSetting.control.date.year.show],
+ target: [{
+ content: headerSetting.control.date.area
+ }]
+ });
+
+ parent.appendChild(
+ node('div', [
+ headerSetting.control.date.day.show.wrap(),
+ form.wrap({ children: [form.indent({ children: [headerSetting.control.date.day.collapse.collapse()] })] }),
+ headerSetting.control.date.date.show.wrap(),
+ form.wrap({ children: [form.indent({ children: [headerSetting.control.date.date.collapse.collapse()] })] }),
+ headerSetting.control.date.month.show.wrap(),
+ form.wrap({ children: [form.indent({ children: [headerSetting.control.date.month.collapse.collapse()] })] }),
+ headerSetting.control.date.year.show.wrap(),
+ form.wrap({ children: [form.indent({ children: [headerSetting.control.date.year.collapse.collapse()] })] }),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.date.collapse.collapse()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+headerSetting.search = (parent) => {
+
+ headerSetting.edge.search.size = new Edge({ primary: header.element.search.search(), secondary: [header.element.area] });
+
+ headerSetting.control.search.show = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.search.show',
+ id: 'header-search-show',
+ labelText: 'Show Search',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ headerSetting.control.search.collapse.update();
+ data.save();
+ }
+ });
+
+ headerSetting.control.search.size = new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'header.search.size',
+ id: 'header-search-size',
+ labelText: 'Size',
+ value: state.get.current().header.search.size,
+ defaultValue: state.get.default().header.search.size,
+ min: state.get.minMax().header.search.size.min,
+ max: state.get.minMax().header.search.size.max,
+ action: () => {
+ applyCSSVar('header.search.size');
+ data.save();
+ },
+ sliderAction: () => {
+ headerSetting.edge.search.size.track();
+ },
+ mouseDownAction: () => {
+ headerSetting.edge.search.size.show();
+ },
+ mouseUpAction: () => {
+ headerSetting.edge.search.size.hide();
+ }
+ });
+
+ headerSetting.control.search.newTab = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.search.newTab',
+ id: 'header-search-newTab',
+ labelText: 'Open Search results in a new tab',
+ action: function() {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ data.save();
+ }
+ });
+
+ headerSetting.control.search.newLine = new Control_checkbox({
+ object: state.get.current(),
+ path: 'header.search.newLine',
+ id: 'header-search-newLine',
+ labelText: 'New line',
+ description: 'Force on to a new line and seperate from other Header items.',
+ action: function() {
+ applyCSSState('header.search.newLine');
+ data.save();
+ }
+ });
+
+ const searchEngineList = [];
+
+ for (let key in searchEnginePreset) {
+
+ searchEngineList.push({ id: `header-search-engine-selected-${key}`, labelText: searchEnginePreset[key].name, value: key });
+
+ };
+
+ searchEngineList.push({ id: 'header-search-engine-selected-custom', labelText: 'Custom', value: 'custom' })
+
+ headerSetting.control.search.engine = {
+ selected: new Control_radio({
+ object: state.get.current(),
+ label: 'Search engine',
+ radioGroup: searchEngineList,
+ groupName: 'header-search-engine-selected',
+ path: 'header.search.engine.selected',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.disable();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ headerSetting.control.search.engine.custom.collapse.update();
+ data.save();
+ }
+ }),
+ custom: {
+ name: new Control_text({
+ object: state.get.current(),
+ path: 'header.search.engine.custom.name',
+ id: 'header-search-engine-custom-name',
+ value: state.get.current().header.search.engine.custom.name,
+ placeholder: 'Search engine name',
+ labelText: 'Name',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ data.save();
+ }
+ }),
+ url: new Control_text({
+ object: state.get.current(),
+ path: 'header.search.engine.custom.url',
+ id: 'header-search-engine-custom-url',
+ value: state.get.current().header.search.engine.custom.url,
+ placeholder: 'HTTPS://',
+ labelText: 'URL',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ data.save();
+ }
+ }),
+ urlHelper: new Control_helperText({
+ text: ['Enter a web address with the search parameters, eg: "https://vimeo.com/search?q="', 'nightTab will add the search term entered into the Search box at the end of the above URL.']
+ }),
+ queryName: new Control_text({
+ object: state.get.current(),
+ path: 'header.search.engine.custom.queryName',
+ id: 'header-search-engine-custom-queryName',
+ value: state.get.current().header.search.engine.custom.queryName,
+ placeholder: 'q',
+ labelText: 'Name attribute',
+ action: () => {
+ header.item.mod.order();
+ header.item.clear();
+ header.item.render();
+ layout.area.assemble();
+ headerSetting.edge.greeting.size.update.primary(header.element.greeting.greeting());
+ headerSetting.edge.transitional.size.update.primary(header.element.transitional.transitional());
+ headerSetting.edge.clock.size.update.primary(header.element.clock.clock());
+ headerSetting.edge.date.size.update.primary(header.element.date.date());
+ headerSetting.edge.search.size.update.primary(header.element.search.search());
+ data.save();
+ }
+ }),
+ queryNameHelper: new Control_helperText({
+ text: ['Sets the name attribute on the Search input field.', 'This defines the name passed to the search engine when submitting. If not sure leave blank.']
+ })
+ }
+ };
+
+ headerSetting.control.search.engine.custom.area = node('div', [
+ headerSetting.control.search.engine.custom.name.wrap(),
+ headerSetting.control.search.engine.custom.url.wrap(),
+ headerSetting.control.search.engine.custom.urlHelper.wrap(),
+ headerSetting.control.search.engine.custom.queryName.wrap(),
+ headerSetting.control.search.engine.custom.queryNameHelper.wrap()
+ ]);
+
+ headerSetting.control.search.engine.custom.collapse = new Collapse({
+ type: 'radio',
+ radioGroup: headerSetting.control.search.engine.selected,
+ target: [{
+ id: headerSetting.control.search.engine.selected.radioSet[headerSetting.control.search.engine.selected.radioSet.length - 1].radio.value,
+ content: headerSetting.control.search.engine.custom.area
+ }]
+ });
+
+ headerSetting.control.search.text = {
+ justify: new Control_radioGrid({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'header-search-text-justify-left', labelText: 'Left', value: 'left', position: 1 },
+ { id: 'header-search-text-justify-center', labelText: 'Center', value: 'center', position: 2 },
+ { id: 'header-search-text-justify-right', labelText: 'Right', value: 'right', position: 3 }
+ ],
+ label: 'Search text alignment',
+ groupName: 'header-search-text-justify',
+ path: 'header.search.text.justify',
+ gridSize: '3x1',
+ action: () => {
+ applyCSSClass('header.search.text.justify');
+ data.save();
+ }
+ })
+ };
+
+ headerSetting.control.search.width = {
+ by: new Control_radio({
+ object: state.get.current(),
+ label: 'Search box width',
+ radioGroup: [
+ { id: 'header-search-width-by-auto', labelText: 'Auto width', description: 'Search box will grow to best fit available space.', value: 'auto' },
+ { id: 'header-search-width-by-custom', labelText: 'Custom width', description: 'Define how wide the Search box should be inside the Header Area.', value: 'custom' }
+ ],
+ groupName: 'header-search-width-by',
+ path: 'header.search.width.by',
+ action: () => {
+ applyCSSClass('header.search.width.by');
+ headerSetting.disable();
+ data.save();
+ }
+ }),
+ size: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'header.search.width.size',
+ id: 'header-search-size',
+ labelText: 'Size',
+ value: state.get.current().header.search.width.size,
+ defaultValue: state.get.default().header.search.width.size,
+ min: state.get.minMax().header.search.width.size.min,
+ max: state.get.minMax().header.search.width.size.max,
+ action: () => {
+ applyCSSVar('header.search.width.size');
+ data.save();
+ },
+ sliderAction: () => {
+ headerSetting.edge.search.size.track();
+ },
+ mouseDownAction: () => {
+ headerSetting.edge.search.size.show();
+ },
+ mouseUpAction: () => {
+ headerSetting.edge.search.size.hide();
+ }
+ })
+ };
+
+ headerSetting.control.search.area = node('div', [
+ headerSetting.control.search.width.by.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.search.width.size.wrap()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ headerSetting.control.search.engine.selected.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.search.engine.custom.collapse.collapse()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ headerSetting.control.search.text.justify.wrap(),
+ node('hr'),
+ headerSetting.control.search.newTab.wrap(),
+ node('hr'),
+ headerSetting.control.search.size.wrap(),
+ headerSetting.control.search.newLine.wrap()
+ ]);
+
+ headerSetting.control.search.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: headerSetting.control.search.show,
+ target: [{
+ content: headerSetting.control.search.area
+ }]
+ });
+
+ parent.appendChild(
+ node('div', [
+ headerSetting.control.search.show.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ headerSetting.control.search.collapse.collapse()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+export { headerSetting }
diff --git a/src/component/menuContent/index.css b/src/component/menuContent/index.css
new file mode 100644
index 00000000..34162da9
--- /dev/null
+++ b/src/component/menuContent/index.css
@@ -0,0 +1,66 @@
+:root {
+ --menu-content-space: 12;
+}
+
+.menu-content {
+ grid-column-start: 1;
+ grid-column-end: 4;
+}
+
+@media (min-width: 700px) {
+ .menu-content {
+ grid-column-start: 2;
+ grid-column-end: 4;
+ grid-row-start: 1;
+ grid-row-end: 1;
+ overflow-y: auto;
+ }
+}
+
+@media (min-width: 900px) {
+ :root {
+ --menu-content-space: 20;
+ }
+
+ .menu-content {
+ grid-column-start: 2;
+ grid-column-end: 4;
+ grid-row-start: 1;
+ grid-row-end: 2;
+ scroll-behavior: smooth;
+ overflow-y: auto;
+ z-index: 2;
+ }
+}
+
+.menu-content-item {
+ padding-top: calc((var(--menu-content-space) / 4) * 1em);
+ padding-right: calc((var(--menu-content-space) / 4) * 1em);
+ padding-left: calc((var(--menu-content-space) / 4) * 1em);
+ position: relative;
+ z-index: 1;
+}
+
+.menu-content-item:last-child {
+ padding-bottom: calc((var(--menu-content-space) / 4) * 1em);
+}
+
+.menu-content-overscroll .menu-content-item:last-child {
+ padding-bottom: calc((var(--menu-content-space) * 2) * 1em);
+}
+
+.menu-item-header {
+ padding-bottom: calc((var(--menu-content-space) / 8) * 1em);
+}
+
+.menu-item-header-text {
+ margin-bottom: 0;
+}
+
+.menu-item-form {
+ z-index: 1;
+}
+
+.menu-item-form-indent {
+ margin-left: calc((var(--menu-content-space) / 8) * 1em);
+}
diff --git a/src/component/menuContent/index.js b/src/component/menuContent/index.js
new file mode 100644
index 00000000..78941d3f
--- /dev/null
+++ b/src/component/menuContent/index.js
@@ -0,0 +1,183 @@
+import { data } from '../data';
+import { formSetting } from './formSetting';
+import { debugSetting } from './debugSetting';
+import { appName } from '../appName';
+import { layoutSetting } from './layoutSetting';
+import { groupSetting } from './groupSetting';
+import { bookmarkSetting } from './bookmarkSetting';
+import { headerSetting } from './headerSetting';
+import { toolbarSetting } from './toolbarSetting';
+import { themeSetting } from './themeSetting';
+import { dataSetting } from './dataSetting';
+import { firefoxSetting } from './firefoxSetting';
+import { coffeeSetting } from './coffeeSetting';
+import { appSetting } from './appSetting';
+
+import { node } from '../../utility/node';
+import { clearChildNode } from '../../utility/clearChildNode';
+
+import './index.css';
+
+export const MenuContent = function({
+ activeNavData = {},
+ container = false
+} = {}) {
+
+ this.element = {
+ content: (name) => {
+ return node('div|id:menu-content-item-' + this.makeId(name) + ',class:menu-content-item');
+ },
+ header: (name) => {
+ return node('div|class:menu-item-header', [
+ node('h1:' + name + '|class:menu-item-header-text')
+ ]);
+ },
+ form: ({ indent = false } = {}) => {
+
+ const formElement = node('div|class:menu-item-form');
+
+ if (indent) {
+ formElement.classList.add('menu-item-form-indent');
+ };
+
+ return formElement;
+ }
+ };
+
+ this.content = () => {
+
+ if (activeNavData.sub && activeNavData.sub.length > 0) {
+
+ activeNavData.sub.forEach((item, i) => {
+
+ const menuContentItem = this.element.content(item);
+
+ menuContentItem.appendChild(this.element.header(item));
+
+ const formElement = this.element.form({ indent: true });
+
+ switch (this.makeId(activeNavData.name)) {
+
+ case 'form':
+ formSetting[this.makeId(item)](formElement);
+ break;
+
+ case 'debug':
+ debugSetting[this.makeId(item)](formElement);
+ break;
+
+ case 'layout':
+ layoutSetting[this.makeId(item)](formElement);
+ break;
+
+ case 'group':
+ groupSetting[this.makeId(item)](formElement);
+ break;
+
+ case 'bookmark':
+ bookmarkSetting[this.makeId(item)](formElement);
+ break;
+
+ case 'header':
+ headerSetting[this.makeId(item)](formElement);
+ break;
+
+ case 'toolbar':
+ toolbarSetting[this.makeId(item)](formElement);
+ break;
+
+ case 'theme':
+ themeSetting[this.makeId(item)](formElement);
+ break;
+
+ case 'data':
+ dataSetting[this.makeId(item)](formElement);
+ break;
+
+ };
+
+ menuContentItem.appendChild(formElement);
+
+ container.appendChild(menuContentItem);
+
+ });
+
+ switch (this.makeId(activeNavData.name)) {
+
+ case 'layout':
+ layoutSetting.disable();
+ break;
+
+ case 'group':
+ groupSetting.disable();
+ break;
+
+ case 'bookmark':
+ bookmarkSetting.disable();
+ break;
+
+ case 'header':
+ headerSetting.disable();
+ break;
+
+ case 'toolbar':
+ toolbarSetting.disable();
+ break;
+
+ case 'theme':
+ themeSetting.disable();
+ break;
+
+ };
+
+ } else {
+
+ const menuContentItem = this.element.content(activeNavData.name);
+
+ let formElement;
+
+ switch (this.makeId(activeNavData.name)) {
+
+ case 'firefox':
+
+ menuContentItem.appendChild(this.element.header(activeNavData.name));
+
+ formElement = this.element.form({ indent: true });
+
+ firefoxSetting[this.makeId(activeNavData.name)](formElement);
+
+ break;
+
+ case 'coffee':
+
+ menuContentItem.appendChild(this.element.header(activeNavData.name));
+
+ formElement = this.element.form({ indent: true });
+
+ coffeeSetting[this.makeId(activeNavData.name)](formElement);
+
+ break;
+
+ case this.makeId(appName):
+
+ formElement = this.element.form();
+
+ appSetting[this.makeId(activeNavData.name)](formElement);
+
+ break;
+
+ };
+
+ menuContentItem.appendChild(formElement);
+
+ container.appendChild(menuContentItem);
+
+ };
+
+ };
+
+ this.makeId = (name) => {
+ return name.split(' ')[0].toLowerCase();
+ };
+
+};
diff --git a/src/component/menuContent/layoutSetting/index.js b/src/component/menuContent/layoutSetting/index.js
new file mode 100644
index 00000000..d66cbc0d
--- /dev/null
+++ b/src/component/menuContent/layoutSetting/index.js
@@ -0,0 +1,503 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+
+const layoutSetting = {};
+
+layoutSetting.control = {
+ scaling: {},
+ area: {},
+ padding: {},
+ gutter: {},
+ alignment: {},
+ page: {}
+};
+
+layoutSetting.disable = () => {
+
+ if (state.get.current().bookmark.show) {
+
+ layoutSetting.control.area.bookmark.width.enable();
+ layoutSetting.control.area.bookmark.justify.enable();
+ layoutSetting.control.area.bookmark.justifyHelper1.enable();
+
+ } else {
+
+ layoutSetting.control.area.bookmark.width.disable();
+ layoutSetting.control.area.bookmark.justify.disable();
+ layoutSetting.control.area.bookmark.justifyHelper1.disable();
+
+ };
+
+ if (state.get.current().bookmark.show) {
+
+ switch (state.get.current().layout.direction) {
+
+ case 'vertical':
+ layoutSetting.control.area.header.justify.enable();
+ layoutSetting.control.area.header.justifyHelper1.enable();
+ layoutSetting.control.area.bookmark.justify.enable();
+ layoutSetting.control.area.bookmark.justifyHelper1.enable();
+ break;
+
+ case 'horizontal':
+ layoutSetting.control.area.header.justify.disable();
+ layoutSetting.control.area.header.justifyHelper1.disable();
+ layoutSetting.control.area.bookmark.justify.disable();
+ layoutSetting.control.area.bookmark.justifyHelper1.disable();
+ break;
+
+ };
+
+ };
+
+
+ if (state.get.current().header.order.length > 0) {
+
+ layoutSetting.control.area.header.width.enable();
+ layoutSetting.control.area.header.justify.enable();
+ layoutSetting.control.area.header.justifyHelper1.enable();
+
+ } else {
+
+ layoutSetting.control.area.header.width.disable();
+ layoutSetting.control.area.header.justify.disable();
+ layoutSetting.control.area.header.justifyHelper1.disable();
+
+ };
+
+};
+
+layoutSetting.edge = {
+ scaling: {},
+ area: {},
+ padding: {},
+ gutter: {},
+ alignment: {}
+};
+
+layoutSetting.scaling = (parent) => {
+
+ layoutSetting.edge.scaling.size = new Edge({ primary: layout.element.layout });
+
+ layoutSetting.control.scaling.size = new Control_slider({
+ object: state.get.current(),
+ path: 'layout.size',
+ id: 'layout-size',
+ labelText: 'Global size',
+ value: state.get.current().layout.size,
+ defaultValue: state.get.default().layout.size,
+ min: state.get.minMax().layout.size.min,
+ max: state.get.minMax().layout.size.max,
+ action: () => {
+ applyCSSVar('layout.size');
+ data.save();
+ },
+ sliderAction: () => {
+ layoutSetting.edge.scaling.size.track();
+ },
+ mouseDownAction: () => {
+ layoutSetting.edge.scaling.size.show();
+ },
+ mouseUpAction: () => {
+ layoutSetting.edge.scaling.size.hide();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ layoutSetting.control.scaling.size.wrap()
+ ])
+ );
+
+};
+
+layoutSetting.area = (parent) => {
+
+ layoutSetting.edge.area.width = new Edge({ primary: layout.element.layout });
+
+ layoutSetting.edge.area.header = new Edge({ primary: header.element.area, secondary: [layout.element.layout] });
+
+ layoutSetting.edge.area.bookmark = new Edge({ primary: bookmark.element.area, secondary: [layout.element.layout] });
+
+ layoutSetting.control.area.width = new Control_slider({
+ object: state.get.current(),
+ path: 'layout.width',
+ id: 'layout-width',
+ labelText: 'Layout area width',
+ value: state.get.current().layout.width,
+ defaultValue: state.get.default().layout.width,
+ min: state.get.minMax().layout.width.min,
+ max: state.get.minMax().layout.width.max,
+ action: () => {
+ applyCSSVar('layout.width');
+ data.save();
+ },
+ sliderAction: () => {
+ layoutSetting.edge.area.width.track();
+ },
+ mouseDownAction: () => {
+ layoutSetting.edge.area.width.show();
+ },
+ mouseUpAction: () => {
+ layoutSetting.edge.area.width.hide();
+ }
+ });
+
+ layoutSetting.control.area.header = {
+ width: new Control_slider({
+ object: state.get.current(),
+ path: 'layout.area.header.width',
+ id: 'layout-area-header-width',
+ labelText: 'Header area width',
+ value: state.get.current().layout.area.header.width,
+ defaultValue: state.get.default().layout.area.header.width,
+ min: state.get.minMax().layout.area.header.width.min,
+ max: state.get.minMax().layout.area.header.width.max,
+ action: () => {
+ applyCSSVar('layout.area.header.width');
+ data.save();
+ },
+ sliderAction: () => {
+ layoutSetting.edge.area.header.track();
+ },
+ mouseDownAction: () => {
+ layoutSetting.edge.area.header.show();
+ },
+ mouseUpAction: () => {
+ layoutSetting.edge.area.header.hide();
+ }
+ }),
+ justify: new Control_radioGrid({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'layout-area-header-justify-left', labelText: 'Left', value: 'left', position: 1 },
+ { id: 'layout-area-header-justify-center', labelText: 'Center', value: 'center', position: 2 },
+ { id: 'layout-area-header-justify-right', labelText: 'Right', value: 'right', position: 3 }
+ ],
+ label: 'Header area alignment',
+ groupName: 'layout-area-header-justify',
+ path: 'layout.area.header.justify',
+ gridSize: '3x1',
+ action: () => {
+ applyCSSClass('layout.area.header.justify');
+ data.save();
+ }
+ }),
+ justifyHelper1: new Control_helperText({
+ text: ['Effects may not be visible if the Header Area is full width.']
+ }),
+ justifyHelper2: new Control_helperText({
+ text: ['Only available when Layout Direction is Vertical and Header items are shown.']
+ })
+ };
+
+ layoutSetting.control.area.bookmark = {
+ width: new Control_slider({
+ object: state.get.current(),
+ path: 'layout.area.bookmark.width',
+ id: 'layout-area-bookmark-width',
+ labelText: 'Bookmark area width',
+ value: state.get.current().layout.area.bookmark.width,
+ defaultValue: state.get.default().layout.area.bookmark.width,
+ min: state.get.minMax().layout.area.bookmark.width.min,
+ max: state.get.minMax().layout.area.bookmark.width.max,
+ action: () => {
+ applyCSSVar('layout.area.bookmark.width');
+ data.save();
+ },
+ sliderAction: () => {
+ layoutSetting.edge.area.bookmark.track();
+ },
+ mouseDownAction: () => {
+ layoutSetting.edge.area.bookmark.show();
+ },
+ mouseUpAction: () => {
+ layoutSetting.edge.area.bookmark.hide();
+ }
+ }),
+ justify: new Control_radioGrid({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'layout-area-bookmark-justify-left', labelText: 'Left', value: 'left', position: 1 },
+ { id: 'layout-area-bookmark-justify-center', labelText: 'Center', value: 'center', position: 2 },
+ { id: 'layout-area-bookmark-justify-right', labelText: 'Right', value: 'right', position: 3 }
+ ],
+ label: 'Bookmark area alignment',
+ groupName: 'layout-area-bookmark-justify',
+ path: 'layout.area.bookmark.justify',
+ gridSize: '3x1',
+ action: () => {
+ applyCSSClass('layout.area.bookmark.justify');
+ data.save();
+ }
+ }),
+ justifyHelper1: new Control_helperText({
+ text: ['Effects may not be visible if the Bookmark Area is full width.']
+ }),
+ justifyHelper2: new Control_helperText({
+ text: ['Only available when Layout Direction is Vertical and Bookmarks are shown.']
+ })
+ };
+
+ parent.appendChild(
+ node('div', [
+ layoutSetting.control.area.width.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ node('hr'),
+ layoutSetting.control.area.header.width.wrap(),
+ layoutSetting.control.area.header.justify.wrap(),
+ layoutSetting.control.area.header.justifyHelper1.wrap(),
+ layoutSetting.control.area.header.justifyHelper2.wrap(),
+ node('hr'),
+ layoutSetting.control.area.bookmark.width.wrap(),
+ layoutSetting.control.area.bookmark.justify.wrap(),
+ layoutSetting.control.area.bookmark.justifyHelper1.wrap(),
+ layoutSetting.control.area.bookmark.justifyHelper2.wrap()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+layoutSetting.padding = (parent) => {
+
+ layoutSetting.edge.padding = new Edge({ primary: layout.element.layout, secondary: [header.element.header, bookmark.element.group] });
+
+ layoutSetting.control.padding = new Control_slider({
+ object: state.get.current(),
+ path: 'layout.padding',
+ id: 'layout-padding',
+ labelText: 'Space around Header and Bookmark Area',
+ value: state.get.current().layout.padding,
+ defaultValue: state.get.default().layout.padding,
+ min: state.get.minMax().layout.padding.min,
+ max: state.get.minMax().layout.padding.max,
+ action: () => {
+ applyCSSVar('layout.padding');
+ data.save();
+ },
+ sliderAction: () => {
+ layoutSetting.edge.padding.track();
+ },
+ mouseDownAction: () => {
+ layoutSetting.edge.padding.show();
+ },
+ mouseUpAction: () => {
+ layoutSetting.edge.padding.hide();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ layoutSetting.control.padding.wrap()
+ ])
+ );
+
+};
+
+layoutSetting.gutter = (parent) => {
+
+ layoutSetting.edge.gutter = new Edge({ primary: layout.element.layout, secondary: [header.element.header, bookmark.element.group] });
+
+ layoutSetting.control.gutter = new Control_slider({
+ object: state.get.current(),
+ path: 'layout.gutter',
+ id: 'layout-gutter',
+ labelText: 'Space between Header and Bookmark items',
+ value: state.get.current().layout.gutter,
+ defaultValue: state.get.default().layout.gutter,
+ min: state.get.minMax().layout.gutter.min,
+ max: state.get.minMax().layout.gutter.max,
+ action: () => {
+ applyCSSVar('layout.gutter');
+ data.save();
+ },
+ sliderAction: () => {
+ layoutSetting.edge.gutter.track();
+ },
+ mouseDownAction: () => {
+ layoutSetting.edge.gutter.show();
+ },
+ mouseUpAction: () => {
+ layoutSetting.edge.gutter.hide();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ layoutSetting.control.gutter.wrap()
+ ])
+ );
+
+};
+
+layoutSetting.alignment = (parent) => {
+
+ layoutSetting.control.alignment.alignment = new Control_radioGrid({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'layout-alignment-top-left', labelText: 'Top Left', value: 'top-left', position: 1 },
+ { id: 'layout-alignment-top-center', labelText: 'Top Center', value: 'top-center', position: 2 },
+ { id: 'layout-alignment-top-right', labelText: 'Top Right', value: 'top-right', position: 3 },
+ { id: 'layout-alignment-center-left', labelText: 'Center Left', value: 'center-left', position: 4 },
+ { id: 'layout-alignment-center-center', labelText: 'Center Center', value: 'center-center', position: 5 },
+ { id: 'layout-alignment-center-right', labelText: 'Center Right', value: 'center-right', position: 6 },
+ { id: 'layout-alignment-bottom-left', labelText: 'Bottom Left', value: 'bottom-left', position: 7 },
+ { id: 'layout-alignment-bottom-center', labelText: 'Bottom Center', value: 'bottom-center', position: 8 },
+ { id: 'layout-alignment-bottom-right', labelText: 'Bottom Right', value: 'bottom-right', position: 9 }
+ ],
+ label: 'Area alignment',
+ groupName: 'layout-alignment',
+ path: 'layout.alignment',
+ gridSize: '3x3',
+ action: () => {
+ applyCSSClass('layout.alignment');
+ data.save();
+ }
+ });
+
+ layoutSetting.control.alignment.direction = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'layout-direction-horizontal', labelText: 'Align horizontal', description: 'Stack the Header and Bookmarks in a row side by side.', value: 'horizontal' },
+ { id: 'layout-direction-vertical', labelText: 'Align vertical', description: 'Stack the Header and Bookmarks in a column one above the other.', value: 'vertical' }
+ ],
+ groupName: 'layout-direction',
+ path: 'layout.direction',
+ action: () => {
+ applyCSSClass('layout.direction');
+ layoutSetting.disable();
+ data.save();
+ }
+ });
+
+ layoutSetting.control.alignment.order = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'layout-order-header-bookmark', labelText: 'Header then Bookmarks', description: 'Order the Header area to appear before the Bookmarks area.', value: 'header-bookmark' },
+ { id: 'layout-order-bookmark-header', labelText: 'Bookmarks then Header', description: 'Order the Bookmarks area to appear before the Header area.', value: 'bookmark-header' }
+ ],
+ groupName: 'layout-order',
+ path: 'layout.order',
+ action: () => {
+ layout.area.assemble();
+ applyCSSClass('layout.order');
+ data.save();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ layoutSetting.control.alignment.alignment.wrap(),
+ node('hr'),
+ layoutSetting.control.alignment.direction.wrap(),
+ node('hr'),
+ layoutSetting.control.alignment.order.wrap()
+ ])
+ );
+
+};
+
+layoutSetting.page = (parent) => {
+
+ layoutSetting.control.page.title = new Control_textReset({
+ object: state.get.current(),
+ path: 'layout.title',
+ id: 'layout-title',
+ value: state.get.current().layout.title,
+ defaultValue: state.get.default().layout.title,
+ placeholder: 'New Tab',
+ labelText: 'Title',
+ action: () => {
+ layout.title.render();
+ data.save();
+ }
+ });
+
+ layoutSetting.control.page.scrollbar = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'layout-scrollbar-auto', labelText: 'Auto', value: 'auto' },
+ { id: 'layout-scrollbar-thin', labelText: 'Thin', value: 'thin' },
+ { id: 'layout-scrollbar-none', labelText: 'Hidden', value: 'none' }
+ ],
+ groupName: 'layout-scrollbar',
+ path: 'layout.scrollbar',
+ action: () => {
+ applyCSSClass('layout.scrollbar');
+ data.save();
+ }
+ });
+
+ layoutSetting.control.page.scrollbarHelper = new Control_helperText({
+ text: ['Not supported by all browsers.']
+ });
+
+ layoutSetting.control.page.overscroll = new Control_checkbox({
+ object: state.get.current(),
+ path: 'layout.overscroll',
+ id: 'layout-overscroll',
+ labelText: 'Scroll past end',
+ action: () => {
+ applyCSSState('layout.overscroll');
+ data.save();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ layoutSetting.control.page.title.wrap(),
+ node('hr'),
+ layoutSetting.control.page.scrollbar.inline(),
+ layoutSetting.control.page.scrollbarHelper.wrap(),
+ node('hr'),
+ layoutSetting.control.page.overscroll.wrap()
+ ])
+ );
+
+};
+
+export { layoutSetting }
diff --git a/src/component/menuContent/themeSetting/index.js b/src/component/menuContent/themeSetting/index.js
new file mode 100644
index 00000000..31528349
--- /dev/null
+++ b/src/component/menuContent/themeSetting/index.js
@@ -0,0 +1,1970 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { group } from '../../group';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+import { themePreset } from '../../themePreset';
+import { accentPreset } from '../../accentPreset';
+import { customTheme } from '../../customTheme';
+import { groupAndBookmark } from '../../groupAndBookmark';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+import { PresetThemeTile } from '../../presetThemeTile';
+import { AccentPresetButton } from '../../accentPresetButton';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+import { convertColor } from '../../../utility/convertColor';
+
+const themeSetting = {};
+
+themeSetting.control = {
+ preset: {},
+ saved: {},
+ style: {},
+ colour: {},
+ accent: {},
+ font: {},
+ radius: {},
+ shadow: {},
+ shade: {},
+ opacity: {},
+ layout: {},
+ header: {},
+ bookmark: {},
+ background: {}
+};
+
+themeSetting.disable = () => {
+
+ if (state.get.current().theme.accent.random.active) {
+ themeSetting.control.accent.style.enable();
+ themeSetting.control.accent.randomiseNow.enable();
+ } else {
+ themeSetting.control.accent.style.disable();
+ themeSetting.control.accent.randomiseNow.disable();
+ };
+
+ if (state.get.current().theme.accent.cycle.active) {
+ themeSetting.control.accent.cycle.speed.enable();
+ themeSetting.control.accent.cycle.step.enable();
+ themeSetting.control.accent.cycle.stepHelper.enable();
+ } else {
+ themeSetting.control.accent.cycle.speed.disable();
+ themeSetting.control.accent.cycle.step.disable();
+ themeSetting.control.accent.cycle.stepHelper.disable();
+ };
+
+ switch (state.get.current().theme.header.by) {
+
+ case 'theme':
+ themeSetting.control.header.color.color.disable();
+ themeSetting.control.header.color.opacity.disable();
+ break;
+
+ case 'custom':
+ themeSetting.control.header.color.color.enable();
+ themeSetting.control.header.color.opacity.enable();
+ break;
+
+ };
+
+ switch (state.get.current().theme.background.type) {
+
+ case 'theme':
+ case 'accent':
+ themeSetting.control.background.color.disable();
+ themeSetting.control.background.gradient.angle.disable();
+ themeSetting.control.background.gradient.start.disable();
+ themeSetting.control.background.gradient.end.disable();
+ themeSetting.control.background.image.url.disable();
+ themeSetting.control.background.image.urlHelper.disable();
+ themeSetting.control.background.image.blur.disable();
+ themeSetting.control.background.image.grayscale.disable();
+ themeSetting.control.background.image.scale.disable();
+ themeSetting.control.background.image.accent.disable();
+ themeSetting.control.background.image.opacity.disable();
+ themeSetting.control.background.image.vignette.opacity.disable();
+ themeSetting.control.background.image.vignette.start.disable();
+ themeSetting.control.background.image.vignette.end.disable();
+ themeSetting.control.background.video.url.disable();
+ themeSetting.control.background.video.urlHelper.disable();
+ themeSetting.control.background.video.blur.disable();
+ themeSetting.control.background.video.grayscale.disable();
+ themeSetting.control.background.video.scale.disable();
+ themeSetting.control.background.video.accent.disable();
+ themeSetting.control.background.video.opacity.disable();
+ themeSetting.control.background.video.vignette.opacity.disable();
+ themeSetting.control.background.video.vignette.start.disable();
+ themeSetting.control.background.video.vignette.end.disable();
+ break;
+
+ case 'color':
+ themeSetting.control.background.color.enable();
+ themeSetting.control.background.gradient.angle.disable();
+ themeSetting.control.background.gradient.start.disable();
+ themeSetting.control.background.gradient.end.disable();
+ themeSetting.control.background.image.url.disable();
+ themeSetting.control.background.image.urlHelper.disable();
+ themeSetting.control.background.image.blur.disable();
+ themeSetting.control.background.image.grayscale.disable();
+ themeSetting.control.background.image.scale.disable();
+ themeSetting.control.background.image.accent.disable();
+ themeSetting.control.background.image.opacity.disable();
+ themeSetting.control.background.image.vignette.opacity.disable();
+ themeSetting.control.background.image.vignette.start.disable();
+ themeSetting.control.background.image.vignette.end.disable();
+ themeSetting.control.background.video.url.disable();
+ themeSetting.control.background.video.urlHelper.disable();
+ themeSetting.control.background.video.blur.disable();
+ themeSetting.control.background.video.grayscale.disable();
+ themeSetting.control.background.video.scale.disable();
+ themeSetting.control.background.video.accent.disable();
+ themeSetting.control.background.video.opacity.disable();
+ themeSetting.control.background.video.vignette.opacity.disable();
+ themeSetting.control.background.video.vignette.start.disable();
+ themeSetting.control.background.video.vignette.end.disable();
+ break;
+
+ case 'gradient':
+ themeSetting.control.background.color.disable();
+ themeSetting.control.background.gradient.angle.enable();
+ themeSetting.control.background.gradient.start.enable();
+ themeSetting.control.background.gradient.end.enable();
+ themeSetting.control.background.image.url.disable();
+ themeSetting.control.background.image.urlHelper.disable();
+ themeSetting.control.background.image.blur.disable();
+ themeSetting.control.background.image.grayscale.disable();
+ themeSetting.control.background.image.scale.disable();
+ themeSetting.control.background.image.accent.disable();
+ themeSetting.control.background.image.opacity.disable();
+ themeSetting.control.background.image.vignette.opacity.disable();
+ themeSetting.control.background.image.vignette.start.disable();
+ themeSetting.control.background.image.vignette.end.disable();
+ themeSetting.control.background.video.url.disable();
+ themeSetting.control.background.video.urlHelper.disable();
+ themeSetting.control.background.video.blur.disable();
+ themeSetting.control.background.video.grayscale.disable();
+ themeSetting.control.background.video.scale.disable();
+ themeSetting.control.background.video.accent.disable();
+ themeSetting.control.background.video.opacity.disable();
+ themeSetting.control.background.video.vignette.opacity.disable();
+ themeSetting.control.background.video.vignette.start.disable();
+ themeSetting.control.background.video.vignette.end.disable();
+ break;
+
+ case 'image':
+ themeSetting.control.background.color.disable();
+ themeSetting.control.background.gradient.angle.disable();
+ themeSetting.control.background.gradient.start.disable();
+ themeSetting.control.background.gradient.end.disable();
+ themeSetting.control.background.image.url.enable();
+ themeSetting.control.background.image.urlHelper.enable();
+ themeSetting.control.background.image.blur.enable();
+ themeSetting.control.background.image.grayscale.enable();
+ themeSetting.control.background.image.scale.enable();
+ themeSetting.control.background.image.accent.enable();
+ themeSetting.control.background.image.opacity.enable();
+ themeSetting.control.background.image.vignette.opacity.enable();
+ themeSetting.control.background.image.vignette.start.enable();
+ themeSetting.control.background.image.vignette.end.enable();
+ themeSetting.control.background.video.url.disable();
+ themeSetting.control.background.video.urlHelper.disable();
+ themeSetting.control.background.video.blur.disable();
+ themeSetting.control.background.video.grayscale.disable();
+ themeSetting.control.background.video.scale.disable();
+ themeSetting.control.background.video.accent.disable();
+ themeSetting.control.background.video.opacity.disable();
+ themeSetting.control.background.video.vignette.opacity.disable();
+ themeSetting.control.background.video.vignette.start.disable();
+ themeSetting.control.background.video.vignette.end.disable();
+ break;
+
+ case 'video':
+ themeSetting.control.background.color.disable();
+ themeSetting.control.background.gradient.angle.disable();
+ themeSetting.control.background.gradient.start.disable();
+ themeSetting.control.background.gradient.end.disable();
+ themeSetting.control.background.image.url.disable();
+ themeSetting.control.background.image.urlHelper.disable();
+ themeSetting.control.background.image.blur.disable();
+ themeSetting.control.background.image.grayscale.disable();
+ themeSetting.control.background.image.scale.disable();
+ themeSetting.control.background.image.accent.disable();
+ themeSetting.control.background.image.opacity.disable();
+ themeSetting.control.background.image.vignette.opacity.disable();
+ themeSetting.control.background.image.vignette.start.disable();
+ themeSetting.control.background.image.vignette.end.disable();
+ themeSetting.control.background.video.url.enable();
+ themeSetting.control.background.video.urlHelper.enable();
+ themeSetting.control.background.video.blur.enable();
+ themeSetting.control.background.video.grayscale.enable();
+ themeSetting.control.background.video.scale.enable();
+ themeSetting.control.background.video.accent.enable();
+ themeSetting.control.background.video.opacity.enable();
+ themeSetting.control.background.video.vignette.opacity.enable();
+ themeSetting.control.background.video.vignette.start.enable();
+ themeSetting.control.background.video.vignette.end.enable();
+ break;
+
+ };
+
+};
+
+themeSetting.preset = (parent) => {
+
+ themeSetting.control.preset.presetHelper = new Control_helperText({
+ text: ['Applying a Preset will replace the current Colour, Accent, Font, Style, Radius, Shadow, Shade and Background.']
+ });
+
+ const preset = () => {
+
+ const themePresetElement = node('div|class:theme-preset');
+
+ themePreset.get().forEach((item, i) => {
+
+ const presetTheme = new PresetThemeTile({
+ presetThemeData: item
+ });
+
+ themePresetElement.appendChild(presetTheme.tile());
+
+ });
+
+ return themePresetElement;
+
+ };
+
+ parent.appendChild(
+ node('div', [
+ preset(),
+ themeSetting.control.preset.presetHelper.wrap()
+ ])
+ );
+
+};
+
+themeSetting.saved = (parent) => {
+
+ themeSetting.control.saved = {
+ savedElement: node('div|class:theme-custom'),
+ customHelper: new Control_helperText({
+ text: ['Saving a Theme will record the current Colour, Accent, Font, Style, Radius, Shadow, Shade and Background.']
+ }),
+ saveButton: new Button({
+ text: 'Save current theme',
+ style: ['line'],
+ func: () => {
+ menu.close();
+ customTheme.add.render();
+ }
+ }),
+ edit: new Button({
+ text: 'Edit',
+ style: ['line'],
+ func: () => {
+ customTheme.edit.toggle();
+ data.save();
+ }
+ })
+ };
+
+ if (state.get.current().theme.custom.all.length > 0) {
+
+ parent.appendChild(
+ node('div', [
+ customTheme.item.render(themeSetting.control.saved.savedElement),
+ node('hr'),
+ form.wrap({
+ children: [
+ form.inline({
+ gap: 'small',
+ children: [
+ themeSetting.control.saved.saveButton.wrap(),
+ themeSetting.control.saved.edit.wrap()
+ ]
+ })
+ ]
+ }),
+ themeSetting.control.saved.customHelper.wrap()
+ ])
+ );
+
+ } else {
+
+ parent.appendChild(
+ node('div', [
+ form.wrap({
+ children: [
+ form.inline({
+ gap: 'small',
+ children: [
+ themeSetting.control.saved.saveButton.wrap()
+ ]
+ })
+ ]
+ }),
+ themeSetting.control.saved.customHelper.wrap()
+ ])
+ );
+
+ };
+
+};
+
+themeSetting.style = (parent) => {
+
+ themeSetting.control.style = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'theme-style-dark', labelText: 'Dark mode', description: false, value: 'dark' },
+ { id: 'theme-style-light', labelText: 'Light mode', description: false, value: 'light' },
+ { id: 'theme-style-system', labelText: 'Automatic', description: 'Follow the system Light or Dark mode.', value: 'system' }
+ ],
+ groupName: 'theme-style',
+ path: 'theme.style',
+ action: () => {
+ theme.style.initial();
+ applyCSSClass('theme.style');
+ data.save();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ themeSetting.control.style.wrap()
+ ])
+ );
+
+};
+
+themeSetting.colour = (parent) => {
+
+ const shade = () => {
+
+ const formSticky = form.sticky();
+
+ const formGroup = form.group({
+ block: true,
+ border: true
+ });
+
+ const shadeCount = state.get.current().theme.color.shades;
+
+ for (var i = 1; i <= shadeCount; i++) {
+ let count = i;
+
+ if (count < 10) {
+ count = '0' + count;
+ };
+
+ formGroup.appendChild(
+ node('div|class:form-group-text form-group-text-borderless', [
+ node('div|class:theme-color-box theme-color-shade-' + count + '')
+ ])
+ );
+ };
+
+ formSticky.appendChild(formGroup);
+
+ return formSticky;
+ };
+
+ themeSetting.control.color = {
+ range: {
+ primary: {
+ h: new Control_slider({
+ object: state.get.current(),
+ path: 'theme.color.range.primary.h',
+ id: 'theme-color-range-primary-h',
+ labelText: 'Primary colour',
+ hue: true,
+ value: state.get.current().theme.color.range.primary.h,
+ defaultValue: state.get.default().theme.color.range.primary.h,
+ min: state.get.minMax().theme.color.range.primary.h.min,
+ max: state.get.minMax().theme.color.range.primary.h.max,
+ action: () => {
+ theme.color.render();
+ data.save();
+ }
+ }),
+ s: new Control_slider({
+ object: state.get.current(),
+ path: 'theme.color.range.primary.s',
+ id: 'theme-color-range-primary-s',
+ labelText: 'Saturation',
+ value: state.get.current().theme.color.range.primary.s,
+ defaultValue: state.get.default().theme.color.range.primary.s,
+ min: state.get.minMax().theme.color.range.primary.s.min,
+ max: state.get.minMax().theme.color.range.primary.s.max,
+ action: () => {
+ theme.color.render();
+ data.save();
+ }
+ })
+ }
+ },
+ contrast: new Control_sliderDouble({
+ object: state.get.current(),
+ labelText: 'Contrast range',
+ left: {
+ path: 'theme.color.contrast.start',
+ id: 'theme-color-contrast-start',
+ labelText: 'Contrast start',
+ value: state.get.current().theme.color.contrast.start,
+ defaultValue: state.get.default().theme.color.contrast.start,
+ min: state.get.minMax().theme.color.contrast.start.min,
+ max: state.get.minMax().theme.color.contrast.start.max,
+ action: () => {
+ theme.color.render();
+ data.save();
+ }
+ },
+ right: {
+ path: 'theme.color.contrast.end',
+ id: 'theme-color-contrast-end',
+ labelText: 'Contrast end',
+ value: state.get.current().theme.color.contrast.end,
+ defaultValue: state.get.default().theme.color.contrast.end,
+ min: state.get.minMax().theme.color.contrast.end.min,
+ max: state.get.minMax().theme.color.contrast.end.max,
+ action: () => {
+ theme.color.render();
+ data.save();
+ }
+ }
+ }),
+ shade: {
+ helper: new Control_helperText({
+ text: [
+ 'Backgrounds, Bookmarks and Modals use shades from the left.',
+ 'Text and form elements use shades from the right.',
+ 'For a light look switch to the Light Style and then select a Primary colour. And vice versa for a dark look.'
+ ]
+ })
+ }
+ };
+
+ parent.appendChild(
+ node('div', [
+ shade(),
+ themeSetting.control.color.shade.helper.wrap(),
+ node('hr'),
+ themeSetting.control.color.range.primary.h.wrap(),
+ themeSetting.control.color.range.primary.s.wrap(),
+ themeSetting.control.color.contrast.wrap()
+ ])
+ );
+
+};
+
+themeSetting.accent = (parent) => {
+
+ const preset = () => {
+
+ const allPreset = accentPreset.get();
+
+ const formWrap = form.wrap();
+
+ const themeAccentPreset = node('div|class:theme-accent-preset');
+
+ allPreset.forEach((item, i) => {
+
+ const presetButton = new AccentPresetButton({
+ presetData: item
+ });
+
+ themeAccentPreset.appendChild(presetButton.button());
+
+ });
+
+ formWrap.appendChild(themeAccentPreset);
+
+ return formWrap;
+
+ };
+
+ themeSetting.control.accent.color = new Control_colorMixer({
+ object: state.get.current(),
+ path: 'theme.accent',
+ id: 'theme-accent',
+ labelText: 'Accent colour',
+ defaultValue: state.get.default().theme.accent.rgb,
+ minMaxObject: state.get.minMax(),
+ action: () => {
+ applyCSSVar([
+ 'theme.accent.rgb.r',
+ 'theme.accent.rgb.g',
+ 'theme.accent.rgb.b',
+ 'theme.accent.hsl.h',
+ 'theme.accent.hsl.s',
+ 'theme.accent.hsl.l'
+ ]);
+ toolbar.current.update.style();
+ toolbar.current.update.accent();
+ data.save();
+ }
+ });
+
+ themeSetting.control.accent.style = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'theme-accent-random-style-any', labelText: 'Any', value: 'any' },
+ { id: 'theme-accent-random-style-light', labelText: 'Light', value: 'light' },
+ { id: 'theme-accent-random-style-dark', labelText: 'Dark', value: 'dark' },
+ { id: 'theme-accent-random-style-pastel', labelText: 'Pastel', value: 'pastel' },
+ { id: 'theme-accent-random-style-saturated', labelText: 'Saturated', value: 'saturated' },
+ ],
+ groupName: 'theme-accent-random-style',
+ path: 'theme.accent.random.style',
+ action: () => {
+ data.save();
+ }
+ });
+
+ themeSetting.control.accent.random = {};
+
+ themeSetting.control.accent.random.active = new Control_checkbox({
+ object: state.get.current(),
+ path: 'theme.accent.random.active',
+ id: 'theme-accent-random-active',
+ labelText: 'Random Accent colour on load/refresh',
+ action: () => {
+ themeSetting.disable();
+ themeSetting.control.accent.random.collapse.update();
+ data.save();
+ }
+ });
+
+ themeSetting.control.accent.randomiseNow = new Button({
+ text: 'Randomise now',
+ style: ['line'],
+ func: () => {
+ theme.accent.random.render();
+ applyCSSVar([
+ 'theme.accent.rgb.r',
+ 'theme.accent.rgb.g',
+ 'theme.accent.rgb.b',
+ 'theme.accent.hsl.h',
+ 'theme.accent.hsl.s',
+ 'theme.accent.hsl.l'
+ ]);
+ toolbar.current.update.style();
+ toolbar.current.update.accent();
+ themeSetting.control.accent.color.update();
+ data.save();
+ }
+ });
+
+ themeSetting.control.accent.random.area = node('div', [
+ themeSetting.control.accent.style.inline(),
+ themeSetting.control.accent.randomiseNow.wrap()
+ ]);
+
+ themeSetting.control.accent.random.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: themeSetting.control.accent.random.active,
+ target: [{
+ content: themeSetting.control.accent.random.area
+ }]
+ });
+
+ themeSetting.control.accent.cycle = {};
+
+ themeSetting.control.accent.cycle.active = new Control_checkbox({
+ object: state.get.current(),
+ path: 'theme.accent.cycle.active',
+ id: 'theme-accent-random-cycle-active',
+ labelText: 'Auto change Accent hue',
+ action: () => {
+ themeSetting.control.accent.cycle.collapse.update();
+ theme.accent.cycle.bind();
+ themeSetting.disable();
+ data.save();
+ }
+ });
+
+ themeSetting.control.accent.cycle.speed = new Control_slider({
+ object: state.get.current(),
+ path: 'theme.accent.cycle.speed',
+ id: 'theme-accent-random-cycle-speed',
+ labelText: 'Change delay',
+ value: state.get.current().theme.accent.cycle.speed,
+ defaultValue: state.get.default().theme.accent.cycle.speed,
+ min: state.get.minMax().theme.accent.cycle.speed.min,
+ max: state.get.minMax().theme.accent.cycle.speed.max,
+ action: () => {
+ theme.accent.cycle.bind();
+ data.save();
+ }
+ });
+
+ themeSetting.control.accent.cycle.step = new Control_slider({
+ object: state.get.current(),
+ path: 'theme.accent.cycle.step',
+ id: 'theme-accent-random-cycle-step',
+ labelText: 'Change steps',
+ value: state.get.current().theme.accent.cycle.step,
+ defaultValue: state.get.default().theme.accent.cycle.step,
+ min: state.get.minMax().theme.accent.cycle.step.min,
+ max: state.get.minMax().theme.accent.cycle.step.max,
+ action: () => {
+ theme.accent.cycle.bind();
+ data.save();
+ }
+ });
+
+ themeSetting.control.accent.cycle.stepHelper = new Control_helperText({
+ text: [
+ 'Take care as a small delay in Accent hue change may cause performance issues.',
+ 'Auto change Accent hue will not work when the Accent colour is a grey or black.'
+ ]
+ });
+
+ themeSetting.control.accent.cycle.area = node('div', [
+ themeSetting.control.accent.cycle.speed.wrap(),
+ themeSetting.control.accent.cycle.step.wrap(),
+ themeSetting.control.accent.cycle.stepHelper.wrap()
+ ]);
+
+ themeSetting.control.accent.cycle.collapse = new Collapse({
+ type: 'checkbox',
+ checkbox: themeSetting.control.accent.cycle.active,
+ target: [{
+ content: themeSetting.control.accent.cycle.area
+ }]
+ });
+
+ parent.appendChild(
+ node('div', [
+ preset(),
+ node('hr'),
+ themeSetting.control.accent.color.wrap(),
+ node('hr'),
+ themeSetting.control.accent.random.active.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ themeSetting.control.accent.random.collapse.collapse()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ themeSetting.control.accent.cycle.active.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ themeSetting.control.accent.cycle.collapse.collapse()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+themeSetting.font = (parent) => {
+
+ const fontWeight = { light: 300, regular: 400, bold: 700 };
+
+ themeSetting.control.font.display = {
+ name: new Control_textReset({
+ object: state.get.current(),
+ path: 'theme.font.display.name',
+ id: 'theme-font-display-name',
+ value: state.get.current().theme.font.display.name,
+ defaultValue: state.get.default().theme.font.display.name,
+ placeholder: 'Google font name',
+ labelText: 'Display font',
+ action: () => {
+ theme.font.display.delay();
+ data.save();
+ }
+ }),
+ nameHelper: new Control_helperText({
+ text: [
+ 'Use a Google Font to customise the Clock, Date, Group names and Bookmark Letters.',
+ 'Add a font name as it appears on Google Fonts, including capital letters and spaces, eg: enter "Fredoka One" or "Kanit"',
+ 'Clear the field to use the default font "Fjalla One".'
+ ]
+ }),
+ weight: new Control_slider({
+ object: state.get.current(),
+ path: 'theme.font.display.weight',
+ id: 'theme-font-display-weight',
+ labelText: 'Font weight',
+ value: state.get.current().theme.font.display.weight,
+ defaultValue: state.get.default().theme.font.display.weight,
+ step: state.get.step().theme.font.display.weight,
+ min: state.get.minMax().theme.font.display.weight.min,
+ max: state.get.minMax().theme.font.display.weight.max,
+ action: () => {
+ applyCSSVar('theme.font.display.weight');
+ data.save();
+ }
+ }),
+ weightLight: new Button({
+ text: 'Light',
+ style: ['line'],
+ func: () => {
+ state.get.current().theme.font.display.weight = fontWeight.light;
+ applyCSSVar('theme.font.display.weight');
+ themeSetting.control.font.display.weight.update();
+ data.save();
+ }
+ }),
+ weightRegular: new Button({
+ text: 'Regular',
+ style: ['line'],
+ func: () => {
+ state.get.current().theme.font.display.weight = fontWeight.regular;
+ applyCSSVar('theme.font.display.weight');
+ themeSetting.control.font.display.weight.update();
+ data.save();
+ }
+ }),
+ weightBold: new Button({
+ text: 'Bold',
+ style: ['line'],
+ func: () => {
+ state.get.current().theme.font.display.weight = fontWeight.bold;
+ applyCSSVar('theme.font.display.weight');
+ themeSetting.control.font.display.weight.update();
+ data.save();
+ }
+ }),
+ weightHelper: new Control_helperText({
+ text: ['Not all fonts support all weights. Refer to the Google Font page to see which are available.']
+ }),
+ style: new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'theme-font-display-style-normal', labelText: 'Normal', value: 'normal' },
+ { id: 'theme-font-display-style-italic', labelText: 'Italic', value: 'italic' }
+ ],
+ groupName: 'theme-font-display-style',
+ path: 'theme.font.display.style',
+ inputButton: true,
+ inputHide: true,
+ inputButtonStyle: ['line'],
+ action: () => {
+ applyCSSVar('theme.font.display.style');
+ data.save();
+ }
+ })
+ };
+
+ themeSetting.control.font.ui = {
+ name: new Control_textReset({
+ object: state.get.current(),
+ path: 'theme.font.ui.name',
+ id: 'theme-font-ui-name',
+ value: state.get.current().theme.font.ui.name,
+ defaultValue: state.get.default().theme.font.ui.name,
+ placeholder: 'Google font name',
+ labelText: 'User interface font',
+ action: () => {
+ theme.font.ui.delay();
+ data.save();
+ }
+ }),
+ nameHelper: new Control_helperText({
+ text: [
+ 'Use a Google Font to customise the Bookmark name, URL and form elements.',
+ 'Add a font name as it appears on Google Fonts, including capital letters and spaces, eg: enter "Roboto", "Source Sans Pro" or "Noto Sans"',
+ 'Clear the field to use the default font "Open Sans".'
+ ]
+ }),
+ weight: new Control_slider({
+ object: state.get.current(),
+ path: 'theme.font.ui.weight',
+ id: 'theme-font-ui-weight',
+ labelText: 'Font weight',
+ value: state.get.current().theme.font.ui.weight,
+ defaultValue: state.get.default().theme.font.ui.weight,
+ step: state.get.step().theme.font.ui.weight,
+ min: state.get.minMax().theme.font.ui.weight.min,
+ max: state.get.minMax().theme.font.ui.weight.max,
+ action: () => {
+ applyCSSVar('theme.font.ui.weight');
+ data.save();
+ }
+ }),
+ weightLight: new Button({
+ text: 'Light',
+ style: ['line'],
+ func: () => {
+ state.get.current().theme.font.ui.weight = fontWeight.light;
+ applyCSSVar('theme.font.ui.weight');
+ themeSetting.control.font.ui.weight.update();
+ data.save();
+ }
+ }),
+ weightRegular: new Button({
+ text: 'Regular',
+ style: ['line'],
+ func: () => {
+ state.get.current().theme.font.ui.weight = fontWeight.regular;
+ applyCSSVar('theme.font.ui.weight');
+ themeSetting.control.font.ui.weight.update();
+ data.save();
+ }
+ }),
+ weightBold: new Button({
+ text: 'Bold',
+ style: ['line'],
+ func: () => {
+ state.get.current().theme.font.ui.weight = fontWeight.bold;
+ applyCSSVar('theme.font.ui.weight');
+ themeSetting.control.font.ui.weight.update();
+ data.save();
+ }
+ }),
+ weightHelper: new Control_helperText({
+ text: ['Not all fonts support all weights. Refer to the Google Font page to see which are available.']
+ }),
+ style: new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'theme-font-ui-style-normal', labelText: 'Normal', value: 'normal' },
+ { id: 'theme-font-ui-style-italic', labelText: 'Italic', value: 'italic' }
+ ],
+ groupName: 'theme-font-ui-style',
+ path: 'theme.font.ui.style',
+ inputButton: true,
+ inputHide: true,
+ inputButtonStyle: ['line'],
+ action: () => {
+ applyCSSVar('theme.font.ui.style');
+ data.save();
+ }
+ })
+ };
+
+ parent.appendChild(
+ node('div', [
+ themeSetting.control.font.display.name.wrap(),
+ themeSetting.control.font.display.nameHelper.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ themeSetting.control.font.display.weight.wrap(),
+ form.wrap({
+ children: [
+ form.group({
+ children: [
+ themeSetting.control.font.display.weightLight.button,
+ themeSetting.control.font.display.weightRegular.button,
+ themeSetting.control.font.display.weightBold.button
+ ]
+ })
+ ]
+ }),
+ themeSetting.control.font.display.style.inputButton(),
+ themeSetting.control.font.display.weightHelper.wrap()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ themeSetting.control.font.ui.name.wrap(),
+ themeSetting.control.font.ui.nameHelper.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ themeSetting.control.font.ui.weight.wrap(),
+ form.wrap({
+ children: [
+ form.group({
+ children: [
+ themeSetting.control.font.ui.weightLight.button,
+ themeSetting.control.font.ui.weightRegular.button,
+ themeSetting.control.font.ui.weightBold.button
+ ]
+ })
+ ]
+ }),
+ themeSetting.control.font.ui.style.inputButton(),
+ themeSetting.control.font.ui.weightHelper.wrap()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+themeSetting.radius = (parent) => {
+
+ themeSetting.control.radius = new Control_slider({
+ object: state.get.current(),
+ path: 'theme.radius',
+ id: 'theme-radius',
+ labelText: 'Corners radius',
+ value: state.get.current().theme.radius,
+ defaultValue: state.get.default().theme.radius,
+ min: state.get.minMax().theme.radius.min,
+ max: state.get.minMax().theme.radius.max,
+ action: () => {
+ applyCSSVar('theme.radius');
+ data.save();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ themeSetting.control.radius.wrap()
+ ])
+ );
+
+};
+
+themeSetting.shadow = (parent) => {
+
+ themeSetting.control.shadow = new Control_slider({
+ object: state.get.current(),
+ path: 'theme.shadow',
+ id: 'theme-shadow',
+ labelText: 'Shadow size',
+ value: state.get.current().theme.shadow,
+ defaultValue: state.get.default().theme.shadow,
+ min: state.get.minMax().theme.shadow.min,
+ max: state.get.minMax().theme.shadow.max,
+ action: () => {
+ applyCSSVar('theme.shadow');
+ data.save();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ themeSetting.control.shadow.wrap()
+ ])
+ );
+
+};
+
+themeSetting.shade = (parent) => {
+
+ themeSetting.control.shade = {
+ opacity: new Control_slider({
+ object: state.get.current(),
+ path: 'theme.shade.opacity',
+ id: 'theme.shade.opacity',
+ labelText: 'Shade opacity',
+ value: state.get.current().theme.shade.opacity,
+ defaultValue: state.get.default().theme.shade.opacity,
+ min: state.get.minMax().theme.shade.opacity.min,
+ max: state.get.minMax().theme.shade.opacity.max,
+ action: () => {
+ applyCSSVar('theme.shade.opacity');
+ data.save();
+ }
+ }),
+ blur: new Control_slider({
+ object: state.get.current(),
+ path: 'theme.shade.blur',
+ id: 'theme.shade.blur',
+ labelText: 'Shade blur',
+ value: state.get.current().theme.shade.blur,
+ defaultValue: state.get.default().theme.shade.blur,
+ min: state.get.minMax().theme.shade.blur.min,
+ max: state.get.minMax().theme.shade.blur.max,
+ action: () => {
+ applyCSSVar('theme.shade.blur');
+ data.save();
+ }
+ })
+ };
+
+ parent.appendChild(
+ node('div', [
+ themeSetting.control.shade.opacity.wrap(),
+ themeSetting.control.shade.blur.wrap()
+ ])
+ );
+
+};
+
+themeSetting.opacity = (parent) => {
+
+ themeSetting.control.opacity.general = new Control_slider({
+ object: state.get.current(),
+ path: 'theme.opacity.general',
+ id: 'theme-opacity-general',
+ labelText: 'All opacity',
+ value: state.get.current().theme.opacity.general,
+ defaultValue: state.get.default().theme.opacity.general,
+ min: state.get.minMax().theme.opacity.general.min,
+ max: state.get.minMax().theme.opacity.general.max,
+ action: () => {
+
+ state.get.current().theme.bookmark.item.opacity = state.get.current().theme.opacity.general;
+
+ state.get.current().theme.toolbar.opacity = state.get.current().theme.opacity.general;
+
+ state.get.current().theme.header.search.opacity = state.get.current().theme.opacity.general;
+
+ state.get.current().theme.group.openAll.opacity = state.get.current().theme.opacity.general;
+
+ themeSetting.control.opacity.toolbar.update();
+
+ themeSetting.control.opacity.bookmark.update();
+
+ themeSetting.control.opacity.search.update();
+
+ themeSetting.control.opacity.openAll.update();
+
+ applyCSSVar([
+ 'theme.opacity.general',
+ 'theme.toolbar.opacity',
+ 'theme.bookmark.item.opacity',
+ 'theme.header.search.opacity',
+ 'theme.group.openAll.opacity'
+ ]);
+
+ bookmark.item.mod.applyVar('color.opacity', state.get.current().theme.bookmark.item.opacity);
+
+ groupAndBookmark.render();
+
+ toolbar.current.update.style();
+
+ header.element.search.update.style();
+
+ if (group.area.current.length > 0) {
+
+ group.area.current[0].update.style();
+
+ };
+
+ data.save();
+
+ }
+ });
+
+ themeSetting.control.opacity.generalHelper = new Control_helperText({
+ text: ['Change the opacity of Search bar, Bookmarks, Group controls and the Toolbar.', 'Opacity can also be changed when editing individual Bookmarks.']
+ });
+
+ themeSetting.control.opacity.toolbar = new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.toolbar.opacity',
+ id: 'theme-toolbar-opacity',
+ labelText: 'Toolbar',
+ value: state.get.current().theme.toolbar.opacity,
+ defaultValue: state.get.default().theme.toolbar.opacity,
+ min: state.get.minMax().theme.toolbar.opacity.min,
+ max: state.get.minMax().theme.toolbar.opacity.max,
+ action: () => {
+
+ applyCSSVar('theme.toolbar.opacity');
+
+ toolbar.current.update.style();
+
+ data.save();
+
+ }
+ });
+
+ themeSetting.control.opacity.bookmark = new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.bookmark.item.opacity',
+ id: 'theme-bookmark-item-opacity',
+ labelText: 'Bookmark',
+ value: state.get.current().theme.bookmark.item.opacity,
+ defaultValue: state.get.default().theme.bookmark.item.opacity,
+ min: state.get.minMax().theme.bookmark.item.opacity.min,
+ max: state.get.minMax().theme.bookmark.item.opacity.max,
+ action: () => {
+
+ applyCSSVar('theme.bookmark.item.opacity');
+
+ bookmark.item.mod.applyVar('color.opacity', state.get.current().theme.bookmark.item.opacity);
+
+ groupAndBookmark.render();
+
+ data.save();
+
+ }
+ });
+
+ themeSetting.control.opacity.search = new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.header.search.opacity',
+ id: 'theme-header-search-opacity',
+ labelText: 'Search box',
+ value: state.get.current().theme.header.search.opacity,
+ defaultValue: state.get.default().theme.header.search.opacity,
+ min: state.get.minMax().theme.header.search.opacity.min,
+ max: state.get.minMax().theme.header.search.opacity.max,
+ action: () => {
+
+ applyCSSVar('theme.header.search.opacity');
+
+ header.element.search.update.style();
+
+ data.save();
+
+ }
+ });
+
+ themeSetting.control.opacity.openAll = new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.group.openAll.opacity',
+ id: 'theme-group-open-all-opacity',
+ labelText: 'Open all',
+ value: state.get.current().theme.group.openAll.opacity,
+ defaultValue: state.get.default().theme.group.openAll.opacity,
+ min: state.get.minMax().theme.group.openAll.opacity.min,
+ max: state.get.minMax().theme.group.openAll.opacity.max,
+ action: () => {
+
+ applyCSSVar('theme.group.openAll.opacity');
+
+ if (group.area.current.length > 0) {
+
+ group.area.current[0].update.style();
+
+ };
+
+ data.save();
+
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ themeSetting.control.opacity.general.wrap(),
+ themeSetting.control.opacity.generalHelper.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ themeSetting.control.opacity.toolbar.wrap(),
+ themeSetting.control.opacity.bookmark.wrap(),
+ themeSetting.control.opacity.search.wrap(),
+ themeSetting.control.opacity.openAll.wrap()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+themeSetting.background = (parent) => {
+
+ const updateVideoPlayState = () => {
+
+ if (theme.background.element.video) {
+ if (themeSetting.control.background.type.value() === 'video') {
+ theme.background.element.video.play();
+ } else {
+ theme.background.element.video.pause();
+ };
+ };
+
+ };
+
+ themeSetting.control.background = {
+ type: new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'theme-background-type-theme', labelText: 'Background by Theme', description: 'Use the Background colour defined by the Theme.', value: 'theme' },
+ { id: 'theme-background-type-accent', labelText: 'Background by Accent', description: 'Use the Accent colour for the Background.', value: 'accent' },
+ { id: 'theme-background-type-color', labelText: 'Custom colour', value: 'color' },
+ { id: 'theme-background-type-gradient', labelText: 'Gradient', value: 'gradient' },
+ { id: 'theme-background-type-image', labelText: 'Image', value: 'image' },
+ { id: 'theme-background-type-video', labelText: 'Video', value: 'video' }
+ ],
+ groupName: 'theme-background-type',
+ path: 'theme.background.type',
+ action: () => {
+ applyCSSClass('theme.background.type');
+ themeSetting.control.background.typeCollapse.update();
+ toolbar.current.update.style();
+ themeSetting.disable();
+ updateVideoPlayState();
+ data.save();
+ }
+ }),
+ color: new Control_colorMixer({
+ object: state.get.current(),
+ path: 'theme.background.color',
+ id: 'theme-background-color',
+ labelText: 'Background colour',
+ defaultValue: state.get.default().theme.background.color.rgb,
+ minMaxObject: state.get.minMax(),
+ action: () => {
+ applyCSSVar([
+ 'theme.background.color.rgb.r',
+ 'theme.background.color.rgb.g',
+ 'theme.background.color.rgb.b',
+ 'theme.background.color.hsl.h',
+ 'theme.background.color.hsl.s',
+ 'theme.background.color.hsl.l'
+ ]);
+ toolbar.current.update.style();
+ data.save();
+ }
+ }),
+ gradient: {
+ angle: new Control_slider({
+ object: state.get.current(),
+ path: 'theme.background.gradient.angle',
+ id: 'theme-background-gradient-angle',
+ labelText: 'Background gradient angle',
+ value: state.get.current().theme.background.gradient.angle,
+ defaultValue: state.get.default().theme.background.gradient.angle,
+ min: state.get.minMax().theme.background.gradient.angle.min,
+ max: state.get.minMax().theme.background.gradient.angle.max,
+ action: () => {
+ applyCSSVar('theme.background.gradient.angle');
+ toolbar.current.update.style();
+ data.save();
+ }
+ }),
+ start: new Control_colorMixer({
+ object: state.get.current(),
+ path: 'theme.background.gradient.start',
+ id: 'theme-background-gradient-start',
+ labelText: 'Background gradient start',
+ defaultValue: state.get.default().theme.background.gradient.start.rgb,
+ minMaxObject: state.get.minMax(),
+ action: () => {
+ applyCSSVar([
+ 'theme.background.gradient.start.rgb.r',
+ 'theme.background.gradient.start.rgb.g',
+ 'theme.background.gradient.start.rgb.b',
+ 'theme.background.gradient.start.hsl.h',
+ 'theme.background.gradient.start.hsl.s',
+ 'theme.background.gradient.start.hsl.l'
+ ]);
+ toolbar.current.update.style();
+ data.save();
+ }
+ }),
+ end: new Control_colorMixer({
+ object: state.get.current(),
+ path: 'theme.background.gradient.end',
+ id: 'theme-background-gradient-end',
+ labelText: 'Background gradient end',
+ defaultValue: state.get.default().theme.background.gradient.end.rgb,
+ minMaxObject: state.get.minMax(),
+ action: () => {
+ applyCSSVar([
+ 'theme.background.gradient.end.rgb.r',
+ 'theme.background.gradient.end.rgb.g',
+ 'theme.background.gradient.end.rgb.b',
+ 'theme.background.gradient.end.hsl.h',
+ 'theme.background.gradient.end.hsl.s',
+ 'theme.background.gradient.end.hsl.l'
+ ]);
+ toolbar.current.update.style();
+ data.save();
+ }
+ })
+ },
+ image: {
+ url: new Control_textarea({
+ object: state.get.current(),
+ path: 'theme.background.image.url',
+ id: 'theme-background-image-url',
+ value: state.get.current().theme.background.image.url,
+ placeholder: 'https://www.example.com/image.jpg',
+ labelText: 'URL',
+ action: () => {
+ theme.background.image.render();
+ data.save();
+ }
+ }),
+ urlHelper: new Control_helperText({
+ text: [
+ 'Add more than one URL separated by spaces or on new lines for a random background image on load.',
+ 'Unsplash can be used for random images, eg:',
+ 'https://source.unsplash.com/random/1920x1080/?night,day,sky',
+ 'Change parameters after .../random/ for more options. Loading times may vary.'
+ ]
+ }),
+ blur: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.image.blur',
+ id: 'theme-background-image-blur',
+ labelText: 'Blur',
+ value: state.get.current().theme.background.image.blur,
+ defaultValue: state.get.default().theme.background.image.blur,
+ min: state.get.minMax().theme.background.image.blur.min,
+ max: state.get.minMax().theme.background.image.blur.max,
+ action: () => {
+ applyCSSVar('theme.background.image.blur');
+ data.save();
+ }
+ }),
+ grayscale: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.image.grayscale',
+ id: 'theme-background-image-grayscale',
+ labelText: 'Grayscale',
+ value: state.get.current().theme.background.image.grayscale,
+ defaultValue: state.get.default().theme.background.image.grayscale,
+ min: state.get.minMax().theme.background.image.grayscale.min,
+ max: state.get.minMax().theme.background.image.grayscale.max,
+ action: () => {
+ applyCSSVar('theme.background.image.grayscale');
+ data.save();
+ }
+ }),
+ scale: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.image.scale',
+ id: 'theme-background-image-scale',
+ labelText: 'Scale',
+ value: state.get.current().theme.background.image.scale,
+ defaultValue: state.get.default().theme.background.image.scale,
+ min: state.get.minMax().theme.background.image.scale.min,
+ max: state.get.minMax().theme.background.image.scale.max,
+ action: () => {
+ applyCSSVar('theme.background.image.scale');
+ data.save();
+ }
+ }),
+ accent: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.image.accent',
+ id: 'theme-background-image-accent',
+ labelText: 'Accent',
+ value: state.get.current().theme.background.image.accent,
+ defaultValue: state.get.default().theme.background.image.accent,
+ min: state.get.minMax().theme.background.image.accent.min,
+ max: state.get.minMax().theme.background.image.accent.max,
+ action: () => {
+ applyCSSVar('theme.background.image.accent');
+ data.save();
+ }
+ }),
+ opacity: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.image.opacity',
+ id: 'theme-background-image-opacity',
+ labelText: 'Opacity',
+ value: state.get.current().theme.background.image.opacity,
+ defaultValue: state.get.default().theme.background.image.opacity,
+ min: state.get.minMax().theme.background.image.opacity.min,
+ max: state.get.minMax().theme.background.image.opacity.max,
+ action: () => {
+ applyCSSVar('theme.background.image.opacity');
+ data.save();
+ }
+ }),
+ vignette: {
+ opacity: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.image.vignette.opacity',
+ id: 'theme-background-image-vignette-opacity',
+ labelText: 'Vignette',
+ value: state.get.current().theme.background.image.vignette.opacity,
+ defaultValue: state.get.default().theme.background.image.vignette.opacity,
+ min: state.get.minMax().theme.background.image.vignette.opacity.min,
+ max: state.get.minMax().theme.background.image.vignette.opacity.max,
+ action: () => {
+ applyCSSVar('theme.background.image.vignette.opacity');
+ data.save();
+ }
+ }),
+ start: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.image.vignette.start',
+ id: 'theme-background-image-vignette-start',
+ labelText: 'Start',
+ value: state.get.current().theme.background.image.vignette.start,
+ defaultValue: state.get.default().theme.background.image.vignette.start,
+ min: state.get.minMax().theme.background.image.vignette.start.min,
+ max: state.get.minMax().theme.background.image.vignette.start.max,
+ action: () => {
+
+ applyCSSVar('theme.background.image.vignette.start');
+
+ if (state.get.current().theme.background.image.vignette.end > state.get.current().theme.background.image.vignette.start) {
+
+ state.get.current().theme.background.image.vignette.end = state.get.current().theme.background.image.vignette.start;
+
+ applyCSSVar('theme.background.image.vignette.end');
+
+ themeSetting.control.background.image.vignette.end.update();
+
+ };
+
+ data.save();
+
+ }
+ }),
+ end: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.image.vignette.end',
+ id: 'theme-background-image-vignette-end',
+ labelText: 'End',
+ value: state.get.current().theme.background.image.vignette.end,
+ defaultValue: state.get.default().theme.background.image.vignette.end,
+ min: state.get.minMax().theme.background.image.vignette.end.min,
+ max: state.get.minMax().theme.background.image.vignette.end.max,
+ action: () => {
+
+ applyCSSVar('theme.background.image.vignette.end');
+
+ if (state.get.current().theme.background.image.vignette.start < state.get.current().theme.background.image.vignette.end) {
+
+ state.get.current().theme.background.image.vignette.start = state.get.current().theme.background.image.vignette.end;
+
+ applyCSSVar('theme.background.image.vignette.start');
+
+ themeSetting.control.background.image.vignette.start.update();
+
+ };
+
+ data.save();
+
+ }
+ })
+ }
+ },
+ video: {
+ url: new Control_textarea({
+ object: state.get.current(),
+ path: 'theme.background.video.url',
+ id: 'theme-background-video-url',
+ value: state.get.current().theme.background.video.url,
+ placeholder: 'https://www.example.com/video.mp4',
+ labelText: 'URL',
+ action: () => {
+ theme.background.video.clear();
+ theme.background.video.render();
+ data.save();
+ }
+ }),
+ urlHelper: new Control_helperText({
+ text: [
+ 'Background video only supports a direct URL to a video file. Supports MP4 and WebM format.', 'YouTube page URLs can not be used.',
+ 'Add more than one URL separated by spaces or on new lines for a random background video on load.'
+ ]
+ }),
+ blur: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.video.blur',
+ id: 'theme-background-video-blur',
+ labelText: 'Blur',
+ value: state.get.current().theme.background.video.blur,
+ defaultValue: state.get.default().theme.background.video.blur,
+ min: state.get.minMax().theme.background.video.blur.min,
+ max: state.get.minMax().theme.background.video.blur.max,
+ action: () => {
+ applyCSSVar('theme.background.video.blur');
+ data.save();
+ }
+ }),
+ grayscale: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.video.grayscale',
+ id: 'theme-background-video-grayscale',
+ labelText: 'Grayscale',
+ value: state.get.current().theme.background.video.grayscale,
+ defaultValue: state.get.default().theme.background.video.grayscale,
+ min: state.get.minMax().theme.background.video.grayscale.min,
+ max: state.get.minMax().theme.background.video.grayscale.max,
+ action: () => {
+ applyCSSVar('theme.background.video.grayscale');
+ data.save();
+ }
+ }),
+ scale: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.video.scale',
+ id: 'theme-background-video-scale',
+ labelText: 'Scale',
+ value: state.get.current().theme.background.video.scale,
+ defaultValue: state.get.default().theme.background.video.scale,
+ min: state.get.minMax().theme.background.video.scale.min,
+ max: state.get.minMax().theme.background.video.scale.max,
+ action: () => {
+ applyCSSVar('theme.background.video.scale');
+ data.save();
+ }
+ }),
+ accent: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.video.accent',
+ id: 'theme-background-video-accent',
+ labelText: 'Accent',
+ value: state.get.current().theme.background.video.accent,
+ defaultValue: state.get.default().theme.background.video.accent,
+ min: state.get.minMax().theme.background.video.accent.min,
+ max: state.get.minMax().theme.background.video.accent.max,
+ action: () => {
+ applyCSSVar('theme.background.video.accent');
+ data.save();
+ }
+ }),
+ opacity: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.video.opacity',
+ id: 'theme-background-video-opacity',
+ labelText: 'Opacity',
+ value: state.get.current().theme.background.video.opacity,
+ defaultValue: state.get.default().theme.background.video.opacity,
+ min: state.get.minMax().theme.background.video.opacity.min,
+ max: state.get.minMax().theme.background.video.opacity.max,
+ action: () => {
+ applyCSSVar('theme.background.video.opacity');
+ data.save();
+ }
+ }),
+ vignette: {
+ opacity: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.video.vignette.opacity',
+ id: 'theme-background-video-vignette-opacity',
+ labelText: 'Vignette',
+ value: state.get.current().theme.background.video.vignette.opacity,
+ defaultValue: state.get.default().theme.background.video.vignette.opacity,
+ min: state.get.minMax().theme.background.video.vignette.opacity.min,
+ max: state.get.minMax().theme.background.video.vignette.opacity.max,
+ action: () => {
+ applyCSSVar('theme.background.video.vignette.opacity');
+ data.save();
+ }
+ }),
+ start: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.video.vignette.start',
+ id: 'theme-background-video-vignette-start',
+ labelText: 'Start',
+ value: state.get.current().theme.background.video.vignette.start,
+ defaultValue: state.get.default().theme.background.video.vignette.start,
+ min: state.get.minMax().theme.background.video.vignette.start.min,
+ max: state.get.minMax().theme.background.video.vignette.start.max,
+ action: () => {
+
+ applyCSSVar('theme.background.video.vignette.start');
+
+ if (state.get.current().theme.background.video.vignette.end > state.get.current().theme.background.video.vignette.start) {
+
+ state.get.current().theme.background.video.vignette.end = state.get.current().theme.background.video.vignette.start;
+
+ applyCSSVar('theme.background.video.vignette.end');
+
+ themeSetting.control.background.video.vignette.end.update();
+
+ };
+
+ data.save();
+
+ }
+ }),
+ end: new Control_sliderSlim({
+ object: state.get.current(),
+ path: 'theme.background.video.vignette.end',
+ id: 'theme-background-video-vignette-end',
+ labelText: 'End',
+ value: state.get.current().theme.background.video.vignette.end,
+ defaultValue: state.get.default().theme.background.video.vignette.end,
+ min: state.get.minMax().theme.background.video.vignette.end.min,
+ max: state.get.minMax().theme.background.video.vignette.end.max,
+ action: () => {
+
+ applyCSSVar('theme.background.video.vignette.end');
+
+ if (state.get.current().theme.background.video.vignette.start < state.get.current().theme.background.video.vignette.end) {
+
+ state.get.current().theme.background.video.vignette.start = state.get.current().theme.background.video.vignette.end;
+
+ applyCSSVar('theme.background.video.vignette.start');
+
+ themeSetting.control.background.video.vignette.start.update();
+
+ };
+
+ data.save();
+
+ }
+ })
+ }
+ }
+ };
+
+ const themeBackgroundColorArea = node('div', [
+ themeSetting.control.background.color.wrap()
+ ]);
+
+ const themeBackgroundGradientArea = node('div', [
+ themeSetting.control.background.gradient.angle.wrap(),
+ themeSetting.control.background.gradient.start.wrap(),
+ themeSetting.control.background.gradient.end.wrap()
+ ]);
+
+ const themeBackgroundImageArea = node('div', [
+ themeSetting.control.background.image.url.wrap(),
+ themeSetting.control.background.image.urlHelper.wrap(),
+ themeSetting.control.background.image.blur.wrap(),
+ themeSetting.control.background.image.grayscale.wrap(),
+ themeSetting.control.background.image.scale.wrap(),
+ themeSetting.control.background.image.accent.wrap(),
+ themeSetting.control.background.image.opacity.wrap(),
+ themeSetting.control.background.image.vignette.opacity.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ themeSetting.control.background.image.vignette.start.wrap(),
+ themeSetting.control.background.image.vignette.end.wrap()
+ ]
+ })
+ ]
+ })
+ ]);
+
+ const themeBackgroundVideoArea = node('div', [
+ themeSetting.control.background.video.url.wrap(),
+ themeSetting.control.background.video.urlHelper.wrap(),
+ themeSetting.control.background.video.blur.wrap(),
+ themeSetting.control.background.video.grayscale.wrap(),
+ themeSetting.control.background.video.scale.wrap(),
+ themeSetting.control.background.video.accent.wrap(),
+ themeSetting.control.background.video.opacity.wrap(),
+ themeSetting.control.background.video.vignette.opacity.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ themeSetting.control.background.video.vignette.start.wrap(),
+ themeSetting.control.background.video.vignette.end.wrap()
+ ]
+ })
+ ]
+ })
+ ]);
+
+ themeSetting.control.background.typeCollapse = new Collapse({
+ type: 'radio',
+ radioGroup: themeSetting.control.background.type,
+ target: [{
+ id: themeSetting.control.background.type.radioSet[2].radio.value,
+ content: themeBackgroundColorArea
+ }, {
+ id: themeSetting.control.background.type.radioSet[3].radio.value,
+ content: themeBackgroundGradientArea
+ }, {
+ id: themeSetting.control.background.type.radioSet[4].radio.value,
+ content: themeBackgroundImageArea
+ }, {
+ id: themeSetting.control.background.type.radioSet[5].radio.value,
+ content: themeBackgroundVideoArea
+ }]
+ });
+
+ parent.appendChild(
+ node('div', [
+ themeSetting.control.background.type.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ themeSetting.control.background.typeCollapse.collapse()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+themeSetting.layout = (parent) => {
+
+ themeSetting.control.layout.divider = {
+ size: new Control_slider({
+ object: state.get.current(),
+ path: 'theme.layout.divider.size',
+ id: 'theme.layout-divider-size',
+ labelText: 'Divider between Header and Bookmark area',
+ value: state.get.current().theme.layout.divider.size,
+ defaultValue: state.get.default().theme.layout.divider.size,
+ min: state.get.minMax().theme.layout.divider.size.min,
+ max: state.get.minMax().theme.layout.divider.size.max,
+ action: () => {
+ applyCSSVar([
+ 'theme.layout.divider.size'
+ ]);
+ applyCSSState([
+ 'theme.layout.divider.size'
+ ]);
+ layout.area.render();
+ data.save();
+ }
+ })
+ };
+
+ parent.appendChild(
+ node('div', [
+ themeSetting.control.layout.divider.size.wrap()
+ ])
+ );
+
+};
+
+themeSetting.header = (parent) => {
+
+ themeSetting.control.header.color = {};
+
+ themeSetting.control.header.color.by = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'theme-header-by-theme', labelText: 'Transparent', description: 'No background colour behind the Header area.', value: 'theme' },
+ { id: 'theme-header-by-custom', labelText: 'Custom colour', description: 'Use a custom colour behind the Header area.', value: 'custom' }
+ ],
+ label: 'Header background colour',
+ groupName: 'theme-header-by',
+ path: 'theme.header.color.by',
+ action: () => {
+ applyCSSClass('theme.header.color.by');
+ themeSetting.disable();
+ themeSetting.control.header.color.collapse.update();
+ data.save();
+ }
+ });
+
+ themeSetting.control.header.color.color = new Control_colorMixer({
+ object: state.get.current(),
+ path: 'theme.header.color',
+ id: 'theme-header-color',
+ labelText: 'Header area background colour',
+ defaultValue: state.get.default().theme.header.color.rgb,
+ minMaxObject: state.get.minMax(),
+ action: () => {
+ applyCSSVar([
+ 'theme.header.color.rgb.r',
+ 'theme.header.color.rgb.g',
+ 'theme.header.color.rgb.b',
+ 'theme.header.color.hsl.h',
+ 'theme.header.color.hsl.s',
+ 'theme.header.color.hsl.l'
+ ]);
+ data.save();
+ }
+ });
+
+ themeSetting.control.header.color.opacity = new Control_slider({
+ object: state.get.current(),
+ path: 'theme.header.color.opacity',
+ id: 'theme-header-color-opacity',
+ labelText: 'Background opacity',
+ value: state.get.current().theme.header.color.opacity,
+ defaultValue: state.get.default().theme.header.color.opacity,
+ min: state.get.minMax().theme.header.color.opacity.min,
+ max: state.get.minMax().theme.header.color.opacity.max,
+ action: () => {
+ applyCSSVar([
+ 'theme.header.color.opacity'
+ ]);
+ data.save();
+ }
+ });
+
+ themeSetting.control.header.color.area = node('div', [
+ themeSetting.control.header.color.color.wrap(),
+ themeSetting.control.header.color.opacity.wrap()
+ ]);
+
+ themeSetting.control.header.color.collapse = new Collapse({
+ type: 'radio',
+ radioGroup: themeSetting.control.header.color.by,
+ target: [{
+ id: themeSetting.control.header.color.by.radioSet[1].radio.value,
+ content: themeSetting.control.header.color.area
+ }]
+ });
+
+ parent.appendChild(
+ node('div', [
+ themeSetting.control.header.color.by.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ themeSetting.control.header.color.collapse.collapse()
+ ]
+ })
+ ]
+ })
+ ])
+ );
+
+};
+
+themeSetting.bookmark = (parent) => {
+
+ themeSetting.control.bookmark.color = {};
+
+ themeSetting.control.bookmark.color.by = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'theme-bookmark-by-theme', labelText: 'Transparent', description: 'No background colour behind the Bookmark area.', value: 'theme' },
+ { id: 'theme-bookmark-by-custom', labelText: 'Custom colour', description: 'Use a custom colour behind the Bookmark area.', value: 'custom' }
+ ],
+ label: 'Bookmark area background colour',
+ groupName: 'theme-bookmark-by',
+ path: 'theme.bookmark.color.by',
+ action: () => {
+ applyCSSClass('theme.bookmark.color.by');
+ themeSetting.disable();
+ themeSetting.control.bookmark.color.collapse.update();
+ data.save();
+ }
+ });
+
+ themeSetting.control.bookmark.color.color = new Control_colorMixer({
+ object: state.get.current(),
+ path: 'theme.bookmark.color',
+ id: 'theme-bookmark-color',
+ labelText: 'Header area background colour',
+ defaultValue: state.get.default().theme.bookmark.color.rgb,
+ minMaxObject: state.get.minMax(),
+ action: () => {
+ applyCSSVar([
+ 'theme.bookmark.color.rgb.r',
+ 'theme.bookmark.color.rgb.g',
+ 'theme.bookmark.color.rgb.b',
+ 'theme.bookmark.color.hsl.h',
+ 'theme.bookmark.color.hsl.s',
+ 'theme.bookmark.color.hsl.l'
+ ]);
+ data.save();
+ }
+ });
+
+ themeSetting.control.bookmark.color.opacity = new Control_slider({
+ object: state.get.current(),
+ path: 'theme.bookmark.color.opacity',
+ id: 'theme-bookmark-color-opacity',
+ labelText: 'Background opacity',
+ value: state.get.current().theme.bookmark.color.opacity,
+ defaultValue: state.get.default().theme.bookmark.color.opacity,
+ min: state.get.minMax().theme.bookmark.color.opacity.min,
+ max: state.get.minMax().theme.bookmark.color.opacity.max,
+ action: () => {
+ applyCSSVar([
+ 'theme.bookmark.color.opacity'
+ ]);
+ data.save();
+ }
+ });
+
+ themeSetting.control.bookmark.color.area = node('div', [
+ themeSetting.control.bookmark.color.color.wrap(),
+ themeSetting.control.bookmark.color.opacity.wrap()
+ ]);
+
+ themeSetting.control.bookmark.color.collapse = new Collapse({
+ type: 'radio',
+ radioGroup: themeSetting.control.bookmark.color.by,
+ target: [{
+ id: themeSetting.control.bookmark.color.by.radioSet[1].radio.value,
+ content: themeSetting.control.bookmark.color.area
+ }]
+ });
+
+ themeSetting.control.bookmark.item = {};
+
+ themeSetting.control.bookmark.item.border = new Control_slider({
+ object: state.get.current(),
+ path: 'theme.bookmark.item.border',
+ id: 'theme-bookmark-item-border',
+ labelText: 'Bookmark border',
+ value: state.get.current().theme.bookmark.item.border,
+ defaultValue: state.get.default().theme.bookmark.item.border,
+ min: state.get.minMax().theme.bookmark.item.border.min,
+ max: state.get.minMax().theme.bookmark.item.border.max,
+ action: () => {
+ bookmark.item.mod.applyVar('border', state.get.current().theme.bookmark.item.border);
+ groupAndBookmark.render();
+ data.save();
+ }
+ });
+
+ themeSetting.control.bookmark.item.borderHelper = new Control_helperText({
+ text: ['Bookmark border can also be changed when editing individual Bookmarks.', 'The colour of the Border is defined by the Accent which can also be changed when editing individual Bookmarks.']
+ });
+
+ themeSetting.control.bookmark.item.rainbow = new Button({
+ text: 'Apply unique accent to each',
+ style: ['line'],
+ func: () => {
+ theme.accent.rainbow.render();
+ data.save();
+ }
+ });
+
+ themeSetting.control.bookmark.item.rainbowHelper = new Control_helperText({
+ text: ['Bookmark custom Accent can also be changed when editing individual Bookmarks.']
+ });
+
+ parent.appendChild(
+ node('div', [
+ themeSetting.control.bookmark.color.by.wrap(),
+ form.wrap({
+ children: [
+ form.indent({
+ children: [
+ themeSetting.control.bookmark.color.collapse.collapse()
+ ]
+ })
+ ]
+ }),
+ node('hr'),
+ themeSetting.control.bookmark.item.border.wrap(),
+ themeSetting.control.bookmark.item.borderHelper.wrap(),
+ node('hr'),
+ themeSetting.control.bookmark.item.rainbow.wrap(),
+ themeSetting.control.bookmark.item.rainbowHelper.wrap()
+ ])
+ );
+
+};
+
+export { themeSetting }
diff --git a/src/component/menuContent/toolbarSetting/index.js b/src/component/menuContent/toolbarSetting/index.js
new file mode 100644
index 00000000..ee481d2d
--- /dev/null
+++ b/src/component/menuContent/toolbarSetting/index.js
@@ -0,0 +1,275 @@
+import { state } from '../../state';
+import { data } from '../../data';
+import { header } from '../../header';
+import { bookmark } from '../../bookmark';
+import { theme } from '../../theme';
+import { version } from '../../version';
+import { menu } from '../../menu';
+import { icon } from '../../icon';
+import { logo } from '../../logo';
+import { link } from '../../link';
+import { layout } from '../../layout';
+import { toolbar } from '../../toolbar';
+
+import * as form from '../../form';
+
+import { Button } from '../../button';
+import { Collapse } from '../../collapse';
+import { Edge } from '../../edge';
+
+import { Control_helperText } from '../../control/helperText';
+import { Control_inputButton } from '../../control/inputButton';
+import { Control_groupText } from '../../control/groupText';
+import { Control_radio } from '../../control/radio';
+import { Control_radioGrid } from '../../control/radioGrid';
+import { Control_checkbox } from '../../control/checkbox';
+import { Control_slider } from '../../control/slider';
+import { Control_sliderSlim } from '../../control/sliderSlim';
+import { Control_sliderDouble } from '../../control/sliderDouble';
+import { Control_colorMixer } from '../../control/colorMixer';
+import { Control_color } from '../../control/color';
+import { Control_text } from '../../control/text';
+import { Control_textReset } from '../../control/textReset';
+import { Control_textarea } from '../../control/textarea';
+
+import { node } from '../../../utility/node';
+import { complexNode } from '../../../utility/complexNode';
+import { applyCSSVar } from '../../../utility/applyCSSVar';
+import { applyCSSClass } from '../../../utility/applyCSSClass';
+import { applyCSSState } from '../../../utility/applyCSSState';
+
+const toolbarSetting = {};
+
+toolbarSetting.control = {
+ size: {},
+ opacity: {},
+ location: {},
+ position: {},
+ controls: {}
+};
+
+toolbarSetting.disable = () => {
+
+ switch (state.get.current().toolbar.location) {
+
+ case 'corner':
+ toolbarSetting.control.positionElement.enable();
+ toolbarSetting.control.positionElementHelper1.enable();
+ toolbarSetting.control.location.newLine.disable();
+ break;
+
+ case 'header':
+ toolbarSetting.control.positionElement.disable();
+ toolbarSetting.control.positionElementHelper1.disable();
+ toolbarSetting.control.location.newLine.enable();
+ break;
+
+ };
+
+};
+
+toolbarSetting.edge = {
+ size: false
+};
+
+toolbarSetting.size = (parent) => {
+
+ switch (state.get.current().toolbar.location) {
+
+ case 'header':
+ toolbarSetting.edge.size = new Edge({ primary: toolbar.current.element.toolbar, secondary: [header.element.area] });
+ break;
+
+ case 'corner':
+ toolbarSetting.edge.size = new Edge({ primary: toolbar.current.element.toolbar });
+ break;
+
+ };
+
+ toolbarSetting.control.size = new Control_slider({
+ object: state.get.current(),
+ path: 'toolbar.size',
+ id: 'toolbar-size',
+ labelText: 'Toolbar size',
+ value: state.get.current().toolbar.size,
+ defaultValue: state.get.default().toolbar.size,
+ min: state.get.minMax().toolbar.size.min,
+ max: state.get.minMax().toolbar.size.max,
+ action: () => {
+ applyCSSVar('toolbar.size');
+ data.save();
+ },
+ sliderAction: () => {
+ toolbarSetting.edge.size.track();
+ },
+ mouseDownAction: () => {
+ toolbarSetting.edge.size.show();
+ },
+ mouseUpAction: () => {
+ toolbarSetting.edge.size.hide();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ toolbarSetting.control.size.wrap()
+ ])
+ );
+};
+
+toolbarSetting.location = (parent) => {
+
+ toolbarSetting.control.location.locationElement = new Control_radio({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'toolbar-location-corner', labelText: 'In a corner', value: 'corner' },
+ { id: 'toolbar-location-header', labelText: 'In the Header', value: 'header' }
+ ],
+ groupName: 'toolbar-location',
+ path: 'toolbar.location',
+ action: () => {
+ toolbar.current.assemble();
+ toolbar.current.update.location();
+ toolbar.current.update.style();
+ header.item.mod.order();
+ header.item.clear();
+ header.item.clear();
+ header.item.render();
+ toolbar.bar.render();
+ layout.area.assemble();
+ toolbarSetting.disable();
+
+ switch (state.get.current().toolbar.location) {
+
+ case 'header':
+ toolbarSetting.edge.size = new Edge({ primary: toolbar.current.element.toolbar, secondary: [layout.element.header] });
+ break;
+
+ case 'corner':
+ toolbarSetting.edge.size = new Edge({ primary: toolbar.current.element.toolbar });
+ break;
+
+ };
+
+ data.save();
+ }
+ });
+
+ toolbarSetting.control.location.locationHelper = new Control_helperText({
+ text: ['Position the Toolbar inside the Header or in a corner of the window.']
+ });
+
+ toolbarSetting.control.location.newLine = new Control_checkbox({
+ object: state.get.current(),
+ path: 'toolbar.newLine',
+ id: 'header-newLine',
+ labelText: 'New line',
+ description: 'Force on to a new line and seperate from other Header items.',
+ action: function() {
+ applyCSSState('toolbar.newLine');
+ data.save();
+ }
+ });
+
+ toolbarSetting.control.location.newLineHelper = new Control_helperText({
+ text: ['Only available when the Toolbar is positioned inside the Header.']
+ });
+
+ parent.appendChild(
+ node('div', [
+ toolbarSetting.control.location.locationElement.inline(),
+ toolbarSetting.control.location.locationHelper.wrap(),
+ node('hr'),
+ toolbarSetting.control.location.newLine.wrap(),
+ toolbarSetting.control.location.newLineHelper.wrap()
+ ])
+ );
+
+};
+
+toolbarSetting.position = (parent) => {
+
+ toolbarSetting.control.positionElement = new Control_radioGrid({
+ object: state.get.current(),
+ radioGroup: [
+ { id: 'toolbar-position-top-left', labelText: 'Top left', value: 'top-left', position: 1 },
+ { id: 'toolbar-position-top-right', labelText: 'Top right', value: 'top-right', position: 2 },
+ { id: 'toolbar-position-bottom-left', labelText: 'Bottom left', value: 'bottom-left', position: 3 },
+ { id: 'toolbar-position-bottom-right', labelText: 'Bottom right', value: 'bottom-right', position: 4 }
+ ],
+ label: 'Toolbar position',
+ groupName: 'toolbar-position',
+ path: 'toolbar.position',
+ gridSize: '2x2',
+ action: () => {
+ toolbar.current.assemble();
+ toolbar.current.update.position();
+ toolbar.current.update.style();
+ data.save();
+ }
+ });
+
+ toolbarSetting.control.positionElementHelper1 = new Control_helperText({
+ text: ['Position the Toolbar in one of the four corners of the window.']
+ });
+
+ toolbarSetting.control.positionElementHelper2 = new Control_helperText({
+ text: ['Only available when the Toolbar is positioned in a corner.']
+ });
+
+ parent.appendChild(
+ node('div', [
+ toolbarSetting.control.positionElement.wrap(),
+ toolbarSetting.control.positionElementHelper1.wrap(),
+ toolbarSetting.control.positionElementHelper2.wrap()
+ ])
+ );
+
+};
+
+toolbarSetting.controls = (parent) => {
+
+ toolbarSetting.control.controls.accent = new Control_checkbox({
+ object: state.get.current(),
+ id: 'toolbar-accent-show',
+ path: 'toolbar.accent.show',
+ labelText: 'Show Accent control',
+ action: () => {
+ toolbar.current.update.control();
+ data.save();
+ }
+ });
+
+ toolbarSetting.control.controls.add = new Control_checkbox({
+ object: state.get.current(),
+ id: 'toolbar-add-show',
+ path: 'toolbar.add.show',
+ labelText: 'Show Add control',
+ action: () => {
+ toolbar.current.update.control();
+ data.save();
+ }
+ });
+
+ toolbarSetting.control.controls.edit = new Control_checkbox({
+ object: state.get.current(),
+ id: 'toolbar-edit-show',
+ path: 'toolbar.edit.show',
+ labelText: 'Show Edit control',
+ action: () => {
+ toolbar.current.update.control();
+ data.save();
+ }
+ });
+
+ parent.appendChild(
+ node('div', [
+ toolbarSetting.control.controls.accent.wrap(),
+ toolbarSetting.control.controls.add.wrap(),
+ toolbarSetting.control.controls.edit.wrap()
+ ])
+ );
+
+};
+
+export { toolbarSetting }
diff --git a/src/component/menuFrame/index.css b/src/component/menuFrame/index.css
new file mode 100644
index 00000000..d84a22ed
--- /dev/null
+++ b/src/component/menuFrame/index.css
@@ -0,0 +1,84 @@
+:root {
+ --menu-background: var(--theme-primary-010);
+ --menu-text: var(--theme-primary-text-010);
+ --menu-edge-opacity: 20;
+}
+
+.menu {
+ padding: 1em;
+ position: fixed;
+ top: 0;
+ right: 0;
+ width: 100vw;
+ height: 90vh;
+ opacity: 0;
+ z-index: var(--z-index-menu);
+ pointer-events: none;
+ transition: opacity var(--layout-transition-extra-fast);
+}
+
+@media (min-width: 550px) {
+ .menu {
+ width: 90vw;
+ }
+}
+
+@media (min-width: 700px) {
+ .menu {
+ width: 100%;
+ height: 100%;
+ max-height: initial;
+ }
+}
+
+@media (min-width: 900px) {
+ .menu {
+ width: 90vw;
+ }
+}
+
+@media (min-width: 1100px) {
+ .menu {
+ width: 80vw;
+ max-width: 60em;
+ }
+}
+
+.menu-area {
+ background-color: hsl(var(--menu-background));
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ width: 100%;
+ max-height: 100%;
+ display: grid;
+ grid-template-rows: auto 1fr;
+ grid-template-columns: 1fr auto;
+ justify-items: stretch;
+ align-items: stretch;
+ overflow-y: auto;
+ pointer-events: all;
+ box-shadow: var(--theme-shadow-bottom-large);
+ transition: background-color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
+}
+
+.is-edge .menu-area {
+ background-color: hsla(var(--menu-background), calc(var(--menu-edge-opacity) / 100));
+ /* backdrop-filter: blur(0.5em); */
+}
+
+@media (min-width: 700px) {
+ .menu-area {
+ max-height: 100%;
+ grid-template-rows: 1fr;
+ grid-template-columns: 4fr 10fr auto;
+ overflow: hidden;
+ position: relative;
+ }
+}
+
+.menu.is-transparent .menu-area {
+ pointer-events: none;
+}
+
+.menu-list {
+ display: none;
+}
diff --git a/src/component/menuFrame/index.js b/src/component/menuFrame/index.js
new file mode 100644
index 00000000..523fb5ab
--- /dev/null
+++ b/src/component/menuFrame/index.js
@@ -0,0 +1,288 @@
+import { state } from '../state';
+import { data } from '../data';
+import { menu } from '../menu';
+import { pageLock } from '../pageLock';
+
+import { Button } from '../button';
+import { Shade } from '../shade';
+import { MenuNav } from '../menuNav';
+import { MenuClose } from '../menuClose';
+import { MenuContent } from '../menuContent';
+import { KeyboardShortcut } from '../keyboardShortcut';
+
+import { node } from '../../utility/node';
+import { clearChildNode } from '../../utility/clearChildNode';
+
+import './index.css';
+
+export const MenuFrame = function({
+ navData = []
+} = {}) {
+
+ this.element = {
+ menu: node('section|class:menu'),
+ area: node('div|class:menu-area'),
+ content: node('div|class:menu-content')
+ };
+
+ this.menuNav = new MenuNav({
+ navData: navData,
+ action: () => {
+ this.content();
+ this.element.content.scrollTop = 0;
+ }
+ });
+
+ this.menuClose = new MenuClose();
+
+ this.shade = new Shade();
+
+ this.class = () => {
+
+ const html = document.querySelector('html');
+
+ if (state.get.current().menu) {
+ html.classList.add('is-menu-open');
+ } else {
+ html.classList.remove('is-menu-open');
+ };
+
+ };
+
+ this.open = () => {
+
+ state.get.current().menu = true;
+
+ data.save();
+
+ const body = document.querySelector('body');
+
+ this.element.menu.classList.add('is-transparent');
+
+ this.element.menu.addEventListener('transitionend', (event) => {
+
+ if (event.propertyName === 'opacity' && getComputedStyle(this.element.menu).opacity == 0) {
+
+ body.removeChild(this.element.menu);
+
+ };
+
+ });
+
+ this.shade.open();
+
+ this.assemble();
+
+ body.appendChild(this.element.menu);
+
+ getComputedStyle(this.element.menu).opacity;
+
+ this.element.menu.classList.remove('is-transparent');
+
+ this.element.menu.classList.add('is-opaque');
+
+ this.bind.add();
+
+ this.focus.set();
+
+ this.menuNav.init();
+
+ this.content();
+
+ this.class();
+
+ pageLock.render();
+
+ };
+
+ this.close = () => {
+
+ state.get.current().menu = false;
+
+ data.save();
+
+ this.element.menu.classList.remove('is-opaque');
+
+ this.element.menu.classList.add('is-transparent');
+
+ this.bind.remove();
+
+ this.shade.close();
+
+ this.locationReset();
+
+ this.class();
+
+ pageLock.render();
+
+ clearTimeout(this.delayedForceRemove);
+
+ this.delayedForceRemove = setTimeout(() => {
+
+ const body = document.querySelector('body');
+
+ if (body.contains(this.element.menu)) {
+ body.removeChild(this.element.menu)
+ };
+
+ }, 6000);
+
+ };
+
+ this.delayedForceRemove = null;
+
+ this.locationReset = () => {
+
+ const location = window.location;
+
+ if ('pushState' in history) {
+ history.pushState('', document.title, location.origin + location.pathname + location.search);
+ };
+
+ };
+
+ this.bind = {
+ add: () => {
+
+ window.addEventListener('mouseup', this.clickOut);
+
+ window.addEventListener('keydown', this.focus.loop);
+
+ this.esc.add();
+
+ this.ctrAltA.add();
+
+ this.ctrAltG.add();
+
+ },
+ remove: () => {
+
+ window.removeEventListener('mouseup', this.clickOut);
+
+ window.removeEventListener('keydown', this.focus.loop);
+
+ this.esc.remove();
+
+ this.ctrAltA.remove();
+
+ this.ctrAltG.remove();
+
+ }
+ };
+
+ this.esc = new KeyboardShortcut({
+ keycode: 27,
+ action: () => {
+ this.close();
+ }
+ });
+
+ this.ctrAltA = new KeyboardShortcut({
+ keycode: 65,
+ ctrl: true,
+ alt: true,
+ action: () => {
+ this.close();
+ }
+ });
+
+ this.ctrAltG = new KeyboardShortcut({
+ keycode: 71,
+ ctrl: true,
+ alt: true,
+ action: () => {
+ this.close();
+ }
+ });
+
+ this.clickOut = (event) => {
+
+ const path = event.path || (event.composedPath && event.composedPath());
+
+ if (!path.includes(this.element.menu)) {
+ this.close();
+ };
+
+ };
+
+ this.focus = {
+ set: () => {
+
+ const allFocusElement = document.querySelector('.menu').querySelectorAll('[tabindex]');
+
+ allFocusElement[0].focus();
+
+ },
+ loop: (event) => {
+
+ const allFocusElement = document.querySelector('.menu').querySelectorAll('[tabindex]');
+
+ if (allFocusElement.length > 0) {
+
+ const firstElement = allFocusElement[0];
+
+ const lastElement = allFocusElement[allFocusElement.length - 1];
+
+ if (event.keyCode == 9 && event.shiftKey) {
+
+ if (document.activeElement === firstElement) {
+ lastElement.focus();
+
+ event.preventDefault();
+ }
+
+ } else if (event.keyCode == 9) {
+
+ if (document.activeElement === lastElement) {
+ firstElement.focus();
+
+ event.preventDefault();
+ }
+
+ };
+
+ };
+
+ }
+ };
+
+ this.assemble = () => {
+
+ this.element.area.appendChild(this.menuNav.nav());
+
+ this.element.area.appendChild(this.menuClose.close());
+
+ this.element.area.appendChild(this.element.content);
+
+ this.element.menu.appendChild(this.element.area);
+
+ };
+
+ this.content = () => {
+
+ clearChildNode(this.element.content);
+
+ navData.forEach((item, i) => {
+
+ if (item.active) {
+
+ if (item.overscroll) {
+ this.element.content.classList.add('menu-content-overscroll');
+ } else {
+ this.element.content.classList.remove('menu-content-overscroll');
+ };
+
+ const menuContent = new MenuContent({
+ activeNavData: item,
+ container: this.element.content
+ });
+
+ menuContent.content();
+
+ };
+
+ });
+
+ };
+
+};
diff --git a/src/component/menuNav/index.css b/src/component/menuNav/index.css
new file mode 100644
index 00000000..e2d6e161
--- /dev/null
+++ b/src/component/menuNav/index.css
@@ -0,0 +1,168 @@
+:root {
+ --menu-nav-space: 12;
+}
+
+.menu-nav {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+
+@media (min-width: 700px) {
+ .menu-nav {
+ background-color: hsla(var(--theme-primary-020), 0.75);
+ grid-column-start: 1;
+ grid-column-end: 2;
+ grid-row-start: 1;
+ grid-row-end: 2;
+ flex-direction: column;
+ align-items: stretch;
+ flex-wrap: nowrap;
+ overflow-y: auto;
+ z-index: 1;
+ transition: background-color var(--layout-transition-extra-fast);
+ }
+
+ .is-edge .menu-nav {
+ background-color: transparent;
+ }
+}
+
+.menu-nav-item {
+ flex-grow: 1;
+ flex-basis: 33.33333333%;
+}
+
+@media (min-width: 700px) {
+ .menu-nav-item {
+ flex-grow: 0;
+ flex-basis: auto;
+ position: relative;
+ }
+
+ .menu-nav-item:before {
+ content: "";
+ position: absolute;
+ background-color: transparent;
+ top: 0;
+ left: 0;
+ width: var(--layout-line-width);
+ height: 100%;
+ z-index: 1;
+ transition: background-color var(--layout-transition-extra-fast);
+ }
+
+ .menu-nav-item:hover:before,
+ .menu-nav-item.active:before {
+ background-color: rgb(var(--theme-accent));
+ }
+
+ .is-edge .menu-nav-item:before {
+ background-color: transparent;
+ }
+}
+
+.menu-nav-tab {
+ margin: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ border-radius: 0;
+ height: calc((var(--menu-nav-space) / 4) * 1em);
+ width: 100%;
+ line-height: 1;
+}
+
+.menu-nav-tab:focus,
+.menu-nav-tab:hover {
+ background-color: hsl(var(--theme-primary-020));
+}
+
+.menu-nav-tab:active {
+ background-color: hsl(var(--theme-primary-030));
+}
+
+.menu-nav-tab.active,
+.menu-nav-tab.active:hover,
+.menu-nav-tab.active:active {
+ background-color: rgb(var(--theme-accent));
+ color: hsl(var(--theme-accent-rgb-text));
+}
+
+.menu-nav-tab:after {
+ border-radius: 0;
+}
+
+.is-edge .menu-nav-tab.active {
+ background-color: transparent;
+ color: hsl(var(--button-text));
+}
+
+@media (min-width: 700px) {
+ .menu-nav-tab {
+ padding-left: calc(((var(--menu-nav-space) / 8) + (var(--theme-radius) * 0.0025)) * 1em);
+ height: calc((var(--menu-nav-space) / 4) * 1em);
+ justify-content: flex-start;
+ }
+}
+
+.menu-subnav {
+ display: none;
+}
+
+@media (min-width: 700px) {
+ .menu-subnav {
+ background-color: hsl(var(--theme-primary-010));
+ display: flex;
+ flex-direction: column;
+ flex-wrap: nowrap;
+ overflow: hidden;
+ height: 0;
+ transition: background-color var(--layout-transition-extra-fast), height var(--layout-transition-extra-fast);
+ }
+
+ .is-edge .menu-subnav {
+ background-color: transparent;
+ }
+
+ .menu-subnav.active {
+ height: var(--menu-subnav-height);
+ }
+}
+
+.menu-nav-area-tab {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: flex-start;
+ flex-grow: 1;
+}
+
+@media (min-width: 700px) {
+ .menu-nav-sub {
+ background-color: transparent;
+ margin: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ padding-left: calc(((var(--menu-nav-space) / 4) + (var(--theme-radius) * 0.0025)) * 1em);
+ border-radius: 0;
+ height: calc((var(--menu-nav-space) / 4) * 1em);
+ min-height: 3em;
+ width: 100%;
+ line-height: 1;
+ justify-content: flex-start;
+ }
+
+ .menu-nav-sub:focus,
+ .menu-nav-sub:hover {
+ background-color: hsl(var(--theme-primary-020));
+ }
+
+ .menu-nav-sub:active {
+ background-color: hsl(var(--theme-primary-030));
+ }
+
+ .menu-nav-sub:after,
+ .menu-nav-sub:after {
+ border-radius: 0;
+ }
+}
diff --git a/src/component/menuNav/index.js b/src/component/menuNav/index.js
new file mode 100644
index 00000000..7c210e3c
--- /dev/null
+++ b/src/component/menuNav/index.js
@@ -0,0 +1,184 @@
+import { menu } from '../menu';
+
+import { Button } from '../button';
+
+import { node } from '../../utility/node';
+
+import './index.css';
+
+export const MenuNav = function({
+ navData = {},
+ action = false
+} = {}) {
+
+ this.state = {
+ current: {},
+ set: () => {
+
+ navData.forEach((item, i) => {
+
+ this.state.current[this.makeId(item.name)] = item.active;
+
+ });
+
+ },
+ toggle: (name) => {
+
+ for (let key in this.state.current) {
+ this.state.current[key] = false;
+ };
+
+ this.state.current[this.makeId(name)] = true;
+
+ navData.forEach((item, i) => {
+
+ item.active = false;
+
+ if (item.name === name) {
+ item.active = true;
+ };
+
+ });
+
+ }
+ };
+
+ this.makeId = (name) => {
+ return name.split(' ')[0].toLowerCase();
+ };
+
+ this.element = {
+ nav: node('div|class:menu-nav'),
+ item: [],
+ };
+
+ this.init = () => {
+
+ this.element.item.forEach((item, i) => {
+ if (item.subLevel) {
+ item.subLevel.classList.add('active');
+ item.subLevel.setAttribute('style', '--menu-subnav-height: ' + item.subLevel.getBoundingClientRect().height + 'px;');
+ item.subLevel.classList.remove('active');
+ };
+ });
+
+ this.update();
+
+ };
+
+ this.update = () => {
+ navData.forEach((item, i) => {
+
+ if (this.state.current[this.makeId(item.name)]) {
+
+ this.element.item[i].menuNavItem.classList.add('active');
+ this.element.item[i].topLevel.classList.add('active');
+
+ if (item.sub) {
+ this.element.item[i].subLevel.classList.add('active');
+ };
+
+ if (this.element.item[i].subLevelItem.length > 0) {
+ this.element.item[i].subLevelItem.forEach((item, i) => {
+ item.tabIndex = 1;
+ });
+ };
+
+ } else {
+ this.element.item[i].menuNavItem.classList.remove('active');
+ this.element.item[i].topLevel.classList.remove('active');
+
+ if (item.sub) {
+ this.element.item[i].subLevel.classList.remove('active');
+ };
+
+ if (this.element.item[i].subLevelItem.length > 0) {
+ this.element.item[i].subLevelItem.forEach((item, i) => {
+ item.tabIndex = -1;
+ });
+ };
+
+ };
+
+ });
+ };
+
+ this.nav = () => {
+
+ return this.element.nav;
+
+ };
+
+ this.assemble = () => {
+
+ navData.forEach((item, i) => {
+
+ const navItem = {
+ topLevel: false,
+ subLevel: false,
+ subLevelItem: []
+ };
+
+ const navButton = new Button({
+ text: item.name,
+ style: ['link'],
+ block: true,
+ classList: ['menu-nav-tab'],
+ func: () => {
+
+ this.state.toggle(item.name);
+
+ this.update();
+
+ if (action) {
+ action();
+ };
+
+ }
+ });
+
+ navItem.topLevel = navButton.button;
+
+ if (item.sub) {
+
+ const subNav = node('div|class:menu-subnav');
+
+ item.sub.forEach((item, i) => {
+
+ const subLevelLink = node('a:' + item + '|href:#menu-content-item-' + this.makeId(item) + ',class:menu-nav-sub button button-link button-small,tabindex:1');
+
+ subNav.appendChild(subLevelLink);
+
+ navItem.subLevelItem.push(subLevelLink);
+
+ });
+
+ navItem.subLevel = subNav;
+
+ };
+
+ this.element.item.push(navItem);
+
+ });
+
+ this.element.item.forEach((item, i) => {
+
+ item.menuNavItem = node('div|class:menu-nav-item');
+
+ item.menuNavItem.appendChild(item.topLevel);
+
+ if (item.subLevel) {
+ item.menuNavItem.appendChild(item.subLevel);
+ };
+
+ this.element.nav.appendChild(item.menuNavItem);
+
+ });
+
+ };
+
+ this.state.set();
+
+ this.assemble();
+
+};
diff --git a/src/component/modal/index.css b/src/component/modal/index.css
new file mode 100644
index 00000000..76dbced5
--- /dev/null
+++ b/src/component/modal/index.css
@@ -0,0 +1,105 @@
+:root {
+ --modal-space: 8;
+ --modal-width: calc(var(--modal-space) * 4);
+}
+
+.modal {
+ background-color: hsl(var(--theme-primary-010));
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ box-shadow: var(--theme-shadow-bottom-large);
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ font-size: 1em;
+ max-height: calc(100vh - 2em);
+ width: calc(var(--modal-width) * 1em);
+ max-width: calc(100% - 2em);
+ min-width: 10em;
+ display: grid;
+ grid-template-columns: 1fr;
+ grid-template-rows: 1fr auto;
+ transform: translate(-50%, -50%);
+ overflow: hidden;
+ pointer-events: all;
+ opacity: 0;
+ transition: background-color var(--layout-transition-extra-fast), opacity var(--layout-transition-extra-fast);
+ z-index: var(--z-index-modal);
+}
+
+.modal.is-transparent {
+ pointer-events: none;
+}
+
+.modal.modal-max-height {
+ min-height: calc(100vh - 2em);
+}
+
+.modal-content-wrapper {
+ padding: calc((var(--modal-space) / 2) * 0.75em) calc((var(--modal-space) / 2) * 1em);
+ position: relative;
+ overflow-y: auto;
+}
+
+.modal-content {
+ display: grid;
+ grid-template-columns: 1fr;
+ grid-template-rows: auto 1fr;
+ justify-items: stretch;
+ align-items: stretch;
+ gap: calc((var(--modal-space) / 4) * 1em);
+}
+
+.modal-body {
+ border-radius: calc(var(--theme-radius) * 0.01em) calc(var(--theme-radius) * 0.01em) 0 0;
+ position: relative;
+}
+
+.modal-heading {
+ overflow: hidden;
+}
+
+.modal-heading-text {
+ margin-bottom: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.modal-heading-text:focus {
+ outline: none;
+}
+
+.modal-container {
+ max-width: 100%;
+}
+
+.modal-container:focus {
+ outline: none;
+}
+
+.modal-control {
+ background-color: hsl(var(--theme-primary-010));
+ border-radius: 0 0 calc(var(--theme-radius) * 0.01em) calc(var(--theme-radius) * 0.01em);
+ position: relative;
+ z-index: 2;
+ display: flex;
+ transition: background-color var(--layout-transition-extra-fast);
+}
+
+.modal-control-button {
+ background-color: transparent;
+ margin: 0;
+ border-radius: 0;
+ padding-top: 1.5em;
+ padding-bottom: 1.5em;
+ flex-basis: 50%;
+}
+
+.modal-control .modal-control-button:first-child,
+.modal-control .modal-control-button:first-child:after {
+ border-radius: 0 0 0 calc(var(--theme-radius) * 0.01em);
+}
+
+.modal-control .modal-control-button:last-child,
+.modal-control .modal-control-button:last-child:after {
+ border-radius: 0 0 calc(var(--theme-radius) * 0.01em) 0
+}
diff --git a/src/component/modal/index.js b/src/component/modal/index.js
new file mode 100644
index 00000000..dcc289a5
--- /dev/null
+++ b/src/component/modal/index.js
@@ -0,0 +1,329 @@
+import { state } from '../state';
+import { data } from '../data';
+import { pageLock } from '../pageLock';
+
+import { Button } from '../button';
+import { Shade } from '../shade';
+import { KeyboardShortcut } from '../keyboardShortcut';
+
+import { node } from '../../utility/node';
+import { complexNode } from '../../utility/complexNode';
+import { trimString } from '../../utility/trimString';
+import { isValidString } from '../../utility/isValidString';
+
+import './index.css';
+
+export const Modal = function({
+ heading = false,
+ content = false,
+ openAction = false,
+ successText = 'OK',
+ successAction = false,
+ cancelText = 'Cancel',
+ cancelAction = false,
+ closeAction = false,
+ size = 'medium',
+ width = false,
+ maxHeight = false,
+ maxHeadingLength = 50
+} = {}) {
+
+ this.element = {
+ modal: node('div|class:modal'),
+ heading: {
+ heading: node('div|class:modal-heading'),
+ text: node('h1|class:modal-heading-text,tabindex:1')
+ },
+ content: {
+ wrapper: node('div|class:modal-content-wrapper'),
+ content: node('div|class:modal-content')
+ },
+ control: node('div|class:modal-control')
+ };
+
+ this.shade = new Shade();
+
+ this.open = () => {
+
+ state.get.current().modal = true;
+
+ const body = document.querySelector('body');
+
+ this.element.modal.classList.add('is-transparent');
+
+ this.element.modal.addEventListener('transitionend', (event) => {
+
+ if (event.propertyName === 'opacity' && getComputedStyle(this.element.modal).opacity == 0) {
+
+ body.removeChild(this.element.modal);
+
+ };
+
+ });
+
+ this.shade.open();
+
+ this.style();
+
+ this.assemble();
+
+ body.appendChild(this.element.modal);
+
+ getComputedStyle(this.element.modal).opacity;
+
+ this.element.modal.classList.remove('is-transparent');
+
+ this.element.modal.classList.add('is-opaque');
+
+ this.bind.add();
+
+ this.focus.set();
+
+ if (openAction) {
+ openAction();
+ };
+
+ pageLock.render();
+
+ };
+
+ this.close = () => {
+
+ state.get.current().modal = false;
+
+ this.element.modal.classList.remove('is-opaque');
+
+ this.element.modal.classList.add('is-transparent');
+
+ this.bind.remove();
+
+ this.shade.close();
+
+ if (closeAction) {
+ closeAction();
+ };
+
+ clearTimeout(this.delayedForceRemove);
+
+ this.delayedForceRemove = setTimeout(() => {
+
+ const body = document.querySelector('body');
+
+ if (body.contains(this.element.modal)) {
+ body.removeChild(this.element.modal)
+ };
+
+ }, 6000);
+
+ pageLock.render();
+
+ };
+
+ this.delayedForceRemove = null;
+
+ this.bind = {
+ add: () => {
+
+ window.addEventListener('mouseup', this.clickOut);
+
+ window.addEventListener('keydown', this.focus.loop);
+
+ this.esc.add();
+
+ this.ctrAltM.add();
+
+ this.ctrAltG.add();
+
+ this.ctrAltA.add();
+
+ },
+ remove: () => {
+
+ window.removeEventListener('mouseup', this.clickOut);
+
+ window.removeEventListener('keydown', this.focus.loop);
+
+ this.esc.remove();
+
+ this.ctrAltM.remove();
+
+ this.ctrAltG.remove();
+
+ this.ctrAltA.remove();
+
+ }
+ };
+
+ this.esc = new KeyboardShortcut({ keycode: 27, action: () => { this.close(); } });
+
+ this.ctrAltM = new KeyboardShortcut({ keycode: 77, ctrl: true, alt: true, action: () => { this.close(); } });
+
+ this.ctrAltG = new KeyboardShortcut({ keycode: 71, ctrl: true, alt: true, action: () => { this.close(); } });
+
+ this.ctrAltA = new KeyboardShortcut({ keycode: 65, ctrl: true, alt: true, action: () => { this.close(); } });
+
+ this.clickOut = (event) => {
+
+ const path = event.path || (event.composedPath && event.composedPath());
+
+ const suggest = document.querySelector('.suggest');
+
+ if (!path.includes(this.element.modal) && !path.includes(suggest)) {
+ this.close();
+ };
+
+ };
+
+ this.focus = {
+ set: () => {
+ this.element.heading.text.focus();
+ },
+ loop: (event) => {
+
+ const allFocusElement = document.querySelector('.modal').querySelectorAll('[tabindex]');
+
+ if (allFocusElement.length > 0) {
+
+ const firstElement = allFocusElement[0];
+
+ const lastElement = allFocusElement[allFocusElement.length - 1];
+
+ if (event.keyCode == 9 && event.shiftKey) {
+
+ if (document.activeElement === firstElement) {
+ lastElement.focus();
+
+ event.preventDefault();
+ }
+
+ } else if (event.keyCode == 9) {
+
+ if (document.activeElement === lastElement) {
+ firstElement.focus();
+
+ event.preventDefault();
+ }
+
+ };
+
+ };
+
+
+ }
+ };
+
+ this.style = () => {
+ if (typeof width === 'number') {
+
+ this.element.modal.style.setProperty('--modal-width', width);
+
+ } else {
+
+ switch (width) {
+ case 'small':
+ this.element.modal.style.setProperty('--modal-width', 30);
+ break;
+
+ default:
+ case 'medium':
+ this.element.modal.style.setProperty('--modal-width', 50);
+ break;
+
+ case 'large':
+ this.element.modal.style.setProperty('--modal-width', 70);
+ break;
+
+ };
+
+ };
+ };
+
+ this.successButton = new Button({
+ text: successText,
+ block: false,
+ style: ['line'],
+ classList: ['modal-control-button'],
+ func: () => {
+
+ if (successAction) {
+ successAction();
+ };
+
+ this.close();
+
+ }
+ });
+
+ this.cancelButton = new Button({
+ text: cancelText,
+ block: false,
+ style: ['line'],
+ classList: ['modal-control-button'],
+ func: () => {
+
+ if (cancelAction) {
+ cancelAction();
+ };
+
+ this.close();
+
+ }
+ });
+
+ this.assemble = () => {
+
+ if (heading && isValidString(heading)) {
+
+ let headingString = heading;
+
+ if (headingString.length > maxHeadingLength) {
+ headingString = trimString(headingString.substring(0, maxHeadingLength)) + '...';
+ };
+
+ this.element.heading.text.innerHTML = headingString;
+
+ this.element.heading.heading.appendChild(this.element.heading.text);
+
+ this.element.content.content.appendChild(this.element.heading.heading);
+
+ };
+
+ if (content) {
+ if (typeof content == 'string') {
+
+ const para = complexNode({ tag: 'p', text: content });
+
+ this.element.content.content.appendChild(para);
+
+ } else {
+
+ this.element.content.content.appendChild(content);
+
+ };
+ };
+
+ this.element.content.wrapper.appendChild(this.element.content.content);
+
+ this.element.modal.appendChild(this.element.content.wrapper);
+
+ this.element.control.appendChild(this.cancelButton.button);
+
+ this.element.control.appendChild(this.successButton.button);
+
+ this.element.modal.appendChild(this.element.control);
+
+ if (maxHeight) {
+ this.element.modal.classList.add('modal-max-height');
+ };
+
+ };
+
+ this.modal = () => {
+
+ state.get.current().modal = false;
+
+ return this.element.modal;
+
+ };
+
+};
diff --git a/src/component/pageLock/index.js b/src/component/pageLock/index.js
new file mode 100644
index 00000000..41e77f71
--- /dev/null
+++ b/src/component/pageLock/index.js
@@ -0,0 +1,22 @@
+import { state } from '../state';
+
+const pageLock = {};
+
+pageLock.render = () => {
+
+ const html = document.querySelector('html');
+
+ if (state.get.current().modal || state.get.current().menu) {
+ html.classList.add('is-scroll-disabled');
+ } else {
+ html.classList.remove('is-scroll-disabled');
+ };
+
+};
+
+pageLock.init = () => {
+ state.get.current().modal = false;
+ state.get.current().menu = false;
+};
+
+export { pageLock };
diff --git a/src/component/presetThemeTile/index.css b/src/component/presetThemeTile/index.css
new file mode 100644
index 00000000..fb2fdc38
--- /dev/null
+++ b/src/component/presetThemeTile/index.css
@@ -0,0 +1,146 @@
+:root {
+ --theme-preset-size: 14;
+}
+
+@media (min-width: 1100px) {
+ :root {
+ --theme-preset-size: 18;
+ }
+}
+
+:root {
+ --theme-preset-columns: 3;
+ --theme-preset-preview-shift: 8;
+ --theme-preset-preview-gap: 8;
+ --theme-preset-preview-circle: 28;
+}
+
+.theme-preset {
+ display: grid;
+ grid-template-columns: repeat(var(--theme-preset-columns), 1fr);
+ grid-auto-rows: calc((var(--theme-preset-size) / 4) * 1em);
+ grid-gap: calc((var(--form-space) / 8) * 1em);
+}
+
+.theme-preset-tile {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ display: block;
+}
+
+.theme-preset-tile-front,
+.theme-preset-tile-back {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ transition: background-color var(--layout-transition-extra-fast), height var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast);
+}
+
+.theme-preset-tile-front {
+ z-index: 2;
+}
+
+.theme-preset-tile-back {
+ background-color: hsl(var(--button-background));
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ overflow: hidden;
+ z-index: 1;
+}
+
+.theme-preset-button {
+ padding: 0;
+ width: 100%;
+ height: 100%;
+ min-height: initial;
+ line-height: 1.6;
+ display: block;
+ overflow: hidden;
+ transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast), height var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast);
+}
+
+.theme-preset-preview {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: block;
+}
+
+.theme-preset-background-01,
+.theme-preset-background-02,
+.theme-preset-background-03,
+.theme-preset-background-04,
+.theme-preset-accent {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: block;
+ transition: clip-path var(--layout-transition-extra-fast);
+}
+
+.theme-preset-background-01 {
+ background-color: rgb(var(--theme-preset-background-01));
+ z-index: 1;
+}
+
+.theme-preset-background-02 {
+ --theme-preset-preview-shift-02: calc((var(--theme-preset-preview-shift) / 4) + 2);
+ background-color: rgb(var(--theme-preset-background-02));
+ z-index: 2;
+ clip-path: polygon(100% calc(100% - (var(--theme-preset-preview-shift-02) * ((var(--theme-preset-preview-gap) / 4) * 1em))), 100% 100%, calc(100% - (var(--theme-preset-preview-shift-02) * ((var(--theme-preset-preview-gap) / 4) * 1em))) 100%);
+ transition-delay: var(--layout-duration-03);
+}
+
+.theme-preset-background-03 {
+ --theme-preset-preview-shift-03: calc((var(--theme-preset-preview-shift) / 4) + 1);
+ background-color: rgb(var(--theme-preset-background-03));
+ z-index: 3;
+ clip-path: polygon(100% calc(100% - (var(--theme-preset-preview-shift-03) * ((var(--theme-preset-preview-gap) / 4) * 1em))), 100% 100%, calc(100% - (var(--theme-preset-preview-shift-03) * ((var(--theme-preset-preview-gap) / 4) * 1em))) 100%);
+ transition-delay: var(--layout-duration-02);
+}
+
+.theme-preset-background-04 {
+ --theme-preset-preview-shift-04: calc(var(--theme-preset-preview-shift) / 4);
+ background-color: rgb(var(--theme-preset-background-04));
+ z-index: 4;
+ clip-path: polygon(100% calc(100% - (var(--theme-preset-preview-shift-04) * ((var(--theme-preset-preview-gap) / 4) * 1em))), 100% 100%, calc(100% - (var(--theme-preset-preview-shift-04) * ((var(--theme-preset-preview-gap) / 4) * 1em))) 100%);
+ transition-delay: var(--layout-duration-01);
+}
+
+.theme-preset-accent {
+ z-index: 5;
+ background-color: rgb(var(--theme-preset-accent));
+ clip-path: circle(calc(var(--theme-preset-preview-circle) * 1%) at 100% 100%);
+}
+
+.theme-preset-button:focus,
+.theme-preset-button:hover {
+ --theme-preset-preview-shift: 10;
+ --theme-preset-preview-circle: 34;
+}
+
+.theme-preset-name {
+ padding: calc(0.75em + ((var(--theme-radius) / 8) * 0.01em));
+ color: hsl(var(--theme-preset-text));
+ font-style: normal;
+ font-size: 0.75em;
+ text-align: left;
+ display: block;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 6;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: initial;
+ transform: scale(1);
+ transition: color var(--layout-transition-extra-fast), transform var(--layout-transition-extra-fast), max-width var(--layout-transition-extra-fast), max-height var(--layout-transition-extra-fast), top var(--layout-transition-extra-fast), left var(--layout-transition-extra-fast);
+}
diff --git a/src/component/presetThemeTile/index.js b/src/component/presetThemeTile/index.js
new file mode 100644
index 00000000..b73101ec
--- /dev/null
+++ b/src/component/presetThemeTile/index.js
@@ -0,0 +1,408 @@
+import { state } from '../state';
+import { data } from '../data';
+import { theme } from '../theme';
+import { menu } from '../menu';
+import { toolbar } from '../toolbar';
+import { layout } from '../layout';
+import { header } from '../header';
+import { bookmark } from '../bookmark';
+import { group } from '../group';
+import { groupAndBookmark } from '../groupAndBookmark';
+import { themeSetting } from '../menuContent/themeSetting';
+
+import { Button } from '../button';
+
+import { node } from '../../utility/node';
+import { convertColor } from '../../utility/convertColor';
+import { isValidString } from '../../utility/isValidString';
+import { complexNode } from '../../utility/complexNode';
+import { applyCSSVar } from '../../utility/applyCSSVar';
+import { applyCSSClass } from '../../utility/applyCSSClass';
+import { applyCSSState } from '../../utility/applyCSSState';
+
+import './index.css';
+
+export const PresetThemeTile = function({
+ presetThemeData = false
+} = {}) {
+
+ this.element = {
+ tile: node('div|class:theme-preset-tile'),
+ front: node('div|class:theme-preset-tile-front'),
+ back: node('div|class:theme-preset-tile-back'),
+ preview: node('div|class:theme-preset-preview'),
+ name: node('span|class:theme-preset-name'),
+ preset: new Button({
+ text: false,
+ classList: ['theme-preset-button'],
+ style: ['ring'],
+ block: true,
+ func: () => {
+
+ const newPresetData = JSON.parse(JSON.stringify(presetThemeData));
+
+ state.get.current().theme.color.range.primary.h = newPresetData.color.range.primary.h;
+
+ state.get.current().theme.color.range.primary.s = newPresetData.color.range.primary.s;
+
+ state.get.current().theme.color.contrast = newPresetData.color.contrast;
+
+ state.get.current().theme.accent.hsl = newPresetData.accent.hsl;
+
+ state.get.current().theme.accent.rgb = newPresetData.accent.rgb;
+
+ state.get.current().theme.font = newPresetData.font;
+
+ state.get.current().theme.background = newPresetData.background;
+
+ state.get.current().theme.radius = newPresetData.radius;
+
+ state.get.current().theme.shadow = newPresetData.shadow;
+
+ state.get.current().theme.style = newPresetData.style;
+
+ state.get.current().theme.shade = newPresetData.shade;
+
+ state.get.current().theme.opacity = newPresetData.opacity;
+
+ state.get.current().theme.layout = newPresetData.layout;
+
+ state.get.current().theme.header = newPresetData.header;
+
+ state.get.current().theme.bookmark = newPresetData.bookmark;
+
+ state.get.current().theme.group = newPresetData.group;
+
+ state.get.current().theme.toolbar = newPresetData.toolbar;
+
+ theme.color.render();
+
+ theme.font.display.load();
+
+ theme.font.ui.load();
+
+ theme.background.image.render();
+
+ theme.background.video.clear();
+
+ theme.background.video.render();
+
+ themeSetting.control.style.update();
+
+ themeSetting.control.color.range.primary.h.update();
+
+ themeSetting.control.color.range.primary.s.update();
+
+ themeSetting.control.color.contrast.update();
+
+ themeSetting.control.accent.color.update();
+
+ themeSetting.control.font.display.name.update();
+
+ themeSetting.control.font.display.weight.update();
+
+ themeSetting.control.font.display.style.update();
+
+ themeSetting.control.font.ui.name.update();
+
+ themeSetting.control.font.ui.weight.update();
+
+ themeSetting.control.font.ui.style.update();
+
+ themeSetting.control.radius.update();
+
+ themeSetting.control.shadow.update();
+
+ themeSetting.control.shade.opacity.update();
+
+ themeSetting.control.shade.blur.update();
+
+ themeSetting.control.opacity.general.update();
+
+ themeSetting.control.layout.divider.size.update();
+
+ themeSetting.control.header.color.by.update();
+
+ themeSetting.control.header.color.color.update();
+
+ themeSetting.control.header.color.opacity.update();
+
+ themeSetting.control.header.color.collapse.update();
+
+ themeSetting.control.bookmark.color.by.update();
+
+ themeSetting.control.bookmark.color.color.update();
+
+ themeSetting.control.bookmark.color.opacity.update();
+
+ themeSetting.control.bookmark.color.collapse.update();
+
+ themeSetting.control.bookmark.item.border.update();
+
+ themeSetting.control.background.type.update();
+
+ themeSetting.control.background.typeCollapse.update();
+
+ themeSetting.control.background.color.update();
+
+ themeSetting.control.background.gradient.angle.update();
+
+ themeSetting.control.background.gradient.start.update();
+
+ themeSetting.control.background.gradient.end.update();
+
+ themeSetting.control.background.image.url.update();
+
+ themeSetting.control.background.image.blur.update();
+
+ themeSetting.control.background.image.grayscale.update();
+
+ themeSetting.control.background.image.scale.update();
+
+ themeSetting.control.background.image.accent.update();
+
+ themeSetting.control.background.image.opacity.update();
+
+ themeSetting.control.background.image.vignette.opacity.update();
+
+ themeSetting.control.background.image.vignette.start.update();
+
+ themeSetting.control.background.image.vignette.end.update();
+
+ themeSetting.control.background.video.url.update();
+
+ themeSetting.control.background.video.blur.update();
+
+ themeSetting.control.background.video.grayscale.update();
+
+ themeSetting.control.background.video.scale.update();
+
+ themeSetting.control.background.video.accent.update();
+
+ themeSetting.control.background.video.opacity.update();
+
+ themeSetting.control.background.video.vignette.opacity.update();
+
+ themeSetting.control.background.video.vignette.start.update();
+
+ themeSetting.control.background.video.vignette.end.update();
+
+ themeSetting.control.opacity.general.update();
+
+ themeSetting.control.opacity.toolbar.update();
+
+ themeSetting.control.opacity.bookmark.update();
+
+ themeSetting.control.opacity.search.update();
+
+ themeSetting.control.opacity.openAll.update();
+
+ themeSetting.disable();
+
+ applyCSSVar([
+ 'theme.accent.rgb.r',
+ 'theme.accent.rgb.g',
+ 'theme.accent.rgb.b',
+ 'theme.accent.hsl.h',
+ 'theme.accent.hsl.s',
+ 'theme.accent.hsl.l',
+ 'theme.font.display.weight',
+ 'theme.font.display.style',
+ 'theme.font.ui.weight',
+ 'theme.font.ui.style',
+ 'theme.opacity.general',
+ 'theme.background.color.rgb.r',
+ 'theme.background.color.rgb.g',
+ 'theme.background.color.rgb.b',
+ 'theme.background.color.hsl.h',
+ 'theme.background.color.hsl.s',
+ 'theme.background.color.hsl.l',
+ 'theme.background.image.blur',
+ 'theme.background.image.grayscale',
+ 'theme.background.image.scale',
+ 'theme.background.image.accent',
+ 'theme.background.image.opacity',
+ 'theme.background.image.vignette.opacity',
+ 'theme.background.image.vignette.start',
+ 'theme.background.image.vignette.end',
+ 'theme.background.video.blur',
+ 'theme.background.video.grayscale',
+ 'theme.background.video.scale',
+ 'theme.background.video.accent',
+ 'theme.background.video.opacity',
+ 'theme.background.video.vignette.opacity',
+ 'theme.background.video.vignette.start',
+ 'theme.background.video.vignette.end',
+ 'theme.background.gradient.angle',
+ 'theme.background.gradient.start.rgb.r',
+ 'theme.background.gradient.start.rgb.g',
+ 'theme.background.gradient.start.rgb.b',
+ 'theme.background.gradient.start.hsl.h',
+ 'theme.background.gradient.start.hsl.s',
+ 'theme.background.gradient.start.hsl.l',
+ 'theme.background.gradient.end.rgb.r',
+ 'theme.background.gradient.end.rgb.g',
+ 'theme.background.gradient.end.rgb.b',
+ 'theme.background.gradient.end.hsl.h',
+ 'theme.background.gradient.end.hsl.s',
+ 'theme.background.gradient.end.hsl.l',
+ 'theme.radius',
+ 'theme.shadow',
+ 'theme.shade.opacity',
+ 'theme.shade.blur',
+ 'theme.layout.divider.size',
+ 'theme.header.color.rgb.r',
+ 'theme.header.color.rgb.g',
+ 'theme.header.color.rgb.b',
+ 'theme.header.color.hsl.h',
+ 'theme.header.color.hsl.s',
+ 'theme.header.color.hsl.l',
+ 'theme.header.color.opacity',
+ 'theme.header.search.opacity',
+ 'theme.bookmark.color.rgb.r',
+ 'theme.bookmark.color.rgb.g',
+ 'theme.bookmark.color.rgb.b',
+ 'theme.bookmark.color.hsl.h',
+ 'theme.bookmark.color.hsl.s',
+ 'theme.bookmark.color.hsl.l',
+ 'theme.bookmark.color.opacity',
+ 'theme.bookmark.item.opacity',
+ 'theme.toolbar.opacity',
+ 'theme.group.openAll.opacity'
+ ]);
+
+ applyCSSClass([
+ 'theme.style',
+ 'theme.background.type',
+ 'theme.header.color.by',
+ 'theme.bookmark.color.by'
+ ]);
+
+ applyCSSState([
+ 'theme.layout.divider.size'
+ ]);
+
+ layout.area.render();
+
+ bookmark.item.mod.applyVar('border', state.get.current().theme.bookmark.item.border);
+
+ bookmark.item.mod.applyVar('color.opacity', state.get.current().theme.bookmark.item.opacity);
+
+ groupAndBookmark.render();
+
+ toolbar.current.update.accent();
+
+ toolbar.current.update.style();
+
+ header.element.search.update.style();
+
+ if (group.area.current.length > 0) {
+
+ group.area.current[0].update.style();
+
+ };
+
+ data.save();
+
+ }
+ })
+ };
+
+ this.previewTile = () => {
+
+ const shadeSteps = 4;
+
+ let hsl = presetThemeData.color.range.primary;
+
+ hsl.l = Math.round(presetThemeData.color.contrast.start + ((presetThemeData.color.contrast.end - presetThemeData.color.contrast.start) / 2));
+
+ let shadeStep = Math.round((presetThemeData.color.contrast.end - presetThemeData.color.contrast.start) / 10);
+
+ for (let i = 1; i <= shadeSteps; i++) {
+
+ let darken = () => { hsl.l = Math.round(hsl.l - shadeStep); };
+
+ let lighten = () => { hsl.l = Math.round(hsl.l + shadeStep); };
+
+ if (presetThemeData.style == 'dark') {
+
+ darken();
+
+ } else if (presetThemeData.style == 'light') {
+
+ lighten();
+
+ } else if (presetThemeData.style == 'system') {
+
+ if (window.matchMedia('(prefers-color-scheme:dark)').matches) {
+ darken();
+ } else if (window.matchMedia('(prefers-color-scheme:light)').matches) {
+ lighten();
+ };
+
+ };
+
+ if (hsl.l < 0) { hsl.l = 0; };
+
+ if (hsl.l > 100) { hsl.l = 100; };
+
+ let rgb = convertColor.hsl.rgb(hsl);
+
+ this.element.tile.style.setProperty('--theme-preset-background-0' + i + '-rgb-r', rgb.r);
+ this.element.tile.style.setProperty('--theme-preset-background-0' + i + '-rgb-g', rgb.g);
+ this.element.tile.style.setProperty('--theme-preset-background-0' + i + '-rgb-b', rgb.b);
+ this.element.tile.style.setProperty('--theme-preset-background-0' + i + '-hsl-h', hsl.h);
+ this.element.tile.style.setProperty('--theme-preset-background-0' + i + '-hsl-s', hsl.s);
+ this.element.tile.style.setProperty('--theme-preset-background-0' + i + '-hsl-l', hsl.l);
+
+ this.element.tile.style.setProperty('--theme-preset-background-0' + i, 'var(--theme-preset-background-0' + i + '-rgb-r), var(--theme-preset-background-0' + i + '-rgb-g), var(--theme-preset-background-0' + i + '-rgb-b)');
+
+ this.element.preview.appendChild(node('span|class:theme-preset-background-0' + i));
+
+ };
+
+ this.element.tile.style.setProperty('--theme-preset-text', '0, 0%, calc(((((var(--theme-preset-background-01-rgb-r) * var(--theme-t-r)) + (var(--theme-preset-background-01-rgb-g) * var(--theme-t-g)) + (var(--theme-preset-background-01-rgb-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%)');
+
+ this.element.tile.style.setProperty('--theme-preset-accent-rgb-r', presetThemeData.accent.rgb.r);
+ this.element.tile.style.setProperty('--theme-preset-accent-rgb-g', presetThemeData.accent.rgb.g);
+ this.element.tile.style.setProperty('--theme-preset-accent-rgb-b', presetThemeData.accent.rgb.b);
+
+ this.element.tile.style.setProperty('--theme-preset-accent', 'var(--theme-preset-accent-rgb-r), var(--theme-preset-accent-rgb-g), var(--theme-preset-accent-rgb-b)');
+
+ this.element.preview.appendChild(node('span|class:theme-preset-accent'));
+
+ return node('div|class:theme-preset-tile')
+
+ };
+
+ this.assemble = () => {
+
+ this.previewTile();
+
+ this.element.preset.button.appendChild(this.element.preview);
+
+ if (isValidString(presetThemeData.name)) {
+
+ this.element.name.innerHTML = presetThemeData.name;
+
+ this.element.preset.button.appendChild(this.element.name);
+
+ };
+
+ this.element.front.appendChild(this.element.preset.button);
+
+ this.element.tile.appendChild(this.element.back);
+
+ this.element.tile.appendChild(this.element.front);
+
+ };
+
+ this.tile = () => {
+
+ return this.element.tile;
+
+ };
+
+ this.assemble();
+
+};
diff --git a/src/css/reset.css b/src/component/reset/index.css
old mode 100755
new mode 100644
similarity index 99%
rename from src/css/reset.css
rename to src/component/reset/index.css
index 050af812..b07930ad
--- a/src/css/reset.css
+++ b/src/component/reset/index.css
@@ -12,10 +12,6 @@ html {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
-@-ms-viewport {
- width: device-width;
-}
-
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
display: block;
}
diff --git a/src/component/reset/index.js b/src/component/reset/index.js
new file mode 100644
index 00000000..b406c35c
--- /dev/null
+++ b/src/component/reset/index.js
@@ -0,0 +1,3 @@
+import './index.css';
+
+export const reset = {};
diff --git a/src/component/search/index.css b/src/component/search/index.css
new file mode 100644
index 00000000..dab6c2c2
--- /dev/null
+++ b/src/component/search/index.css
@@ -0,0 +1,70 @@
+.search {
+ font-size: 1em;
+ position: relative;
+}
+
+.search input[type="search"] {
+ background-color: hsla(var(--button-background), calc(var(--theme-header-search-opacity) / 100));
+}
+
+.is-header-search-text-justify-left .search input[type="search"] {
+ text-align: left;
+}
+
+.is-header-search-text-justify-center .search input[type="search"] {
+ text-align: center;
+}
+
+.is-header-search-text-justify-right .search input[type="search"] {
+ text-align: right;
+}
+
+input[type="search"]:hover {
+ background-color: hsla(var(--form-input-background-hover), calc(var(--theme-header-search-opacity) / 100));
+}
+
+input[type="search"]:focus,
+input[type="search"]:active {
+ background-color: hsla(var(--form-input-background-focus-active), calc(var(--theme-header-search-opacity) / 100));
+}
+
+input[type="search"]:disabled {
+ background-color: hsla(var(--form-input-background-disabled), calc(var(--theme-header-search-opacity) / 100));
+}
+
+.search-clear {
+ position: absolute;
+ top: 50%;
+ right: 0;
+ opacity: 0;
+ pointer-events: none;
+ transform: translate(0, -50%);
+ transition: opacity var(--layout-transition-extra-fast);
+}
+
+.is-search .search-clear {
+ opacity: 1;
+ pointer-events: all;
+}
+
+.is-search .search-input {
+ padding-right: 4em;
+}
+
+.is-header-search-opacity-low .search {
+ --form-placeholder: var(--theme-primary-text-010);
+ --form-placeholder-focus-hover: var(--theme-primary-text-010);
+ --form-placeholder-disabled: var(--theme-primary-text-010);
+}
+
+.is-header-search-opacity-low.is-theme-background-type-accent .search {
+ --form-placeholder: var(--theme-accent-rgb-text);
+ --form-placeholder-focus-hover: var(--theme-accent-rgb-text);
+ --form-placeholder-disabled: var(--theme-accent-rgb-text);
+}
+
+.is-header-search-opacity-low.is-theme-background-type-color .search {
+ --form-placeholder: var(--theme-background-color-rgb-text);
+ --form-placeholder-focus-hover: var(--theme-background-color-rgb-text);
+ --form-placeholder-disabled: var(--theme-background-color-rgb-text);
+}
diff --git a/src/component/search/index.js b/src/component/search/index.js
new file mode 100644
index 00000000..db4bde56
--- /dev/null
+++ b/src/component/search/index.js
@@ -0,0 +1,285 @@
+import { data } from '../data';
+import { state } from '../state';
+import { group } from '../group';
+import { bookmark } from '../bookmark';
+import { groupAndBookmark } from '../groupAndBookmark';
+import { searchEnginePreset } from '../searchEnginePreset';
+
+import * as form from '../form';
+
+import { Button } from '../button';
+import { Control_text } from '../control/text';
+import { KeyboardShortcut } from '../keyboardShortcut';
+
+import { node } from '../../utility/node';
+import { trimString } from '../../utility/trimString';
+import { isValidString } from '../../utility/isValidString';
+import { complexNode } from '../../utility/complexNode';
+
+import './index.css';
+
+export const Search = function() {
+
+ this.element = {
+ search: node('div|class:search'),
+ form: node('form|class:search-form,action,method:get'),
+ submit: node('input|type:submit,value:Search,class:is-hidden'),
+ input: new Control_text({
+ object: state.get.current(),
+ path: 'header.search.string',
+ id: 'header-search-string',
+ value: '',
+ placeholder: 'Search Bookmarks or',
+ labelText: 'Search',
+ classList: ['search-input'],
+ srOnly: true,
+ action: () => {
+ this.state();
+ this.performSearch();
+ }
+ }),
+ clear: new Button({
+ text: 'Clear search',
+ srOnly: true,
+ iconName: 'cross',
+ style: ['link'],
+ title: 'Clear search',
+ classList: ['search-clear'],
+ func: () => {
+ this.element.input.text.value = '';
+ this.state();
+ this.performSearch();
+ }
+ })
+ };
+
+ this.state = () => {
+
+ if (isValidString(trimString(this.element.input.text.value))) {
+
+ state.get.current().search = true;
+
+ } else {
+
+ state.get.current().search = false;
+
+ };
+
+ data.save();
+
+ };
+
+ this.placeholder = () => {
+
+ let placeholder = '';
+
+ if (state.get.current().bookmark.show) {
+ placeholder = 'Find bookmarks or search';
+ } else {
+ placeholder = 'Search';
+ };
+
+ switch (state.get.current().header.search.engine.selected) {
+
+ case 'custom':
+
+ if (isValidString(state.get.current().header.search.engine.custom.name)) {
+
+ placeholder = placeholder + ' ' + state.get.current().header.search.engine.custom.name;
+
+ };
+
+ break;
+
+ default:
+
+ placeholder = placeholder + ' ' + searchEnginePreset[state.get.current().header.search.engine.selected].name;
+
+ break;
+
+ };
+
+ this.element.input.text.placeholder = placeholder;
+
+ };
+
+ this.delete = new KeyboardShortcut({ keycode: 8, action: () => { this.close(); } });
+
+ this.engine = {};
+
+ this.engine.set = () => {
+
+ switch (state.get.current().header.search.engine.selected) {
+
+ case 'custom':
+
+ if (isValidString(state.get.current().header.search.engine.custom.queryName) && isValidString(state.get.current().header.search.engine.custom.url)) {
+
+ this.element.input.text.name = state.get.current().header.search.engine.custom.queryName;
+
+ this.element.form.setAttribute('action', state.get.current().header.search.engine.custom.url);
+
+ } else {
+
+ this.element.input.text.name = '';
+
+ this.element.form.setAttribute('action', '');
+
+ };
+
+ break;
+
+ default:
+
+ this.element.input.text.name = 'q';
+
+ this.element.form.setAttribute('action', searchEnginePreset[state.get.current().header.search.engine.selected].url);
+
+ break;
+
+ };
+
+ if (state.get.current().header.search.newTab) {
+ this.element.form.setAttribute("target", "_blank");
+ };
+
+ };
+
+ this.engine.bind = () => {
+ this.element.input.addEventListener();
+ };
+
+ this.performSearch = () => {
+
+ const html = document.querySelector('html');
+
+ if (state.get.current().search) {
+
+ html.classList.add('is-search');
+
+ const searchString = trimString(this.element.input.text.value).toLowerCase();
+
+ bookmark.all.forEach((item, i) => {
+
+ item.items.forEach((item, i) => {
+
+ item.searchMatch = false;
+
+ let matchUrl = isValidString(item.url) && item.url.toLowerCase().includes(searchString);
+
+ let matchName = isValidString(item.display.name.text) && trimString(item.display.name.text).toLowerCase().includes(searchString);
+
+ if (matchUrl || matchName) {
+ item.searchMatch = true;
+ };
+
+ });
+
+ });
+
+ } else {
+
+ html.classList.remove('is-search');
+
+ this.clearSearch();
+
+ };
+
+ groupAndBookmark.render();
+
+ };
+
+ this.clearSearch = () => {
+
+ bookmark.all.forEach((item, i) => {
+
+ item.items.forEach((item, i) => {
+
+ delete item.searchMatch;
+
+ });
+
+ });
+
+ data.save();
+
+ };
+
+ this.assemble = () => {
+
+ this.element.input.text.type = 'Search';
+
+ this.element.form.appendChild(this.element.input.text);
+
+ this.element.form.appendChild(this.element.submit);
+
+ this.element.form.appendChild(this.element.clear.button);
+
+ this.element.search.appendChild(this.element.form);
+
+ };
+
+ this.search = () => {
+
+ return this.element.search;
+
+ };
+
+ this.resultCount = () => {
+
+ const count = { total: 0, group: [] };
+
+ bookmark.all.forEach((item, i) => {
+
+ count.group.push({
+ bookmarkCount: item.items.length,
+ searchMatch: 0
+ })
+
+ const groupIndex = i;
+
+ item.items.forEach((item, i) => {
+
+ if (item.searchMatch) { count.group[groupIndex].searchMatch++ };
+
+ });
+
+ count.total = count.total + count.group[groupIndex].searchMatch;
+
+ });
+
+ return count;
+
+ };
+
+ this.update = {};
+
+ this.update.style = () => {
+
+ const html = document.querySelector('html');
+
+ if (state.get.current().theme.header.search.opacity < 40) {
+
+ html.classList.add('is-header-search-opacity-low');
+
+ } else {
+
+ html.classList.remove('is-header-search-opacity-low');
+
+ };
+
+ };
+
+ this.state();
+
+ this.assemble();
+
+ this.placeholder();
+
+ this.engine.set();
+
+ this.clearSearch();
+
+ this.update.style();
+
+};
diff --git a/src/component/searchEmpty/index.css b/src/component/searchEmpty/index.css
new file mode 100644
index 00000000..570a9d94
--- /dev/null
+++ b/src/component/searchEmpty/index.css
@@ -0,0 +1,23 @@
+.search-empty {
+ background-color: hsla(var(--theme-primary-040), 0.2);
+ padding: 2em 3em;
+ border-radius: calc(var(--theme-radius) * 0.01em);
+ height: inherit;
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 1em;
+}
+
+.search-empty-string {
+ max-width: 100%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.search-empty-string:not(:last-child) {
+ margin-bottom: 0;
+}
diff --git a/src/component/searchEmpty/index.js b/src/component/searchEmpty/index.js
new file mode 100644
index 00000000..42d77eb9
--- /dev/null
+++ b/src/component/searchEmpty/index.js
@@ -0,0 +1,61 @@
+import { state } from '../state';
+import { header } from '../header';
+import { searchEnginePreset } from '../searchEnginePreset';
+
+import { node } from '../../utility/node';
+import { trimString } from '../../utility/trimString';
+import { complexNode } from '../../utility/complexNode';
+import { isValidString } from '../../utility/isValidString';
+
+import './index.css';
+
+export const SearchEmpty = function() {
+
+ this.element = {
+ empty: node('div|class:search-empty'),
+ description: complexNode({
+ tag: 'p',
+ text: `No bookmarks matching "${trimString(header.element.search.element.input.text.value)}" found`,
+ attr: [{
+ key: 'class',
+ value: 'search-empty-string'
+ }]
+ }),
+ helper: node('p|class:search-empty-helper small muted')
+ };
+
+ this.assemble = () => {
+
+ switch (state.get.current().header.search.engine.selected) {
+
+ case 'custom':
+
+ if (isValidString(state.get.current().header.search.engine.custom.name)) {
+
+ this.element.helper.textContent = 'Press "Enter" to Search ' + state.get.current().header.search.engine.custom.name;
+
+ };
+
+ break;
+
+ default:
+
+ this.element.helper.textContent = 'Press "Enter" to Search ' + searchEnginePreset[state.get.current().header.search.engine.selected].name;
+
+ break;
+
+ };
+
+ this.element.empty.appendChild(this.element.description);
+
+ this.element.empty.appendChild(this.element.helper);
+
+ };
+
+ this.empty = () => {
+ return this.element.empty;
+ };
+
+ this.assemble();
+
+};
diff --git a/src/component/searchEnginePreset/index.js b/src/component/searchEnginePreset/index.js
new file mode 100644
index 00000000..cbf781c5
--- /dev/null
+++ b/src/component/searchEnginePreset/index.js
@@ -0,0 +1,7 @@
+export const searchEnginePreset = {
+ google: { url: 'https://www.google.com/search', name: 'Google' },
+ duckduckgo: { url: 'https://duckduckgo.com/', name: 'DuckDuckGo' },
+ youtube: { url: 'https://www.youtube.com/results?search_query=', name: 'YouTube' },
+ giphy: { url: 'https://giphy.com/search/', name: 'Giphy' },
+ bing: { url: 'https://www.bing.com/search?q=', name: 'Bing' }
+};
diff --git a/src/component/shade/index.css b/src/component/shade/index.css
new file mode 100644
index 00000000..964da1ac
--- /dev/null
+++ b/src/component/shade/index.css
@@ -0,0 +1,22 @@
+.shade {
+ background-color: rgba(var(--theme-accent), calc(var(--theme-shade-opacity) / 100));
+ position: fixed;
+ top: -1em;
+ left: -1em;
+ width: calc(100vw + 2em);
+ height: calc(100vh + 2em);
+ opacity: 0;
+ z-index: var(--z-index-shade);
+ pointer-events: all;
+ backdrop-filter: blur(calc(var(--theme-shade-blur) * 1px));
+ transition: background-color var(--layout-transition-extra-fast), opacity var(--layout-transition-extra-fast), backdrop-filter var(--layout-transition-extra-fast);
+}
+
+.shade.is-transparent {
+ pointer-events: none;
+}
+
+.is-edge .shade {
+ background-color: rgba(var(--theme-accent), calc(var(--theme-shade-opacity) / 500));
+ backdrop-filter: blur(0);
+}
diff --git a/src/component/shade/index.js b/src/component/shade/index.js
new file mode 100644
index 00000000..426676cf
--- /dev/null
+++ b/src/component/shade/index.js
@@ -0,0 +1,57 @@
+import { node } from '../../utility/node';
+
+import './index.css';
+
+export const Shade = function() {
+
+ this.element = {
+ shade: node('div|class:shade')
+ };
+
+ this.open = () => {
+ const body = document.querySelector('body');
+
+ this.element.shade.classList.add('is-transparent');
+
+ this.element.shade.addEventListener('transitionend', (event) => {
+ if (event.propertyName === 'opacity' && getComputedStyle(this.element.shade).opacity == 0) {
+ body.removeChild(this.element.shade);
+ };
+ });
+
+ body.appendChild(this.element.shade);
+
+ getComputedStyle(this.element.shade).opacity;
+
+ this.element.shade.classList.remove('is-transparent');
+
+ this.element.shade.classList.add('is-opaque');
+ };
+
+ this.close = () => {
+
+ this.element.shade.classList.remove('is-opaque');
+
+ this.element.shade.classList.add('is-transparent');
+
+ clearTimeout(this.delayedForceRemove);
+
+ this.delayedForceRemove = setTimeout(() => {
+
+ const body = document.querySelector('body');
+
+ if (body.contains(this.element.shade)) {
+ body.removeChild(this.element.shade)
+ };
+
+ }, 6000);
+
+ };
+
+ this.delayedForceRemove = null;
+
+ this.shade = () => {
+ return this.element.shade;
+ };
+
+};
diff --git a/src/component/stagedBookmark/index.js b/src/component/stagedBookmark/index.js
new file mode 100644
index 00000000..59428f24
--- /dev/null
+++ b/src/component/stagedBookmark/index.js
@@ -0,0 +1,18 @@
+import { bookmarkDefault } from '../bookmarkDefault';
+
+export const StagedBookmark = function(bookmarkData) {
+
+ this.link = bookmarkData || JSON.parse(JSON.stringify(bookmarkDefault));
+
+ this.position = {
+ origin: { group: 0, item: 0 },
+ destination: { group: 0, item: 0 }
+ };
+
+ this.group = { destination: 'existing', name: '' };
+
+ this.type = { new: false, existing: false };
+
+ this.propagate = { display: false, layout: false, theme: false };
+
+};
diff --git a/src/component/stagedCustomTheme/index.js b/src/component/stagedCustomTheme/index.js
new file mode 100644
index 00000000..742db3cb
--- /dev/null
+++ b/src/component/stagedCustomTheme/index.js
@@ -0,0 +1,9 @@
+import { customThemeDefault } from '../customThemeDefault';
+
+export const StagedCustomTheme = function(customThemeData) {
+
+ this.theme = customThemeData || JSON.parse(JSON.stringify(customThemeDefault()));
+
+ this.position = 0;
+
+};
diff --git a/src/component/stagedGroup/index.js b/src/component/stagedGroup/index.js
new file mode 100644
index 00000000..1b60c35d
--- /dev/null
+++ b/src/component/stagedGroup/index.js
@@ -0,0 +1,28 @@
+import { bookmark } from '../bookmark';
+import { groupDefault } from '../groupDefault';
+import { isValidString } from '../../utility/isValidString';
+import { trimString } from '../../utility/trimString';
+
+export const StagedGroup = function(groupData) {
+
+ this.group = groupData || JSON.parse(JSON.stringify(groupDefault));
+
+ this.position = { origin: 0, destination: 0 };
+
+ this.type = { new: false, existing: false };
+
+ this.newGroup = ({
+ name = false
+ } = {}) => {
+
+ if (name && isValidString(name)) {
+ this.group.name.text = trimString(name);
+ };
+
+ this.position.destination = bookmark.all.length;
+
+ this.type.new = true;
+
+ };
+
+};
diff --git a/src/component/state/index.js b/src/component/state/index.js
new file mode 100644
index 00000000..4efe2603
--- /dev/null
+++ b/src/component/state/index.js
@@ -0,0 +1,272 @@
+const state = {};
+
+state.current = {};
+
+state.default = {
+ layout: {
+ area: {
+ header: { width: 100, justify: 'center' },
+ bookmark: { width: 100, justify: 'center' }
+ },
+ alignment: 'center-center',
+ order: 'header-bookmark',
+ direction: 'vertical',
+ size: 100,
+ width: 80,
+ padding: 40,
+ gutter: 20,
+ breakpoint: 'xs',
+ scrollbar: 'auto',
+ title: '',
+ overscroll: false
+ },
+ header: {
+ item: { justify: 'left' },
+ greeting: { show: false, type: 'good', custom: '', name: '', size: 100, newLine: false },
+ transitional: { show: false, type: 'timeanddate', size: 100, newLine: false },
+ clock: {
+ hour: { show: true, display: 'number' },
+ minute: { show: true, display: 'number' },
+ second: { show: false, display: 'number' },
+ separator: { show: true, text: '' },
+ meridiem: { show: false },
+ hour24: { show: true },
+ size: 100,
+ newLine: false
+ },
+ date: {
+ day: { show: true, display: 'word', weekStart: 'monday', length: 'long' },
+ date: { show: true, display: 'number', ordinal: true },
+ month: { show: true, display: 'word', length: 'long', ordinal: true },
+ year: { show: false, display: 'number' },
+ separator: { show: true, text: '' },
+ format: 'date-month',
+ size: 100,
+ newLine: false
+ },
+ search: {
+ show: true,
+ width: { by: 'auto', size: 30 },
+ focus: false,
+ engine: { selected: 'google', custom: { name: '', url: '', queryName: '' } },
+ text: { justify: 'center' },
+ size: 100,
+ newLine: false,
+ newTab: false
+ },
+ order: [],
+ edit: false
+ },
+ bookmark: {
+ size: 100,
+ url: { show: true },
+ line: { show: true },
+ shadow: { show: true },
+ hoverScale: { show: true },
+ orientation: 'bottom',
+ style: 'block',
+ newTab: false,
+ edit: false,
+ add: false,
+ show: true
+ },
+ group: {
+ area: { justify: 'left' },
+ name: { size: 100 },
+ order: 'header-body',
+ openAll: { size: 100 },
+ edit: false,
+ add: false
+ },
+ toolbar: { location: 'header', position: 'bottom-right', size: 100, accent: { show: true }, add: { show: true }, edit: { show: true }, newLine: false },
+ theme: {
+ color: { range: { primary: { h: 222, s: 14 } }, contrast: { start: 17, end: 83 }, shades: 14 },
+ accent: { hsl: { h: 221, s: 100, l: 50 }, rgb: { r: 0, g: 80, b: 255 }, random: { active: false, style: 'any' }, cycle: { active: false, speed: 300, step: 10 } },
+ font: {
+ display: { name: '', weight: 400, style: 'normal' },
+ ui: { name: '', weight: 400, style: 'normal' }
+ },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 },
+ style: 'dark',
+ radius: 25,
+ shadow: 75,
+ shade: { opacity: 30, blur: 0 },
+ custom: { all: [], edit: false }
+ },
+ search: false,
+ modal: false,
+ menu: false,
+ autoSuggest: false
+};
+
+state.minMax = {
+ header: {
+ greeting: { size: { min: 50, max: 500 } },
+ transitional: { size: { min: 50, max: 500 } },
+ clock: { size: { min: 50, max: 500 } },
+ date: { size: { min: 50, max: 500 } },
+ search: { size: { min: 50, max: 500 }, width: { size: { min: 10, max: 100 } } }
+ },
+ bookmark: { size: { min: 50, max: 500 } },
+ group: {
+ name: { size: { min: 50, max: 500 } },
+ openAll: { size: { min: 50, max: 500 } }
+ },
+ layout: {
+ area: {
+ header: { width: { min: 10, max: 100 } },
+ bookmark: { width: { min: 10, max: 100 } }
+ },
+ size: { min: 10, max: 200 },
+ width: { min: 10, max: 100 },
+ padding: { min: 0, max: 300 },
+ gutter: { min: 0, max: 300 }
+ },
+ toolbar: { size: { min: 50, max: 300 } },
+ theme: {
+ color: {
+ range: { primary: { h: { min: 0, max: 359 }, s: { min: 0, max: 100 } } },
+ contrast: { start: { min: 0, max: 100 }, end: { min: 0, max: 100 } }
+ },
+ accent: {
+ hsl: { h: { min: 0, max: 359 }, s: { min: 0, max: 100 }, l: { min: 0, max: 100 } },
+ rgb: { r: { min: 0, max: 255 }, g: { min: 0, max: 255 }, b: { min: 0, max: 255 } },
+ cycle: { speed: { min: 100, max: 10000 }, step: { min: 1, max: 100 } }
+ },
+ font: {
+ display: { weight: { min: 100, max: 900 } },
+ ui: { weight: { min: 100, max: 900 } }
+ },
+ opacity: {
+ general: { min: 0, max: 100 },
+ toolbar: { min: 0, max: 100 },
+ bookmark: { min: 0, max: 100 },
+ search: { min: 0, max: 100 },
+ openAll: { min: 0, max: 100 }
+ },
+ layout: { divider: { size: { min: 0, max: 10 } } },
+ header: {
+ color: {
+ hsl: { h: { min: 0, max: 359 }, s: { min: 0, max: 100 }, l: { min: 0, max: 100 } },
+ rgb: { r: { min: 0, max: 255 }, g: { min: 0, max: 255 }, b: { min: 0, max: 255 } },
+ opacity: { min: 0, max: 100 }
+ },
+ search: { opacity: { min: 0, max: 100 } }
+ },
+ bookmark: {
+ color: {
+ hsl: { h: { min: 0, max: 359 }, s: { min: 0, max: 100 }, l: { min: 0, max: 100 } },
+ rgb: { r: { min: 0, max: 255 }, g: { min: 0, max: 255 }, b: { min: 0, max: 255 } },
+ opacity: { min: 0, max: 100 }
+ },
+ item: { border: { min: 0, max: 20 }, opacity: { min: 0, max: 100 } }
+ },
+ group: { openAll: { opacity: { min: 0, max: 100 } } },
+ toolbar: { opacity: { min: 0, max: 100 } },
+ background: {
+ color: {
+ hsl: { h: { min: 0, max: 359 }, s: { min: 0, max: 100 }, l: { min: 0, max: 100 } },
+ rgb: { r: { min: 0, max: 255 }, g: { min: 0, max: 255 }, b: { min: 0, max: 255 } }
+ },
+ gradient: {
+ angle: { min: 0, max: 360 },
+ start: {
+ hsl: { h: { min: 0, max: 359 }, s: { min: 0, max: 100 }, l: { min: 0, max: 100 } },
+ rgb: { r: { min: 0, max: 255 }, g: { min: 0, max: 255 }, b: { min: 0, max: 255 } }
+ },
+ end: {
+ hsl: { h: { min: 0, max: 359 }, s: { min: 0, max: 100 }, l: { min: 0, max: 100 } },
+ rgb: { r: { min: 0, max: 255 }, g: { min: 0, max: 255 }, b: { min: 0, max: 255 } }
+ },
+ },
+ image: { blur: { min: 0, max: 200 }, grayscale: { min: 0, max: 100 }, scale: { min: 100, max: 400 }, accent: { min: 0, max: 100 }, opacity: { min: 0, max: 100 }, vignette: { opacity: { min: 0, max: 100 }, start: { min: 0, max: 100 }, end: { min: 0, max: 100 } } },
+ video: { blur: { min: 0, max: 200 }, grayscale: { min: 0, max: 100 }, scale: { min: 100, max: 400 }, accent: { min: 0, max: 100 }, opacity: { min: 0, max: 100 }, vignette: { opacity: { min: 0, max: 100 }, start: { min: 0, max: 100 }, end: { min: 0, max: 100 } } }
+ },
+ radius: { min: 0, max: 500 },
+ shadow: { min: 0, max: 300 },
+ shade: { opacity: { min: 0, max: 100 }, blur: { min: 0, max: 200 } }
+ }
+};
+
+state.step = {
+ theme: {
+ font: {
+ display: { weight: 100 },
+ ui: { weight: 100 }
+ }
+ }
+};
+
+state.option = {
+ layout: {
+ area: {
+ header: { justify: ['left', 'center', 'right'], align: ['left', 'center', 'right'] },
+ bookmark: { justify: ['left', 'center', 'right'], align: ['left', 'center', 'right'] }
+ },
+ alignment: ['top-left', 'top-center', 'top-right', 'center-left', 'center-center', 'center-right', 'bottom-left', 'bottom-center', 'bottom-right'],
+ direction: ['horizontal', 'vertical'],
+ order: ['header-bookmark', 'bookmark-header'],
+ scrollbar: ['auto', 'thin', 'none']
+ },
+ header: {
+ item: { justify: ['left', 'center', 'right'] },
+ search: { width: { by: ['auto', 'custom'] }, text: { justify: ['left', 'center', 'right'] } }
+ },
+ bookmark: {
+ item: { justify: ['left', 'center', 'right'] },
+ orientation: ['top', 'bottom'],
+ style: ['block', 'list']
+ },
+ group: {
+ area: { justify: ['left', 'center', 'right'] },
+ order: ['header-body', 'body-header']
+ },
+ toolbar: {
+ location: ['corner', 'header'],
+ position: ['top-left', 'top-right', 'bottom-right', 'bottom-left']
+ },
+ theme: {
+ accent: { random: { style: ['any', 'light', 'dark', 'pastel', 'saturated'] } },
+ style: ['dark', 'light', 'system'],
+ header: { color: { by: ['theme', 'custom'] } },
+ bookmark: { color: { by: ['theme', 'custom'] } },
+ background: { type: ['theme', 'accent', 'color', 'gradient', 'image', 'video'] }
+ }
+};
+
+state.get = {
+ current: () => { return state.current },
+ default: () => { return JSON.parse(JSON.stringify(state.default)) },
+ minMax: () => { return JSON.parse(JSON.stringify(state.minMax)) },
+ step: () => { return JSON.parse(JSON.stringify(state.step)) },
+ option: () => { return JSON.parse(JSON.stringify(state.option)) }
+};
+
+state.set = {
+ restore: (dataToRestore) => {
+ state.current = dataToRestore.state;
+ console.log('state restored');
+ },
+ default: () => {
+ state.current = state.get.default();
+ console.log('state set to default');
+ }
+};
+
+export { state };
diff --git a/src/css/auto-suggest.css b/src/component/suggest/index.css
similarity index 63%
rename from src/css/auto-suggest.css
rename to src/component/suggest/index.css
index 51098863..23003fa4 100644
--- a/src/css/auto-suggest.css
+++ b/src/component/suggest/index.css
@@ -1,32 +1,33 @@
-.auto-suggest {
+.suggest {
position: relative;
z-index: 1;
font-size: 1em;
}
-.auto-suggest {
- background-color: rgb(var(--theme-color-02));
+.suggest {
+ background-color: hsl(var(--theme-primary-020));
margin-top: 0.5em;
padding: 1em;
position: absolute;
- top: 0;
- left: 0;
- width: 100%;
+ top: calc(var(--suggest-top) * 1px);
+ left: calc(var(--suggest-left) * 1px);
+ width: calc(var(--suggest-width) * 1px);
max-height: 40vh;
- border-radius: var(--theme-radius);
+ border-radius: calc(var(--theme-radius) * 0.01em);
overflow-y: auto;
- z-index: var(--z-index-auto-suggest);
+ z-index: var(--z-index-suggest);
box-shadow: var(--theme-shadow-bottom-large);
- animation: appear var(--layout-transition-extra-fast) 1;
+ opacity: 0;
+ transition: opacity var(--layout-transition-extra-fast);
}
-.auto-suggest-list {
+.suggest-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(6em, 1fr));
- grid-gap: calc(var(--form-wrap-space) / 2);
+ grid-gap: calc((var(--form-space) / 8) * 1em);
}
-.auto-suggest-item {
+.suggest-item {
padding: 0.5em;
width: 100%;
height: 100%;
@@ -40,11 +41,11 @@
transition: background-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
}
-.auto-suggest-icon {
+.suggest-icon {
font-size: 2em;
}
-.auto-suggest-icon-text {
+.suggest-icon-text {
margin-top: 1em;
font-size: 0.6em;
text-align: center;
diff --git a/src/component/suggest/index.js b/src/component/suggest/index.js
new file mode 100644
index 00000000..09c8128b
--- /dev/null
+++ b/src/component/suggest/index.js
@@ -0,0 +1,409 @@
+import { state } from '../state';
+import { fontawesome } from '../fontawesome';
+
+import { Button } from '../button';
+
+import { isValidString } from '../../utility/isValidString';
+import { trimString } from '../../utility/trimString';
+import { node } from '../../utility/node';
+import { clearChildNode } from '../../utility/clearChildNode';
+
+import './index.css';
+
+export const Suggest = function({
+ input = false,
+ widthElement = false,
+ type = false,
+ postFocus = false,
+ action = false
+} = {}) {
+
+ this.state = {
+ open: false
+ };
+
+ this.element = {
+ suggest: node('div|class:suggest'),
+ list: node('div|class:suggest-list list-unstyled'),
+ input: input
+ };
+
+ this.open = () => {
+
+ const results = this.suggestItems();
+
+ if (results.length > 0) {
+
+ if (this.state.open) {
+
+ this.style();
+
+ clearChildNode(this.element.list);
+
+ this.populateList(results);
+
+ } else {
+
+ const body = document.querySelector('body');
+
+ this.style();
+
+ this.element.suggest.classList.add('is-transparent');
+
+ clearChildNode(this.element.list);
+
+ this.populateList(results);
+
+ body.appendChild(this.element.suggest);
+
+ getComputedStyle(this.element.suggest).opacity;
+
+ this.element.suggest.classList.remove('is-transparent');
+
+ this.element.suggest.classList.add('is-opaque');
+
+ this.bind.add();
+
+ this.state.open = true;
+
+ };
+
+ } else {
+
+ this.close();
+
+ };
+
+ };
+
+ this.close = () => {
+
+ this.element.suggest.classList.remove('is-opaque');
+
+ this.element.suggest.classList.add('is-transparent');
+
+ };
+
+ this.bind = {};
+
+ this.bind.input = () => {
+
+ this.element.input.addEventListener('focus', () => {
+ clearTimeout(this.timer);
+ this.timer = setTimeout(this.open, 300);
+ });
+
+ this.element.input.addEventListener('input', () => {
+ clearTimeout(this.timer);
+ this.timer = setTimeout(this.open, 300);
+ });
+
+ };
+
+ this.bind.add = () => {
+
+ window.addEventListener('mouseup', this.clickOut);
+
+ window.addEventListener('keydown', this.esc);
+
+ window.addEventListener('keydown', this.navigateResults);
+
+ };
+
+ this.bind.remove = () => {
+
+ window.removeEventListener('mouseup', this.clickOut);
+
+ window.removeEventListener('keydown', this.esc);
+
+ window.removeEventListener('keydown', this.navigateResults);
+
+ };
+
+ this.style = () => {
+
+ const inputRect = input.getBoundingClientRect();
+
+ const box = {
+ left: inputRect.left,
+ top: inputRect.bottom + window.scrollY,
+ width: inputRect.width
+ };
+
+ if (widthElement) {
+
+ const widthElementRect = widthElement.getBoundingClientRect();
+
+ box.width = widthElementRect.width;
+
+ box.left = widthElementRect.left;
+
+ };
+
+ this.element.suggest.style.setProperty('--suggest-top', box.top);
+
+ this.element.suggest.style.setProperty('--suggest-left', box.left);
+
+ this.element.suggest.style.setProperty('--suggest-width', box.width);
+
+ };
+
+ this.assemble = () => {
+
+ const body = document.querySelector('body');
+
+ this.element.suggest.appendChild(this.element.list);
+
+ this.element.suggest.addEventListener('transitionend', (event) => {
+
+ if (event.propertyName === 'opacity' && getComputedStyle(this.element.suggest).opacity == 0) {
+
+ body.removeChild(this.element.suggest);
+
+ this.bind.remove();
+
+ this.state.open = false;
+
+ };
+
+ });
+
+ };
+
+ this.searchTerm = () => {
+ return trimString(input.value).toLowerCase();
+ };
+
+ this.populateList = (results) => {
+
+ const listType = {
+ fontawesomeIcon: () => {
+ const successAction = (suggestData) => {
+
+ this.close();
+
+ if (action) {
+ action(suggestData);
+ };
+
+ if (postFocus) {
+ postFocus.focus();
+ };
+
+ };
+
+ results.forEach((item, i) => {
+
+ let li = node('li|class:suggest-list-item');
+
+ let resultItem = new Button({
+ text: false,
+ style: ['link', 'ring'],
+ classList: ['suggest-item'],
+ func: () => {
+ successAction(item);
+ }
+ });
+
+ let icon = node('span|class:suggest-icon fa-' + item.name);
+
+ if (item.styles.includes('solid')) {
+ icon.classList.add('fas');
+ } else if (item.styles.includes('brands')) {
+ icon.classList.add('fab');
+ };
+
+ let text = node('span:' + item.label + '|class:suggest-icon-text');
+
+ resultItem.button.appendChild(icon);
+
+ resultItem.button.appendChild(text);
+
+ li.appendChild(resultItem.button);
+
+ this.element.list.appendChild(li);
+
+ });
+ }
+ };
+
+ listType[type]();
+
+ };
+
+ this.timer = false;
+
+ this.suggestItems = () => {
+ const suggestType = {
+ fontawesomeIcon: (string) => {
+ if (isValidString(string)) {
+
+ return fontawesome.filter((item) => {
+ let match = false;
+
+ if (item.name.toLowerCase().includes(string) || item.label.toLowerCase().includes(string)) {
+ match = true;
+ };
+
+ item.search.forEach((item, i) => {
+ if (item.toLowerCase().includes(string)) {
+ match = true;
+ };
+ });
+
+ item.styles.forEach((item, i) => {
+ if (item.toLowerCase().includes(string)) {
+ match = true;
+ };
+ });
+
+ return match;
+ });
+
+ } else {
+ return fontawesome;
+ };
+ }
+ };
+
+ return suggestType[type](this.searchTerm());
+ };
+
+ this.navigateResults = (event) => {
+
+ let elementToFocus = null;
+
+ let focusIndex = null;
+
+ const allSuggestItems = this.element.suggest.querySelectorAll('.suggest-item');
+
+ const columnCount = getComputedStyle(this.element.suggest.querySelector('.suggest-list')).getPropertyValue('grid-template-columns').split(' ').length;
+
+ const findFocus = () => {
+
+ for (var i = 0; i < allSuggestItems.length; i++) {
+
+ if (allSuggestItems[i] == document.activeElement) {
+ focusIndex = i;
+ };
+
+ };
+
+ };
+
+ const keyEvents = () => {
+
+ // up
+ if (event.keyCode == 38) {
+ event.preventDefault();
+ if (focusIndex == null) {
+ elementToFocus = allSuggestItems[allSuggestItems.length - 1];
+ } else {
+ if (focusIndex >= columnCount && focusIndex <= allSuggestItems.length - 1) {
+ elementToFocus = allSuggestItems[focusIndex - columnCount];
+ } else {
+ elementToFocus = input;
+ };
+ };
+ };
+
+ // down
+ if (event.keyCode == 40) {
+ event.preventDefault();
+ if (focusIndex == null) {
+ elementToFocus = allSuggestItems[0];
+ } else {
+ if (focusIndex < allSuggestItems.length - columnCount) {
+ elementToFocus = allSuggestItems[focusIndex + columnCount];
+ } else {
+ elementToFocus = input;
+ };
+ };
+ };
+
+ // right
+ if (event.keyCode == 39 && document.activeElement != input) {
+ event.preventDefault();
+ if (focusIndex == null) {
+ elementToFocus = allSuggestItems[0];
+ } else {
+ if (focusIndex >= 0 && focusIndex < allSuggestItems.length - 1) {
+ elementToFocus = allSuggestItems[focusIndex + 1];
+ } else {
+ elementToFocus = input;
+ };
+ };
+ };
+
+ // left
+ if (event.keyCode == 37 && document.activeElement != input) {
+ event.preventDefault();
+ if (focusIndex == null) {
+ elementToFocus = allSuggestItems[allSuggestItems.length - 1];
+ } else {
+ if (focusIndex > 0 && focusIndex <= allSuggestItems.length - 1) {
+ elementToFocus = allSuggestItems[focusIndex - 1];
+ } else {
+ elementToFocus = input;
+ };
+ };
+ };
+
+ // tab
+ if (!event.shiftKey && event.keyCode == 9 && document.activeElement == input) {
+ event.preventDefault();
+ elementToFocus = allSuggestItems[0];
+ };
+ if (!event.shiftKey && event.keyCode == 9 && document.activeElement == allSuggestItems[allSuggestItems.length - 1]) {
+ event.preventDefault();
+ elementToFocus = postFocus;
+ this.close();
+ };
+
+ // shift tab
+ if (event.shiftKey && event.keyCode == 9 && document.activeElement == allSuggestItems[0]) {
+ event.preventDefault();
+ elementToFocus = input;
+ };
+ if (event.shiftKey && event.keyCode == 9 && document.activeElement == input) {
+ this.close();
+ };
+
+ };
+
+ findFocus();
+
+ keyEvents();
+
+ if (elementToFocus) {
+ elementToFocus.focus();
+ };
+ };
+
+ this.clickOut = (event) => {
+
+ const path = event.path || (event.composedPath && event.composedPath());
+
+ if (!path.includes(this.element.suggest) && !path.includes(this.element.input)) {
+ this.close();
+ };
+
+ };
+
+ this.esc = (event) => {
+
+ if ((event.keyCode == 27)) {
+
+ event.preventDefault();
+
+ this.close();
+
+ };
+
+ };
+
+ this.assemble();
+
+ this.bind.input();
+
+};
diff --git a/src/component/tab/index.css b/src/component/tab/index.css
new file mode 100644
index 00000000..055f3505
--- /dev/null
+++ b/src/component/tab/index.css
@@ -0,0 +1,26 @@
+:root {
+ --tab-space: calc((var(--form-space) / 4) * 1em);
+}
+
+.tab {
+ display: grid;
+ grid-template-rows: auto auto;
+ grid-template-areas:
+ "nav"
+ "content";
+ gap: var(--tab-space);
+ width: 100%;
+}
+
+.tab-nav {
+ grid-area: nav;
+ display: flex;
+}
+
+.tab-nav>* {
+ flex: 1 1 50%;
+}
+
+.tab-content {
+ grid-area: content;
+}
diff --git a/src/component/tab/index.js b/src/component/tab/index.js
new file mode 100644
index 00000000..5817e642
--- /dev/null
+++ b/src/component/tab/index.js
@@ -0,0 +1,69 @@
+import { form } from '../form';
+
+import { Button } from '../button';
+
+import { node } from '../../utility/node';
+import { complexNode } from '../../utility/complexNode';
+
+import './index.css';
+
+export const Tab = function({
+ group = []
+} = {}) {
+
+ this.tabElement = node('div|class:tab');
+
+ this.tabNav = node('div|class:tab-nav form-group form-group-horizontal form-group-block');
+
+ this.tabContent = node('div|class:tab-content');
+
+ this.tabElement.appendChild(this.tabNav);
+
+ this.tabElement.appendChild(this.tabContent);
+
+ this.deactive = () => {
+ group.forEach((item, i) => {
+ item.active = false;
+ });
+ };
+
+ group.forEach((item, i) => {
+ item.toggle = new Button({
+ text: item.tabText,
+ style: ['line'],
+ classList: ['form-group-item-equal'],
+ func: () => {
+
+ this.deactive();
+ item.active = true;
+ this.update();
+
+ }
+ });
+
+ this.tabNav.appendChild(item.toggle.button);
+
+ this.tabContent.appendChild(item.area);
+ });
+
+ this.update = () => {
+ group.forEach((item, i) => {
+
+ if (item.active) {
+ item.toggle.active();
+ item.area.classList.remove('is-hidden');
+ } else {
+ item.toggle.deactive();
+ item.area.classList.add('is-hidden');
+ };
+
+ });
+ };
+
+ this.update();
+
+ this.tab = () => {
+ return this.tabElement;
+ };
+
+};
diff --git a/src/component/theme/index.css b/src/component/theme/index.css
new file mode 100644
index 00000000..9d92d762
--- /dev/null
+++ b/src/component/theme/index.css
@@ -0,0 +1,429 @@
+:root {
+ /* calculates perceived lightness using the sRGB Luma method */
+ --theme-t: 0.55;
+ --theme-t-r: 0.2721;
+ --theme-t-g: 0.7152;
+ --theme-t-b: 0.1255;
+}
+
+:root {
+ --theme-accent: var(--theme-accent-rgb-r), var(--theme-accent-rgb-g), var(--theme-accent-rgb-b);
+ --theme-accent-rgb-text: 0, 0%, calc(((((var(--theme-accent-rgb-r) * var(--theme-t-r)) + (var(--theme-accent-rgb-g) * var(--theme-t-g)) + (var(--theme-accent-rgb-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+}
+
+:root {
+ --theme-font-display-name: "Fjalla One", sans-serif;
+ --theme-font-display-weight: 400;
+ --theme-font-display-style: "normal";
+ --theme-font-ui-name: "Open Sans", sans-serif;
+ --theme-font-ui-weight: 400;
+ --theme-font-ui-style: "normal";
+}
+
+:root {
+ --theme-background-accent: var(--theme-accent);
+}
+
+:root {
+ --theme-background-theme: var(--theme-primary-010);
+}
+
+:root {
+ --theme-background-gradient-start: var(--theme-background-gradient-start-rgb-r), var(--theme-background-gradient-start-rgb-g), var(--theme-background-gradient-start-rgb-b);
+ --theme-background-gradient-end: var(--theme-background-gradient-end-rgb-r), var(--theme-background-gradient-end-rgb-g), var(--theme-background-gradient-end-rgb-b);
+}
+
+:root {
+ --theme-background-color: var(--theme-background-color-rgb-r), var(--theme-background-color-rgb-g), var(--theme-background-color-rgb-b);
+ --theme-background-color-rgb-text: 0, 0%, calc(((((var(--theme-background-color-rgb-r) * var(--theme-t-r)) + (var(--theme-background-color-rgb-g) * var(--theme-t-g)) + (var(--theme-background-color-rgb-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+}
+
+.is-theme-style-light {
+ --theme-primary-010: var(--theme-primary-14);
+ --theme-primary-020: var(--theme-primary-13);
+ --theme-primary-030: var(--theme-primary-12);
+ --theme-primary-040: var(--theme-primary-11);
+ --theme-primary-050: var(--theme-primary-10);
+ --theme-primary-060: var(--theme-primary-9);
+ --theme-primary-070: var(--theme-primary-8);
+ --theme-primary-080: var(--theme-primary-7);
+ --theme-primary-090: var(--theme-primary-6);
+ --theme-primary-100: var(--theme-primary-5);
+ --theme-primary-110: var(--theme-primary-4);
+ --theme-primary-120: var(--theme-primary-3);
+ --theme-primary-130: var(--theme-primary-2);
+ --theme-primary-140: var(--theme-primary-1);
+}
+
+.is-theme-style-dark {
+ --theme-primary-010: var(--theme-primary-1);
+ --theme-primary-020: var(--theme-primary-2);
+ --theme-primary-030: var(--theme-primary-3);
+ --theme-primary-040: var(--theme-primary-4);
+ --theme-primary-050: var(--theme-primary-5);
+ --theme-primary-060: var(--theme-primary-6);
+ --theme-primary-070: var(--theme-primary-7);
+ --theme-primary-080: var(--theme-primary-8);
+ --theme-primary-090: var(--theme-primary-9);
+ --theme-primary-100: var(--theme-primary-10);
+ --theme-primary-110: var(--theme-primary-11);
+ --theme-primary-120: var(--theme-primary-12);
+ --theme-primary-130: var(--theme-primary-13);
+ --theme-primary-140: var(--theme-primary-14);
+}
+
+.is-theme-style-light {
+ --theme-primary-text-010: 0, 0%, calc(((((var(--theme-primary-14-r) * var(--theme-t-r)) + (var(--theme-primary-14-g) * var(--theme-t-g)) + (var(--theme-primary-14-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-020: 0, 0%, calc(((((var(--theme-primary-13-r) * var(--theme-t-r)) + (var(--theme-primary-13-g) * var(--theme-t-g)) + (var(--theme-primary-13-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-030: 0, 0%, calc(((((var(--theme-primary-12-r) * var(--theme-t-r)) + (var(--theme-primary-12-g) * var(--theme-t-g)) + (var(--theme-primary-12-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-040: 0, 0%, calc(((((var(--theme-primary-11-r) * var(--theme-t-r)) + (var(--theme-primary-11-g) * var(--theme-t-g)) + (var(--theme-primary-11-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-050: 0, 0%, calc(((((var(--theme-primary-10-r) * var(--theme-t-r)) + (var(--theme-primary-10-g) * var(--theme-t-g)) + (var(--theme-primary-10-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-060: 0, 0%, calc(((((var(--theme-primary-9-r) * var(--theme-t-r)) + (var(--theme-primary-9-g) * var(--theme-t-g)) + (var(--theme-primary-9-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-070: 0, 0%, calc(((((var(--theme-primary-8-r) * var(--theme-t-r)) + (var(--theme-primary-8-g) * var(--theme-t-g)) + (var(--theme-primary-8-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-080: 0, 0%, calc(((((var(--theme-primary-7-r) * var(--theme-t-r)) + (var(--theme-primary-7-g) * var(--theme-t-g)) + (var(--theme-primary-7-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-090: 0, 0%, calc(((((var(--theme-primary-6-r) * var(--theme-t-r)) + (var(--theme-primary-6-g) * var(--theme-t-g)) + (var(--theme-primary-6-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-100: 0, 0%, calc(((((var(--theme-primary-5-r) * var(--theme-t-r)) + (var(--theme-primary-5-g) * var(--theme-t-g)) + (var(--theme-primary-5-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-110: 0, 0%, calc(((((var(--theme-primary-4-r) * var(--theme-t-r)) + (var(--theme-primary-4-g) * var(--theme-t-g)) + (var(--theme-primary-4-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-120: 0, 0%, calc(((((var(--theme-primary-3-r) * var(--theme-t-r)) + (var(--theme-primary-3-g) * var(--theme-t-g)) + (var(--theme-primary-3-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-130: 0, 0%, calc(((((var(--theme-primary-2-r) * var(--theme-t-r)) + (var(--theme-primary-2-g) * var(--theme-t-g)) + (var(--theme-primary-2-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-140: 0, 0%, calc(((((var(--theme-primary-1-r) * var(--theme-t-r)) + (var(--theme-primary-1-g) * var(--theme-t-g)) + (var(--theme-primary-1-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+}
+
+.is-theme-style-dark {
+ --theme-primary-text-010: 0, 0%, calc(((((var(--theme-primary-1-r) * var(--theme-t-r)) + (var(--theme-primary-1-g) * var(--theme-t-g)) + (var(--theme-primary-1-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-020: 0, 0%, calc(((((var(--theme-primary-2-r) * var(--theme-t-r)) + (var(--theme-primary-2-g) * var(--theme-t-g)) + (var(--theme-primary-2-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-030: 0, 0%, calc(((((var(--theme-primary-3-r) * var(--theme-t-r)) + (var(--theme-primary-3-g) * var(--theme-t-g)) + (var(--theme-primary-3-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-040: 0, 0%, calc(((((var(--theme-primary-4-r) * var(--theme-t-r)) + (var(--theme-primary-4-g) * var(--theme-t-g)) + (var(--theme-primary-4-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-050: 0, 0%, calc(((((var(--theme-primary-5-r) * var(--theme-t-r)) + (var(--theme-primary-5-g) * var(--theme-t-g)) + (var(--theme-primary-5-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-060: 0, 0%, calc(((((var(--theme-primary-6-r) * var(--theme-t-r)) + (var(--theme-primary-6-g) * var(--theme-t-g)) + (var(--theme-primary-6-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-070: 0, 0%, calc(((((var(--theme-primary-7-r) * var(--theme-t-r)) + (var(--theme-primary-7-g) * var(--theme-t-g)) + (var(--theme-primary-7-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-080: 0, 0%, calc(((((var(--theme-primary-8-r) * var(--theme-t-r)) + (var(--theme-primary-8-g) * var(--theme-t-g)) + (var(--theme-primary-8-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-090: 0, 0%, calc(((((var(--theme-primary-9-r) * var(--theme-t-r)) + (var(--theme-primary-9-g) * var(--theme-t-g)) + (var(--theme-primary-9-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-100: 0, 0%, calc(((((var(--theme-primary-10-r) * var(--theme-t-r)) + (var(--theme-primary-10-g) * var(--theme-t-g)) + (var(--theme-primary-10-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-110: 0, 0%, calc(((((var(--theme-primary-11-r) * var(--theme-t-r)) + (var(--theme-primary-11-g) * var(--theme-t-g)) + (var(--theme-primary-11-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-120: 0, 0%, calc(((((var(--theme-primary-12-r) * var(--theme-t-r)) + (var(--theme-primary-12-g) * var(--theme-t-g)) + (var(--theme-primary-12-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-130: 0, 0%, calc(((((var(--theme-primary-13-r) * var(--theme-t-r)) + (var(--theme-primary-13-g) * var(--theme-t-g)) + (var(--theme-primary-13-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-140: 0, 0%, calc(((((var(--theme-primary-14-r) * var(--theme-t-r)) + (var(--theme-primary-14-g) * var(--theme-t-g)) + (var(--theme-primary-14-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+}
+
+@media (prefers-color-scheme: light) {
+ .is-theme-style-system {
+ --theme-primary-010: var(--theme-primary-14);
+ --theme-primary-020: var(--theme-primary-13);
+ --theme-primary-030: var(--theme-primary-12);
+ --theme-primary-040: var(--theme-primary-11);
+ --theme-primary-050: var(--theme-primary-10);
+ --theme-primary-060: var(--theme-primary-9);
+ --theme-primary-070: var(--theme-primary-8);
+ --theme-primary-080: var(--theme-primary-7);
+ --theme-primary-090: var(--theme-primary-6);
+ --theme-primary-100: var(--theme-primary-5);
+ --theme-primary-110: var(--theme-primary-4);
+ --theme-primary-120: var(--theme-primary-3);
+ --theme-primary-130: var(--theme-primary-2);
+ --theme-primary-140: var(--theme-primary-1);
+ }
+
+ .is-theme-style-system {
+ --theme-primary-text-010: 0, 0%, calc(((((var(--theme-primary-14-r) * var(--theme-t-r)) + (var(--theme-primary-14-g) * var(--theme-t-g)) + (var(--theme-primary-14-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-020: 0, 0%, calc(((((var(--theme-primary-13-r) * var(--theme-t-r)) + (var(--theme-primary-13-g) * var(--theme-t-g)) + (var(--theme-primary-13-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-030: 0, 0%, calc(((((var(--theme-primary-12-r) * var(--theme-t-r)) + (var(--theme-primary-12-g) * var(--theme-t-g)) + (var(--theme-primary-12-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-040: 0, 0%, calc(((((var(--theme-primary-11-r) * var(--theme-t-r)) + (var(--theme-primary-11-g) * var(--theme-t-g)) + (var(--theme-primary-11-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-050: 0, 0%, calc(((((var(--theme-primary-10-r) * var(--theme-t-r)) + (var(--theme-primary-10-g) * var(--theme-t-g)) + (var(--theme-primary-10-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-060: 0, 0%, calc(((((var(--theme-primary-9-r) * var(--theme-t-r)) + (var(--theme-primary-9-g) * var(--theme-t-g)) + (var(--theme-primary-9-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-070: 0, 0%, calc(((((var(--theme-primary-8-r) * var(--theme-t-r)) + (var(--theme-primary-8-g) * var(--theme-t-g)) + (var(--theme-primary-8-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-080: 0, 0%, calc(((((var(--theme-primary-7-r) * var(--theme-t-r)) + (var(--theme-primary-7-g) * var(--theme-t-g)) + (var(--theme-primary-7-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-090: 0, 0%, calc(((((var(--theme-primary-6-r) * var(--theme-t-r)) + (var(--theme-primary-6-g) * var(--theme-t-g)) + (var(--theme-primary-6-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-100: 0, 0%, calc(((((var(--theme-primary-5-r) * var(--theme-t-r)) + (var(--theme-primary-5-g) * var(--theme-t-g)) + (var(--theme-primary-5-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-110: 0, 0%, calc(((((var(--theme-primary-4-r) * var(--theme-t-r)) + (var(--theme-primary-4-g) * var(--theme-t-g)) + (var(--theme-primary-4-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-120: 0, 0%, calc(((((var(--theme-primary-3-r) * var(--theme-t-r)) + (var(--theme-primary-3-g) * var(--theme-t-g)) + (var(--theme-primary-3-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-130: 0, 0%, calc(((((var(--theme-primary-2-r) * var(--theme-t-r)) + (var(--theme-primary-2-g) * var(--theme-t-g)) + (var(--theme-primary-2-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-140: 0, 0%, calc(((((var(--theme-primary-1-r) * var(--theme-t-r)) + (var(--theme-primary-1-g) * var(--theme-t-g)) + (var(--theme-primary-1-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+ .is-theme-style-system {
+ --theme-primary-010: var(--theme-primary-1);
+ --theme-primary-020: var(--theme-primary-2);
+ --theme-primary-030: var(--theme-primary-3);
+ --theme-primary-040: var(--theme-primary-4);
+ --theme-primary-050: var(--theme-primary-5);
+ --theme-primary-060: var(--theme-primary-6);
+ --theme-primary-070: var(--theme-primary-7);
+ --theme-primary-080: var(--theme-primary-8);
+ --theme-primary-090: var(--theme-primary-9);
+ --theme-primary-100: var(--theme-primary-10);
+ --theme-primary-110: var(--theme-primary-11);
+ --theme-primary-120: var(--theme-primary-12);
+ --theme-primary-130: var(--theme-primary-13);
+ --theme-primary-140: var(--theme-primary-14);
+ }
+
+ .is-theme-style-system {
+ --theme-primary-text-010: 0, 0%, calc(((((var(--theme-primary-1-r) * var(--theme-t-r)) + (var(--theme-primary-1-g) * var(--theme-t-g)) + (var(--theme-primary-1-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-020: 0, 0%, calc(((((var(--theme-primary-2-r) * var(--theme-t-r)) + (var(--theme-primary-2-g) * var(--theme-t-g)) + (var(--theme-primary-2-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-030: 0, 0%, calc(((((var(--theme-primary-3-r) * var(--theme-t-r)) + (var(--theme-primary-3-g) * var(--theme-t-g)) + (var(--theme-primary-3-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-040: 0, 0%, calc(((((var(--theme-primary-4-r) * var(--theme-t-r)) + (var(--theme-primary-4-g) * var(--theme-t-g)) + (var(--theme-primary-4-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-050: 0, 0%, calc(((((var(--theme-primary-5-r) * var(--theme-t-r)) + (var(--theme-primary-5-g) * var(--theme-t-g)) + (var(--theme-primary-5-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-060: 0, 0%, calc(((((var(--theme-primary-6-r) * var(--theme-t-r)) + (var(--theme-primary-6-g) * var(--theme-t-g)) + (var(--theme-primary-6-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-070: 0, 0%, calc(((((var(--theme-primary-7-r) * var(--theme-t-r)) + (var(--theme-primary-7-g) * var(--theme-t-g)) + (var(--theme-primary-7-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-080: 0, 0%, calc(((((var(--theme-primary-8-r) * var(--theme-t-r)) + (var(--theme-primary-8-g) * var(--theme-t-g)) + (var(--theme-primary-8-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-090: 0, 0%, calc(((((var(--theme-primary-9-r) * var(--theme-t-r)) + (var(--theme-primary-9-g) * var(--theme-t-g)) + (var(--theme-primary-9-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-100: 0, 0%, calc(((((var(--theme-primary-10-r) * var(--theme-t-r)) + (var(--theme-primary-10-g) * var(--theme-t-g)) + (var(--theme-primary-10-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-110: 0, 0%, calc(((((var(--theme-primary-11-r) * var(--theme-t-r)) + (var(--theme-primary-11-g) * var(--theme-t-g)) + (var(--theme-primary-11-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-120: 0, 0%, calc(((((var(--theme-primary-12-r) * var(--theme-t-r)) + (var(--theme-primary-12-g) * var(--theme-t-g)) + (var(--theme-primary-12-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-130: 0, 0%, calc(((((var(--theme-primary-13-r) * var(--theme-t-r)) + (var(--theme-primary-13-g) * var(--theme-t-g)) + (var(--theme-primary-13-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ --theme-primary-text-140: 0, 0%, calc(((((var(--theme-primary-14-r) * var(--theme-t-r)) + (var(--theme-primary-14-g) * var(--theme-t-g)) + (var(--theme-primary-14-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%);
+ }
+}
+
+:root {
+ --theme-shadow: 1;
+ --theme-shadow-size-small: calc(calc(var(--theme-shadow) / 100) * 1);
+ --theme-shadow-size-medium: calc(calc(var(--theme-shadow) / 100) * 2);
+ --theme-shadow-size-large: calc(calc(var(--theme-shadow) / 100) * 3);
+ --theme-shadow-offset-base: 20;
+ --theme-shadow-offset-y: calc(calc(var(--theme-shadow-offset-base) / 1000) * 1em);
+ --theme-shadow-blur-base: 30;
+ --theme-shadow-blur: calc(calc(var(--theme-shadow-blur-base) / 1000) * 1em);
+ --theme-shadow-opacity-base: 20;
+ --theme-shadow-opacity: calc(var(--theme-shadow-opacity-base) / 1000);
+ --theme-shadow-bottom-small:
+ 0 calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-offset-y) * 2)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 1))),
+ 0 calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-offset-y) * 4)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 2))),
+ 0 calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-offset-y) * 8)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 3))),
+ 0 calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-offset-y) * 16)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 4)));
+ --theme-shadow-bottom-medium:
+ 0 calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-offset-y) * 2)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 1))),
+ 0 calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-offset-y) * 4)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 2))),
+ 0 calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-offset-y) * 8)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 3))),
+ 0 calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-offset-y) * 16)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 4)));
+ --theme-shadow-bottom-large:
+ 0 calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-offset-y) * 2)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 1))),
+ 0 calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-offset-y) * 4)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 2))),
+ 0 calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-offset-y) * 8)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 3))),
+ 0 calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-offset-y) * 16)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 4)));
+ --theme-shadow-top-small:
+ 0 calc(var(--theme-shadow-size-small) * calc(calc(var(--theme-shadow-offset-y) * -1) * 2)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 1))),
+ 0 calc(var(--theme-shadow-size-small) * calc(calc(var(--theme-shadow-offset-y) * -1) * 4)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 2))),
+ 0 calc(var(--theme-shadow-size-small) * calc(calc(var(--theme-shadow-offset-y) * -1) * 8)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 3))),
+ 0 calc(var(--theme-shadow-size-small) * calc(calc(var(--theme-shadow-offset-y) * -1) * 16)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 4)));
+ --theme-shadow-top-medium:
+ 0 calc(var(--theme-shadow-size-medium) * calc(calc(var(--theme-shadow-offset-y) * -1) * 2)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 1))),
+ 0 calc(var(--theme-shadow-size-medium) * calc(calc(var(--theme-shadow-offset-y) * -1) * 4)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 2))),
+ 0 calc(var(--theme-shadow-size-medium) * calc(calc(var(--theme-shadow-offset-y) * -1) * 8)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 3))),
+ 0 calc(var(--theme-shadow-size-medium) * calc(calc(var(--theme-shadow-offset-y) * -1) * 16)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 4)));
+ --theme-shadow-top-large:
+ 0 calc(var(--theme-shadow-size-large) * calc(calc(var(--theme-shadow-offset-y) * -1) * 2)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 1))),
+ 0 calc(var(--theme-shadow-size-large) * calc(calc(var(--theme-shadow-offset-y) * -1) * 4)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 2))),
+ 0 calc(var(--theme-shadow-size-large) * calc(calc(var(--theme-shadow-offset-y) * -1) * 8)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 3))),
+ 0 calc(var(--theme-shadow-size-large) * calc(calc(var(--theme-shadow-offset-y) * -1) * 16)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 4)));
+}
+
+.theme-color-box {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.theme-color-shade-01 {
+ background-color: hsl(var(--theme-primary-010));
+ color: hsl(var(--theme-primary-text-010));
+}
+
+.theme-color-shade-02 {
+ background-color: hsl(var(--theme-primary-020));
+ color: hsl(var(--theme-primary-text-020));
+}
+
+.theme-color-shade-03 {
+ background-color: hsl(var(--theme-primary-030));
+ color: hsl(var(--theme-primary-text-030));
+}
+
+.theme-color-shade-04 {
+ background-color: hsl(var(--theme-primary-040));
+ color: hsl(var(--theme-primary-text-040));
+}
+
+.theme-color-shade-05 {
+ background-color: hsl(var(--theme-primary-050));
+ color: hsl(var(--theme-primary-text-050));
+}
+
+.theme-color-shade-06 {
+ background-color: hsl(var(--theme-primary-060));
+ color: hsl(var(--theme-primary-text-060));
+}
+
+.theme-color-shade-07 {
+ background-color: hsl(var(--theme-primary-070));
+ color: hsl(var(--theme-primary-text-070));
+}
+
+.theme-color-shade-08 {
+ background-color: hsl(var(--theme-primary-080));
+ color: hsl(var(--theme-primary-text-080));
+}
+
+.theme-color-shade-09 {
+ background-color: hsl(var(--theme-primary-090));
+ color: hsl(var(--theme-primary-text-090));
+}
+
+.theme-color-shade-10 {
+ background-color: hsl(var(--theme-primary-100));
+ color: hsl(var(--theme-primary-text-100));
+}
+
+.theme-color-shade-11 {
+ background-color: hsl(var(--theme-primary-110));
+ color: hsl(var(--theme-primary-text-110));
+}
+
+.theme-color-shade-12 {
+ background-color: hsl(var(--theme-primary-120));
+ color: hsl(var(--theme-primary-text-120));
+}
+
+.theme-color-shade-13 {
+ background-color: hsl(var(--theme-primary-130));
+ color: hsl(var(--theme-primary-text-130));
+}
+
+.theme-color-shade-14 {
+ background-color: hsl(var(--theme-primary-140));
+ color: hsl(var(--theme-primary-text-140));
+}
+
+.background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
+ overflow: hidden;
+ pointer-events: none;
+ z-index: var(--z-index-background);
+}
+
+.theme-background-type {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ display: block;
+ opacity: 0;
+ transition: background-color var(--layout-transition-extra-fast), opacity var(--layout-transition-medium);
+}
+
+.theme-background-type-theme {
+ background-color: hsl(var(--theme-background-theme));
+}
+
+.theme-background-type-accent {
+ background-color: rgb(var(--theme-background-accent));
+}
+
+.theme-background-type-color {
+ background-color: rgb(var(--theme-background-color));
+}
+
+.theme-background-type-gradient {
+ background-image: linear-gradient(calc(var(--theme-background-gradient-angle) * 1deg), rgb(var(--theme-background-gradient-start)), rgb(var(--theme-background-gradient-end)));
+}
+
+.theme-background-type-image-wrap {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ opacity: calc(var(--theme-background-image-opacity) / 100);
+ background-image: var(--theme-background-image);
+ background-attachment: fixed;
+ background-size: cover;
+ background-position: center;
+ transform: scale(calc(calc(var(--theme-background-image-scale) / 100) + calc(var(--theme-background-image-blur) / 400)));
+ filter: blur(calc(var(--theme-background-image-blur) * 1px)) grayscale(calc(var(--theme-background-image-grayscale) / 100));
+}
+
+.theme-background-type-image-accent {
+ background-color: rgba(var(--theme-accent), calc(var(--theme-background-image-accent) / 100));
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 2;
+}
+
+.theme-background-type-image-vignette {
+ position: absolute;
+ top: -1em;
+ left: -1em;
+ width: calc(100vw + 2em);
+ height: calc(100vh + 2em);
+ pointer-events: none;
+ background-image: radial-gradient(circle,
+ transparent calc(var(--theme-background-image-vignette-end) * 1%),
+ rgba(0, 0, 0, calc(var(--theme-background-image-vignette-opacity) / 100)) calc(var(--theme-background-image-vignette-start) * 1%));
+ z-index: 3;
+}
+
+.theme-background-type-video-wrap {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ opacity: calc(var(--theme-background-video-opacity) / 100);
+ filter: blur(calc(var(--theme-background-video-blur) * 1px)) grayscale(calc(var(--theme-background-video-grayscale) / 100));
+ transform: scale(calc(var(--theme-background-video-scale) / 100));
+}
+
+.theme-background-type-video-accent {
+ background-color: rgba(var(--theme-accent), calc(var(--theme-background-video-accent) / 100));
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 2;
+}
+
+.theme-background-type-video-vignette {
+ position: absolute;
+ top: -1em;
+ left: -1em;
+ width: calc(100vw + 2em);
+ height: calc(100vh + 2em);
+ pointer-events: none;
+ background-image: radial-gradient(circle,
+ transparent calc(var(--theme-background-video-vignette-end) * 1%),
+ rgba(0, 0, 0, calc(var(--theme-background-video-vignette-opacity) * 1%)) calc(var(--theme-background-video-vignette-start) * 1%));
+ z-index: 3;
+}
+
+.theme-background-type-video video {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ pointer-events: none;
+}
+
+.is-theme-background-type-theme .theme-background-type-theme,
+.is-theme-background-type-accent .theme-background-type-accent,
+.is-theme-background-type-color .theme-background-type-color,
+.is-theme-background-type-gradient .theme-background-type-gradient,
+.is-theme-background-type-image .theme-background-type-image,
+.is-theme-background-type-video .theme-background-type-video {
+ opacity: 1;
+}
diff --git a/src/component/theme/index.js b/src/component/theme/index.js
new file mode 100644
index 00000000..96c59c3b
--- /dev/null
+++ b/src/component/theme/index.js
@@ -0,0 +1,522 @@
+import { state } from '../state';
+import { data } from '../data';
+import { appName } from '../appName';
+import { toolbar } from '../toolbar';
+import { bookmark } from '../bookmark';
+import { groupAndBookmark } from '../groupAndBookmark';
+import { themeSetting } from '../menuContent/themeSetting';
+
+import { Video } from '../video';
+
+import { node } from '../../utility/node';
+import { convertColor } from '../../utility/convertColor';
+import { trimString } from '../../utility/trimString';
+import { isValidString } from '../../utility/isValidString';
+import { clearChildNode } from '../../utility/clearChildNode';
+import { randomNumber } from '../../utility/randomNumber';
+import { applyCSSVar } from '../../utility/applyCSSVar';
+import { applyCSSClass } from '../../utility/applyCSSClass';
+import { applyCSSState } from '../../utility/applyCSSState';
+
+import WebFont from 'webfontloader';
+
+import './index.css';
+
+const theme = {};
+
+theme.font = {};
+
+theme.font.display = {
+ timer: false,
+ delay: () => {
+
+ clearTimeout(theme.font.display.timer);
+
+ theme.font.display.timer = setTimeout(theme.font.display.load, 600);
+
+ },
+ load: () => {
+
+ const displayFont = trimString(state.get.current().theme.font.display.name);
+
+ if (isValidString(displayFont)) {
+
+ WebFont.load({
+ // fontloading: (familyName, fvd) => { console.log('fontloading:', familyName); },
+ google: { families: [trimString(displayFont) + ':100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i'] }
+ });
+
+ };
+
+ theme.font.display.render();
+
+ },
+ render: () => {
+
+ const html = document.querySelector('html');
+
+ if (isValidString(trimString(state.get.current().theme.font.display.name))) {
+
+ html.style.setProperty('--theme-font-display-name', '"' + trimString(state.get.current().theme.font.display.name) + '", "Fjalla One", sans-serif');
+
+ } else {
+
+ html.style.removeProperty('--theme-font-display-name');
+
+ };
+
+ }
+};
+
+theme.font.ui = {
+ timer: false,
+ delay: () => {
+
+ clearTimeout(theme.font.ui.timer);
+
+ theme.font.ui.timer = setTimeout(theme.font.ui.load, 600);
+
+ },
+ load: () => {
+
+ const uiFont = trimString(state.get.current().theme.font.ui.name);
+
+ if (isValidString(uiFont)) {
+
+ WebFont.load({
+ // fontloading: (familyName, fvd) => { console.log('fontloading:', familyName); },
+ google: { families: [trimString(uiFont) + ':100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i'] }
+ });
+
+ };
+
+ theme.font.ui.render();
+
+ },
+ render: () => {
+
+ const html = document.querySelector('html');
+
+ if (isValidString(trimString(state.get.current().theme.font.ui.name))) {
+
+ html.style.setProperty('--theme-font-ui-name', '"' + trimString(state.get.current().theme.font.ui.name) + '", "Open Sans", sans-serif');
+
+ } else {
+
+ html.style.removeProperty('--theme-font-ui-name');
+
+ };
+
+ }
+};
+
+theme.color = {
+ render: () => {
+
+ const html = document.querySelector('html');
+
+ const head = document.querySelector('head');
+
+ let shades = (state.get.current().theme.color.contrast.end - state.get.current().theme.color.contrast.start) / (state.get.current().theme.color.shades - 1);
+
+ for (var type in state.get.current().theme.color.range) {
+
+ for (var i = 0; i < state.get.current().theme.color.shades; i++) {
+
+ let hsl = JSON.parse(JSON.stringify(state.get.current().theme.color.range[type]));
+
+ hsl.l = Math.round((shades * i) + state.get.current().theme.color.contrast.start);
+
+ let rgb = convertColor.hsl.rgb(hsl);
+
+ for (var key in rgb) {
+ html.style.setProperty(`--theme-${type}-${i + 1}-${key}`, rgb[key]);
+ };
+
+ for (var key in hsl) {
+ html.style.setProperty(`--theme-${type}-${i + 1}-${key}`, hsl[key]);
+ };
+
+ };
+
+ };
+
+ for (let i = 1; i <= state.get.current().theme.color.shades; i++) {
+ html.style.setProperty(`--theme-primary-${i}`, `var(--theme-primary-${i}-h), calc(var(--theme-primary-${i}-s) * 1%), calc(var(--theme-primary-${i}-l) * 1%)`);
+ };
+
+ }
+};
+
+theme.accent = {};
+
+theme.accent.random = {
+ render: () => {
+
+ if (state.get.current().theme.accent.random.active) {
+
+ const randomAccentType = {
+ any: () => { return { h: randomNumber(0, 360), s: randomNumber(0, 100), l: randomNumber(0, 100) }; },
+ light: () => { return { h: randomNumber(0, 360), s: randomNumber(50, 90), l: randomNumber(50, 90) }; },
+ dark: () => { return { h: randomNumber(0, 360), s: randomNumber(10, 50), l: randomNumber(10, 50) }; },
+ pastel: () => { return { h: randomNumber(0, 360), s: 50, l: 80 }; },
+ saturated: () => { return { h: randomNumber(0, 360), s: 100, l: 50 }; }
+ };
+
+ const hsl = randomAccentType[state.get.current().theme.accent.random.style]();
+
+ const rgb = convertColor.hsl.rgb(hsl);
+
+ state.get.current().theme.accent.rgb = rgb;
+
+ state.get.current().theme.accent.hsl = hsl;
+
+ };
+
+ }
+};
+
+theme.accent.rainbow = {
+ render: () => {
+
+ const units = 360 / bookmark.count();
+
+ let degree = 0;
+
+ bookmark.all.forEach((item, i) => {
+
+ item.items.forEach((item, i) => {
+
+ item.accent.by = "custom";
+
+ item.accent.hsl = { h: Math.round(degree), s: 100, l: 50 };
+
+ item.accent.rgb = convertColor.hsl.rgb(item.accent.hsl);
+
+ degree = degree + units;
+
+ });
+
+ });
+
+ groupAndBookmark.render();
+
+ }
+};
+
+theme.accent.cycle = {
+ timer: false,
+ bind: () => {
+
+ if (state.get.current().theme.accent.cycle.active) {
+
+ clearInterval(theme.accent.cycle.timer);
+
+ theme.accent.cycle.timer = setInterval(() => {
+
+ theme.accent.cycle.render();
+
+ if (state.get.current().menu) {
+ themeSetting.control.accent.color.update();
+ };
+
+ if (state.get.current().toolbar.accent.show) {
+ toolbar.current.update.accent();
+ };
+
+ }, state.get.current().theme.accent.cycle.speed);
+
+ } else {
+
+ clearInterval(theme.accent.cycle.timer);
+
+ theme.accent.cycle.timer = false;
+
+ };
+
+ },
+ render: () => {
+
+ let newValue = state.get.current().theme.accent.hsl.h + state.get.current().theme.accent.cycle.step;
+
+ if (newValue > 359) { newValue = 0; };
+
+ state.get.current().theme.accent.hsl.h = newValue;
+
+ state.get.current().theme.accent.rgb = convertColor.hsl.rgb(state.get.current().theme.accent.hsl);
+
+ applyCSSVar([
+ 'theme.accent.rgb.r',
+ 'theme.accent.rgb.g',
+ 'theme.accent.rgb.b',
+ 'theme.accent.hsl.h',
+ 'theme.accent.hsl.s',
+ 'theme.accent.hsl.l'
+ ]);
+
+ }
+};
+
+theme.style = {
+ bind: () => {
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (event) => {
+ theme.style.initial();
+ });
+ },
+ initial: () => {
+ switch (state.get.current().theme.style) {
+
+ case 'dark':
+ case 'light':
+
+ localStorage.setItem(appName + 'Style', state.get.current().theme.style);
+ break;
+
+ case 'system':
+
+ if (window.matchMedia('(prefers-color-scheme:dark)').matches) {
+ localStorage.setItem(appName + 'Style', 'dark');
+ } else if (window.matchMedia('(prefers-color-scheme:light)').matches) {
+ localStorage.setItem(appName + 'Style', 'light');
+ };
+ break;
+
+ };
+ },
+ dark: () => {
+ state.get.current().theme.style = 'dark';
+ theme.style.initial();
+ applyCSSClass('theme.style');
+ },
+ light: () => {
+ state.get.current().theme.style = 'light';
+ theme.style.initial();
+ applyCSSClass('theme.style');
+ },
+ toggle: () => {
+ switch (state.get.current().theme.style) {
+
+ case 'dark':
+ theme.style.light();
+ break;
+
+ case 'light':
+ theme.style.dark();
+ break;
+
+ };
+ }
+};
+
+theme.background = {
+ element: {
+ background: node('div|class:background'),
+ type: {
+ theme: node('div|class:theme-background-type theme-background-type-theme'),
+ accent: node('div|class:theme-background-type theme-background-type-accent'),
+ color: node('div|class:theme-background-type theme-background-type-color'),
+ gradient: node('div|class:theme-background-type theme-background-type-gradient'),
+ image: {
+ imageElement: node('div|class:theme-background-type theme-background-type-image'),
+ wrap: node('div|class:theme-background-type-image-wrap'),
+ accent: node('div|class:theme-background-type-image-accent'),
+ vignette: node('div|class:theme-background-type-image-vignette')
+ },
+ video: {
+ videoElement: node('div|class:theme-background-type theme-background-type-video'),
+ wrap: node('div|class:theme-background-type-video-wrap'),
+ accent: node('div|class:theme-background-type-video-accent'),
+ vignette: node('div|class:theme-background-type-video-vignette')
+ },
+ },
+ video: false
+ }
+};
+
+theme.background.area = {
+ render: () => {
+
+ const backgroundElement = node('div|class:background');
+
+ state.get.option().theme.background.type.forEach((item, i) => {
+
+ switch (item) {
+
+ case 'image':
+
+ theme.background.element.type.image.imageElement.appendChild(theme.background.element.type.image.wrap);
+ theme.background.element.type.image.imageElement.appendChild(theme.background.element.type.image.accent);
+ theme.background.element.type.image.imageElement.appendChild(theme.background.element.type.image.vignette);
+ theme.background.element.background.appendChild(theme.background.element.type.image.imageElement);
+
+ break;
+
+ case 'video':
+
+ theme.background.element.type.video.videoElement.appendChild(theme.background.element.type.video.wrap);
+ theme.background.element.type.video.videoElement.appendChild(theme.background.element.type.video.accent);
+ theme.background.element.type.video.videoElement.appendChild(theme.background.element.type.video.vignette);
+ theme.background.element.background.appendChild(theme.background.element.type.video.videoElement);
+
+ break;
+
+ default:
+
+ theme.background.element.background.appendChild(theme.background.element.type[item]);
+
+ };
+
+ });
+
+ document.querySelector('body').appendChild(theme.background.element.background);
+
+ }
+};
+
+theme.background.image = {
+ render: () => {
+
+ const html = document.querySelector('html');
+
+ if (isValidString(state.get.current().theme.background.image.url)) {
+
+ const allUrls = trimString(state.get.current().theme.background.image.url).split(/\s+/).filter((item) => { return item != ''; });
+
+ html.style.setProperty('--theme-background-image', 'url(' + allUrls[Math.floor(Math.random() * allUrls.length)] + ')');
+
+ } else {
+
+ html.style.removeProperty('--theme-background-image');
+
+ };
+
+ }
+};
+
+theme.background.video = {
+ render: () => {
+
+ if (isValidString(state.get.current().theme.background.video.url)) {
+
+ const allUrls = trimString(state.get.current().theme.background.video.url).split(/\s+/).filter((item) => { return item != ''; });
+
+ theme.background.element.video = new Video({
+ url: allUrls[Math.floor(Math.random() * allUrls.length)]
+ });
+
+ theme.background.element.type.video.wrap.appendChild(theme.background.element.video.video);
+
+ } else {
+
+ theme.background.video.clear();
+
+ };
+
+ },
+ clear: () => {
+
+ theme.background.element.video = false;
+
+ if (theme.background.element.type.video.wrap.lastChild) {
+
+ clearChildNode(theme.background.element.type.video.wrap);
+
+ };
+
+ }
+};
+
+theme.init = () => {
+ theme.style.initial();
+ theme.style.bind();
+ theme.color.render();
+ theme.accent.random.render();
+ theme.accent.cycle.bind();
+ theme.font.display.load();
+ theme.font.ui.load();
+ theme.background.area.render();
+ theme.background.image.render();
+ theme.background.video.render();
+ applyCSSVar([
+ 'theme.accent.rgb.r',
+ 'theme.accent.rgb.g',
+ 'theme.accent.rgb.b',
+ 'theme.accent.hsl.h',
+ 'theme.accent.hsl.s',
+ 'theme.accent.hsl.l',
+ 'theme.font.display.weight',
+ 'theme.font.display.style',
+ 'theme.font.ui.weight',
+ 'theme.font.ui.style',
+ 'theme.opacity.general',
+ 'theme.background.color.rgb.r',
+ 'theme.background.color.rgb.g',
+ 'theme.background.color.rgb.b',
+ 'theme.background.color.hsl.h',
+ 'theme.background.color.hsl.s',
+ 'theme.background.color.hsl.l',
+ 'theme.background.image.blur',
+ 'theme.background.image.grayscale',
+ 'theme.background.image.scale',
+ 'theme.background.image.accent',
+ 'theme.background.image.opacity',
+ 'theme.background.image.vignette.opacity',
+ 'theme.background.image.vignette.start',
+ 'theme.background.image.vignette.end',
+ 'theme.background.video.blur',
+ 'theme.background.video.grayscale',
+ 'theme.background.video.scale',
+ 'theme.background.video.accent',
+ 'theme.background.video.opacity',
+ 'theme.background.video.vignette.opacity',
+ 'theme.background.video.vignette.start',
+ 'theme.background.video.vignette.end',
+ 'theme.background.gradient.angle',
+ 'theme.background.gradient.start.rgb.r',
+ 'theme.background.gradient.start.rgb.g',
+ 'theme.background.gradient.start.rgb.b',
+ 'theme.background.gradient.start.hsl.h',
+ 'theme.background.gradient.start.hsl.s',
+ 'theme.background.gradient.start.hsl.l',
+ 'theme.background.gradient.end.rgb.r',
+ 'theme.background.gradient.end.rgb.g',
+ 'theme.background.gradient.end.rgb.b',
+ 'theme.background.gradient.end.hsl.h',
+ 'theme.background.gradient.end.hsl.s',
+ 'theme.background.gradient.end.hsl.l',
+ 'theme.radius',
+ 'theme.shadow',
+ 'theme.shade.opacity',
+ 'theme.shade.blur',
+ 'theme.layout.divider.size',
+ 'theme.header.color.rgb.r',
+ 'theme.header.color.rgb.g',
+ 'theme.header.color.rgb.b',
+ 'theme.header.color.hsl.h',
+ 'theme.header.color.hsl.s',
+ 'theme.header.color.hsl.l',
+ 'theme.header.color.opacity',
+ 'theme.header.search.opacity',
+ 'theme.bookmark.color.rgb.r',
+ 'theme.bookmark.color.rgb.g',
+ 'theme.bookmark.color.rgb.b',
+ 'theme.bookmark.color.hsl.h',
+ 'theme.bookmark.color.hsl.s',
+ 'theme.bookmark.color.hsl.l',
+ 'theme.bookmark.color.opacity',
+ 'theme.bookmark.item.opacity',
+ 'theme.toolbar.opacity',
+ 'theme.group.openAll.opacity'
+ ]);
+ applyCSSClass([
+ 'theme.style',
+ 'theme.background.type',
+ 'theme.header.color.by',
+ 'theme.bookmark.color.by'
+ ]);
+ applyCSSState([
+ 'theme.layout.divider.size'
+ ]);
+};
+
+export { theme };
diff --git a/src/component/themePreset/acrid/index.js b/src/component/themePreset/acrid/index.js
new file mode 100644
index 00000000..9f0e5bb9
--- /dev/null
+++ b/src/component/themePreset/acrid/index.js
@@ -0,0 +1,27 @@
+export const acrid = {
+ name: 'Acrid',
+ color: { range: { primary: { h: 301, s: 32 } }, contrast: { start: 11, end: 65 } },
+ accent: { hsl: { h: 112, s: 100, l: 42 }, rgb: { r: 29, g: 213, b: 0 } },
+ font: { display: { name: 'Titillium Web', weight: 400, style: 'italic' }, ui: { name: 'Inconsolata', weight: 400, style: 'normal' } },
+ background: {
+ type: 'gradient',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 154, s: 62, l: 24 }, rgb: { r: 23, g: 99, b: 66 } },
+ end: { hsl: { h: 300, s: 42, l: 21 }, rgb: { r: 76, g: 31, b: 76 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 30,
+ shadow: 75,
+ style: 'dark',
+ shade: { opacity: 20, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/aerial/index.js b/src/component/themePreset/aerial/index.js
new file mode 100644
index 00000000..cf777d2a
--- /dev/null
+++ b/src/component/themePreset/aerial/index.js
@@ -0,0 +1,27 @@
+export const aerial = {
+ name: 'Aerial',
+ color: { range: { primary: { h: 200, s: 27 } }, contrast: { start: 11, end: 77 } },
+ accent: { hsl: { h: 180, s: 100, l: 50 }, rgb: { r: 0, g: 255, b: 255 } },
+ font: { display: { name: 'Unica One', weight: 400, style: 'normal' }, ui: { name: 'Inria Sans', weight: 400, style: 'normal' } },
+ background: {
+ type: 'video',
+ color: { rgb: { r: 0, g: 0, b: 0 }, hsl: { h: 0, s: 0, l: 0 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 10, opacity: 60, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/videos/1626342605376.mp4?raw=true', blur: 0, grayscale: 0, scale: 100, accent: 20, opacity: 80, vignette: { opacity: 70, start: 90, end: 25 } }
+ },
+ radius: 25,
+ shadow: 50,
+ style: 'dark',
+ shade: { opacity: 2, blur: 0 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 1 } },
+ header: { color: { by: 'custom', opacity: 20, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 0 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/azure/index.js b/src/component/themePreset/azure/index.js
new file mode 100644
index 00000000..54c94945
--- /dev/null
+++ b/src/component/themePreset/azure/index.js
@@ -0,0 +1,27 @@
+export const azure = {
+ name: 'Azure',
+ color: { range: { primary: { h: 215, s: 18 } }, contrast: { start: 13, end: 40 } },
+ accent: { hsl: { h: 180, s: 100, l: 50 }, rgb: { r: 0, g: 255, b: 255 } },
+ font: { display: { name: 'Unica One', weight: 400, style: 'normal' }, ui: { name: 'Inria Sans', weight: 400, style: 'normal' } },
+ background: {
+ type: 'gradient',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 180,
+ start: { hsl: { h: 200, s: 46, l: 33 }, rgb: { r: 45, g: 97, b: 123 } },
+ end: { hsl: { h: 212, s: 49, l: 9 }, rgb: { r: 12, g: 22, b: 34 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 25,
+ shadow: 50,
+ style: 'dark',
+ shade: { opacity: 10, blur: 10 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 0 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/bean/index.js b/src/component/themePreset/bean/index.js
new file mode 100644
index 00000000..1acb37b0
--- /dev/null
+++ b/src/component/themePreset/bean/index.js
@@ -0,0 +1,27 @@
+export const bean = {
+ name: 'Bean',
+ color: { range: { primary: { h: 191, s: 80 } }, contrast: { start: 7, end: 65 } },
+ accent: { hsl: { h: 38, s: 100, l: 50 }, rgb: { r: 255, g: 160, b: 0 } },
+ font: { display: { name: 'Life Savers', weight: 400, style: 'normal' }, ui: { name: 'Oswald', weight: 400, style: 'normal' } },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 50,
+ shadow: 175,
+ style: 'dark',
+ shade: { opacity: 10, blur: 0 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/black/index.js b/src/component/themePreset/black/index.js
new file mode 100644
index 00000000..7fe5a71a
--- /dev/null
+++ b/src/component/themePreset/black/index.js
@@ -0,0 +1,19 @@
+import { state } from '../../state';
+
+export const black = {
+ name: 'Black',
+ color: { range: { primary: { h: 0, s: 0 } }, contrast: { start: 0, end: 100 } },
+ accent: { hsl: { h: 0, s: 0, l: 80 }, rgb: { r: 204, g: 204, b: 204 } },
+ font: state.get.default().theme.font,
+ background: state.get.default().theme.background,
+ radius: state.get.default().theme.radius,
+ shadow: state.get.default().theme.shadow,
+ style: 'dark',
+ shade: state.get.default().theme.shade,
+ opacity: state.get.default().theme.opacity,
+ layout: state.get.default().theme.layout,
+ header: state.get.default().theme.header,
+ bookmark: state.get.default().theme.bookmark,
+ group: state.get.default().theme.group,
+ toolbar: state.get.default().theme.toolbar
+};
diff --git a/src/component/themePreset/comet/index.js b/src/component/themePreset/comet/index.js
new file mode 100644
index 00000000..8f56378a
--- /dev/null
+++ b/src/component/themePreset/comet/index.js
@@ -0,0 +1,27 @@
+export const comet = {
+ name: 'Comet',
+ color: { range: { primary: { h: 207, s: 87 } }, contrast: { start: 14, end: 83 } },
+ accent: { hsl: { h: 300, s: 80, l: 63 }, rgb: { r: 236, g: 85, b: 236 } },
+ font: { display: { name: 'Bungee Hairline', weight: 700, style: 'normal' }, ui: { name: 'Quicksand', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 145,
+ start: { hsl: { h: 209, s: 100, l: 9 }, rgb: { r: 0, g: 24, b: 46 } },
+ end: { hsl: { h: 207, s: 86, l: 27 }, rgb: { r: 10, g: 75, b: 128 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1626783072074.jpeg?raw=true', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 50, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 0,
+ shadow: 125,
+ style: 'dark',
+ shade: { opacity: 15, blur: 0 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 0 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/corsair/index.js b/src/component/themePreset/corsair/index.js
new file mode 100644
index 00000000..398968ce
--- /dev/null
+++ b/src/component/themePreset/corsair/index.js
@@ -0,0 +1,27 @@
+export const corsair = {
+ name: 'Corsair',
+ color: { range: { primary: { h: 217, s: 46 } }, contrast: { start: 18, end: 74 } },
+ accent: { hsl: { h: 59, s: 100, l: 50 }, rgb: { r: 255, g: 251, b: 0 } },
+ font: { display: { name: 'Alatsi', weight: 400, style: 'normal' }, ui: { name: 'Source Sans Pro', weight: 400, style: 'normal' } },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 20,
+ shadow: 150,
+ style: 'dark',
+ shade: { opacity: 30, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/dash/index.js b/src/component/themePreset/dash/index.js
new file mode 100644
index 00000000..e6c11815
--- /dev/null
+++ b/src/component/themePreset/dash/index.js
@@ -0,0 +1,27 @@
+export const dash = {
+ name: 'Dash',
+ color: { range: { primary: { h: 211, s: 10 } }, contrast: { start: 50, end: 100 } },
+ accent: { hsl: { h: 342, s: 83, l: 40 }, rgb: { r: 187, g: 17, b: 68 } },
+ font: { display: { name: 'Fredericka the Great', weight: 400, style: 'normal' }, ui: { name: 'Oswald', weight: 400, style: 'normal' } },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 0,
+ shadow: 0,
+ style: 'light',
+ shade: { opacity: 50, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/deco/index.js b/src/component/themePreset/deco/index.js
new file mode 100644
index 00000000..57856eee
--- /dev/null
+++ b/src/component/themePreset/deco/index.js
@@ -0,0 +1,27 @@
+export const deco = {
+ name: 'Deco',
+ color: { range: { primary: { h: 184, s: 38 } }, contrast: { start: 22, end: 75 } },
+ accent: { hsl: { h: 0, s: 100, l: 82 }, rgb: { r: 255, g: 161, b: 161 } },
+ font: { display: { name: 'Poiret One', weight: 400, style: 'normal' }, ui: { name: 'Lato', weight: 400, style: 'normal' } },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 200,
+ shadow: 50,
+ style: 'dark',
+ shade: { opacity: 10, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/earthquake/index.js b/src/component/themePreset/earthquake/index.js
new file mode 100644
index 00000000..cd071b84
--- /dev/null
+++ b/src/component/themePreset/earthquake/index.js
@@ -0,0 +1,27 @@
+export const earthquake = {
+ name: 'Earthquake',
+ color: { range: { primary: { h: 0, s: 13 } }, contrast: { start: 15, end: 40 } },
+ accent: { hsl: { h: 48, s: 100, l: 50 }, rgb: { r: 255, g: 204, b: 0 } },
+ font: { display: { name: 'Tulpen One', weight: 400, style: 'normal' }, ui: { name: 'Barlow Condensed', weight: 400, style: 'normal' } },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 80,
+ shadow: 100,
+ style: 'dark',
+ shade: { opacity: 80, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/funkadelic/index.js b/src/component/themePreset/funkadelic/index.js
new file mode 100644
index 00000000..cca7ae0f
--- /dev/null
+++ b/src/component/themePreset/funkadelic/index.js
@@ -0,0 +1,27 @@
+export const funkadelic = {
+ name: 'Funkadelic',
+ color: { range: { primary: { h: 307, s: 100 } }, contrast: { start: 20, end: 70 } },
+ accent: { hsl: { h: 60, s: 86, l: 53 }, rgb: { r: 238, g: 238, b: 34 } },
+ font: { display: { name: 'Monoton', weight: 400, style: 'normal' }, ui: { name: 'Lato', weight: 400, style: 'normal' } },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 120,
+ shadow: 0,
+ style: 'dark',
+ shade: { opacity: 80, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/grimm/index.js b/src/component/themePreset/grimm/index.js
new file mode 100644
index 00000000..e810ed7e
--- /dev/null
+++ b/src/component/themePreset/grimm/index.js
@@ -0,0 +1,27 @@
+export const grimm = {
+ name: 'Grimm',
+ color: { range: { primary: { h: 283, s: 7 } }, contrast: { start: 18, end: 45 } },
+ accent: { hsl: { h: 144, s: 100, l: 50 }, rgb: { r: 0, g: 255, b: 102 } },
+ font: { display: { name: 'Griffy', weight: 400, style: 'normal' }, ui: { name: 'Roboto Slab', weight: 400, style: 'normal' } },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 100,
+ shadow: 150,
+ style: 'dark',
+ shade: { opacity: 90, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/hive/index.js b/src/component/themePreset/hive/index.js
new file mode 100644
index 00000000..9a1cdec6
--- /dev/null
+++ b/src/component/themePreset/hive/index.js
@@ -0,0 +1,27 @@
+export const hive = {
+ name: 'Hive',
+ color: { range: { primary: { h: 37, s: 88 } }, contrast: { start: 33, end: 100 } },
+ accent: { hsl: { h: 210, s: 60, l: 23 }, rgb: { r: 23, g: 59, b: 94 } },
+ font: { display: { name: 'Kufam', weight: 400, style: 'normal' }, ui: { name: 'Inconsolata', weight: 400, style: 'normal' } },
+ background: {
+ type: 'video',
+ color: { rgb: { r: 255, g: 255, b: 255 }, hsl: { h: 0, s: 0, l: 0 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { type: 'url', url: '', blur: 0, grayscale: 0, opacity: 100, scale: 100, accent: 0, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/videos/1627763800511.mp4?raw=true', blur: 0, grayscale: 0, opacity: 16, scale: 100, accent: 0, vignette: { opacity: 50, start: 90, end: 0 } }
+ },
+ radius: 25,
+ shadow: 0,
+ style: 'dark',
+ shade: { opacity: 0, blur: 0 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'custom', opacity: 20, hsl: { h: 35, s: 100, l: 61 }, rgb: { r: 255, g: 172, b: 56 } }, item: { border: 1, opacity: 0 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/hypnos/index.js b/src/component/themePreset/hypnos/index.js
new file mode 100644
index 00000000..96358b33
--- /dev/null
+++ b/src/component/themePreset/hypnos/index.js
@@ -0,0 +1,27 @@
+export const hypnos = {
+ name: 'Hypnos',
+ color: { range: { primary: { h: 243, s: 26 } }, contrast: { start: 15, end: 50 } },
+ accent: { hsl: { h: 30, s: 100, l: 80 }, rgb: { r: 255, g: 204, b: 153 } },
+ font: { display: { name: 'Shadows Into Light', weight: 100, style: 'normal' }, ui: { name: 'Fira Code', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1628356492462.jpeg?raw=true', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 5, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 60,
+ shadow: 25,
+ style: 'dark',
+ shade: { opacity: 20, blur: 0 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 40 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/index.js b/src/component/themePreset/index.js
new file mode 100644
index 00000000..ff403ba4
--- /dev/null
+++ b/src/component/themePreset/index.js
@@ -0,0 +1,95 @@
+import { state } from '../state';
+
+import { acrid } from './acrid';
+import { aerial } from './aerial';
+import { azure } from './azure';
+import { bean } from './bean';
+import { black } from './black';
+import { comet } from './comet';
+import { corsair } from './corsair';
+import { dash } from './dash';
+import { deco } from './deco';
+import { earthquake } from './earthquake';
+import { funkadelic } from './funkadelic';
+import { grimm } from './grimm';
+import { hive } from './hive';
+import { hypnos } from './hypnos';
+import { infrared } from './infrared';
+import { kapow } from './kapow';
+import { koto } from './koto';
+import { lex } from './lex';
+import { macaroon } from './macaroon';
+import { marker } from './marker';
+import { midnight } from './midnight';
+import { mint } from './mint';
+import { nighttab } from './nighttab';
+import { nord } from './nord';
+import { obsidian } from './obsidian';
+import { origin } from './origin';
+import { outrun } from './outrun';
+import { pepper } from './pepper';
+import { pumpkin } from './pumpkin';
+import { replica } from './replica';
+import { rumble } from './rumble';
+import { savage } from './savage';
+import { scoria } from './scoria';
+import { snow } from './snow';
+import { sol } from './sol';
+import { steel } from './steel';
+import { stria } from './stria';
+import { terra } from './terra';
+import { trine } from './trine';
+import { vanadium } from './vanadium';
+import { viper } from './viper';
+import { white } from './white';
+
+const themePreset = {};
+
+themePreset.get = () => {
+ return [
+ nighttab,
+ black,
+ white,
+ acrid,
+ aerial,
+ azure,
+ bean,
+ comet,
+ corsair,
+ dash,
+ deco,
+ earthquake,
+ funkadelic,
+ grimm,
+ hive,
+ hypnos,
+ infrared,
+ kapow,
+ koto,
+ lex,
+ macaroon,
+ marker,
+ midnight,
+ mint,
+ nord,
+ obsidian,
+ origin,
+ outrun,
+ pepper,
+ pumpkin,
+ replica,
+ rumble,
+ savage,
+ scoria,
+ snow,
+ sol,
+ steel,
+ stria,
+ terra,
+ trine,
+ vanadium,
+ viper
+ ];
+};
+
+export { themePreset };
diff --git a/src/component/themePreset/infrared/index.js b/src/component/themePreset/infrared/index.js
new file mode 100644
index 00000000..eab8835a
--- /dev/null
+++ b/src/component/themePreset/infrared/index.js
@@ -0,0 +1,27 @@
+export const infrared = {
+ name: 'Infrared',
+ color: { range: { primary: { h: 359, s: 100 } }, contrast: { start: 12, end: 85 } },
+ accent: { hsl: { h: 0, s: 100, l: 50 }, rgb: { r: 255, g: 0, b: 0 } },
+ font: { display: { name: 'Bellota', weight: 400, style: 'normal' }, ui: { name: 'Lexend', weight: 400, style: 'normal' } },
+ background: {
+ type: 'video',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/videos/1626342620002.mp4?raw=true', blur: 0, grayscale: 100, scale: 100, accent: 50, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 25,
+ shadow: 75,
+ style: 'dark',
+ shade: { opacity: 0, blur: 5 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 0 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/kapow/index.js b/src/component/themePreset/kapow/index.js
new file mode 100644
index 00000000..1d023f32
--- /dev/null
+++ b/src/component/themePreset/kapow/index.js
@@ -0,0 +1,27 @@
+export const kapow = {
+ name: 'Kapow',
+ color: { range: { primary: { h: 194, s: 77 } }, contrast: { start: 24, end: 54 } },
+ accent: { hsl: { h: 115, s: 100, l: 50 }, rgb: { r: 21, g: 255, b: 0 } },
+ font: { display: { name: 'Bangers', weight: 400, style: 'normal' }, ui: { name: 'Sniglet', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1626516786268.jpeg?raw=true', blur: 0, grayscale: 100, scale: 100, accent: 0, opacity: 10, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 40,
+ shadow: 100,
+ style: 'dark',
+ shade: { opacity: 40, blur: 4 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 1, opacity: 80 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/koto/index.js b/src/component/themePreset/koto/index.js
new file mode 100644
index 00000000..b630a2aa
--- /dev/null
+++ b/src/component/themePreset/koto/index.js
@@ -0,0 +1,27 @@
+export const koto = {
+ name: 'Koto',
+ color: { range: { primary: { h: 231, s: 56 } }, contrast: { start: 13, end: 60 } },
+ accent: { hsl: { h: 341, s: 100, l: 52 }, rgb: { r: 255, g: 12, b: 88 } },
+ font: { display: { name: 'Dosis', weight: 200, style: 'normal' }, ui: { name: 'Montserrat', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1626365116841.jpeg?raw=true', blur: 0, grayscale: 0, scale: 100, accent: 20, opacity: 50, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 25,
+ shadow: 50,
+ style: 'dark',
+ shade: { opacity: 0, blur: 10 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/lex/index.js b/src/component/themePreset/lex/index.js
new file mode 100644
index 00000000..17a2ee28
--- /dev/null
+++ b/src/component/themePreset/lex/index.js
@@ -0,0 +1,27 @@
+export const lex = {
+ name: 'Lex',
+ color: { range: { primary: { h: 278, s: 73 } }, contrast: { start: 10, end: 60 } },
+ accent: { hsl: { h: 160, s: 100, l: 50 }, rgb: { r: 0, g: 255, b: 170 } },
+ font: { display: { name: 'Autour One', weight: 400, style: 'normal' }, ui: { name: 'Solway', weight: 400, style: 'normal' } },
+ background: {
+ type: 'gradient',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 0,
+ start: { hsl: { h: 268, s: 72, l: 25 }, rgb: { r: 61, g: 18, b: 110 } },
+ end: { hsl: { h: 299, s: 72, l: 25 }, rgb: { r: 108, g: 18, b: 110 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 10,
+ shadow: 100,
+ style: 'dark',
+ shade: { opacity: 90, blur: 0 },
+ opacity: { general: 30 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 30 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 30 } },
+ group: { openAll: { opacity: 30 } },
+ toolbar: { opacity: 30 }
+};
diff --git a/src/component/themePreset/macaroon/index.js b/src/component/themePreset/macaroon/index.js
new file mode 100644
index 00000000..c8dba090
--- /dev/null
+++ b/src/component/themePreset/macaroon/index.js
@@ -0,0 +1,27 @@
+export const macaroon = {
+ name: 'Macaroon',
+ color: { range: { primary: { h: 301, s: 28 } }, contrast: { start: 55, end: 80 } },
+ accent: { hsl: { h: 241, s: 51, l: 62 }, rgb: { r: 110, g: 109, b: 208 } },
+ font: { display: { name: 'Calistoga', weight: 400, style: 'normal' }, ui: { name: 'Source Sans Pro', weight: 400, style: 'normal' } },
+ background: {
+ type: 'video',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/videos/1626342625654.mp4?raw=true', blur: 0, grayscale: 90, scale: 100, accent: 0, opacity: 10, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 40,
+ shadow: 50,
+ style: 'light',
+ shade: { opacity: 30, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/marker/index.js b/src/component/themePreset/marker/index.js
new file mode 100644
index 00000000..2a062453
--- /dev/null
+++ b/src/component/themePreset/marker/index.js
@@ -0,0 +1,27 @@
+export const marker = {
+ name: 'Marker',
+ color: { range: { primary: { h: 0, s: 0 } }, contrast: { start: 56, end: 96 } },
+ accent: { hsl: { h: 210, s: 33, l: 20 }, rgb: { r: 34, g: 51, b: 68 } },
+ font: { display: { name: 'Permanent Marker', weight: 400, style: 'normal' }, ui: { name: 'Roboto Condensed', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1626365108115.jpeg?raw=true', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 25, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 30,
+ shadow: 50,
+ style: 'light',
+ shade: { opacity: 30, blur: 0 },
+ opacity: { general: 20 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 20 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 20 } },
+ group: { openAll: { opacity: 20 } },
+ toolbar: { opacity: 20 }
+};
diff --git a/src/component/themePreset/midnight/index.js b/src/component/themePreset/midnight/index.js
new file mode 100644
index 00000000..1a5118e8
--- /dev/null
+++ b/src/component/themePreset/midnight/index.js
@@ -0,0 +1,27 @@
+export const midnight = {
+ name: 'Midnight',
+ color: { range: { primary: { h: 221, s: 40 } }, contrast: { start: 12, end: 50 } },
+ accent: { hsl: { h: 236, s: 100, l: 50 }, rgb: { r: 0, g: 17, b: 255 } },
+ font: { display: { name: 'Megrim', weight: 400, style: 'normal' }, ui: { name: 'Lato', weight: 400, style: 'normal' } },
+ background: {
+ type: 'video',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/videos/1626351787997.mp4?raw=true', blur: 0, grayscale: 100, scale: 100, accent: 15, opacity: 30, vignette: { opacity: 40, start: 90, end: 50 } }
+ },
+ radius: 50,
+ shadow: 75,
+ style: 'dark',
+ shade: { opacity: 10, blur: 0 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/mint/index.js b/src/component/themePreset/mint/index.js
new file mode 100644
index 00000000..5c4295eb
--- /dev/null
+++ b/src/component/themePreset/mint/index.js
@@ -0,0 +1,27 @@
+export const mint = {
+ name: 'Mint',
+ color: { range: { primary: { h: 157, s: 50 } }, contrast: { start: 12, end: 50 } },
+ accent: { hsl: { h: 169, s: 100, l: 68 }, rgb: { r: 94, g: 255, b: 226 } },
+ font: { display: { name: 'Unica One', weight: 400, style: 'normal' }, ui: { name: 'Montserrat', weight: 400, style: 'normal' } },
+ background: {
+ type: 'color',
+ color: { hsl: { h: 154, s: 69, l: 32 }, rgb: { r: 25, g: 138, b: 89 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 80,
+ shadow: 100,
+ style: 'dark',
+ shade: { opacity: 40, blur: 20 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/nighttab/index.js b/src/component/themePreset/nighttab/index.js
new file mode 100644
index 00000000..9f5aeefd
--- /dev/null
+++ b/src/component/themePreset/nighttab/index.js
@@ -0,0 +1,19 @@
+import { state } from '../../state';
+
+export const nighttab = {
+ name: 'nightTab (default)',
+ color: state.get.default().theme.color,
+ accent: { hsl: state.get.default().theme.accent.hsl, rgb: state.get.default().theme.accent.rgb },
+ font: state.get.default().theme.font,
+ background: state.get.default().theme.background,
+ radius: state.get.default().theme.radius,
+ shadow: state.get.default().theme.shadow,
+ style: state.get.default().theme.style,
+ shade: state.get.default().theme.shade,
+ opacity: state.get.default().theme.opacity,
+ layout: state.get.default().theme.layout,
+ header: state.get.default().theme.header,
+ bookmark: state.get.default().theme.bookmark,
+ group: state.get.default().theme.group,
+ toolbar: state.get.default().theme.toolbar
+};
diff --git a/src/component/themePreset/nord/index.js b/src/component/themePreset/nord/index.js
new file mode 100644
index 00000000..b9dfa9db
--- /dev/null
+++ b/src/component/themePreset/nord/index.js
@@ -0,0 +1,27 @@
+export const nord = {
+ name: 'Nord',
+ color: { range: { primary: { h: 220, s: 16 } }, contrast: { start: 15, end: 50 } },
+ accent: { hsl: { h: 213, s: 32, l: 52 }, rgb: { r: 94, g: 129, b: 172 } },
+ font: { display: { name: 'Rubik', weight: 400, style: 'normal' }, ui: { name: 'Inter', weight: 400, style: 'normal' } },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 75,
+ shadow: 100,
+ style: 'dark',
+ shade: { opacity: 10, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/obsidian/index.js b/src/component/themePreset/obsidian/index.js
new file mode 100644
index 00000000..13464179
--- /dev/null
+++ b/src/component/themePreset/obsidian/index.js
@@ -0,0 +1,27 @@
+export const obsidian = {
+ name: 'Obsidian',
+ color: { range: { primary: { h: 200, s: 10 } }, contrast: { start: 5, end: 50 } },
+ accent: { hsl: { h: 180, s: 100, l: 50 }, rgb: { r: 0, g: 255, b: 255 } },
+ font: { display: { name: 'Zilla Slab', weight: 700, style: 'normal' }, ui: { name: 'Montserrat', weight: 400, style: 'normal' } },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 25,
+ shadow: 200,
+ style: 'dark',
+ shade: { opacity: 50, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/origin/index.js b/src/component/themePreset/origin/index.js
new file mode 100644
index 00000000..e41451ea
--- /dev/null
+++ b/src/component/themePreset/origin/index.js
@@ -0,0 +1,27 @@
+export const origin = {
+ name: 'Origin',
+ color: { range: { primary: { h: 222, s: 14 } }, contrast: { start: 8, end: 88 } },
+ accent: { hsl: { h: 30, s: 100, l: 50 }, rgb: { r: 255, g: 128, b: 0 } },
+ font: { display: { name: 'Fira Sans', weight: 400, style: 'normal' }, ui: { name: 'Noto Sans', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1626472271306.jpeg?raw=true', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 20, vignette: { opacity: 20, start: 90, end: 40 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 50,
+ shadow: 75,
+ style: 'dark',
+ shade: { opacity: 0, blur: 10 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 1, opacity: 0 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/outrun/index.js b/src/component/themePreset/outrun/index.js
new file mode 100644
index 00000000..d8a4c014
--- /dev/null
+++ b/src/component/themePreset/outrun/index.js
@@ -0,0 +1,27 @@
+export const outrun = {
+ name: 'Outrun',
+ color: { range: { primary: { h: 227, s: 52 } }, contrast: { start: 20, end: 80 } },
+ accent: { hsl: { h: 316, s: 100, l: 50 }, rgb: { r: 255, g: 0, b: 187 } },
+ font: { display: { name: 'Major Mono Display', weight: 400, style: 'normal' }, ui: { name: 'Roboto Condensed', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1626365114391.jpeg?raw=true', blur: 0, grayscale: 0, scale: 100, accent: 60, opacity: 70, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 25,
+ shadow: 0,
+ style: 'dark',
+ shade: { opacity: 70, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 1 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/pepper/index.js b/src/component/themePreset/pepper/index.js
new file mode 100644
index 00000000..f668babb
--- /dev/null
+++ b/src/component/themePreset/pepper/index.js
@@ -0,0 +1,27 @@
+export const pepper = {
+ name: 'Pepper',
+ color: { range: { primary: { h: 0, s: 69 } }, contrast: { start: 15, end: 80 } },
+ accent: { rgb: { r: 255, g: 150, b: 0 }, hsl: { h: 35, s: 100, l: 50 } },
+ font: { display: { name: 'Big Shoulders Display', weight: 400, style: 'normal' }, ui: { name: 'Montserrat', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 30,
+ start: { hsl: { h: 358, s: 100, l: 15 }, rgb: { r: 77, g: 0, b: 3 } },
+ end: { hsl: { h: 9, s: 99, l: 40 }, rgb: { r: 203, g: 31, b: 1 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1628355202943.jpeg?raw=true', blur: 0, grayscale: 100, scale: 100, accent: 0, opacity: 15, vignette: { opacity: 25, start: 90, end: 35 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 60,
+ shadow: 100,
+ style: 'dark',
+ shade: { opacity: 10, blur: 0 },
+ opacity: { general: 25 },
+ layout: { divider: { size: 1 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 25 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 25 } },
+ group: { openAll: { opacity: 25 } },
+ toolbar: { opacity: 25 }
+};
diff --git a/src/component/themePreset/pumpkin/index.js b/src/component/themePreset/pumpkin/index.js
new file mode 100644
index 00000000..94ad2630
--- /dev/null
+++ b/src/component/themePreset/pumpkin/index.js
@@ -0,0 +1,27 @@
+export const pumpkin = {
+ name: 'Pumpkin',
+ color: { range: { primary: { h: 198, s: 0 } }, contrast: { start: 10, end: 60 } },
+ accent: { hsl: { h: 25, s: 86, l: 53 }, rgb: { r: 238, g: 119, b: 34 } },
+ font: { display: { name: 'Girassol', weight: 400, style: 'normal' }, ui: { name: 'Muli', weight: 400, style: 'normal' } },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 20,
+ shadow: 100,
+ style: 'dark',
+ shade: { opacity: 10, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/replica/index.js b/src/component/themePreset/replica/index.js
new file mode 100644
index 00000000..2ea9b19d
--- /dev/null
+++ b/src/component/themePreset/replica/index.js
@@ -0,0 +1,27 @@
+export const replica = {
+ name: 'Replica',
+ color: { range: { primary: { h: 212, s: 23 } }, contrast: { start: 54, end: 100 } },
+ accent: { hsl: { h: 210, s: 40, l: 30 }, rgb: { r: 51, g: 85, b: 119 } },
+ font: { display: { name: 'Abel', weight: 400, style: 'normal' }, ui: { name: 'Raleway', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { rgb: { r: 255, g: 255, b: 255 }, hsl: { h: 0, s: 0, l: 0 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1626366863277.jpeg?raw=true', blur: 0, grayscale: 0, opacity: 40, scale: 100, accent: 0, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, opacity: 50, scale: 100, accent: 0, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 0,
+ shadow: 0,
+ style: 'light',
+ shade: { opacity: 50, blur: 5 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 1 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 0 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/rumble/index.js b/src/component/themePreset/rumble/index.js
new file mode 100644
index 00000000..fd0cafb9
--- /dev/null
+++ b/src/component/themePreset/rumble/index.js
@@ -0,0 +1,27 @@
+export const rumble = {
+ name: 'Rumble',
+ color: { range: { primary: { h: 267, s: 10 } }, contrast: { start: 16, end: 40 } },
+ accent: { hsl: { h: 340, s: 100, l: 38 }, rgb: { r: 196, g: 0, b: 66 } },
+ font: { display: { name: 'Odibee Sans', weight: 400, style: 'normal' }, ui: { name: 'Roboto Condensed', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1628615254892.jpeg?raw=true', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 12, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 75,
+ shadow: 175,
+ style: 'dark',
+ shade: { opacity: 20, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 1 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 50 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 50 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/savage/index.js b/src/component/themePreset/savage/index.js
new file mode 100644
index 00000000..a1d2ed77
--- /dev/null
+++ b/src/component/themePreset/savage/index.js
@@ -0,0 +1,27 @@
+export const savage = {
+ name: 'Savage',
+ color: { range: { primary: { h: 35, s: 7 } }, contrast: { start: 5, end: 30 } },
+ accent: { hsl: { h: 0, s: 100, l: 50 }, rgb: { r: 255, g: 0, b: 0 } },
+ font: { display: { name: 'Metal Mania', weight: 400, style: 'normal' }, ui: { name: 'Lato', weight: 400, style: 'normal' } },
+ background: {
+ type: 'gradient',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 180,
+ start: { hsl: { h: 30, s: 5, l: 7 }, rgb: { r: 20, g: 19, b: 18 } },
+ end: { hsl: { h: 0, s: 100, l: 13 }, rgb: { r: 66, g: 0, b: 0 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 0,
+ shadow: 250,
+ style: 'dark',
+ shade: { opacity: 80, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/scoria/index.js b/src/component/themePreset/scoria/index.js
new file mode 100644
index 00000000..1747605d
--- /dev/null
+++ b/src/component/themePreset/scoria/index.js
@@ -0,0 +1,27 @@
+export const scoria = {
+ name: 'Scoria',
+ color: { range: { primary: { h: 338, s: 76 } }, contrast: { start: 20, end: 65 } },
+ accent: { hsl: { h: 210, s: 80, l: 63 }, rgb: { r: 85, g: 161, b: 236 } },
+ font: { display: { name: 'Zen Loop', weight: 400, style: 'normal' }, ui: { name: 'Montserrat', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 40, l: 17 }, rgb: { r: 26, g: 37, b: 61 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1626775107287.jpeg?raw=true', blur: 4, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 60,
+ shadow: 100,
+ style: 'dark',
+ shade: { opacity: 0, blur: 90 },
+ opacity: { general: 80 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 80 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 80 } },
+ group: { openAll: { opacity: 80 } },
+ toolbar: { opacity: 80 }
+};
diff --git a/src/component/themePreset/snow/index.js b/src/component/themePreset/snow/index.js
new file mode 100644
index 00000000..93cdc797
--- /dev/null
+++ b/src/component/themePreset/snow/index.js
@@ -0,0 +1,27 @@
+export const snow = {
+ name: 'Snow',
+ color: { range: { primary: { h: 217, s: 46 } }, contrast: { start: 75, end: 95 } },
+ accent: { hsl: { h: 191, s: 59, l: 82 }, rgb: { r: 181, g: 226, b: 236 } },
+ font: { display: { name: 'Righteous', weight: 400, style: 'normal' }, ui: { name: 'Raleway', weight: 400, style: 'normal' } },
+ background: {
+ type: 'gradient',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 360,
+ start: { hsl: { h: 286, s: 15, l: 96 }, rgb: { r: 246, g: 243, b: 246 } },
+ end: { hsl: { h: 204, s: 52, l: 81 }, rgb: { r: 181, g: 212, b: 232 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 0,
+ shadow: 25,
+ style: 'light',
+ shade: { opacity: 60, blur: 0 },
+ opacity: { general: 80 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 80 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 2, opacity: 80 } },
+ group: { openAll: { opacity: 80 } },
+ toolbar: { opacity: 80 }
+};
diff --git a/src/component/themePreset/sol/index.js b/src/component/themePreset/sol/index.js
new file mode 100644
index 00000000..8d55035d
--- /dev/null
+++ b/src/component/themePreset/sol/index.js
@@ -0,0 +1,27 @@
+export const sol = {
+ name: 'Sol',
+ color: { range: { primary: { h: 52, s: 100 } }, contrast: { start: 0, end: 90 } },
+ accent: { hsl: { h: 44, s: 100, l: 50 }, rgb: { r: 255, g: 185, b: 0 } },
+ font: { display: { name: 'Fredoka One', weight: 400, style: 'normal' }, ui: { name: 'Muli', weight: 400, style: 'normal' } },
+ background: {
+ type: 'accent',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 50,
+ shadow: 25,
+ style: 'light',
+ shade: { opacity: 60, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 10 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 10 } },
+ toolbar: { opacity: 10 }
+};
diff --git a/src/component/themePreset/steel/index.js b/src/component/themePreset/steel/index.js
new file mode 100644
index 00000000..2de3fd62
--- /dev/null
+++ b/src/component/themePreset/steel/index.js
@@ -0,0 +1,27 @@
+export const steel = {
+ name: 'Steel',
+ color: { range: { primary: { h: 214, s: 30 } }, contrast: { start: 20, end: 80 } },
+ accent: { hsl: { h: 203, s: 33, l: 35 }, rgb: { r: 59, g: 95, b: 118 } },
+ font: { display: { name: 'Abel', weight: 400, style: 'normal' }, ui: { name: 'Raleway', weight: 400, style: 'normal' } },
+ background: {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 30,
+ shadow: 50,
+ style: 'light',
+ shade: { opacity: 70, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 100 } },
+ toolbar: { opacity: 100 }
+};
diff --git a/src/component/themePreset/stria/index.js b/src/component/themePreset/stria/index.js
new file mode 100644
index 00000000..3dc1c53b
--- /dev/null
+++ b/src/component/themePreset/stria/index.js
@@ -0,0 +1,27 @@
+export const stria = {
+ name: 'Stria',
+ color: { range: { primary: { h: 305, s: 20 } }, contrast: { start: 20, end: 48 } },
+ accent: { hsl: { h: 30, s: 80, l: 63 }, rgb: { r: 236, g: 161, b: 85 } },
+ font: { display: { name: 'Gowun Batang', weight: 400, style: 'normal' }, ui: { name: '', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1626366147967.jpeg?raw=true', blur: 0, grayscale: 52, scale: 100, accent: 0, opacity: 40, vignette: { opacity: 25, start: 90, end: 20 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 40,
+ shadow: 30,
+ style: 'dark',
+ shade: { opacity: 0, blur: 10 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 50 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 50 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/terra/index.js b/src/component/themePreset/terra/index.js
new file mode 100644
index 00000000..daa976f1
--- /dev/null
+++ b/src/component/themePreset/terra/index.js
@@ -0,0 +1,27 @@
+export const terra = {
+ name: 'Terra',
+ color: { range: { primary: { h: 29, s: 28 } }, contrast: { start: 17, end: 83 } },
+ accent: { hsl: { h: 270, s: 80, l: 37 }, rgb: { r: 94, g: 19, b: 170 } },
+ font: { display: { name: 'Sansita Swashed', weight: 400, style: 'normal' }, ui: { name: '', weight: 400, style: 'normal' } },
+ background: {
+ type: 'gradient',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 180,
+ start: { hsl: { h: 46, s: 52, l: 70 }, rgb: { r: 219, g: 200, b: 140 } },
+ end: { hsl: { h: 342, s: 16, l: 52 }, rgb: { r: 152, g: 113, b: 125 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 75,
+ shadow: 30,
+ style: 'light',
+ shade: { opacity: 4, blur: 4 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/trine/index.js b/src/component/themePreset/trine/index.js
new file mode 100644
index 00000000..a972b00a
--- /dev/null
+++ b/src/component/themePreset/trine/index.js
@@ -0,0 +1,27 @@
+export const trine = {
+ name: 'Trine',
+ color: { range: { primary: { h: 228, s: 71 } }, contrast: { start: 10, end: 60 } },
+ accent: { hsl: { h: 180, s: 100, l: 50 }, rgb: { r: 0, g: 255, b: 255 } },
+ font: { display: { name: 'Josefin Sans', weight: 300, style: 'normal' }, ui: { name: 'Roboto Slab', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1626365111390.jpeg?raw=true', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 30, vignette: { opacity: 50, start: 95, end: 60 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 50,
+ shadow: 125,
+ style: 'dark',
+ shade: { opacity: 10, blur: 0 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 40 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } },
+ group: { openAll: { opacity: 40 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/vanadium/index.js b/src/component/themePreset/vanadium/index.js
new file mode 100644
index 00000000..4e9d3e67
--- /dev/null
+++ b/src/component/themePreset/vanadium/index.js
@@ -0,0 +1,27 @@
+export const vanadium = {
+ name: 'Vanadium',
+ color: { range: { primary: { h: 218, s: 33 } }, contrast: { start: 15, end: 65 } },
+ accent: { hsl: { h: 30, s: 100, l: 50 }, rgb: { r: 255, g: 128, b: 0 } },
+ font: { display: { name: 'Grenze Gotisch', weight: 100, style: 'normal' }, ui: { name: 'Roboto', weight: 400, style: 'normal' } },
+ background: {
+ type: 'video',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/videos/1626342631982.mp4?raw=true', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 30, vignette: { opacity: 60, start: 90, end: 20 } }
+ },
+ radius: 25,
+ shadow: 25,
+ style: 'dark',
+ shade: { opacity: 20, blur: 10 },
+ opacity: { general: 100 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 40 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/viper/index.js b/src/component/themePreset/viper/index.js
new file mode 100644
index 00000000..c401560d
--- /dev/null
+++ b/src/component/themePreset/viper/index.js
@@ -0,0 +1,27 @@
+export const viper = {
+ name: 'Viper',
+ color: { range: { primary: { h: 111, s: 34 } }, contrast: { start: 17, end: 90 } },
+ accent: { hsl: { h: 173, s: 100, l: 25 }, rgb: { r: 0, g: 128, b: 113 } },
+ font: { display: { name: 'Georama', weight: 500, style: 'normal' }, ui: { name: 'Lora', weight: 400, style: 'normal' } },
+ background: {
+ type: 'image',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: 'https://github.com/zombieFox/nightTabAssets/blob/main/images/1626368964266.jpeg?raw=true', blur: 0, grayscale: 100, scale: 100, accent: 20, opacity: 22, vignette: { opacity: 0, start: 90, end: 70 } },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100, vignette: { opacity: 0, start: 90, end: 70 } }
+ },
+ radius: 25,
+ shadow: 75,
+ style: 'light',
+ shade: { opacity: 0, blur: 0 },
+ opacity: { general: 0 },
+ layout: { divider: { size: 0 } },
+ header: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 0 } },
+ bookmark: { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 0 } },
+ group: { openAll: { opacity: 0 } },
+ toolbar: { opacity: 0 }
+};
diff --git a/src/component/themePreset/white/index.js b/src/component/themePreset/white/index.js
new file mode 100644
index 00000000..c6f0b0d5
--- /dev/null
+++ b/src/component/themePreset/white/index.js
@@ -0,0 +1,19 @@
+import { state } from '../../state';
+
+export const white = {
+ name: 'White',
+ color: { range: { primary: { h: 0, s: 0 } }, contrast: { start: 0, end: 100 } },
+ accent: { hsl: { h: 0, s: 0, l: 20 }, rgb: { r: 51, g: 51, b: 51 } },
+ font: state.get.default().theme.font,
+ background: state.get.default().theme.background,
+ radius: state.get.default().theme.radius,
+ shadow: state.get.default().theme.shadow,
+ style: 'light',
+ shade: state.get.default().theme.shade,
+ opacity: state.get.default().theme.opacity,
+ layout: state.get.default().theme.layout,
+ header: state.get.default().theme.header,
+ bookmark: state.get.default().theme.bookmark,
+ group: state.get.default().theme.group,
+ toolbar: state.get.default().theme.toolbar
+};
diff --git a/src/component/toolbar/index.js b/src/component/toolbar/index.js
new file mode 100644
index 00000000..902662a2
--- /dev/null
+++ b/src/component/toolbar/index.js
@@ -0,0 +1,36 @@
+import { state } from '../state';
+
+import { ToolbarControl } from '../toolbarControl';
+
+import { applyCSSVar } from '../../utility/applyCSSVar';
+import { applyCSSClass } from '../../utility/applyCSSClass';
+import { applyCSSState } from '../../utility/applyCSSState';
+
+const toolbar = {};
+
+toolbar.current = null;
+
+toolbar.bar = {};
+
+toolbar.bar.render = () => {
+
+ const body = document.querySelector('body');
+
+ switch (state.get.current().toolbar.location) {
+
+ case 'corner':
+
+ body.appendChild(toolbar.current.toolbar());
+
+ break;
+
+ };
+
+};
+
+toolbar.init = () => {
+ toolbar.current = new ToolbarControl();
+ toolbar.bar.render();
+};
+
+export { toolbar }
diff --git a/src/component/toolbarControl/index.css b/src/component/toolbarControl/index.css
new file mode 100644
index 00000000..bb0f8fae
--- /dev/null
+++ b/src/component/toolbarControl/index.css
@@ -0,0 +1,112 @@
+:root {
+ --toolbar-position-offset: 1em;
+}
+
+.toolbar {
+ display: flex;
+ z-index: var(--z-index-toolbar);
+}
+
+.is-toolbar-location-corner .toolbar {
+ position: fixed;
+}
+
+.is-toolbar-location-corner.is-toolbar-position-top-left .toolbar {
+ top: var(--toolbar-position-offset);
+ left: var(--toolbar-position-offset);
+}
+
+.is-toolbar-location-corner.is-toolbar-position-top-right .toolbar {
+ top: var(--toolbar-position-offset);
+ right: var(--toolbar-position-offset);
+}
+
+.is-toolbar-location-corner.is-toolbar-position-bottom-left .toolbar {
+ bottom: var(--toolbar-position-offset);
+ left: var(--toolbar-position-offset);
+}
+
+.is-toolbar-location-corner.is-toolbar-position-bottom-right .toolbar {
+ bottom: var(--toolbar-position-offset);
+ right: var(--toolbar-position-offset);
+}
+
+.toolbar-control {
+ font-size: calc(var(--toolbar-size) * 0.01em);
+ display: flex;
+ transition: opacity var(--layout-transition-extra-fast);
+}
+
+.is-toolbar-location-header.is-header-item-justify-left .toolbar {
+ justify-content: flex-start;
+}
+
+.is-toolbar-location-header.is-header-item-justify-center .toolbar {
+ justify-content: center;
+}
+
+.is-toolbar-location-header.is-header-item-justify-right .toolbar {
+ justify-content: flex-end;
+}
+
+.is-toolbar-opacity-low .toolbar {
+ --button-text: var(--theme-primary-text-010);
+ --button-text-focus-hover: var(--theme-primary-text-010);
+ --button-text-active: var(--theme-primary-text-010);
+ --button-text-disabled: var(--theme-primary-010);
+}
+
+.is-toolbar-opacity-low .toolbar {
+ --button-text: var(--theme-primary-text-010);
+ --button-text-focus-hover: var(--theme-primary-text-010);
+ --button-text-active: var(--theme-primary-text-010);
+ --button-text-disabled: var(--theme-primary-010);
+}
+
+.is-toolbar-opacity-low.is-theme-background-type-accent .toolbar {
+ --button-text: var(--theme-accent-rgb-text);
+ --button-text-focus-hover: var(--theme-accent-rgb-text);
+ --button-text-active: var(--theme-accent-rgb-text);
+ --button-text-disabled: var(--theme-accent-rgb-text);
+}
+
+.is-toolbar-opacity-low.is-theme-background-type-color .toolbar {
+ --button-text: var(--theme-background-color-rgb-text);
+ --button-text-focus-hover: var(--theme-background-color-rgb-text);
+ --button-text-active: var(--theme-background-color-rgb-text);
+ --button-text-disabled: var(--theme-background-color-rgb-text);
+}
+
+
+.toolbar-item.button,
+.toolbar-item.form-input-button input[type="color"]+label {
+ background-color: hsla(var(--button-background), calc(var(--theme-toolbar-opacity) / 100));
+}
+
+.toolbar-item.button:focus,
+.toolbar-item.button:hover,
+.toolbar-item.form-input-button:focus input[type="color"]+label,
+.toolbar-item.form-input-button:hover input[type="color"]+label {
+ background-color: hsla(var(--button-background-focus-hover), calc(var(--theme-toolbar-opacity) / 100));
+}
+
+.toolbar-item.button:active,
+.toolbar-item.form-input-button:active input[type="color"]+label {
+ background-color: hsla(var(--button-background-focus-hover), calc(var(--theme-toolbar-opacity) / 100));
+}
+
+.toolbar-item.button.active,
+.toolbar-item.form-input-button.active input[type="color"]+label {
+ background-color: hsla(var(--button-background-active), calc(var(--theme-toolbar-opacity) / 100));
+}
+
+.toolbar-item.button.disabled,
+.toolbar-item.button.disabled:hover,
+.toolbar-item.button.disabled:focus,
+.toolbar-item.button.disabled:active,
+.toolbar-item.form-input-button input[type="color"]:disabled+label,
+.toolbar-item.form-input-button input[type="color"]:disabled:hover+label,
+.toolbar-item.form-input-button input[type="color"]:disabled:focus+label,
+.toolbar-item.form-input-button input[type="color"]:disabled:active+label {
+ background-color: hsla(var(--button-background-disabled), calc(var(--theme-toolbar-opacity) / 100));
+}
diff --git a/src/component/toolbarControl/index.js b/src/component/toolbarControl/index.js
new file mode 100644
index 00000000..280a8a1c
--- /dev/null
+++ b/src/component/toolbarControl/index.js
@@ -0,0 +1,371 @@
+import { state } from '../state';
+import { menu } from '../menu';
+import { data } from '../data';
+import { bookmark } from '../bookmark';
+import { group } from '../group';
+import { header } from '../header';
+import { theme } from '../theme';
+
+import * as form from '../form';
+
+import { Button } from '../button';
+import { Dropdown } from '../dropdown';
+
+import { Control_inputButton } from '../control/inputButton';
+
+import { node } from '../../utility/node';
+import { applyCSSVar } from '../../utility/applyCSSVar';
+import { applyCSSClass } from '../../utility/applyCSSClass';
+import { applyCSSState } from '../../utility/applyCSSState';
+
+import './index.css';
+
+export const ToolbarControl = function() {
+
+ this.element = {
+ toolbar: node('div|class:toolbar'),
+ control: node('div|class:toolbar-control'),
+ group: form.group()
+ };
+
+ this.control = {};
+
+ this.control.button = {
+ accent: new Control_inputButton({
+ object: state.get.current(),
+ path: 'theme.accent',
+ id: 'theme-accent-quick',
+ type: 'color',
+ labelText: 'Accent colour',
+ srOnly: true,
+ inputButtonStyle: ['dot', 'line'],
+ inputButtonClassList: ['toolbar-item'],
+ action: () => {
+ applyCSSVar([
+ 'theme.accent.rgb.r',
+ 'theme.accent.rgb.g',
+ 'theme.accent.rgb.b',
+ 'theme.accent.hsl.h',
+ 'theme.accent.hsl.s',
+ 'theme.accent.hsl.l'
+ ]);
+ this.update.style();
+ data.save();
+ }
+ }),
+ add: new Dropdown({
+ text: 'Add',
+ buttonStyle: ['line'],
+ buttonClassList: ['toolbar-item'],
+ srOnly: true,
+ iconName: 'add',
+ menuItem: [
+ { text: 'New Group', iconName: 'addFolder', action: () => { group.add.render(); } },
+ { text: 'New Bookmark', iconName: 'addBookmark', action: () => { bookmark.add.render(); } }
+ ]
+ }),
+ edit: new Button({
+ text: 'Enter edit bookmark mode',
+ srOnly: true,
+ iconName: 'edit',
+ classList: ['toolbar-item'],
+ style: ['line'],
+ func: () => {
+ bookmark.edit.toggle();
+ group.edit.toggle();
+ header.edit.toggle();
+ this.update.edit();
+ data.save();
+ }
+ }),
+ setting: new Button({
+ text: 'Open settings menu',
+ srOnly: true,
+ iconName: 'settings',
+ classList: ['toolbar-item'],
+ style: ['line'],
+ func: () => {
+ menu.toggle();
+ }
+ })
+ };
+
+ this.assemble = () => {
+
+ switch (state.get.current().toolbar.location) {
+
+ case 'corner':
+
+ switch (state.get.current().toolbar.position) {
+
+ case 'top-right':
+ case 'bottom-right':
+ this.element.group.classList.remove('form-group-reverse');
+ break;
+
+ case 'top-left':
+ case 'bottom-left':
+ this.element.group.classList.add('form-group-reverse');
+ break;
+
+ };
+
+ break;
+
+ case 'header':
+ this.element.group.classList.remove('form-group-reverse');
+ break;
+
+ };
+
+ if (state.get.current().toolbar.accent.show) {
+
+ this.element.group.appendChild(this.control.button.accent.button);
+
+ } else {
+
+ if (this.element.group.contains(this.control.button.accent.button)) {
+ this.element.group.removeChild(this.control.button.accent.button);
+ };
+
+ };
+
+ if (state.get.current().toolbar.add.show) {
+
+ this.element.group.appendChild(this.control.button.add.toggle);
+
+ } else {
+
+ if (this.element.group.contains(this.control.button.add.toggle)) {
+ this.element.group.removeChild(this.control.button.add.toggle);
+ };
+
+ };
+
+ if (state.get.current().toolbar.edit.show) {
+
+ this.element.group.appendChild(this.control.button.edit.button);
+
+ } else {
+
+ if (this.element.group.contains(this.control.button.edit.button)) {
+ this.element.group.removeChild(this.control.button.edit.button);
+ };
+
+ };
+
+ this.element.group.appendChild(this.control.button.setting.button);
+
+ this.element.control.appendChild(this.element.group);
+
+ this.element.toolbar.appendChild(this.element.control);
+
+ };
+
+ this.toolbar = () => {
+
+ return this.element.toolbar;
+
+ };
+
+ this.update = {};
+
+ this.update.style = () => {
+
+ const html = document.querySelector('html');
+
+ if (state.get.current().theme.toolbar.opacity < 40) {
+
+ html.classList.add('is-toolbar-opacity-low');
+
+ } else {
+
+ html.classList.remove('is-toolbar-opacity-low');
+
+ };
+
+ const add = (rgb) => {
+
+ this.element.toolbar.style.setProperty('--toolbar-color-r', rgb.r);
+ this.element.toolbar.style.setProperty('--toolbar-color-g', rgb.g);
+ this.element.toolbar.style.setProperty('--toolbar-color-b', rgb.b);
+
+ this.element.toolbar.style.setProperty('--toolbar-color-text', '0, 0%, calc(((((var(--toolbar-color-r) * var(--theme-t-r)) + (var(--toolbar-color-g) * var(--theme-t-g)) + (var(--toolbar-color-b) * var(--theme-t-b))) / 255) - var(--theme-t)) * -10000000%)');
+
+ this.element.toolbar.style.setProperty('--button-link-text', 'var(--toolbar-color-text)');
+ this.element.toolbar.style.setProperty('--button-link-text-focus-hover', 'var(--toolbar-color-text)');
+ this.element.toolbar.style.setProperty('--button-link-text-active', 'var(--toolbar-color-text)');
+
+ };
+
+ const remove = () => {
+
+ this.element.toolbar.style.removeProperty('--toolbar-color-r');
+ this.element.toolbar.style.removeProperty('--toolbar-color-g');
+ this.element.toolbar.style.removeProperty('--toolbar-color-b');
+
+ this.element.toolbar.style.removeProperty('--toolbar-color-text');
+
+ this.element.toolbar.style.removeProperty('--button-link-text');
+ this.element.toolbar.style.removeProperty('--button-link-text-focus-hover');
+ this.element.toolbar.style.removeProperty('--button-link-text-active');
+
+ };
+
+ if (state.get.current().theme.toolbar.opacity < 40) {
+
+ switch (state.get.current().theme.background.type) {
+
+ case 'theme':
+ case 'image':
+ case 'video':
+
+ remove();
+
+ break;
+
+ case 'accent':
+
+ add(state.get.current().theme.accent.rgb);
+
+ break;
+
+ case 'color':
+
+ add(state.get.current().theme.background.color.rgb);
+
+ break;
+
+ case 'gradient':
+
+ switch (state.get.current().toolbar.location) {
+
+ case 'corner':
+
+ let angle = state.get.current().theme.background.gradient.angle;
+
+ switch (state.get.current().toolbar.position) {
+
+ case 'top-left':
+ case 'top-right':
+ if (angle < 90) {
+ add(state.get.current().theme.background.gradient.end.rgb);
+ } else if (angle >= 90 && angle < 180) {
+ add(state.get.current().theme.background.gradient.start.rgb);
+ } else if (angle >= 180 && angle < 270) {
+ add(state.get.current().theme.background.gradient.start.rgb);
+ } else if (angle >= 270) {
+ add(state.get.current().theme.background.gradient.end.rgb);
+ };
+ break;
+
+ case 'bottom-right':
+ case 'bottom-left':
+ if (angle < 90) {
+ add(state.get.current().theme.background.gradient.start.rgb);
+ } else if (angle >= 90 && angle < 180) {
+ add(state.get.current().theme.background.gradient.end.rgb);
+ } else if (angle >= 180 && angle < 270) {
+ add(state.get.current().theme.background.gradient.end.rgb);
+ } else if (angle >= 270) {
+ add(state.get.current().theme.background.gradient.start.rgb);
+ };
+ break;
+
+ };
+
+ break;
+
+ case 'header':
+
+ remove();
+
+ break;
+
+ };
+
+ break;
+
+ };
+
+ this.control.button.accent.inputButtonStyle.update(['dot', 'link']);
+ this.control.button.edit.style.update(['line', 'link']);
+ this.control.button.setting.style.update(['link']);
+ this.control.button.add.buttonStyle.update(['link']);
+
+ } else {
+
+ remove();
+
+ this.control.button.accent.inputButtonStyle.update(['dot', 'line']);
+ this.control.button.edit.style.update(['line']);
+ this.control.button.setting.style.update(['line']);
+ this.control.button.add.buttonStyle.update(['line']);
+
+ };
+
+ };
+
+ this.update.edit = () => {
+
+ if (state.get.current().header.edit || state.get.current().group.edit || state.get.current().bookmark.edit) {
+
+ this.control.button.edit.active();
+
+ } else {
+
+ this.control.button.edit.deactive();
+
+ };
+
+ };
+
+ this.update.location = () => {
+
+ applyCSSClass('toolbar.location');
+ applyCSSState('toolbar.newLine');
+
+ };
+
+ this.update.position = () => {
+
+ switch (state.get.current().toolbar.position) {
+
+ case 'top-right':
+ case 'bottom-right':
+ this.element.group.classList.remove('form-group-reverse');
+ break;
+
+ case 'top-left':
+ case 'bottom-left':
+ this.element.group.classList.add('form-group-reverse');
+ break;
+
+ };
+
+ applyCSSVar('toolbar.size');
+ applyCSSClass('toolbar.position');
+
+ };
+
+ this.update.control = () => {
+ this.assemble();
+ };
+
+ this.update.accent = () => {
+
+ this.control.button.accent.update();
+
+ };
+
+ this.assemble();
+
+ this.update.style();
+
+ this.update.location();
+
+ this.update.position();
+
+ this.update.control();
+
+};
diff --git a/src/css/transitional.css b/src/component/transitional/index.css
similarity index 70%
rename from src/css/transitional.css
rename to src/component/transitional/index.css
index 41928cd9..41ff7c39 100644
--- a/src/css/transitional.css
+++ b/src/component/transitional/index.css
@@ -5,7 +5,6 @@
font-family: var(--theme-font-display-name);
font-weight: var(--theme-font-display-weight);
font-style: var(--theme-font-display-style);
- color: rgb(var(--theme-color-14));
display: inline-flex;
flex-direction: row;
justify-content: center;
@@ -13,6 +12,26 @@
line-height: 1.2;
}
+.transitional-item {
+ font-size: 1.5em;
+ max-width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.is-theme-background-type-accent .transitional-text {
+ color: hsl(var(--theme-accent-rgb-text));
+}
+
+.is-theme-background-type-accent .transitional-text {
+ color: hsl(var(--theme-accent-rgb-text));
+}
+
+.is-theme-background-type-color .transitional-text {
+ color: hsl(var(--theme-background-color-rgb-text));
+}
+
.is-header-item-justify-left .transitional {
justify-content: flex-start;
text-align: left;
@@ -27,11 +46,3 @@
justify-content: flex-end;
text-align: right;
}
-
-.transitional-item {
- font-size: 1.5em;
- max-width: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
-}
diff --git a/src/component/transitional/index.js b/src/component/transitional/index.js
new file mode 100644
index 00000000..636ef626
--- /dev/null
+++ b/src/component/transitional/index.js
@@ -0,0 +1,127 @@
+import { state } from '../state';
+
+import { node } from '../../utility/node';
+import { trimString } from '../../utility/trimString';
+import { isValidString } from '../../utility/isValidString';
+import { complexNode } from '../../utility/complexNode';
+
+import moment from 'moment';
+
+import './index.css';
+
+export const Transitional = function({} = {}) {
+
+ this.element = {
+ transitional: node('div|class:transitional'),
+ text: node('span|class:transitional-item transitional-text')
+ };
+
+ this.assemble = () => {
+
+ if (state.get.current().header.transitional.show) {
+ this.element.transitional.appendChild(this.element.text);
+ };
+
+ };
+
+ this.update = () => {
+
+ let value;
+
+ switch (state.get.current().header.transitional.type) {
+ case 'timeanddate':
+
+ if ((state.get.current().header.date.day.show ||
+ state.get.current().header.date.date.show ||
+ state.get.current().header.date.month.show ||
+ state.get.current().header.date.year.show) && (state.get.current().header.clock.second.show ||
+ state.get.current().header.clock.minute.show ||
+ state.get.current().header.clock.hour.show)) {
+ if (state.get.current().header.date.day.show && !state.get.current().header.date.date.show && !state.get.current().header.date.month.show && !state.get.current().header.date.year.show) {
+
+ value = 'The time and day is';
+
+ } else {
+
+ value = 'The time and date is';
+
+ };
+ } else if (
+ state.get.current().header.date.day.show ||
+ state.get.current().header.date.date.show ||
+ state.get.current().header.date.month.show ||
+ state.get.current().header.date.year.show
+ ) {
+ if (
+ state.get.current().header.date.day.show &&
+ !state.get.current().header.date.date.show &&
+ !state.get.current().header.date.month.show &&
+ !state.get.current().header.date.year.show
+ ) {
+
+ value = 'Today is';
+
+ } else if (
+ !state.get.current().header.date.day.show &&
+ state.get.current().header.date.date.show &&
+ !state.get.current().header.date.month.show &&
+ !state.get.current().header.date.year.show
+ ) {
+
+ value = 'The date is';
+
+ } else if (
+ !state.get.current().header.date.day.show &&
+ !state.get.current().header.date.date.show &&
+ state.get.current().header.date.month.show &&
+ !state.get.current().header.date.year.show
+ ) {
+
+ value = 'The month is';
+
+ } else if (
+ !state.get.current().header.date.day.show &&
+ !state.get.current().header.date.date.show &&
+ !state.get.current().header.date.month.show &&
+ state.get.current().header.date.year.show
+ ) {
+
+ value = 'The year is';
+
+ } else {
+
+ value = 'The date is';
+
+ };
+ } else if (
+ state.get.current().header.clock.second.show ||
+ state.get.current().header.clock.minute.show ||
+ state.get.current().header.clock.hour.show
+ ) {
+
+ value = 'The time is';
+
+ };
+
+ break;
+
+ case 'its':
+ value = 'It\'s';
+
+ break;
+
+ };
+
+ this.element.text.innerHTML = value;
+
+ };
+
+ this.assemble();
+
+ this.update();
+
+ this.transitional = () => {
+ return this.element.transitional;
+ };
+
+};
diff --git a/src/component/update/index.js b/src/component/update/index.js
new file mode 100644
index 00000000..0a9222e2
--- /dev/null
+++ b/src/component/update/index.js
@@ -0,0 +1,571 @@
+import { state } from '../state';
+import { version } from '../version';
+import { convertColor } from '../../utility/convertColor';
+import { updateLegacy } from '../updateLegacy';
+
+const update = {};
+
+update.mod = updateLegacy.get();
+
+update.mod['7.0.0'] = function(data) {
+
+ data.state.header.order.splice(data.state.header.order.indexOf('editAdd'), 1);
+ data.state.header.order.splice(data.state.header.order.indexOf('colorAccent'), 1);
+ data.state.header.order.splice(data.state.header.order.indexOf('menu'), 1);
+
+ data.state.header.greeting.size = data.state.header.greeting.size * 100;
+ data.state.header.clock.size = data.state.header.clock.size * 100;
+ data.state.header.transitional.size = data.state.header.transitional.size * 100;
+ data.state.header.date.size = data.state.header.date.size * 100;
+ data.state.header.search.size = data.state.header.search.size * 100;
+
+ delete data.state.header.search.engine.google;
+ delete data.state.header.search.engine.duckduckgo;
+ delete data.state.header.search.engine.youtube;
+ delete data.state.header.search.engine.giphy;
+ delete data.state.header.search.engine.bing;
+
+ delete data.state.header.radius;
+ delete data.state.header.position;
+
+ switch (data.state.header.date.format) {
+
+ case 'datemonth':
+ data.state.header.date.format = 'date-month';
+ break;
+
+ case 'monthdate':
+ data.state.header.date.format = 'month-date';
+ break;
+
+ };
+
+ data.state.header.order.push('toolbar');
+
+ data.state.layout.padding = data.state.layout.padding * 10;
+
+ data.state.layout.gutter = data.state.layout.gutter * 10;
+
+ data.state.layout.size = data.state.layout.size * 100;
+
+ data.state.layout.scrollbar = data.state.layout.scrollbars;
+ delete data.state.layout.scrollbars;
+
+ data.state.layout.overscroll = data.state.layout.scrollPastEnd;
+ delete data.state.layout.scrollPastEnd;
+
+ data.state.layout.area = {
+ header: {
+ width: data.state.header.area.width,
+ justify: data.state.header.area.justify
+ },
+ bookmark: {
+ width: data.state.link.area.width,
+ justify: data.state.link.area.justify
+ }
+ };
+
+ data.state.header.clock.hour = data.state.header.clock.hours;
+ delete data.state.header.clock.hours;
+
+ data.state.header.clock.minute = data.state.header.clock.minutes;
+ delete data.state.header.clock.minutes;
+
+ data.state.header.clock.second = data.state.header.clock.seconds;
+ delete data.state.header.clock.seconds;
+
+ delete data.state.header.area;
+
+ let toolbarSize = data.state.header.menu.size * 100;
+
+ if (toolbarSize < state.get.minMax().toolbar.size.min) {
+ toolbarSize = state.get.minMax().toolbar.size.min;
+ };
+
+ data.state.toolbar = {
+ location: 'header',
+ position: 'bottom-right',
+ size: toolbarSize,
+ accent: { show: true },
+ add: { show: true },
+ edit: { show: true },
+ newLine: data.state.header.menu.newLine
+ };
+
+ delete data.state.header.menu;
+
+ delete data.state.header.colorAccent;
+ delete data.state.header.editAdd;
+
+ switch (data.state.layout.alignment) {
+ case 'topleft':
+ data.state.layout.alignment = 'top-left';
+ break;
+
+ case 'topcenter':
+ data.state.layout.alignment = 'top-center';
+ break;
+
+ case 'topright':
+ data.state.layout.alignment = 'top-right';
+ break;
+
+ case 'centerleft':
+ data.state.layout.alignment = 'center-left';
+ break;
+
+ case 'centercenter':
+ data.state.layout.alignment = 'center-center';
+ break;
+
+ case 'centerright':
+ data.state.layout.alignment = 'center-right';
+ break;
+
+ case 'bottomleft':
+ data.state.layout.alignment = 'bottom-left';
+ break;
+
+ case 'bottomcenter':
+ data.state.layout.alignment = 'bottom-center';
+ break;
+
+ case 'bottomright':
+ data.state.layout.alignment = 'bottom-right';
+ break;
+
+ };
+
+ switch (data.state.layout.order) {
+
+ case 'headerlink':
+ data.state.layout.order = 'header-bookmark';
+ break;
+
+ case 'linkheader':
+ data.state.layout.order = 'bookmark-header';
+ break;
+
+ };
+
+ data.state.theme.opacity = { general: 100 };
+
+ data.state.theme.group = { openAll: { opacity: data.state.group.openAll.opacity * 100 } };
+
+ delete data.state.group.openAll.opacity;
+
+ data.state.theme.toolbar = { opacity: 100 };
+
+ data.state.theme.layout = { divider: { size: 0 } };
+
+ data.state.theme.header = { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } };
+
+ if (data.state.theme.header.color.show) {
+
+ data.state.theme.header.color.by = data.state.header.color.by;
+
+ };
+
+ data.state.theme.header.color.hsl = data.state.header.color.hsl;
+
+ data.state.theme.header.color.rgb = data.state.header.color.rgb;
+
+ data.state.theme.header.color.opacity = data.state.header.color.opacity * 100;
+
+ data.state.theme.header.search.opacity = data.state.header.search.opacity * 100;
+
+ delete data.state.header.search.opacity;
+
+ delete data.state.header.color;
+
+ data.state.theme.bookmark = { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } };
+
+ data.state.theme.background = data.state.background;
+
+ delete data.state.background;
+
+ data.state.theme.background.gradient = {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ };
+
+ if (data.state.theme.background.visual.show) {
+
+ switch (data.state.theme.background.visual.type) {
+ case 'image':
+ data.state.theme.background.type = 'image';
+ break;
+
+ case 'video':
+ data.state.theme.background.type = 'video';
+ break;
+ };
+
+ } else {
+
+ if (data.state.theme.background.color.by === 'custom') {
+ data.state.theme.background.type = 'color';
+ } else {
+ data.state.theme.background.type = 'theme';
+ };
+
+ };
+
+ delete data.state.theme.background.color.by;
+
+ delete data.state.theme.background.visual.image.file;
+
+ data.state.theme.background.visual.image.blur = data.state.theme.background.visual.blur;
+ data.state.theme.background.visual.image.opacity = data.state.theme.background.visual.opacity * 100;
+ data.state.theme.background.visual.image.scale = data.state.theme.background.visual.scale * 100;
+ data.state.theme.background.visual.image.grayscale = data.state.theme.background.visual.grayscale * 100;
+ data.state.theme.background.visual.image.accent = data.state.theme.background.visual.accent * 100;
+ data.state.theme.background.visual.image.vignette = data.state.theme.background.visual.vignette;
+
+ data.state.theme.background.visual.video.blur = data.state.theme.background.visual.blur;
+ data.state.theme.background.visual.video.opacity = data.state.theme.background.visual.opacity * 100;
+ data.state.theme.background.visual.video.scale = data.state.theme.background.visual.scale * 100;
+ data.state.theme.background.visual.video.grayscale = data.state.theme.background.visual.grayscale * 100;
+ data.state.theme.background.visual.video.accent = data.state.theme.background.visual.accent * 100;
+ data.state.theme.background.visual.video.vignette = data.state.theme.background.visual.vignette;
+
+ data.state.theme.background.image = data.state.theme.background.visual.image;
+ data.state.theme.background.video = data.state.theme.background.visual.video;
+
+ delete data.state.theme.background.visual;
+
+ data.state.theme.radius = data.state.theme.radius * 100;
+ data.state.theme.shadow = data.state.theme.shadow * 100;
+
+ data.state.theme.color.shades = 14;
+
+ data.state.theme.color.range = {
+ primary: {
+ h: data.state.theme.color.hsl.h,
+ s: data.state.theme.color.hsl.s
+ }
+ };
+
+ let l = data.state.theme.color.hsl.l;
+
+ let contrastStart = l - (data.state.theme.color.contrast.dark * 10);
+
+ let contrastEnd = l + (data.state.theme.color.contrast.light * 10);
+
+ data.state.theme.color.contrast = {
+ start: Math.round(contrastStart),
+ end: Math.round(contrastEnd)
+ };
+
+ if (data.state.theme.color.contrast.end <= data.state.theme.color.contrast.start) {
+ data.state.theme.color.contrast.end = data.state.theme.color.contrast.start + 10;
+ };
+
+ if (data.state.theme.color.contrast.start > state.get.minMax().theme.color.contrast.start.max) {
+
+ data.state.theme.color.contrast.start = state.get.minMax().theme.color.contrast.start.max;
+
+ } else if (data.state.theme.color.contrast.start < state.get.minMax().theme.color.contrast.start.min) {
+
+ data.state.theme.color.contrast.start = state.get.minMax().theme.color.contrast.start.min;
+
+ };
+
+ if (data.state.theme.color.contrast.end > state.get.minMax().theme.color.contrast.end.max) {
+
+ data.state.theme.color.contrast.end = state.get.minMax().theme.color.contrast.end.max;
+
+ } else if (data.state.theme.color.contrast.end < state.get.minMax().theme.color.contrast.end.min) {
+
+ data.state.theme.color.contrast.end = state.get.minMax().theme.color.contrast.end.min;
+
+ };
+
+ data.state.theme.shade.opacity = data.state.theme.shade.opacity * 100;
+ data.state.theme.shade.blur = 0;
+
+ delete data.state.theme.color.hsl;
+ delete data.state.theme.color.rgb;
+ delete data.state.theme.color.generated;
+
+ data.state.theme.custom.all.forEach((item, i) => {
+
+ item.color.range = {
+ primary: {
+ h: item.color.hsl.h,
+ s: item.color.hsl.s
+ }
+ };
+
+ if (item.color.contrast.light > item.color.contrast.dark) {
+
+ item.color.contrast = {
+ start: Math.ceil((item.color.hsl.l * item.color.contrast.dark) / 10),
+ end: Math.ceil((item.color.hsl.l * item.color.contrast.light) / 3)
+ };
+
+ } else if (item.color.contrast.light < item.color.contrast.dark) {
+
+ item.color.contrast = {
+ start: Math.ceil((item.color.hsl.l * item.color.contrast.light) / 10),
+ end: Math.ceil((item.color.hsl.l * item.color.contrast.dark) / 3)
+ };
+
+ } else {
+
+ item.color.contrast = {
+ start: Math.ceil((item.color.contrast.light) * 4),
+ end: Math.ceil((item.color.contrast.dark) * 16)
+ };
+
+ };
+
+ if (item.color.contrast.end <= item.color.contrast.start) {
+ item.color.contrast.end = item.color.contrast.start + 1;
+ };
+
+ if (item.color.contrast.start > state.get.minMax().theme.color.contrast.start.max) {
+
+ item.color.contrast.start = state.get.minMax().theme.color.contrast.start.max;
+
+ } else if (item.color.contrast.start < state.get.minMax().theme.color.contrast.start.min) {
+
+ item.color.contrast.start = state.get.minMax().theme.color.contrast.start.min;
+
+ };
+
+ if (item.color.contrast.end > state.get.minMax().theme.color.contrast.end.max) {
+
+ item.color.contrast.end = state.get.minMax().theme.color.contrast.end.max;
+
+ } else if (item.color.contrast.end < state.get.minMax().theme.color.contrast.end.min) {
+
+ item.color.contrast.end = state.get.minMax().theme.color.contrast.end.min;
+
+ };
+
+ delete item.color.hsl;
+ delete item.color.rgb;
+ delete item.color.generated;
+
+ item.radius = item.radius * 100;
+
+ item.shadow = item.shadow * 100;
+
+ if (item.shade) {
+ item.shade.opacity = item.shade.opacity * 100;
+ } else {
+ item.shade = {
+ opacity: 20
+ };
+ };
+
+ item.shade.blur = 0;
+
+ item.background = {
+ type: 'theme',
+ color: { hsl: { h: 221, s: 47, l: 17 }, rgb: { r: 23, g: 36, b: 64 } },
+ gradient: {
+ angle: 160,
+ start: { hsl: { h: 206, s: 16, l: 40 }, rgb: { r: 86, g: 104, b: 118 } },
+ end: { hsl: { h: 219, s: 28, l: 12 }, rgb: { r: 22, g: 28, b: 39 } }
+ },
+ image: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100 },
+ video: { url: '', blur: 0, grayscale: 0, scale: 100, accent: 0, opacity: 100 }
+ };
+
+ item.layout = { divider: { size: 0 } };
+
+ item.opacity = { general: 100 };
+
+ item.group = { openAll: { opacity: 100 } };
+
+ item.toolbar = { opacity: 100 };
+
+ item.header = { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, search: { opacity: 100 } };
+
+ item.bookmark = { color: { by: 'theme', opacity: 10, hsl: { h: 0, s: 0, l: 0 }, rgb: { r: 0, g: 0, b: 0 } }, item: { border: 0, opacity: 100 } };
+
+ });
+
+ data.state.theme.custom.all.push(JSON.parse(JSON.stringify({
+ name: 'My custom theme',
+ color: data.state.theme.color,
+ accent: { hsl: data.state.theme.accent.hsl, rgb: data.state.theme.accent.rgb },
+ font: data.state.theme.font,
+ background: data.state.theme.background,
+ radius: data.state.theme.radius,
+ shadow: data.state.theme.shadow,
+ style: data.state.theme.style,
+ shade: data.state.theme.shade,
+ opacity: data.state.theme.opacity,
+ layout: data.state.theme.layout,
+ header: data.state.theme.header,
+ bookmark: data.state.theme.bookmark,
+ group: data.state.theme.group,
+ toolbar: data.state.theme.toolbar,
+ })));
+
+ switch (data.state.group.order) {
+
+ case 'headerbody':
+ data.state.group.order = 'header-body';
+ break;
+
+ case 'bodyheader':
+ data.state.group.order = 'body-header';
+ break;
+
+ };
+
+ data.state.group.name.size = data.state.group.name.size * 100;
+ data.state.group.openAll.size = data.state.group.openAll.size * 100;
+
+ delete data.state.group.border;
+
+ data.state.bookmark = data.state.link;
+ data.state.bookmark.url = data.state.link.item.url;
+ data.state.bookmark.line = data.state.link.item.line;
+ data.state.bookmark.shadow = data.state.link.item.shadow;
+ data.state.bookmark.hoverScale = data.state.link.item.hoverScale;
+ data.state.bookmark.size = data.state.link.item.size * 100;
+
+ delete data.state.link;
+
+ data.bookmark = data.bookmarks;
+
+ delete data.bookmarks;
+
+ data.bookmark.forEach((item, i) => {
+
+ item.items.forEach((item, i) => {
+
+ item.timestamp = item.timeStamp;
+
+ delete item.timeStamp;
+
+ item.border = data.state.bookmark.item.border;
+
+ item.background.opacity = item.background.opacity * 100;
+
+ switch (item.display.visual.type) {
+ case 'letter':
+ item.display.visual.size = item.display.visual.letter.size * 10;
+ break;
+
+ case 'icon':
+ item.display.visual.size = item.display.visual.icon.size * 10;
+ break;
+
+ case 'image':
+ item.display.visual.size = item.display.visual.image.size * 10;
+ break;
+
+ };
+
+ delete item.display.visual.letter.size;
+ delete item.display.visual.image.size;
+ delete item.display.visual.icon.size;
+
+ item.color.opacity = item.color.opacity * 100;
+
+ item.display.name.size = item.display.name.size * 10;
+
+ item.display.gutter = item.display.gutter * 10;
+
+ switch (item.display.order) {
+ case 'visualname':
+ item.display.order = 'visual-name';
+ break;
+
+ case 'namevisual':
+ item.display.order = 'name-visual';
+ break;
+
+ };
+
+ switch (item.display.alignment) {
+ case 'topleft':
+ item.display.alignment = 'top-left';
+ break;
+
+ case 'topcenter':
+ item.display.alignment = 'top-center';
+ break;
+
+ case 'topright':
+ item.display.alignment = 'top-right';
+ break;
+
+ case 'centerleft':
+ item.display.alignment = 'center-left';
+ break;
+
+ case 'centercenter':
+ item.display.alignment = 'center-center';
+ break;
+
+ case 'centerright':
+ item.display.alignment = 'center-right';
+ break;
+
+ case 'bottomleft':
+ item.display.alignment = 'bottom-left';
+ break;
+
+ case 'bottomcenter':
+ item.display.alignment = 'bottom-center';
+ break;
+
+ case 'bottomright':
+ item.display.alignment = 'bottom-right';
+ break;
+
+ };
+
+ item.shape = {
+ wide: item.wide,
+ tall: item.tall
+ };
+
+ delete item.wide;
+ delete item.tall;
+
+ });
+
+ });
+
+ delete data.state.bookmark.area;
+
+ delete data.state.bookmark.item;
+
+ delete data.state.bookmark.breakpoint;
+
+ delete data.state.dropdown;
+
+ return data;
+};
+
+update.run = (data) => {
+
+ // loop over all updates in mod.all object
+ for (var key in update.mod) {
+ if (version.compare(data.version, key) == -1) {
+ console.log('\t > running update', key);
+ data = update.mod[key](data);
+ data.version = key;
+ };
+ };
+
+ // if no update is needed version bump
+ if (version.compare(data.version, version.number) == -1) {
+ console.log('\t > no state data to update, version bump to', version.number);
+ data.version = version.number;
+ };
+
+ return data;
+
+};
+
+export { update };
diff --git a/src/js/update.js b/src/component/updateLegacy/index.js
similarity index 70%
rename from src/js/update.js
rename to src/component/updateLegacy/index.js
index 8e16bd8f..d38b7e09 100644
--- a/src/js/update.js
+++ b/src/component/updateLegacy/index.js
@@ -1,24 +1,21 @@
-var update = (function() {
+import { state } from '../state';
+import { version } from '../version';
+import { convertColor } from '../../utility/convertColor';
- var mod = {};
+const updateLegacy = {};
- // this associative array contains all the updates. add a new entry if you need to modify data.
- // example, this assumes the previous version is less than 3.28.0:
- // "3.28.0": function(data) {
- // return data;
- // };
- // always add the version in increasing order so the most recent version is last.
- mod.all = {
- "1.0.0": function(data) {
- data.version = "1.0.0";
+updateLegacy.get = () => {
+ return {
+ '1.0.0': function(data) {
+ data.version = '1.0.0';
return data;
},
- "2.0.0": function(data) {
+ '2.0.0': function(data) {
// major state overhaul for version 2.0.0 and up
data.state = {
header: {
date: {
- characterLength: "short",
+ characterLength: 'short',
show: {
date: true,
day: false,
@@ -48,18 +45,18 @@ var update = (function() {
active: true,
grow: true,
engine: {
- selected: "google",
+ selected: 'google',
google: {
- url: "https://www.google.com/search"
+ url: 'https://www.google.com/search'
},
duckduckgo: {
- url: "https://duckduckgo.com/"
+ url: 'https://duckduckgo.com/'
},
giphy: {
- url: "https://giphy.com/search/"
+ url: 'https://giphy.com/search/'
},
custom: {
- url: ""
+ url: ''
}
}
},
@@ -71,12 +68,12 @@ var update = (function() {
editObject: null,
action: null,
newTab: false,
- style: "block",
- sort: "none"
+ style: 'block',
+ sort: 'none'
},
layout: {
- alignment: "left",
- container: "wide",
+ alignment: 'left',
+ container: 'wide',
scrollPastEnd: true,
theme: {
current: {
@@ -102,34 +99,34 @@ var update = (function() {
data.bookmarks = [];
return data;
},
- "2.1.0": function(data) {
+ '2.1.0': function(data) {
data.state.layout.theme = {
current: data.state.layout.theme.current,
random: false
};
return data;
},
- "2.3.0": function(data) {
+ '2.3.0': function(data) {
data.state.layout.theme.random = {
active: data.state.layout.theme.random,
- style: "any"
+ style: 'any'
};
return data;
},
- "2.4.0": function(data) {
+ '2.4.0': function(data) {
data.state.link.show = {
active: true,
name: true,
url: true
};
data.state.layout.alignment = {
- horizontal: "left",
- vertical: "top"
+ horizontal: 'left',
+ vertical: 'top'
};
data.state.background = {
image: {
active: false,
- url: "../background/gray-steps.jpg",
+ url: '../background/gray-steps.jpg',
blur: 0,
opacity: 1,
grayscale: 0,
@@ -138,11 +135,11 @@ var update = (function() {
};
return data;
},
- "2.5.0": function(data) {
+ '2.5.0': function(data) {
data.state.header.search.focus = false;
return data;
},
- "2.7.0": function(data) {
+ '2.7.0': function(data) {
// update date character length
data.state.header.date.character = {
length: data.state.header.date.characterLength
@@ -193,15 +190,15 @@ var update = (function() {
data.state.modal = false;
return data;
},
- "2.8.0": function(data) {
- data.state.layout.title = "New Tab";
+ '2.8.0': function(data) {
+ data.state.layout.title = 'New Tab';
return data;
},
- "2.9.0": function(data) {
+ '2.9.0': function(data) {
data.state.header.shade = {
show: true,
padding: 4,
- style: "scroll",
+ style: 'scroll',
opacity: 0.95,
border: {
top: false,
@@ -210,11 +207,11 @@ var update = (function() {
};
return data;
},
- "2.10.0": function(data) {
+ '2.10.0': function(data) {
data.state.header.shade = {
show: true,
padding: 4,
- style: "scroll",
+ style: 'scroll',
opacity: 0.95,
border: {
top: false,
@@ -223,23 +220,23 @@ var update = (function() {
};
return data;
},
- "2.11.0": function(data) {
+ '2.11.0': function(data) {
data.state.header.greeting = {
show: false,
- type: "good",
- name: ""
+ type: 'good',
+ name: ''
};
return data;
},
- "2.11.0": function(data) {
+ '2.11.0': function(data) {
data.state.header.greeting = {
show: false,
- type: "good",
- name: ""
+ type: 'good',
+ name: ''
};
return data;
},
- "2.12.0": function(data) {
+ '2.12.0': function(data) {
data.state.bookmarks.link = {
show: data.state.bookmarks.show.link
};
@@ -248,7 +245,7 @@ var update = (function() {
};
data.state.bookmarks.url = {
show: data.state.bookmarks.show.url,
- style: "dark"
+ style: 'dark'
};
delete data.state.bookmarks.show;
data.state.theme = {
@@ -256,16 +253,16 @@ var update = (function() {
current: data.state.layout.theme.current,
random: data.state.layout.theme.random
},
- style: "dark"
+ style: 'dark'
};
delete data.state.layout.theme;
return data;
},
- "2.14.0": function(data) {
+ '2.14.0': function(data) {
data.state.layout.width = 72;
return data;
},
- "2.16.0": function(data) {
+ '2.16.0': function(data) {
data.state.header.shade.padding = {
top: data.state.header.shade.padding,
bottom: data.state.header.shade.padding
@@ -282,44 +279,44 @@ var update = (function() {
};
return data;
},
- "2.17.0": function(data) {
- data.state.header.search.engine.google.name = "Google";
- data.state.header.search.engine.duckduckgo.name = "Duck Duck Go";
- data.state.header.search.engine.giphy.name = "Giphy";
+ '2.17.0': function(data) {
+ data.state.header.search.engine.google.name = 'Google';
+ data.state.header.search.engine.duckduckgo.name = 'Duck Duck Go';
+ data.state.header.search.engine.giphy.name = 'Giphy';
return data;
},
- "2.19.0": function(data) {
+ '2.19.0': function(data) {
data.state.header.search.engine.youtube = {
- url: "https://www.youtube.com/results?search_query=",
- name: "YouTube"
+ url: 'https://www.youtube.com/results?search_query=',
+ name: 'YouTube'
};
- data.state.header.search.engine.custom.name = "";
+ data.state.header.search.engine.custom.name = '';
return data;
},
- "2.20.0": function(data) {
+ '2.20.0': function(data) {
data.state.header.search.width = {
- style: "auto",
+ style: 'auto',
custom: 30
};
data.state.header.search.text = {
- align: "left"
+ align: 'left'
};
delete data.state.header.search.grow;
return data;
},
- "2.21.0": function(data) {
+ '2.21.0': function(data) {
data.state.header.clock = {
hours: {
show: data.state.header.clock.show.hours,
- display: "number"
+ display: 'number'
},
minutes: {
show: data.state.header.clock.show.minutes,
- display: "number"
+ display: 'number'
},
seconds: {
show: data.state.header.clock.show.seconds,
- display: "number"
+ display: 'number'
},
separator: {
show: data.state.header.clock.show.separator
@@ -334,37 +331,37 @@ var update = (function() {
data.state.header.date = {
day: {
show: data.state.header.date.show.day,
- display: "word",
- weekStart: "monday",
+ display: 'word',
+ weekStart: 'monday',
length: data.state.header.date.character.length
},
date: {
show: data.state.header.date.show.date,
- display: "number",
+ display: 'number',
ordinal: true
},
month: {
show: data.state.header.date.show.month,
- display: "word",
+ display: 'word',
length: data.state.header.date.character.length,
ordinal: true
},
year: {
show: data.state.header.date.show.year,
- display: "number"
+ display: 'number'
},
separator: {
show: data.state.header.date.show.separator
},
- format: "datemonth"
+ format: 'datemonth'
};
data.state.header.transitional = {
show: false,
- type: "timeanddate"
+ type: 'timeanddate'
};
return data;
},
- "2.22.0": function(data) {
+ '2.22.0': function(data) {
data.bookmarks.forEach(function(arrayItem, index) {
arrayItem.accent = {
override: false,
@@ -377,9 +374,9 @@ var update = (function() {
});
return data;
},
- "3.0.0": function(data) {
+ '3.0.0': function(data) {
data.bookmarks.forEach(function(arrayItem, index) {
- arrayItem.display = "letter";
+ arrayItem.display = 'letter';
arrayItem.icon = {
name: null,
prefix: null,
@@ -388,16 +385,16 @@ var update = (function() {
});
return data;
},
- "3.1.0": function(data) {
+ '3.1.0': function(data) {
data.state.header.area = {
width: 90,
alignment: {
- horizontal: "center"
+ horizontal: 'center'
}
};
data.state.header.items = {
alignment: {
- horizontal: "left"
+ horizontal: 'left'
}
};
delete data.state.header.alignment;
@@ -406,33 +403,33 @@ var update = (function() {
data.state.link.area = {
width: 90,
alignment: {
- horizontal: "center"
+ horizontal: 'center'
}
};
data.state.link.items = {
width: 12,
alignment: {
- horizontal: "left"
+ horizontal: 'left'
}
};
data.state.link.show = data.state.link.link.show;
delete data.state.link.link;
- data.state.link.fit = "best";
+ data.state.link.fit = 'best';
delete data.state.link.editObject;
data.state.layout.alignment = {
- horizontal: "center",
- vertical: "center"
+ horizontal: 'center',
+ vertical: 'center'
};
data.state.edge = false;
data.state.autoSuggest = false;
return data;
},
- "3.2.0": function(data) {
+ '3.2.0': function(data) {
data.state.link.display = {
show: true,
alignment: {
- horizontal: "center",
- vertical: "center"
+ horizontal: 'center',
+ vertical: 'center'
},
letter: {
size: 2
@@ -443,14 +440,14 @@ var update = (function() {
};
return data;
},
- "3.4.0": function(data) {
+ '3.4.0': function(data) {
data.state.header.padding = data.state.header.shade.padding;
delete data.state.header.shade.padding;
data.state.header.border = data.state.header.shade.border;
delete data.state.header.shade.border;
return data;
},
- "3.6.0": function(data) {
+ '3.6.0': function(data) {
data.state.header.item = data.state.header.items;
delete data.state.header.items;
data.state.link.area.gap = 2;
@@ -467,13 +464,13 @@ var update = (function() {
delete data.state.link.url;
return data;
},
- "3.7.0": function(data) {
+ '3.7.0': function(data) {
data.state.link.item.line = {
show: true
};
return data;
},
- "3.8.0": function(data) {
+ '3.8.0': function(data) {
data.state.header.clock.size = 1;
data.state.header.date.size = 1;
data.state.header.greeting.size = 1;
@@ -494,7 +491,7 @@ var update = (function() {
data.state.theme.radius = 0.2;
return data;
},
- "3.9.0": function(data) {
+ '3.9.0': function(data) {
delete data.state.header.padding;
data.state.header.radius = false;
data.state.header.border = {
@@ -507,32 +504,32 @@ var update = (function() {
delete data.state.link.area.gap;
return data;
},
- "3.10.0": function(data) {
- data.state.header.button.style = "box";
+ '3.10.0': function(data) {
+ data.state.header.button.style = 'box';
return data;
},
- "3.11.0": function(data) {
+ '3.11.0': function(data) {
data.state.link.item.line = data.state.link.item.line.show;
data.state.link.item.hoverScale = true;
return data;
},
- "3.15.0": function(data) {
+ '3.15.0': function(data) {
delete data.state.link.sort;
return data;
},
- "3.18.0": function(data) {
+ '3.18.0': function(data) {
data.nighttab = true;
return data;
},
- "3.20.0": function(data) {
+ '3.20.0': function(data) {
data.state.link.item.url = data.state.link.item.url.show;
return data;
},
- "3.21.0": function(data) {
- data.state.layout.order = "headerLink";
+ '3.21.0': function(data) {
+ data.state.layout.order = 'headerLink';
return data;
},
- "3.27.0": function(data) {
+ '3.27.0': function(data) {
// swicth to single values for alignment controls
// no more horizontal or vertical keys in state object
data.state.header.area.alignment = data.state.header.area.alignment.horizontal;
@@ -544,14 +541,14 @@ var update = (function() {
data.state.layout.alignment = data.state.layout.alignment.vertical + data.state.layout.alignment.horizontal;
return data;
},
- "3.28.0": function(data) {
+ '3.28.0': function(data) {
data.state.header.search.engine.bing = {
- url: "https://www.bing.com/search?q=",
- name: "Bing"
+ url: 'https://www.bing.com/search?q=',
+ name: 'Bing'
};
return data;
},
- "3.29.0": function(data) {
+ '3.29.0': function(data) {
// move new tab into link
data.state.link.item.newTab = data.state.link.newTab;
delete data.state.link.newTab;
@@ -568,34 +565,34 @@ var update = (function() {
data.state.layout.order = data.state.layout.order.toLowerCase();
return data;
},
- "3.30.0": function(data) {
- data.state.link.item.order = "displayname";
+ '3.30.0': function(data) {
+ data.state.link.item.order = 'displayname';
return data;
},
- "3.32.0": function(data) {
- if (data.state.background.image.url == "") {
- data.state.background.image.from = "file";
+ '3.32.0': function(data) {
+ if (data.state.background.image.url == '') {
+ data.state.background.image.from = 'file';
} else {
- data.state.background.image.from = "url";
+ data.state.background.image.from = 'url';
};
data.state.background.image.file = {
- name: "",
- data: ""
+ name: '',
+ data: ''
};
return data;
},
- "3.50.0": function(data) {
+ '3.50.0': function(data) {
data.state.pagelock = false;
data.state.shade = false;
return data;
},
- "3.51.0": function(data) {
+ '3.51.0': function(data) {
data.state.link.add = false;
return data;
},
- "3.66.0": function(data) {
+ '3.66.0': function(data) {
data.state.background.color = {
- by: "theme",
+ by: 'theme',
custom: {
r: 0,
g: 0,
@@ -604,28 +601,28 @@ var update = (function() {
};
return data;
},
- "3.80.0": function(data) {
+ '3.80.0': function(data) {
delete data.state.link.item.newtab;
data.state.link.item.border = 0;
return data;
},
- "3.81.0": function(data) {
- data.state.link.orientation = "bottom";
+ '3.81.0': function(data) {
+ data.state.link.orientation = 'bottom';
return data;
},
- "3.82.0": function(data) {
+ '3.82.0': function(data) {
data.state.link.item.shadow = {
show: true
};
return data;
},
- "4.0.0": function(data) {
+ '4.0.0': function(data) {
data.bookmarks = [{
- name: "Group 1",
+ name: 'Group 1',
items: data.bookmarks
}];
data.state.layout.size = 1;
- data.state.header.position = "sticky";
+ data.state.header.position = 'sticky';
data.state.link.item.display.rotate = 0;
data.state.link.item.display.translate = {
x: 0,
@@ -636,14 +633,14 @@ var update = (function() {
};
data.state.group = {
area: {
- alignment: "left"
+ alignment: 'left'
},
name: {
show: true,
size: 1
},
border: 0,
- order: "headerbody",
+ order: 'headerbody',
add: false
};
data.state.dropdown = false;
@@ -667,32 +664,32 @@ var update = (function() {
x: 0,
y: 0
};
- if (data.state.link.item.order == "displayname") {
- data.state.link.item.display.order = "letconname";
- } else if (data.state.link.item.order == "namedisplay") {
- data.state.link.item.display.order = "nameletcon";
+ if (data.state.link.item.order == 'displayname') {
+ data.state.link.item.display.order = 'letconname';
+ } else if (data.state.link.item.order == 'namedisplay') {
+ data.state.link.item.display.order = 'nameletcon';
};
delete data.state.link.item.order;
- if (data.state.link.style == "block") {
- data.state.link.item.display.direction = "vertical";
- } else if (data.state.link.style == "list") {
- data.state.link.item.display.direction = "horizontal";
+ if (data.state.link.style == 'block') {
+ data.state.link.item.display.direction = 'vertical';
+ } else if (data.state.link.style == 'list') {
+ data.state.link.item.display.direction = 'horizontal';
};
delete data.state.link.fit;
- data.state.header.search.engine.duckduckgo.name = "DuckDuckGo";
+ data.state.header.search.engine.duckduckgo.name = 'DuckDuckGo';
return data;
},
- "4.1.0": function(data) {
+ '4.1.0': function(data) {
data.state.link.item.display.gutter = 2;
return data;
},
- "4.2.0": function(data) {
+ '4.2.0': function(data) {
data.state.edit = false;
data.state.link.edit = false;
data.state.group.edit = false;
return data;
},
- "4.3.0": function(data) {
+ '4.3.0': function(data) {
data.state.theme.color = {
hsl: {
h: 222,
@@ -706,7 +703,7 @@ var update = (function() {
}
};
data.state.link.item.color = {
- by: "theme",
+ by: 'theme',
custom: {
r: 0,
g: 0,
@@ -717,66 +714,66 @@ var update = (function() {
delete data.state.header.button.accent;
return data;
},
- "4.4.0": function(data) {
+ '4.4.0': function(data) {
data.state.header.button.colorAccent.dot = {
show: true
};
return data;
},
- "4.6.0": function(data) {
+ '4.6.0': function(data) {
data.state.theme.font = {
- display: "",
- ui: ""
+ display: '',
+ ui: ''
};
return data;
},
- "4.7.0": function(data) {
+ '4.7.0': function(data) {
data.state.theme.font.display = {
name: data.state.theme.font.display,
weight: 400,
- style: "normal"
+ style: 'normal'
};
data.state.theme.font.ui = {
name: data.state.theme.font.ui,
weight: 400,
- style: "normal"
+ style: 'normal'
};
return data;
},
- "4.8.0": function(data) {
+ '4.8.0': function(data) {
data.state.theme.custom = [];
return data;
},
- "4.9.0": function(data) {
+ '4.9.0': function(data) {
data.state.theme.color.contrast = {
light: 4,
dark: 4
};
return data;
},
- "4.10.0": function(data) {
+ '4.10.0': function(data) {
data.state.theme.shadow = 1;
return data;
},
- "4.11.0": function(data) {
+ '4.11.0': function(data) {
data.state.theme.custom = {
all: data.state.theme.custom,
edit: false
};
return data;
},
- "4.17.0": function(data) {
+ '4.17.0': function(data) {
data.state.theme.shade = {
opacity: 0.4
};
return data;
},
- "4.18.0": function(data) {
+ '4.18.0': function(data) {
data.state.theme.accent.rgb = data.state.theme.accent.current;
delete data.state.theme.accent.current;
return data;
},
- "4.19.2": function(data) {
+ '4.19.2': function(data) {
data.bookmarks.forEach(function(arrayItem, index) {
arrayItem.items.forEach(function(arrayItem, index) {
arrayItem.searchMatch = false;
@@ -784,17 +781,17 @@ var update = (function() {
});
return data;
},
- "4.22.0": function(data) {
+ '4.22.0': function(data) {
data.state.link.item.color.rgb = data.state.link.item.color.custom;
delete data.state.link.item.color.custom;
data.state.background.color.rgb = data.state.background.color.custom;
delete data.state.background.color.custom;
return data;
},
- "4.23.0": function(data) {
+ '4.23.0': function(data) {
data.state.header.color = data.state.header.shade;
delete data.state.header.shade;
- data.state.header.color.by = "theme";
+ data.state.header.color.by = 'theme';
data.state.header.color.rgb = {
r: 0,
g: 0,
@@ -802,12 +799,12 @@ var update = (function() {
};
return data;
},
- "4.33.0": function(data) {
- data.state.layout.scrollbars = "auto";
+ '4.33.0': function(data) {
+ data.state.layout.scrollbars = 'auto';
return data;
},
- "4.37.0": function(data) {
- data.state.header.order = ["greeting", "transitional", "clock", "date", "search", "editAdd", "colorAccent", "menu"];
+ '4.37.0': function(data) {
+ data.state.header.order = ['greeting', 'transitional', 'clock', 'date', 'search', 'editAdd', 'colorAccent', 'menu'];
data.state.header.menu = {
show: true,
size: data.state.header.button.size,
@@ -840,15 +837,15 @@ var update = (function() {
by: data.state.header.search.style,
size: data.state.header.search.width
};
- data.state.header.search.style = "box";
+ data.state.header.search.style = 'box';
delete data.state.header.button;
return data;
},
- "4.38.0": function(data) {
+ '4.38.0': function(data) {
data.state.theme.color.generated = {};
return data;
},
- "4.40.0": function(data) {
+ '4.40.0': function(data) {
data.state.header.area.justify = data.state.header.area.alignment;
delete data.state.header.area.alignment;
data.state.header.item.justify = data.state.header.item.alignment;
@@ -859,31 +856,31 @@ var update = (function() {
delete data.state.link.area.alignment;
data.state.group.area.justify = data.state.group.area.alignment;
delete data.state.group.area.alignment;
- data.state.header.area.align = "center";
+ data.state.header.area.align = 'center';
return data;
},
- "4.41.0": function(data) {
+ '4.41.0': function(data) {
data.state.header.search.newTab = false;
return data;
},
- "4.42.0": function(data) {
+ '4.42.0': function(data) {
data.state.group.openAll = {
show: true,
size: 1,
- style: "box"
+ style: 'box'
};
return data;
},
- "4.44.0": function(data) {
- if (!"newTab" in data.state.link.item && "newTab" in data.state.link) {
+ '4.44.0': function(data) {
+ if (!'newTab' in data.state.link.item && 'newTab' in data.state.link) {
data.state.link.item.newTab = data.state.link.newTab;
delete data.state.link.newTab;
};
return data;
},
- "5.0.0": function(data) {
- data.state.layout.direction = "vertical";
- data.state.link.area.direction = "ltr";
+ '5.0.0': function(data) {
+ data.state.layout.direction = 'vertical';
+ data.state.link.area.direction = 'ltr';
data.bookmarks.forEach(function(arrayItem, index) {
arrayItem.name = {
show: data.state.group.name.show,
@@ -900,38 +897,38 @@ var update = (function() {
speed: 300,
step: 10
};
- data.state.header.clock.separator.text = ":";
- data.state.header.date.separator.text = "/";
+ data.state.header.clock.separator.text = ':';
+ data.state.header.date.separator.text = '/';
return data;
},
- "5.1.0": function(data) {
+ '5.1.0': function(data) {
data.state.link.item.opacity = 1;
return data;
},
- "5.2.0": function(data) {
- if (data.state.header.search.style == "box") {
+ '5.2.0': function(data) {
+ if (data.state.header.search.style == 'box') {
data.state.header.search.opacity = 1;
- } else if (data.state.header.search.style == "clear") {
+ } else if (data.state.header.search.style == 'clear') {
data.state.header.search.opacity = 0;
};
- if (data.state.header.editAdd.style == "box") {
+ if (data.state.header.editAdd.style == 'box') {
data.state.header.editAdd.opacity = 1;
- } else if (data.state.header.editAdd.style == "clear") {
+ } else if (data.state.header.editAdd.style == 'clear') {
data.state.header.editAdd.opacity = 0;
};
- if (data.state.header.colorAccent.style == "box") {
+ if (data.state.header.colorAccent.style == 'box') {
data.state.header.colorAccent.opacity = 1;
- } else if (data.state.header.colorAccent.style == "clear") {
+ } else if (data.state.header.colorAccent.style == 'clear') {
data.state.header.colorAccent.opacity = 0;
};
- if (data.state.header.menu.style == "box") {
+ if (data.state.header.menu.style == 'box') {
data.state.header.menu.opacity = 1;
- } else if (data.state.header.menu.style == "clear") {
+ } else if (data.state.header.menu.style == 'clear') {
data.state.header.menu.opacity = 0;
};
- if (data.state.group.openAll.style == "box") {
+ if (data.state.group.openAll.style == 'box') {
data.state.group.openAll.opacity = 1;
- } else if (data.state.group.openAll.style == "clear") {
+ } else if (data.state.group.openAll.style == 'clear') {
data.state.group.openAll.opacity = 0;
};
delete data.state.header.search.style;
@@ -941,15 +938,15 @@ var update = (function() {
delete data.state.group.openAll.style;
return data;
},
- "5.3.0": function(data) {
- data.state.theme.accent.hsl = helper.convertColor.rgb.hsl(data.state.theme.accent.rgb);
+ '5.3.0': function(data) {
+ data.state.theme.accent.hsl = convertColor.rgb.hsl(data.state.theme.accent.rgb);
data.state.theme.custom.all.forEach(function(arrayItem, index) {
arrayItem.accent.rgb = {
r: arrayItem.accent.r,
g: arrayItem.accent.g,
b: arrayItem.accent.b
};
- arrayItem.accent.hsl = helper.convertColor.rgb.hsl(arrayItem.accent.rgb);
+ arrayItem.accent.hsl = convertColor.rgb.hsl(arrayItem.accent.rgb);
arrayItem.accent.hsl.h = Math.round(arrayItem.accent.hsl.h);
arrayItem.accent.hsl.s = Math.round(arrayItem.accent.hsl.s);
arrayItem.accent.hsl.l = Math.round(arrayItem.accent.hsl.l);
@@ -959,7 +956,7 @@ var update = (function() {
});
return data;
},
- "5.4.0": function(data) {
+ '5.4.0': function(data) {
data.state.background.image.vignette = {
opacity: 0,
start: 90,
@@ -967,18 +964,18 @@ var update = (function() {
};
return data;
},
- "5.37.1": function(data) {
+ '5.37.1': function(data) {
data.bookmarks.forEach(function(arrayItem, index) {
arrayItem.items.forEach(function(arrayItem, index) {
if (arrayItem.name == null) {
- arrayItem.name = "";
+ arrayItem.name = '';
};
if (arrayItem.url == null) {
- arrayItem.url = "";
+ arrayItem.url = '';
};
for (var key in arrayItem.accent.color) {
- if (typeof arrayItem.accent.color[key] != "number") {
+ if (typeof arrayItem.accent.color[key] != 'number') {
arrayItem.accent.color[key] = 0;
};
};
@@ -994,13 +991,13 @@ var update = (function() {
l: 0
};
if (arrayItem.accent.override) {
- arrayItem.accent.by = "custom";
+ arrayItem.accent.by = 'custom';
} else {
- arrayItem.accent.by = "theme";
+ arrayItem.accent.by = 'theme';
};
delete arrayItem.accent.override;
arrayItem.color = {
- by: "theme",
+ by: 'theme',
hsl: {
h: 0,
s: 0,
@@ -1012,27 +1009,27 @@ var update = (function() {
b: 0
}
};
- arrayItem.image = "";
+ arrayItem.image = '';
arrayItem.visual = {
display: arrayItem.display,
letter: arrayItem.letter,
- image: "",
+ image: '',
icon: arrayItem.icon
};
delete arrayItem.display;
delete arrayItem.letter;
delete arrayItem.icon;
if (arrayItem.visual.letter == null) {
- arrayItem.visual.letter = "";
+ arrayItem.visual.letter = '';
};
if (arrayItem.visual.icon.label == null) {
- arrayItem.visual.icon.label = "";
+ arrayItem.visual.icon.label = '';
};
if (arrayItem.visual.icon.name == null) {
- arrayItem.visual.icon.name = "";
+ arrayItem.visual.icon.name = '';
};
if (arrayItem.visual.icon.prefix == null) {
- arrayItem.visual.icon.prefix = "";
+ arrayItem.visual.icon.prefix = '';
};
});
@@ -1071,31 +1068,31 @@ var update = (function() {
data.state.link.item.display.visual.image = {
size: 3
};
- if (data.state.link.item.display.order == "letconname") {
- data.state.link.item.display.order = "visualname";
- } else if (data.state.link.item.display.order == "nameletcon") {
- data.state.link.item.display.order = "namevisual";
+ if (data.state.link.item.display.order == 'letconname') {
+ data.state.link.item.display.order = 'visualname';
+ } else if (data.state.link.item.display.order == 'nameletcon') {
+ data.state.link.item.display.order = 'namevisual';
};
data.state.background.color.hsl = {
h: 0,
s: 0,
l: 0
};
- data.state.header.search.engine.custom.queryName = "";
+ data.state.header.search.engine.custom.queryName = '';
data.state.link.item.display.visual.shadow = {
size: 0
};
return data;
},
- "5.42.1": function(data) {
- if (data.state.link.item.display.order == "letconname") {
- data.state.link.item.display.order = "visualname";
- } else if (data.state.link.item.display.order == "nameletcon") {
- data.state.link.item.display.order = "namevisual";
+ '5.42.1': function(data) {
+ if (data.state.link.item.display.order == 'letconname') {
+ data.state.link.item.display.order = 'visualname';
+ } else if (data.state.link.item.display.order == 'nameletcon') {
+ data.state.link.item.display.order = 'namevisual';
};
return data;
},
- "5.44.0": function(data) {
+ '5.44.0': function(data) {
data.state.link.item.color.opacity = data.state.link.item.opacity;
delete data.state.link.item.opacity;
data.state.link.item.image = {
@@ -1103,17 +1100,17 @@ var update = (function() {
};
return data;
},
- "5.46.0": function(data) {
+ '5.46.0': function(data) {
data.bookmarks.forEach(function(arrayItem, index) {
arrayItem.items.forEach(function(arrayItem, index) {
arrayItem.wide = false;
arrayItem.tall = false;
});
});
- data.state.link.breakpoint = "xs";
+ data.state.link.breakpoint = 'xs';
return data;
},
- "5.50.0": function(data) {
+ '5.50.0': function(data) {
data.bookmarks.forEach(function(group, index) {
group.items.forEach(function(item, index) {
var bookmarkData = {
@@ -1192,121 +1189,121 @@ var update = (function() {
timeStamp: item.timeStamp
};
- if ((bookmarkData.display.direction != "vertical" && bookmarkData.display.direction != "horizontal") || bookmarkData.display.direction == undefined) {
- bookmarkData.display.direction = "vertical";
+ if ((bookmarkData.display.direction != 'vertical' && bookmarkData.display.direction != 'horizontal') || bookmarkData.display.direction == undefined) {
+ bookmarkData.display.direction = 'vertical';
};
- if ((bookmarkData.display.order != "visualname" && bookmarkData.display.order != "namevisual") || bookmarkData.display.order == undefined) {
- bookmarkData.display.order = "visualname";
+ if ((bookmarkData.display.order != 'visualname' && bookmarkData.display.order != 'namevisual') || bookmarkData.display.order == undefined) {
+ bookmarkData.display.order = 'visualname';
};
- if ((bookmarkData.display.alignment != "topleft" && bookmarkData.display.alignment != "topcenter" && bookmarkData.display.alignment != "topright" && bookmarkData.display.alignment != "centerleft" && bookmarkData.display.alignment != "centercenter" && bookmarkData.display.alignment != "centerright" && bookmarkData.display.alignment != "bottomleft" && bookmarkData.display.alignment != "bottomcenter" && bookmarkData.display.alignment != "bottomright") || bookmarkData.display.alignment == undefined) {
- bookmarkData.display.alignment = "centercenter";
+ if ((bookmarkData.display.alignment != 'topleft' && bookmarkData.display.alignment != 'topcenter' && bookmarkData.display.alignment != 'topright' && bookmarkData.display.alignment != 'centerleft' && bookmarkData.display.alignment != 'centercenter' && bookmarkData.display.alignment != 'centerright' && bookmarkData.display.alignment != 'bottomleft' && bookmarkData.display.alignment != 'bottomcenter' && bookmarkData.display.alignment != 'bottomright') || bookmarkData.display.alignment == undefined) {
+ bookmarkData.display.alignment = 'centercenter';
};
- if (typeof bookmarkData.display.gutter != "number" || bookmarkData.display.gutter == undefined) {
+ if (typeof bookmarkData.display.gutter != 'number' || bookmarkData.display.gutter == undefined) {
bookmarkData.display.gutter = 2;
};
- if (typeof bookmarkData.display.rotate != "number" || bookmarkData.display.rotate == undefined) {
+ if (typeof bookmarkData.display.rotate != 'number' || bookmarkData.display.rotate == undefined) {
bookmarkData.display.rotate = 0;
};
- if (typeof bookmarkData.display.translate.x != "number" || bookmarkData.display.translate.x == undefined) {
+ if (typeof bookmarkData.display.translate.x != 'number' || bookmarkData.display.translate.x == undefined) {
bookmarkData.display.translate.x = 0;
};
- if (typeof bookmarkData.display.translate.y != "number" || bookmarkData.display.translate.y == undefined) {
+ if (typeof bookmarkData.display.translate.y != 'number' || bookmarkData.display.translate.y == undefined) {
bookmarkData.display.translate.y = 0;
};
if (bookmarkData.display.visual.show == undefined) {
bookmarkData.display.visual.show = true;
};
- if ((bookmarkData.display.visual.type != "letter" && bookmarkData.display.visual.type != "icon" && bookmarkData.display.visual.type != "image") || bookmarkData.display.visual.type == undefined) {
- bookmarkData.display.visual.type = "letter";
+ if ((bookmarkData.display.visual.type != 'letter' && bookmarkData.display.visual.type != 'icon' && bookmarkData.display.visual.type != 'image') || bookmarkData.display.visual.type == undefined) {
+ bookmarkData.display.visual.type = 'letter';
};
- if (typeof bookmarkData.display.visual.letter.size != "number" || bookmarkData.display.visual.letter.size == undefined) {
+ if (typeof bookmarkData.display.visual.letter.size != 'number' || bookmarkData.display.visual.letter.size == undefined) {
bookmarkData.display.visual.letter.size = 3;
};
if (bookmarkData.display.visual.letter.text == undefined) {
- bookmarkData.display.visual.letter.text = "";
+ bookmarkData.display.visual.letter.text = '';
};
- if (typeof bookmarkData.display.visual.image.size != "number" || bookmarkData.display.visual.image.size == undefined) {
+ if (typeof bookmarkData.display.visual.image.size != 'number' || bookmarkData.display.visual.image.size == undefined) {
bookmarkData.display.visual.image.size = 3;
};
if (bookmarkData.display.visual.image.url == undefined) {
- bookmarkData.display.visual.image.url = "";
+ bookmarkData.display.visual.image.url = '';
};
- if (typeof bookmarkData.display.visual.icon.size != "number" || bookmarkData.display.visual.icon.size == undefined) {
+ if (typeof bookmarkData.display.visual.icon.size != 'number' || bookmarkData.display.visual.icon.size == undefined) {
bookmarkData.display.visual.icon.size = 3;
};
if (bookmarkData.display.visual.icon.name == undefined) {
- bookmarkData.display.visual.icon.name = "";
+ bookmarkData.display.visual.icon.name = '';
};
if (bookmarkData.display.visual.icon.prefix == undefined) {
- bookmarkData.display.visual.icon.prefix = "";
+ bookmarkData.display.visual.icon.prefix = '';
};
if (bookmarkData.display.visual.icon.label == undefined) {
- bookmarkData.display.visual.icon.label = "";
+ bookmarkData.display.visual.icon.label = '';
};
- if (typeof bookmarkData.display.visual.shadow.size != "number" || bookmarkData.display.visual.shadow.size == undefined) {
+ if (typeof bookmarkData.display.visual.shadow.size != 'number' || bookmarkData.display.visual.shadow.size == undefined) {
bookmarkData.display.visual.shadow.size = 0;
};
if (bookmarkData.display.name.show == undefined) {
bookmarkData.display.name.show = true;
};
if (bookmarkData.display.name.text == undefined) {
- bookmarkData.display.name.text = "";
+ bookmarkData.display.name.text = '';
};
- if (typeof bookmarkData.display.name.size != "number" || bookmarkData.display.name.size == undefined) {
+ if (typeof bookmarkData.display.name.size != 'number' || bookmarkData.display.name.size == undefined) {
bookmarkData.display.name.size = 0.9;
};
if (bookmarkData.url == undefined) {
- bookmarkData.url = "";
+ bookmarkData.url = '';
};
- if ((bookmarkData.accent.by != "theme" && bookmarkData.accent.by != "custom") || bookmarkData.accent.by == undefined) {
- bookmarkData.accent.by = "theme";
+ if ((bookmarkData.accent.by != 'theme' && bookmarkData.accent.by != 'custom') || bookmarkData.accent.by == undefined) {
+ bookmarkData.accent.by = 'theme';
};
- if (typeof bookmarkData.accent.hsl.h != "number" || bookmarkData.accent.hsl.h == undefined) {
+ if (typeof bookmarkData.accent.hsl.h != 'number' || bookmarkData.accent.hsl.h == undefined) {
bookmarkData.accent.hsl.h = 0;
};
- if (typeof bookmarkData.accent.hsl.s != "number" || bookmarkData.accent.hsl.s == undefined) {
+ if (typeof bookmarkData.accent.hsl.s != 'number' || bookmarkData.accent.hsl.s == undefined) {
bookmarkData.accent.hsl.s = 0;
};
- if (typeof bookmarkData.accent.hsl.l != "number" || bookmarkData.accent.hsl.l == undefined) {
+ if (typeof bookmarkData.accent.hsl.l != 'number' || bookmarkData.accent.hsl.l == undefined) {
bookmarkData.accent.hsl.l = 0;
};
- if (typeof bookmarkData.accent.rgb.r != "number" || bookmarkData.accent.rgb.r == undefined) {
+ if (typeof bookmarkData.accent.rgb.r != 'number' || bookmarkData.accent.rgb.r == undefined) {
bookmarkData.accent.rgb.r = 0;
};
- if (typeof bookmarkData.accent.rgb.g != "number" || bookmarkData.accent.rgb.g == undefined) {
+ if (typeof bookmarkData.accent.rgb.g != 'number' || bookmarkData.accent.rgb.g == undefined) {
bookmarkData.accent.rgb.g = 0;
};
- if (typeof bookmarkData.accent.rgb.b != "number" || bookmarkData.accent.rgb.b == undefined) {
+ if (typeof bookmarkData.accent.rgb.b != 'number' || bookmarkData.accent.rgb.b == undefined) {
bookmarkData.accent.rgb.b = 0;
};
- if ((bookmarkData.color.by != "theme" && bookmarkData.color.by != "custom") || bookmarkData.color.by == undefined) {
- bookmarkData.color.by = "theme";
+ if ((bookmarkData.color.by != 'theme' && bookmarkData.color.by != 'custom') || bookmarkData.color.by == undefined) {
+ bookmarkData.color.by = 'theme';
};
- if (typeof bookmarkData.color.hsl.h != "number" || bookmarkData.color.hsl.h == undefined) {
+ if (typeof bookmarkData.color.hsl.h != 'number' || bookmarkData.color.hsl.h == undefined) {
bookmarkData.color.hsl.h = 0;
};
- if (typeof bookmarkData.color.hsl.s != "number" || bookmarkData.color.hsl.s == undefined) {
+ if (typeof bookmarkData.color.hsl.s != 'number' || bookmarkData.color.hsl.s == undefined) {
bookmarkData.color.hsl.s = 0;
};
- if (typeof bookmarkData.color.hsl.l != "number" || bookmarkData.color.hsl.l == undefined) {
+ if (typeof bookmarkData.color.hsl.l != 'number' || bookmarkData.color.hsl.l == undefined) {
bookmarkData.color.hsl.l = 0;
};
- if (typeof bookmarkData.color.rgb.r != "number" || bookmarkData.color.rgb.r == undefined) {
+ if (typeof bookmarkData.color.rgb.r != 'number' || bookmarkData.color.rgb.r == undefined) {
bookmarkData.color.rgb.r = 0;
};
- if (typeof bookmarkData.color.rgb.g != "number" || bookmarkData.color.rgb.g == undefined) {
+ if (typeof bookmarkData.color.rgb.g != 'number' || bookmarkData.color.rgb.g == undefined) {
bookmarkData.color.rgb.g = 0;
};
- if (typeof bookmarkData.color.rgb.b != "number" || bookmarkData.color.rgb.b == undefined) {
+ if (typeof bookmarkData.color.rgb.b != 'number' || bookmarkData.color.rgb.b == undefined) {
bookmarkData.color.rgb.b = 0;
};
- if (typeof bookmarkData.color.opacity != "number" || bookmarkData.color.opacity == undefined) {
+ if (typeof bookmarkData.color.opacity != 'number' || bookmarkData.color.opacity == undefined) {
bookmarkData.color.opacity = 1;
};
if (bookmarkData.image.url == undefined) {
- bookmarkData.image.url = "";
+ bookmarkData.image.url = '';
};
- if (typeof bookmarkData.image.opacity != "number" || bookmarkData.image.opacity == undefined) {
+ if (typeof bookmarkData.image.opacity != 'number' || bookmarkData.image.opacity == undefined) {
bookmarkData.image.opacity = 1;
};
if (bookmarkData.wide == undefined) {
@@ -1322,26 +1319,26 @@ var update = (function() {
group.items[index] = bookmarkData;
});
});
- data.state.link.item.color.by = "theme";
- data.state.link.item.accent.by = "theme";
+ data.state.link.item.color.by = 'theme';
+ data.state.link.item.accent.by = 'theme';
delete data.state.link.item.display.visual.show;
return data;
},
- "5.74.0": function(data) {
+ '5.74.0': function(data) {
data.bookmarks.forEach(function(group, index) {
group.items.forEach(function(item, index) {
item.background = {
show: false,
- type: "image",
+ type: 'image',
opacity: item.image.opacity,
image: {
url: item.image.url
},
video: {
- url: ""
+ url: ''
}
};
- if (item.image.url != "") {
+ if (item.image.url != '') {
item.background.show = true;
};
delete item.image;
@@ -1351,10 +1348,10 @@ var update = (function() {
delete data.state.link.item.image;
return data;
},
- "5.78.0": function(data) {
+ '5.78.0': function(data) {
var backgroundData = {
show: data.state.background.image.show,
- type: "video",
+ type: 'video',
image: {
type: data.state.background.image.from,
file: {
@@ -1364,7 +1361,7 @@ var update = (function() {
url: data.state.background.image.url,
},
video: {
- url: ""
+ url: ''
},
blur: data.state.background.image.blur,
scale: data.state.background.image.scale,
@@ -1378,58 +1375,17 @@ var update = (function() {
}
};
if (data.state.background.image.show) {
- backgroundData.type = "image";
+ backgroundData.type = 'image';
};
data.state.background.visual = backgroundData;
delete data.state.background.image;
return data;
},
- "6.5.0": function(data) {
- data.state.header.greeting.custom = "";
+ '6.5.0': function(data) {
+ data.state.header.greeting.custom = '';
return data;
}
};
+};
- mod.run = function(data) {
- // legacy update as first version of nightTab did not have a version number stored in the state object
- if (!("version" in data)) {
- data = mod.all["1.0.0"](data);
- };
-
- // old version numbers were type of number
- // change them to strings to support new version checking
- if (typeof data.version == "number") {
- data.version = data.version.toString().split(".")
- data.version.push("0");
- data.version = data.version.join(".");
- };
-
- // loop over all updates in mod.all object
- for (var key in mod.all) {
- if (version.compare(data.version, key) == -1) {
- console.log("\t > running update", key);
- data = mod.all[key](data);
- data.version = key;
- };
- };
-
- // if no update is needed version bump
- if (version.compare(data.version, version.get().number) == -1) {
- console.log("\t > no state data to update, version bump to", version.get().number);
- data.version = version.get().number;
- };
-
- return data;
- };
-
- var run = function(data) {
- return mod.run(data);
- };
-
- // exposed methods
- return {
- mod: mod,
- run: run
- };
-
-})();
+export { updateLegacy };
diff --git a/src/component/version/index.js b/src/component/version/index.js
new file mode 100644
index 00000000..103cd583
--- /dev/null
+++ b/src/component/version/index.js
@@ -0,0 +1,38 @@
+export const version = {};
+
+version.number = '7.0.0';
+
+version.name = 'Delightful Komodo Dragon';
+
+version.compare = (a, b) => {
+
+ let pa = a.split('.');
+
+ let pb = b.split('.');
+
+ for (let i = 0; i < 3; i++) {
+
+ let na = Number(pa[i]);
+
+ let nb = Number(pb[i]);
+
+ if (na > nb) {
+ return 1;
+ };
+
+ if (nb > na) {
+ return -1;
+ };
+
+ if (!isNaN(na) && isNaN(nb)) {
+ return 1;
+ };
+
+ if (isNaN(na) && !isNaN(nb)) {
+ return -1;
+ };
+
+ };
+
+ return 0;
+};
diff --git a/src/component/video/index.js b/src/component/video/index.js
new file mode 100644
index 00000000..6d7ed9dd
--- /dev/null
+++ b/src/component/video/index.js
@@ -0,0 +1,61 @@
+import { state } from '../state';
+import { data } from '../data';
+
+import { node } from '../../utility/node';
+import { convertColor } from '../../utility/convertColor';
+import { trimString } from '../../utility/trimString';
+import { isValidString } from '../../utility/isValidString';
+
+export const Video = function({
+ url = false
+} = {}) {
+
+ this.video = node('video|autoplay,loop,muted');
+
+ this.source = node('source');
+
+ this.video.appendChild(this.source);
+
+ this.play = () => {
+ this.video.play();
+ };
+
+ this.pause = () => {
+ var playPromise = this.video.play();
+
+ if (playPromise !== undefined) {
+ playPromise.then(() => {
+ this.video.pause();
+ });
+ };
+ };
+
+ this.assemble = () => {
+
+ this.video.muted = true;
+
+ this.video.loop = true;
+
+ this.video.autoplay = true;
+
+ if (url.includes('mp4') || url.endsWith('mp4')) {
+
+ this.source.type = 'video/mp4';
+
+ } else if (url.includes('webm') || url.endsWith('webm')) {
+
+ this.source.type = 'video/webm';
+
+ };
+
+ if (isValidString(url)) {
+
+ this.source.src = url;
+
+ };
+
+ };
+
+ this.assemble();
+
+};
diff --git a/src/css/animation.css b/src/css/animation.css
deleted file mode 100755
index 5f209f41..00000000
--- a/src/css/animation.css
+++ /dev/null
@@ -1,192 +0,0 @@
-@keyframes rainbow-variables {
- 0%, 100% {
- --theme-accent: var(--theme-accent-r), var(--theme-accent-g), var(--theme-accent-b);
- --theme-accent-accessible-threshold: 0.5;
- --theme-accent-accessible-r: calc(var(--theme-accent-r) * 0.50);
- --theme-accent-accessible-g: calc(var(--theme-accent-g) * 0.60);
- --theme-accent-accessible-b: calc(var(--theme-accent-b) * 0.20);
- --theme-accent-accessible-sum: calc(var(--theme-accent-accessible-r) + var(--theme-accent-accessible-g) + var(--theme-accent-accessible-b));
- --theme-accent-accessible-perceived-lightness: calc(var(--theme-accent-accessible-sum) / 255);
- --theme-accent-accessible-color: 0, 0%, calc((var(--theme-accent-accessible-perceived-lightness) - var(--theme-accent-accessible-threshold)) * -10000000%);
- }
-
- 0% {
- --theme-accent-r: 255;
- --theme-accent-g: 0;
- --theme-accent-b: 0;
- }
-
- 16.666666666666668% {
- --theme-accent-r: 255;
- --theme-accent-g: 255;
- --theme-accent-b: 0;
- }
-
- 33.333333333333336% {
- --theme-accent-r: 0;
- --theme-accent-g: 255;
- --theme-accent-b: 0;
- }
-
- 50% {
- --theme-accent-r: 0;
- --theme-accent-g: 255;
- --theme-accent-b: 255;
- }
-
- 66.66666666666667% {
- --theme-accent-r: 0;
- --theme-accent-g: 0;
- --theme-accent-b: 255;
- }
-
- 83.33333333333334% {
- --theme-accent-r: 255;
- --theme-accent-g: 0;
- --theme-accent-b: 255;
- }
-
- 100% {
- --theme-accent-r: 255;
- --theme-accent-g: 0;
- --theme-accent-b: 0;
- }
-}
-
-@keyframes rainbow {
- 0% {
- background-color: hsl(0, calc(var(--theme-accent-s) * 1%), calc(var(--theme-accent-l) * 1%));
- }
-
- 16.666666666666668% {
- background-color: hsl(60, calc(var(--theme-accent-s) * 1%), calc(var(--theme-accent-l) * 1%));
- }
-
- 33.333333333333336% {
- background-color: hsl(120, calc(var(--theme-accent-s) * 1%), calc(var(--theme-accent-l) * 1%));
- }
-
- 50% {
- background-color: hsl(180, calc(var(--theme-accent-s) * 1%), calc(var(--theme-accent-l) * 1%));
- }
-
- 66.66666666666667% {
- background-color: hsl(240, calc(var(--theme-accent-s) * 1%), calc(var(--theme-accent-l) * 1%));
- }
-
- 83.33333333333334% {
- background-color: hsl(300, calc(var(--theme-accent-s) * 1%), calc(var(--theme-accent-l) * 1%));
- }
-
- 100% {
- background-color: hsl(360, calc(var(--theme-accent-s) * 1%), calc(var(--theme-accent-l) * 1%));
- }
-}
-
-@keyframes appear {
- 0% {
- opacity: 0;
- }
-
- 100% {
- opacity: 1;
- }
-}
-
-@keyframes shake {
- 0% {
- transform: translate3d(0, 0, 0);
- }
-
- 10% {
- transform: translate3d(-1.2em, 0, 0);
- }
-
- 20% {
- transform: translate3d(1.2em, 0, 0);
- }
-
- 30% {
- transform: translate3d(-1em, 0, 0);
- }
-
- 40% {
- transform: translate3d(1em, 0, 0);
- }
-
- 50% {
- transform: translate3d(-0.8em, 0, 0);
- }
-
- 60% {
- transform: translate3d(0.8em, 0, 0);
- }
-
- 70% {
- transform: translate3d(-0.3em, 0, 0);
- }
-
- 80% {
- transform: translate3d(0.3em, 0, 0);
- }
-
- 90% {
- transform: translate3d(-0.1em, 0, 0);
- }
-
- 100% {
- transform: translate3d(0, 0, 0);
- }
-}
-
-@keyframes pop {
- 0% {
- transform: scale(1);
- }
-
- 25% {
- transform: scale(1.1);
- }
-
- 50% {
- transform: scale(0.9);
- }
-
- 75% {
- transform: scale(1.1);
- }
-
- 100% {
- transform: scale(1);
- }
-}
-
-@keyframes jello {
- 0% {
- transform: scale3d(1, 1, 1);
- }
-
- 30% {
- transform: scale3d(1.25, 0.75, 1);
- }
-
- 40% {
- transform: scale3d(0.75, 1.25, 1);
- }
-
- 50% {
- transform: scale3d(1.15, 0.85, 1);
- }
-
- 65% {
- transform: scale3d(0.95, 1.05, 1);
- }
-
- 75% {
- transform: scale3d(1.05, 0.95, 1);
- }
-
- 100% {
- transform: scale3d(1, 1, 1);
- }
-}
diff --git a/src/css/background.css b/src/css/background.css
deleted file mode 100755
index e34d6ae5..00000000
--- a/src/css/background.css
+++ /dev/null
@@ -1,81 +0,0 @@
-.background {
- position: fixed;
- top: 0;
- left: 0;
- width: 100vw;
- height: 100vh;
- pointer-events: none;
- z-index: var(--z-index-background);
- display: none;
-}
-
-.is-background-visual-show .background {
- display: block;
-}
-
-.background-visual-image {
- background-image: var(--background-visual-image);
- background-attachment: fixed;
- background-size: cover;
- background-position: center;
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- pointer-events: none;
- display: block;
- opacity: var(--background-visual-opacity);
- transform: scale(var(--background-visual-scale));
- filter: blur(var(--background-visual-blur)) grayscale(var(--background-visual-grayscale));
- z-index: 1;
-}
-
-.background-visual-video {
- opacity: var(--link-item-background-opacity);
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- overflow: hidden;
- pointer-events: none;
- z-index: 1;
-}
-
-.background-visual-video video {
- opacity: var(--background-visual-opacity);
- width: 100%;
- height: 100%;
- object-fit: cover;
- pointer-events: none;
- transform: scale(var(--background-visual-scale));
- filter: blur(var(--background-visual-blur)) grayscale(var(--background-visual-grayscale));
-}
-
-.background-visual-accent {
- background-color: rgba(var(--theme-accent), var(--background-visual-accent));
- position: absolute;
- top: -1em;
- left: -1em;
- width: calc(100% + 2em);
- height: calc(100% + 2em);
- pointer-events: none;
- display: block;
- z-index: 2;
-}
-
-.background-visual-vignette {
- position: absolute;
- top: -1em;
- left: -1em;
- width: calc(100% + 2em);
- height: calc(100% + 2em);
- pointer-events: none;
- background-image: radial-gradient(circle,
- transparent var(--background-visual-vignette-end),
- rgba(0, 0, 0, var(--background-visual-vignette-opacity)) var(--background-visual-vignette-start));
- z-index: 3;
-}
diff --git a/src/css/base.css b/src/css/base.css
deleted file mode 100755
index 61dbc719..00000000
--- a/src/css/base.css
+++ /dev/null
@@ -1,88 +0,0 @@
-::selection {
- background-color: rgb(var(--theme-accent));
- color: hsl(var(--theme-accent-accessible-color));
-}
-
-html {
- font-size: var(--theme-root-font-size);
-}
-
-body {
- background-color: rgb(var(--background-color-theme));
- color: rgb(var(--theme-style-text));
- font-size: 1rem;
- line-height: 1.6;
- font-family: var(--theme-font-ui-name);
- font-weight: var(--theme-font-ui-weight);
- font-style: var(--theme-font-ui-style);
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- min-height: 100vh;
- opacity: 0;
- transition: background-color var(--layout-transition-extra-fast), opacity var(--layout-duration-02) ease;
-}
-
-.is-ready body {
- opacity: 1;
-}
-
-.is-background-color-by-theme,
-.is-background-color-by-theme body {
- background-color: rgb(var(--background-color-theme));
-}
-
-.is-background-color-by-custom,
-.is-background-color-by-custom body {
- background-color: rgb(var(--background-color-custom));
-}
-
-.is-layout-scrollpastend body {
- margin-bottom: 75vh;
-}
-
-.is-layout-alignment-topleft body {
- justify-content: flex-start;
- align-items: flex-start;
-}
-
-.is-layout-alignment-topcenter body {
- justify-content: flex-start;
- align-items: center;
-}
-
-.is-layout-alignment-topright body {
- justify-content: flex-start;
- align-items: flex-end;
-}
-
-.is-layout-alignment-centerleft body {
- justify-content: center;
- align-items: flex-start;
-}
-
-.is-layout-alignment-centercenter body {
- justify-content: center;
- align-items: center;
-}
-
-.is-layout-alignment-centerright body {
- justify-content: center;
- align-items: flex-end;
-}
-
-.is-layout-alignment-bottomleft body {
- justify-content: flex-end;
- align-items: flex-start;
-}
-
-.is-layout-alignment-bottomcenter body {
- justify-content: flex-end;
- align-items: center;
-}
-
-.is-layout-alignment-bottomright body {
- justify-content: flex-end;
- align-items: flex-end;
-}
diff --git a/src/css/coffee.css b/src/css/coffee.css
deleted file mode 100644
index ba359815..00000000
--- a/src/css/coffee.css
+++ /dev/null
@@ -1,5 +0,0 @@
-.coffee-icon {
- margin-right: 0.5em;
- fill: rgb(var(--theme-color-18));
- transition: fill var(--layout-transition-extra-fast);
-}
diff --git a/src/css/edge.css b/src/css/edge.css
deleted file mode 100644
index 0e06fa1f..00000000
--- a/src/css/edge.css
+++ /dev/null
@@ -1,14 +0,0 @@
-.edge {
- background-color: rgba(var(--theme-accent), 0.2);
- width: 0;
- height: 0;
- position: absolute;
- top: 0;
- left: 0;
- opacity: 0;
- border-radius: var(--theme-radius);
- box-shadow: var(--edge-shadow);
- z-index: var(--z-index-edge);
- pointer-events: none;
- transition: opacity var(--layout-transition-extra-fast);
-}
diff --git a/src/css/fonts.css b/src/css/fonts.css
deleted file mode 100755
index a05e8e48..00000000
--- a/src/css/fonts.css
+++ /dev/null
@@ -1,146 +0,0 @@
-/* open sans */
-/* normal */
-@font-face {
- font-family: "Open Sans";
- font-weight: 300;
- font-style: normal;
- font-display: swap;
- src:
- local("Open Sans Light"),
- local("OpenSans-Light"),
- url("../fonts/open-sans/open-sans-300.woff") format("woff"),
- url("../fonts/open-sans/open-sans-300.woff2") format("woff2"),
- url("../fonts/open-sans/open-sans-300.ttf") format("truetype");
-}
-
-@font-face {
- font-family: "Open Sans";
- font-weight: 400;
- font-style: normal;
- font-display: swap;
- src:
- local("Open Sans Regular"),
- local("OpenSans-Regular"),
- url("../fonts/open-sans/open-sans-400.woff") format("woff"),
- url("../fonts/open-sans/open-sans-400.woff2") format("woff2"),
- url("../fonts/open-sans/open-sans-400.ttf") format("truetype");
-}
-
-@font-face {
- font-family: "Open Sans";
- font-weight: 600;
- font-style: normal;
- font-display: swap;
- src:
- local("Open Sans SemiBold"),
- local("OpenSans-SemiBold"),
- url("../fonts/open-sans/open-sans-600.woff") format("woff"),
- url("../fonts/open-sans/open-sans-600.woff2") format("woff2"),
- url("../fonts/open-sans/open-sans-600.ttf") format("truetype");
-}
-
-@font-face {
- font-family: "Open Sans";
- font-weight: 700;
- font-style: normal;
- font-display: swap;
- src:
- local("Open Sans Bold"),
- local("OpenSans-Bold"),
- url("../fonts/open-sans/open-sans-700.woff") format("woff"),
- url("../fonts/open-sans/open-sans-700.woff2") format("woff2"),
- url("../fonts/open-sans/open-sans-700.ttf") format("truetype");
-}
-
-@font-face {
- font-family: "Open Sans";
- font-weight: 800;
- font-style: normal;
- font-display: swap;
- src:
- local("Open Sans ExtraBold"),
- local("OpenSans-ExtraBold"),
- url("../fonts/open-sans/open-sans-800.woff") format("woff"),
- url("../fonts/open-sans/open-sans-800.woff2") format("woff2"),
- url("../fonts/open-sans/open-sans-800.ttf") format("truetype");
-}
-
-/* italic */
-@font-face {
- font-family: "Open Sans";
- font-weight: 300;
- font-style: italic;
- font-display: swap;
- src:
- local("Open Sans Light Italic"),
- local("OpenSans-LightItalic"),
- url("../fonts/open-sans/open-sans-italic-300.woff") format("woff"),
- url("../fonts/open-sans/open-sans-italic-300.woff2") format("woff2"),
- url("../fonts/open-sans/open-sans-italic-300.ttf") format("truetype");
-}
-
-@font-face {
- font-family: "Open Sans";
- font-weight: 400;
- font-style: italic;
- font-display: swap;
- src:
- local("Open Sans Italic"),
- local("OpenSans-Italic"),
- url("../fonts/open-sans/open-sans-italic-400.woff") format("woff"),
- url("../fonts/open-sans/open-sans-italic-400.woff2") format("woff2"),
- url("../fonts/open-sans/open-sans-italic-400.ttf") format("truetype");
-}
-
-@font-face {
- font-family: "Open Sans";
- font-weight: 600;
- font-style: italic;
- font-display: swap;
- src:
- local("Open Sans SemiBold Italic"),
- local("OpenSans-SemiBoldItalic"),
- url("../fonts/open-sans/open-sans-italic-600.woff") format("woff"),
- url("../fonts/open-sans/open-sans-italic-600.woff2") format("woff2"),
- url("../fonts/open-sans/open-sans-italic-600.ttf") format("truetype");
-}
-
-@font-face {
- font-family: "Open Sans";
- font-weight: 700;
- font-style: italic;
- font-display: swap;
- src:
- local("Open Sans Bold Italic"),
- local("OpenSans-BoldItalic"),
- url("../fonts/open-sans/open-sans-italic-700.woff") format("woff"),
- url("../fonts/open-sans/open-sans-italic-700.woff2") format("woff2"),
- url("../fonts/open-sans/open-sans-italic-700.ttf") format("truetype");
-}
-
-@font-face {
- font-family: "Open Sans";
- font-weight: 800;
- font-style: italic;
- font-display: swap;
- src:
- local("Open Sans ExtraBold Italic"),
- local("OpenSans-ExtraBoldItalic"),
- url("../fonts/open-sans/open-sans-italic-800.woff") format("woff"),
- url("../fonts/open-sans/open-sans-italic-800.woff2") format("woff2"),
- url("../fonts/open-sans/open-sans-italic-800.ttf") format("truetype");
-}
-
-/* fjalla one */
-/* normal */
-@font-face {
- font-family: "Fjalla One";
- font-weight: 400;
- font-style: normal;
- font-display: swap;
- src:
- local("Fjalla One"),
- url("../fonts/fjalla-one/fjalla-one-400.woff") format("woff"),
- url("../fonts/fjalla-one/fjalla-one-400.woff2") format("woff2"),
- url("../fonts/fjalla-one/fjalla-one-400.ttf") format("truetype");
-}
diff --git a/src/css/form.css b/src/css/form.css
deleted file mode 100755
index 0a03ef89..00000000
--- a/src/css/form.css
+++ /dev/null
@@ -1,1989 +0,0 @@
-/* fieldset */
-fieldset:not(:only-child):not(:last-child),
-.fieldset:not(:only-child):not(:last-child) {
- border-bottom: var(--horizontal-rule-small);
- position: relative;
- width: 100%;
- display: block;
- transition: border-color var(--layout-transition-extra-fast);
-}
-
-fieldset:not(:first-child),
-.fieldset:not(:first-child) {
- padding-top: calc(var(--form-wrap-space) * 2);
-}
-
-fieldset:not(:last-child),
-.fieldset:not(:last-child) {
- padding-bottom: calc(var(--form-wrap-space) * 2);
-}
-
-/* form variants */
-.form-wrap {
- position: relative;
- width: 100%;
- display: block;
-}
-
-.form-wrap:not(:first-child) {
- margin-top: var(--form-wrap-space);
-}
-
-.form-wrap:not(:last-child) {
- margin-bottom: var(--form-wrap-space);
-}
-
-.form-wrap-hide-space:not(:first-child),
-.form-wrap-hide-space:not(:last-child) {
- margin-top: calc(var(--form-wrap-space) * -1);
- margin-bottom: 0;
-}
-
-.form-indent {
- margin-left: calc(var(--form-wrap-space) * 2.25);
-}
-
-.form-inline {
- margin: calc(calc(var(--form-wrap-space) / 2) * -1);
- display: flex;
- flex-direction: row;
- justify-content: flex-start;
- align-items: center;
- flex-wrap: wrap;
-}
-
-.form-inline>*,
-.form-inline>.form-wrap:not(:first-child),
-.form-inline>.form-wrap:not(:last-child) {
- margin: calc(var(--form-wrap-space) / 2);
- flex-grow: 0;
- width: initial;
- display: inline-block;
-}
-
-.form-inline .form-inline {
- margin: 0;
-}
-
-.form-inline-spacer>*.form-wrap:not(:last-child) {
- margin-right: calc(var(--form-wrap-space) * 3);
-}
-
-.form-inline-space-between {
- justify-content: space-between;
-}
-
-.form-inline-space-around {
- justify-content: space-around;
-}
-
-.form-sticky {
- background-color: rgb(var(--theme-color-01));
- margin: -1.5em -1em 0 -1em;
- padding: 1.5em 1em 1em 1em;
- position: sticky;
- top: 0;
- z-index: 4;
- transition: background-color var(--layout-transition-extra-fast);
-}
-
-/* label */
-label {
- padding: 0;
- color: rgb(var(--form-label));
- margin-bottom: 0;
- font-size: 1em;
- display: block;
- transition: color var(--layout-transition-extra-fast);
-}
-
-label:not(:only-child):not(:last-child) {
- padding-bottom: var(--form-wrap-space);
-}
-
-label.disabled {
- color: rgb(var(--form-label-disabled));
-}
-
-/* select */
-select {
- background-color: rgb(var(--form-input-background));
- background-image:
- linear-gradient(45deg, transparent 60%, rgb(var(--form-label)) 60%),
- linear-gradient(135deg, rgb(var(--form-label)) 40%, transparent 40%);
- background-position:
- calc(100% - 1.5em) 55%,
- calc(100% - 1em) 55%;
- background-size:
- 0.5em 0.375em,
- 0.5em 0.375em;
- background-repeat: no-repeat;
- padding: 0 3em 0 1.25em;
- margin: 0;
- color: rgb(var(--form-label));
- font-size: 1em;
- font-family: var(--theme-font-ui-name);
- font-weight: var(--theme-font-ui-weight);
- font-style: var(--theme-font-ui-style);
- line-height: 2.5;
- min-height: 2.5em;
- min-width: 0;
- width: 100%;
- border-width: 0;
- border-radius: var(--theme-radius);
- cursor: pointer;
- transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
- -moz-appearance: none;
- -webkit-appearance: none;
- appearance: none;
-}
-
-select:hover {
- background-image:
- linear-gradient(45deg, transparent 60%, rgb(var(--form-label-hover)) 60%),
- linear-gradient(135deg, rgb(var(--form-label-hover)) 40%, transparent 40%);
- background-color: rgb(var(--form-input-background-hover));
- color: rgb(var(--form-label-hover));
- outline: none;
- box-shadow: var(--form-ring-hover);
-}
-
-select:focus,
-select:active {
- background-image:
- linear-gradient(45deg, transparent 60%, rgb(var(--form-label-focus-active)) 60%),
- linear-gradient(135deg, rgb(var(--form-label-focus-active)) 40%, transparent 40%);
- background-color: rgb(var(--form-input-background-border-focus-active));
- color: rgb(var(--form-label-focus-active));
- outline: none;
- z-index: 2;
- box-shadow: var(--form-ring-accent);
-}
-
-select:disabled,
-select:disabled:hover,
-select:disabled:focus,
-select:disabled:active {
- background-color: rgb(var(--form-input-background-disabled));
- background-image:
- linear-gradient(45deg, transparent 50%, rgb(var(--form-input-text-disabled)) 50%),
- linear-gradient(135deg, rgb(var(--form-input-text-disabled)) 50%, transparent 50%);
- color: rgb(var(--form-input-text-disabled));
- cursor: default;
- box-shadow: none;
-}
-
-/* textarea */
-textarea {
- background-color: rgb(var(--form-input-background));
- padding: 0.5em 1.25em;
- margin: 0;
- color: rgb(var(--form-input-text));
- font-size: 1em;
- line-height: 1.6;
- font-family: var(--theme-font-ui-name);
- font-weight: var(--theme-font-ui-weight);
- font-style: var(--theme-font-ui-style);
- height: 10em;
- min-height: 2.5em;
- min-width: 0;
- width: 100%;
- border-width: 0;
- border-radius: var(--theme-radius);
- cursor: text;
- resize: vertical;
- display: block;
- transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
- -moz-appearance: textfield;
-}
-
-textarea:hover {
- background-color: rgb(var(--form-input-background-hover));
- color: rgb(var(--form-input-text-hover));
- outline: none;
- box-shadow: var(--form-ring-hover);
-}
-
-textarea:focus,
-textarea:active {
- background-color: rgb(var(--form-input-background-focus-active));
- color: rgb(var(--form-input-text-focus-active));
- outline: none;
- box-shadow: var(--form-ring-accent);
-}
-
-textarea:disabled {
- background-color: rgb(var(--form-input-background-disabled));
- color: rgb(var(--form-input-text-disabled));
- cursor: default;
- box-shadow: none;
- resize: none;
-}
-
-textarea:disabled:hover,
-textarea:disabled:focus {
- color: rgb(var(--form-input-text-disabled));
-}
-
-textarea::placeholder {
- color: rgb(var(--form-placeholder));
- transition: color var(--layout-transition-extra-fast);
-}
-
-textarea:hover::placeholder {
- color: rgb(var(--form-placeholder-focus-hover));
-}
-
-textarea:focus::placeholder {
- color: rgb(var(--form-placeholder-focus-hover));
-}
-
-textarea:disabled::placeholder,
-textarea:disabled:hover::placeholder,
-textarea:disabled:focus::placeholder {
- color: rgb(var(--form-placeholder-disabled));
-}
-
-/* email, number, password, search, tel, text */
-input[type="email"],
-input[type="number"],
-input[type="password"],
-input[type="search"],
-input[type="tel"],
-input[type="text"] {
- background-color: rgb(var(--form-input-background));
- padding: 0 1.25em;
- margin: 0;
- color: rgb(var(--form-input-text));
- font-size: 1em;
- font-family: var(--theme-font-ui-name);
- font-weight: var(--theme-font-ui-weight);
- font-style: var(--theme-font-ui-style);
- line-height: 1.6;
- height: 2.5em;
- min-width: 0;
- width: 100%;
- border-width: 0;
- border-radius: var(--theme-radius);
- cursor: text;
- transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
- -moz-appearance: textfield;
-}
-
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-results-button,
-input[type="search"]::-webkit-search-results-decoration {
- -webkit-appearance: none;
-}
-
-input[type="number"] {
- text-align: center;
-}
-
-input[type=number]::-webkit-inner-spin-button,
-input[type=number]::-webkit-outer-spin-button {
- -webkit-appearance: none;
- margin: 0;
-}
-
-input[type="email"]:hover,
-input[type="number"]:hover,
-input[type="password"]:hover,
-input[type="search"]:hover,
-input[type="tel"]:hover,
-input[type="text"]:hover {
- background-color: rgb(var(--form-input-background-hover));
- color: rgb(var(--form-input-text-hover));
- outline: none;
- box-shadow: var(--form-ring-hover);
-}
-
-input[type="email"]:focus,
-input[type="email"]:active,
-input[type="number"]:focus,
-input[type="number"]:active,
-input[type="password"]:focus,
-input[type="password"]:active,
-input[type="search"]:focus,
-input[type="search"]:active,
-input[type="tel"]:focus,
-input[type="tel"]:active,
-input[type="text"]:focus,
-input[type="text"]:active {
- background-color: rgb(var(--form-input-background-focus-active));
- color: rgb(var(--form-input-text-focus-active));
- outline: none;
- z-index: 2;
- box-shadow: var(--form-ring-accent);
-}
-
-input[type="email"]:disabled,
-input[type="number"]:disabled,
-input[type="password"]:disabled,
-input[type="search"]:disabled,
-input[type="tel"]:disabled,
-input[type="text"]:disabled {
- background-color: rgb(var(--form-input-background-disabled));
- color: rgb(var(--form-input-text-disabled));
- cursor: default;
- box-shadow: none;
-}
-
-input[type="email"]:disabled:hover,
-input[type="email"]:disabled:focus,
-input[type="number"]:disabled:hover,
-input[type="number"]:disabled:focus,
-input[type="password"]:disabled:hover,
-input[type="password"]:disabled:focus,
-input[type="search"]:disabled:hover,
-input[type="search"]:disabled:focus,
-input[type="tel"]:disabled:hover,
-input[type="tel"]:disabled:focus,
-input[type="text"]:disabled:hover,
-input[type="text"]:disabled:focus {
- color: rgb(var(--form-input-text-disabled));
-}
-
-input[type="email"]::placeholder,
-input[type="number"]::placeholder,
-input[type="password"]::placeholder,
-input[type="search"]::placeholder,
-input[type="tel"]::placeholder,
-input[type="text"]::placeholder {
- color: rgb(var(--form-placeholder));
- transition: color var(--layout-transition-extra-fast);
-}
-
-input[type="email"]:hover::placeholder,
-input[type="number"]:hover::placeholder,
-input[type="password"]:hover::placeholder,
-input[type="search"]:hover::placeholder,
-input[type="tel"]:hover::placeholder,
-input[type="text"]:hover::placeholder {
- color: rgb(var(--form-placeholder-focus-hover));
-}
-
-input[type="email"]:focus::placeholder,
-input[type="number"]:focus::placeholder,
-input[type="password"]:focus::placeholder,
-input[type="search"]:focus::placeholder,
-input[type="tel"]:focus::placeholder,
-input[type="text"]:focus::placeholder {
- color: rgb(var(--form-placeholder-focus-hover));
-}
-
-input[type="email"]:disabled::placeholder,
-input[type="email"]:disabled:hover::placeholder,
-input[type="email"]:disabled:focus::placeholder,
-input[type="number"]:disabled::placeholder,
-input[type="number"]:disabled:hover::placeholder,
-input[type="number"]:disabled:focus::placeholder,
-input[type="password"]:disabled::placeholder,
-input[type="password"]:disabled:hover::placeholder,
-input[type="password"]:disabled:focus::placeholder,
-input[type="search"]:disabled::placeholder,
-input[type="search"]:disabled:hover::placeholder,
-input[type="search"]:disabled:focus::placeholder,
-input[type="tel"]:disabled::placeholder,
-input[type="tel"]:disabled:hover::placeholder,
-input[type="tel"]:disabled:focus::placeholder,
-input[type="text"]:disabled::placeholder,
-input[type="text"]:disabled:hover::placeholder,
-input[type="text"]:disabled:focus::placeholder {
- color: rgb(var(--form-placeholder-disabled));
-}
-
-.input-clear[type="email"],
-.input-clear[type="number"],
-.input-clear[type="password"],
-.input-clear[type="search"],
-.input-clear[type="tel"],
-.input-clear[type="text"] {
- background-color: transparent;
-}
-
-.input-clear[type="email"]:hover,
-.input-clear[type="number"]:hover,
-.input-clear[type="password"]:hover,
-.input-clear[type="search"]:hover,
-.input-clear[type="tel"]:hover,
-.input-clear[type="text"]:hover {
- background-color: transparent;
- box-shadow: none;
-}
-
-.input-clear[type="email"]:focus,
-.input-clear[type="email"]:active,
-.input-clear[type="number"]:focus,
-.input-clear[type="number"]:active,
-.input-clear[type="password"]:focus,
-.input-clear[type="password"]:active,
-.input-clear[type="search"]:focus,
-.input-clear[type="search"]:active,
-.input-clear[type="tel"]:focus,
-.input-clear[type="tel"]:active,
-.input-clear[type="text"]:focus,
-.input-clear[type="text"]:active {
- background-color: transparent;
- box-shadow: var(--form-ring-accent);
-}
-
-/* checkbox and radio */
-input[type="checkbox"],
-input[type="radio"] {
- margin-bottom: 0;
- position: absolute;
- top: 0;
- left: 0;
- opacity: 0;
- display: block;
- font-size: 1em;
- line-height: 1;
- cursor: pointer;
- pointer-events: none;
- box-sizing: border-box;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
- transition: color var(--layout-transition-extra-fast);
-}
-
-input[type="checkbox"]+label,
-input[type="radio"]+label {
- padding: 0;
- margin: 0;
- font-size: 1em;
- font-family: var(--theme-font-ui-name);
- font-weight: var(--theme-font-ui-weight);
- font-style: var(--theme-font-ui-style);
- color: rgb(var(--form-label));
- cursor: pointer;
- display: flex;
- flex-direction: row;
- justify-content: flex-start;
- align-items: flex-start;
- transition: transform var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast);
-}
-
-input[type="checkbox"]:hover+label,
-input[type="checkbox"]:focus+label,
-input[type="radio"]:hover+label,
-input[type="radio"]:focus+label {
- color: rgb(var(--form-label-hover));
-}
-
-input[type="checkbox"]:active+label,
-input[type="radio"]:active+label {
- color: rgb(var(--form-label-focus-active));
-}
-
-input[type="checkbox"]:checked+label,
-input[type="radio"]:checked+label {
- color: rgb(var(--form-label-checked));
-}
-
-input[type="checkbox"]:disabled+label,
-input[type="checkbox"]:disabled:hover+label,
-input[type="checkbox"]:disabled:focus+label,
-input[type="radio"]:disabled+label,
-input[type="radio"]:disabled:hover+label,
-input[type="radio"]:disabled:focus+label {
- color: rgb(var(--form-label-disabled));
- cursor: default;
-}
-
-input[type="checkbox"]+label .label-icon,
-input[type="radio"]+label .label-icon {
- background-color: rgb(var(--form-icon));
- margin-right: 1em;
- width: var(--form-thumb-size);
- height: var(--form-thumb-size);
- position: relative;
- top: 0.125em;
- display: block;
- flex-grow: 0;
- flex-shrink: 0;
- z-index: 1;
- box-shadow: none;
- transition: background-color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
-}
-
-input[type="checkbox"]+label .label-icon {
- border-radius: 0.25em;
-}
-
-input[type="radio"]+label .label-icon {
- border-radius: 50%;
-}
-
-input[type="checkbox"]:hover+label .label-icon,
-input[type="checkbox"]:focus+label .label-icon,
-input[type="radio"]:hover+label .label-icon,
-input[type="radio"]:focus+label .label-icon {
- background-color: rgb(var(--form-icon-hover));
- box-shadow: var(--form-ring-hover);
-}
-
-input[type="checkbox"]:active+label .label-icon,
-input[type="radio"]:active+label .label-icon {
- background-color: rgb(var(--form-icon-active));
- box-shadow: var(--form-ring-accent);
- transition: none;
-}
-
-input[type="checkbox"]:checked+label .label-icon,
-input[type="radio"]:checked+label .label-icon {
- background-color: rgb(var(--form-icon-checked));
-}
-
-input[type="checkbox"]:checked:focus+label .label-icon,
-input[type="checkbox"]:checked:active+label .label-icon,
-input[type="radio"]:checked:focus+label .label-icon,
-input[type="radio"]:checked:active+label .label-icon {
- box-shadow: var(--form-ring-accent);
-}
-
-input[type="checkbox"]:disabled+label .label-icon,
-input[type="checkbox"]:disabled:hover+label .label-icon,
-input[type="checkbox"]:disabled:focus+label .label-icon,
-input[type="checkbox"]:checked:disabled+label .label-icon,
-input[type="checkbox"]:checked:disabled:hover+label .label-icon,
-input[type="checkbox"]:checked:disabled:focus+label .label-icon,
-input[type="radio"]:disabled+label .label-icon,
-input[type="radio"]:disabled:hover+label .label-icon,
-input[type="radio"]:disabled:focus+label .label-icon,
-input[type="radio"]:checked:disabled+label .label-icon,
-input[type="radio"]:checked:disabled:hover+label .label-icon,
-input[type="radio"]:checked:disabled:focus+label .label-icon {
- background-color: rgb(var(--form-icon-disabled));
- box-shadow: none;
-}
-
-input[type="checkbox"]+label .label-icon:before,
-input[type="radio"]+label .label-icon:before {
- content: "";
- background-color: rgb(var(--form-icon-symbol));
- width: 100%;
- height: 100%;
- display: block;
- position: absolute;
- top: 0;
- left: 0;
- transform: scale(0.7);
- transform-origin: center;
- z-index: 2;
- transition: background-color var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast), transform var(--layout-transition-extra-fast);
-}
-
-input[type="checkbox"]+label .label-icon:before {
- border-radius: 0.1em;
-}
-
-input[type="radio"]+label .label-icon:before {
- border-radius: 50%;
-}
-
-input[type="checkbox"]:active+label .label-icon:before,
-input[type="radio"]:active+label .label-icon:before {
- background-color: rgb(var(--form-icon-symbol-active));
- transition: none;
-}
-
-input[type="checkbox"]:checked+label .label-icon:before,
-input[type="radio"]:checked+label .label-icon:before {
- background-color: rgb(var(--form-icon-symbol-active));
- border-radius: 50%;
-}
-
-input[type="checkbox"]:checked+label .label-icon:before {
- transform: scale(0);
-}
-
-input[type="radio"]:checked+label .label-icon:before {
- transform: scale(0.2);
-}
-
-input[type="checkbox"]:disabled+label .label-icon:before,
-input[type="checkbox"]:disabled:hover+label .label-icon:before,
-input[type="checkbox"]:disabled:focus+label .label-icon:before,
-input[type="checkbox"]:disabled:active+label .label-icon:before,
-input[type="checkbox"]:checked:disabled+label .label-icon:before,
-input[type="checkbox"]:checked:disabled:hover+label .label-icon:before,
-input[type="checkbox"]:checked:disabled:focus+label .label-icon:before,
-input[type="checkbox"]:checked:disabled:active+label .label-icon:before,
-input[type="radio"]:disabled+label .label-icon:before,
-input[type="radio"]:disabled:hover+label .label-icon:before,
-input[type="radio"]:disabled:focus+label .label-icon:before,
-input[type="radio"]:disabled:active+label .label-icon:before,
-input[type="radio"]:checked:disabled+label .label-icon:before,
-input[type="radio"]:checked:disabled:hover+label .label-icon:before,
-input[type="radio"]:checked:disabled:focus+label .label-icon:before,
-input[type="radio"]:checked:disabled:active+label .label-icon:before {
- background-color: rgb(var(--form-icon-symbol-disabled));
-}
-
-input[type="checkbox"]+label .label-icon:after {
- content: "";
- background-color: rgb(var(--form-icon-symbol));
- width: 100%;
- height: 100%;
- display: block;
- position: absolute;
- top: 0;
- left: 0;
- transform: scale(0);
- transform-origin: center;
- z-index: 2;
- transition: transform var(--layout-transition-extra-fast);
- clip-path: polygon(7% 56%, 37% 86%, 95% 27%, 84% 16%, 37% 64%, 18% 45%);
-}
-
-input[type="checkbox"]:checked+label .label-icon:after {
- background-color: rgb(var(--form-icon-symbol-active));
- transform: scale(0.8);
-}
-
-input[type="checkbox"]:disabled+label .label-icon:after,
-input[type="checkbox"]:disabled:hover+label .label-icon:after,
-input[type="checkbox"]:disabled:focus+label .label-icon:after,
-input[type="checkbox"]:disabled:active+label .label-icon:after,
-input[type="checkbox"]:checked:disabled+label .label-icon:after,
-input[type="checkbox"]:checked:disabled:hover+label .label-icon:after,
-input[type="checkbox"]:checked:disabled:focus+label .label-icon:after,
-input[type="checkbox"]:checked:disabled:active+label .label-icon:after {
- background-color: rgb(var(--form-icon-symbol-disabled));
-}
-
-.label-block {
- display: flex;
- flex-direction: column;
- flex-wrap: nowrap;
-}
-
-input[type="checkbox"]+label .label-block-item,
-input[type="radio"]+label .label-block-item {
- color: rgb(var(--form-label));
- transition: color var(--layout-transition-extra-fast);
-}
-
-input[type="checkbox"]:hover+label .label-block-item,
-input[type="checkbox"]:focus+label .label-block-item,
-input[type="radio"]:hover+label .label-block-item,
-input[type="radio"]:focus+label .label-block-item {
- color: rgb(var(--form-label-hover));
-}
-
-input[type="checkbox"]:active+label .label-block-item,
-input[type="radio"]:active+label .label-block-item {
- color: rgb(var(--form-label-focus-active));
-}
-
-input[type="checkbox"]:checked+label .label-block-item,
-input[type="radio"]:checked+label .label-block-item {
- color: rgb(var(--form-label-checked));
-}
-
-input[type="checkbox"]:disabled+label .label-block-item,
-input[type="checkbox"]:disabled:hover+label .label-block-item,
-input[type="checkbox"]:disabled:focus+label .label-block-item,
-input[type="radio"]:disabled+label .label-block-item,
-input[type="radio"]:disabled:hover+label .label-block-item,
-input[type="radio"]:disabled:focus+label .label-block-item {
- color: rgb(var(--form-label-disabled));
- cursor: default;
-}
-
-input[type="checkbox"]+label .label-block-item.muted,
-input[type="radio"]+label .label-block-item.muted {
- color: rgb(var(--utilities-muted));
- transition: color var(--layout-transition-extra-fast);
-}
-
-input[type="checkbox"]:hover+label .label-block-item.muted,
-input[type="checkbox"]:focus+label .label-block-item.muted,
-input[type="radio"]:hover+label .label-block-item.muted,
-input[type="radio"]:focus+label .label-block-item.muted {
- color: rgb(var(--utilities-muted-hover));
-}
-
-input[type="checkbox"]:active+label .label-block-item.muted,
-input[type="radio"]:active+label .label-block-item.muted {
- color: rgb(var(--utilities-muted-focus-active));
-}
-
-input[type="checkbox"]:checked+label .label-block-item.muted,
-input[type="radio"]:checked+label .label-block-item.muted {
- color: rgb(var(--utilities-muted-checked));
-}
-
-input[type="checkbox"]:disabled+label .label-block-item.muted,
-input[type="checkbox"]:disabled:hover+label .label-block-item.muted,
-input[type="checkbox"]:disabled:focus+label .label-block-item.muted,
-input[type="radio"]:disabled+label .label-block-item.muted,
-input[type="radio"]:disabled:hover+label .label-block-item.muted,
-input[type="radio"]:disabled:focus+label .label-block-item.muted {
- color: rgb(var(--utilities-muted-disabled));
- cursor: default;
-}
-
-.label-block-item:not(:last-child):not(:only-child) {
- margin-bottom: calc(var(--form-wrap-space) / 4);
-}
-
-input:disabled+label .label-block-item,
-input:disabled:hover+label .label-block-item,
-input:disabled:focus+label .label-block-item,
-input[type="checkbox"]:disabled+label .label-block-item,
-input[type="checkbox"]:disabled:hover+label .label-block-item,
-input[type="checkbox"]:disabled:focus+label .label-block-item,
-input[type="radio"]:disabled+label .label-block-item,
-input[type="radio"]:disabled:hover+label .label-block-item,
-input[type="radio"]:disabled:focus+label .label-block-item {
- color: rgb(var(--form-label-disabled));
- cursor: default;
-}
-
-/* color */
-input[type="color"] {
- background-color: transparent;
- padding: 0;
- margin: 0;
- width: 100%;
- min-width: 3em;
- height: 2.5em;
- display: block;
- border: 0;
- border-radius: var(--theme-radius);
- overflow: hidden;
- cursor: pointer;
- opacity: 1;
- transition: box-shadow var(--layout-transition-extra-fast), opacity var(--layout-transition-extra-fast);
-}
-
-input[type="color"]:hover {
- outline: none;
- box-shadow: var(--form-ring-hover);
-}
-
-input[type="color"]:focus {
- outline: none;
- box-shadow: var(--form-ring-focus);
-}
-
-input[type="color"]:disabled {
- opacity: 0.25;
- cursor: default;
-}
-
-input[type="color"]:disabled:hover,
-input[type="color"]:disabled:focus {
- box-shadow: none;
-}
-
-input[type="color"]::-webkit-color-swatch-wrapper {
- border: 0;
- padding: 0;
- outline: none;
-}
-
-input[type="color"]::-webkit-color-swatch {
- border: 0;
- padding: 0;
- outline: none;
-}
-
-input[type="color"]::-moz-color-swatch-wrapper {
- border: 0;
- padding: 0;
- outline: none;
-}
-
-input[type="color"]::-moz-color-swatch {
- border: 0;
- padding: 0;
- outline: none;
-}
-
-input[type="color"]::-moz-focus-inner {
- border: 0;
- padding: 0;
- outline: none;
-}
-
-/* range */
-input[type="range"] {
- background-color: transparent;
- padding: 0;
- margin: 0;
- color: rgb(var(--theme-style-text));
- font-size: 1em;
- font-family: var(--theme-font-ui-name);
- font-weight: var(--theme-font-ui-weight);
- font-style: var(--theme-font-ui-style);
- display: block;
- height: 2.5em;
- width: 100%;
- border: 0;
- border-radius: var(--theme-radius);
- cursor: pointer;
- position: relative;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
- -webkit-appearance: none;
-}
-
-input[type="range"]:focus {
- outline: none;
-}
-
-input[type="range"]:disabled {
- cursor: default;
-}
-
-input[type="range"]:before {
- content: "";
- position: absolute;
- top: 50%;
- left: 0;
- background-color: rgb(var(--form-range-track-background));
- height: var(--layout-line-width);
- width: 100%;
- border: 0;
- border-radius: var(--theme-radius);
- transform: translate(0, -50%);
- transition: background-color var(--layout-transition-extra-fast);
-}
-
-input[type="range"]:focus:before,
-input[type="range"]:hover:before {
- background-color: rgb(var(--form-range-track-background-focus-hover));
-}
-
-input[type="range"]:active:before {
- background-color: rgb(var(--form-range-track-background-active));
-}
-
-input[type="range"]:disabled:before {
- background-color: rgb(var(--form-range-track-background-disabled));
- cursor: default;
-}
-
-input[type="range"]::-webkit-slider-runnable-track {
- background-color: transparent;
- margin: 0 -0.5em;
- padding: 0;
- border: 0;
- -webkit-appearance: none;
-}
-
-input[type="range"]::-webkit-slider-thumb {
- background-color: rgb(var(--form-range-thumb-background));
- margin: 0;
- padding: 0;
- border-width: 0;
- border-radius: 50%;
- position: relative;
- height: var(--form-thumb-size);
- width: var(--form-thumb-size);
- cursor: pointer;
- box-sizing: border-box;
- transition: background-color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
- -webkit-appearance: none;
-}
-
-input[type="range"]::-webkit-slider-thumb,
-input[type="range"]:focus::-webkit-slider-thumb,
-input[type="range"]:hover::-webkit-slider-thumb,
-input[type="range"]:active::-webkit-slider-thumb {
- box-shadow: none;
- text-decoration: none;
- outline: none;
-}
-
-input[type="range"]:hover::-webkit-slider-thumb {
- background-color: rgb(var(--form-range-thumb-background-hover));
- box-shadow: var(--form-ring-hover);
- outline: none;
-}
-
-input[type="range"]:focus::-webkit-slider-thumb {
- background-color: rgb(var(--form-range-thumb-background-focus));
- box-shadow: var(--form-ring-accent);
-}
-
-input[type="range"]:active::-webkit-slider-thumb {
- background-color: rgb(var(--form-range-thumb-background-active));
- box-shadow: var(--form-ring-accent);
-}
-
-input[type="range"]:disabled::-webkit-slider-thumb {
- background-color: rgb(var(--form-range-thumb-background-disabled));
- cursor: default;
-}
-
-input[type="range"]:disabled:hover::-webkit-slider-thumb,
-input[type="range"]:disabled:focus::-webkit-slider-thumb {
- background-color: rgb(var(--form-range-thumb-background-disabled));
- box-shadow: none;
- transform: scale(1);
- outline: none;
-}
-
-input[type="range"]:disabled:active::-webkit-slider-thumb {
- background-color: rgb(var(--form-range-thumb-background-disabled));
- box-shadow: none;
- outline: none;
-}
-
-input[type="range"]::-moz-range-track {
- background-color: rgb(var(--form-range-track-background));
- margin: 0 -0.5em;
- padding: 0;
- height: var(--layout-line-width);
- width: 100%;
- border: 0;
- border-radius: var(--theme-radius);
- transition: all var(--layout-transition-extra-fast);
- -webkit-appearance: none;
-}
-
-input[type="range"]:focus::-moz-range-track,
-input[type="range"]:hover::-moz-range-track {
- background-color: rgb(var(--form-range-track-background-focus-hover));
-}
-
-input[type="range"]:active::-moz-range-track {
- background-color: rgb(var(--form-range-track-background-active));
-}
-
-input[type="range"]:disabled::-moz-range-track {
- background-color: rgb(var(--form-range-track-background-disabled));
- cursor: default;
-}
-
-input[type="range"]::-moz-focus-outer {
- border: 0;
-}
-
-input[type="range"]::-moz-range-thumb {
- background-color: rgb(var(--form-range-thumb-background));
- margin: 0;
- padding: 0;
- border-width: 0;
- border-radius: 50%;
- position: relative;
- height: var(--form-thumb-size);
- width: var(--form-thumb-size);
- cursor: pointer;
- box-sizing: border-box;
- transition: background-color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
- -moz-appearance: none;
-}
-
-input[type="range"]::-moz-range-thumb,
-input[type="range"]:focus::-moz-range-thumb,
-input[type="range"]:hover::-moz-range-thumb,
-input[type="range"]:active::-moz-range-thumb {
- box-shadow: none;
- text-decoration: none;
- outline: none;
-}
-
-input[type="range"]:hover::-moz-range-thumb {
- background-color: rgb(var(--form-range-thumb-background-hover));
- box-shadow: var(--form-ring-hover);
- outline: none;
-}
-
-input[type="range"]:focus::-moz-range-thumb {
- background-color: rgb(var(--form-range-thumb-background-focus));
- box-shadow: var(--form-ring-accent);
-}
-
-input[type="range"]:active::-moz-range-thumb {
- background-color: rgb(var(--form-range-thumb-background-active));
- box-shadow: var(--form-ring-accent);
-}
-
-input[type="range"]:disabled::-moz-range-thumb {
- background-color: rgb(var(--form-range-thumb-background-disabled));
- cursor: default;
-}
-
-input[type="range"]:disabled:hover::-moz-range-thumb,
-input[type="range"]:disabled:focus::-moz-range-thumb {
- background-color: rgb(var(--form-range-thumb-background-disabled));
- box-shadow: none;
- transform: scale(1);
- outline: none;
-}
-
-input[type="range"]:disabled:active::-moz-range-thumb {
- background-color: rgb(var(--form-range-thumb-background-disabled));
- box-shadow: none;
- outline: none;
-}
-
-input[type="range"]::-moz-range-progress {
- background-color: rgb(var(--form-range-progress-background));
- height: calc(var(--layout-line-width) * 2);
- border-radius: var(--theme-radius);
- transition: background-color var(--layout-transition-extra-fast);
-}
-
-input[type="range"]:active::-moz-range-progress {
- background-color: rgb(var(--form-range-progress-background-active));
-}
-
-input[type="range"]:disabled::-moz-range-progress {
- background-color: rgb(var(--form-range-progress-background-disabled));
-}
-
-/* form helper */
-.form-helper-item {
- font-size: 0.8em;
- color: rgb(var(--form-helper));
- transition: color var(--layout-transition-extra-fast);
-}
-
-.form-helper-item.disabled {
- color: rgb(var(--form-helper-disabled));
-}
-
-/* form input button */
-.form-input-button {
- position: relative;
- display: inline-block;
-}
-
-.form-input-button input[type="checkbox"]+label,
-.form-input-button input[type="radio"]+label,
-.form-input-button input[type="color"]+label,
-.form-input-button input[type="file"]+label {
- background-color: rgb(var(--button-background));
- padding: 0.25em 1.25em;
- margin: 0;
- color: rgb(var(--button-text));
- font-size: 1em;
- font-family: var(--theme-font-ui-name);
- font-weight: var(--theme-font-ui-weight);
- font-style: var(--theme-font-ui-style);
- min-height: 2.5em;
- line-height: 1;
- border: 0;
- border-radius: var(--theme-radius);
- position: relative;
- text-align: center;
- text-decoration: none;
- white-space: nowrap;
- cursor: pointer;
- display: inline-flex;
- flex-direction: row;
- justify-content: center;
- align-items: center;
- overflow: hidden;
- box-shadow: none;
- transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast);
-}
-
-.form-input-button input[type="checkbox"]:focus+label,
-.form-input-button input[type="checkbox"]:hover+label,
-.form-input-button input[type="radio"]:focus+label,
-.form-input-button input[type="radio"]:hover+label,
-.form-input-button input[type="color"]:focus+label,
-.form-input-button input[type="color"]:hover+label,
-.form-input-button input[type="file"]:focus+label,
-.form-input-button input[type="file"]:hover+label {
- background-color: rgb(var(--button-background-focus-hover));
- color: rgb(var(--button-text-focus-hover));
- outline: none;
- text-decoration: none;
-}
-
-.form-input-button input[type="checkbox"]:active+label,
-.form-input-button input[type="radio"]:active+label,
-.form-input-button input[type="color"]:active+label,
-.form-input-button input[type="file"]:active+label {
- background-color: rgb(var(--button-background-active));
- color: rgb(var(--button-text-active));
- outline: none;
- text-decoration: none;
- transition: none;
-}
-
-.form-input-button input[type="checkbox"]:checked+label,
-.form-input-button input[type="radio"]:checked+label,
-.form-input-button input[type="color"]:checked+label,
-.form-input-button input[type="file"]:checked+label {
- background-color: rgb(var(--button-background-active));
- color: rgb(var(--button-text-active));
- outline: none;
- text-decoration: none;
-}
-
-.form-input-button input[type="checkbox"]:disabled+label,
-.form-input-button input[type="checkbox"]:disabled:hover+label,
-.form-input-button input[type="checkbox"]:disabled:focus+label,
-.form-input-button input[type="checkbox"]:disabled:active+label,
-.form-input-button input[type="radio"]:disabled+label,
-.form-input-button input[type="radio"]:disabled:hover+label,
-.form-input-button input[type="radio"]:disabled:focus+label,
-.form-input-button input[type="radio"]:disabled:active+label,
-.form-input-button input[type="color"]:disabled+label,
-.form-input-button input[type="color"]:disabled:hover+label,
-.form-input-button input[type="color"]:disabled:focus+label,
-.form-input-button input[type="color"]:disabled:active+label,
-.form-input-button input[type="file"]:disabled+label,
-.form-input-button input[type="file"]:disabled:hover+label,
-.form-input-button input[type="file"]:disabled:focus+label,
-.form-input-button input[type="file"]:disabled:active+label {
- background-color: rgb(var(--button-background-disabled));
- color: rgb(var(--button-text-disabled));
- cursor: default;
- text-decoration: none;
-}
-
-.form-input-button input[type="checkbox"]+label .label-icon,
-.form-input-button input[type="radio"]+label .label-icon {
- top: inherit;
-}
-
-.form-input-button-ring input[type="checkbox"]+label,
-.form-input-button-ring input[type="radio"]+label,
-.form-input-button-ring input[type="color"]+label,
-.form-input-button-ring input[type="file"]+label {
- transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
-}
-
-.form-input-button-ring input[type="checkbox"]:focus+label,
-.form-input-button-ring input[type="checkbox"]:hover+label,
-.form-input-button-ring input[type="radio"]:focus+label,
-.form-input-button-ring input[type="radio"]:hover+label,
-.form-input-button-ring input[type="color"]:focus+label,
-.form-input-button-ring input[type="color"]:hover+label,
-.form-input-button-ring input[type="file"]:focus+label,
-.form-input-button-ring input[type="file"]:hover+label {
- box-shadow: var(--form-ring-hover);
-}
-
-.form-input-button-ring input[type="checkbox"]:active+label,
-.form-input-button-ring input[type="radio"]:active+label,
-.form-input-button-ring input[type="color"]:active+label,
-.form-input-button-ring input[type="file"]:active+label {
- box-shadow: var(--form-ring-accent);
-}
-
-.form-input-button-ring input[type="checkbox"]:checked+label,
-.form-input-button-ring input[type="radio"]:checked+label,
-.form-input-button-ring input[type="color"]:checked+label,
-.form-input-button-ring input[type="file"]:checked+label {
- box-shadow: var(--form-ring-accent);
-}
-
-.form-input-button-ring input[type="checkbox"]:disabled+label,
-.form-input-button-ring input[type="checkbox"]:disabled:hover+label,
-.form-input-button-ring input[type="checkbox"]:disabled:focus+label,
-.form-input-button-ring input[type="checkbox"]:disabled:active+label,
-.form-input-button-ring input[type="radio"]:disabled+label,
-.form-input-button-ring input[type="radio"]:disabled:hover+label,
-.form-input-button-ring input[type="radio"]:disabled:focus+label,
-.form-input-button-ring input[type="radio"]:disabled:active+label,
-.form-input-button-ring input[type="color"]:disabled+label,
-.form-input-button-ring input[type="color"]:disabled:hover+label,
-.form-input-button-ring input[type="color"]:disabled:focus+label,
-.form-input-button-ring input[type="color"]:disabled:active+label,
-.form-input-button-ring input[type="file"]:disabled+label,
-.form-input-button-ring input[type="file"]:disabled:hover+label,
-.form-input-button-ring input[type="file"]:disabled:focus+label,
-.form-input-button-ring input[type="file"]:disabled:active+label {
- box-shadow: none;
-}
-
-.form-input-button-line input[type="checkbox"]+label:after,
-.form-input-button-line input[type="radio"]+label:after,
-.form-input-button-line input[type="color"]+label:after,
-.form-input-button-line input[type="file"]+label:after {
- content: "";
- background: transparent;
- border-radius: var(--theme-radius);
- position: absolute;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- clip-path: polygon(0 calc(100% - var(--layout-line-width)), 100% calc(100% - var(--layout-line-width)), 100% 100%, 0% 100%);
- transition: background-color var(--layout-transition-extra-fast);
- pointer-events: none;
-}
-
-.form-input-button-line input[type="checkbox"]:focus+label:after,
-.form-input-button-line input[type="checkbox"]:hover+label:after,
-.form-input-button-line input[type="radio"]:focus+label:after,
-.form-input-button-line input[type="radio"]:hover+label:after,
-.form-input-button-line input[type="color"]:focus+label:after,
-.form-input-button-line input[type="color"]:hover+label:after,
-.form-input-button-line input[type="file"]:focus+label:after,
-.form-input-button-line input[type="file"]:hover+label:after {
- background-color: rgb(var(--button-border-focus-hover));
-}
-
-.form-input-button-line input[type="checkbox"]:active+label:after,
-.form-input-button-line input[type="radio"]:active+label:after,
-.form-input-button-line input[type="color"]:active+label:after,
-.form-input-button-line input[type="file"]:active+label:after {
- background-color: rgb(var(--button-border-active));
- transition: none;
-}
-
-.form-input-button-line input[type="checkbox"]:checked+label:after,
-.form-input-button-line input[type="radio"]:checked+label:after,
-.form-input-button-line input[type="color"]:checked+label:after,
-.form-input-button-line input[type="file"]:checked+label:after {
- background-color: rgb(var(--button-border-active));
- transition: none;
-}
-
-.form-input-button-line input[type="checkbox"]:disabled+label:after,
-.form-input-button-line input[type="checkbox"]:disabled:hover+label:after,
-.form-input-button-line input[type="checkbox"]:disabled:focus+label:after,
-.form-input-button-line input[type="checkbox"]:disabled:active+label:after,
-.form-input-button-line input[type="radio"]:disabled+label:after,
-.form-input-button-line input[type="radio"]:disabled:hover+label:after,
-.form-input-button-line input[type="radio"]:disabled:focus+label:after,
-.form-input-button-line input[type="radio"]:disabled:active+label:after,
-.form-input-button-line input[type="color"]:disabled+label:after,
-.form-input-button-line input[type="color"]:disabled:hover+label:after,
-.form-input-button-line input[type="color"]:disabled:focus+label:after,
-.form-input-button-line input[type="color"]:disabled:active+label:after,
-.form-input-button-line input[type="file"]:disabled+label:after,
-.form-input-button-line input[type="file"]:disabled:hover+label:after,
-.form-input-button-line input[type="file"]:disabled:focus+label:after,
-.form-input-button-line input[type="file"]:disabled:active+label:after {
- background-color: rgb(var(--button-border-disabled));
-}
-
-/* form input button link */
-.form-input-button-link input[type="checkbox"]+label,
-.form-input-button-link input[type="radio"]+label,
-.form-input-button-link input[type="color"]+label,
-.form-input-button-link input[type="file"]+label {
- background-color: transparent;
-}
-
-.form-input-button-link input[type="checkbox"]:hover+label,
-.form-input-button-link input[type="checkbox"]:focus+label,
-.form-input-button-link input[type="checkbox"]:checked+label,
-.form-input-button-link input[type="radio"]:hover+label,
-.form-input-button-link input[type="radio"]:focus+label,
-.form-input-button-link input[type="radio"]:checked+label,
-.form-input-button-link input[type="color"]:hover+label,
-.form-input-button-link input[type="color"]:focus+label,
-.form-input-button-link input[type="color"]:checked+label,
-.form-input-button-link input[type="file"]:hover+label,
-.form-input-button-link input[type="file"]:focus+label,
-.form-input-button-link input[type="file"]:checked+label {
- background-color: transparent;
-}
-
-.form-input-button-link input[type="checkbox"]:active+label,
-.form-input-button-link input[type="radio"]:active+label,
-.form-input-button-link input[type="color"]:active+label,
-.form-input-button-link input[type="file"]:active+label {
- background-color: transparent;
-}
-
-.form-input-button-link input:disabled[type="checkbox"]+label,
-.form-input-button-link input:disabled[type="radio"]+label,
-.form-input-button-link input:disabled[type="color"]+label,
-.form-input-button-link input:disabled[type="file"]+label {
- background-color: transparent;
- pointer-events: none;
-}
-
-.form-input-button-link input:disabled[type="checkbox"]:hover+label,
-.form-input-button-link input:disabled[type="checkbox"]:focus+label,
-.form-input-button-link input:disabled[type="radio"]:hover+label,
-.form-input-button-link input:disabled[type="radio"]:focus+label,
-.form-input-button-link input:disabled[type="color"]:hover+label,
-.form-input-button-link input:disabled[type="color"]:focus+label,
-.form-input-button-link input:disabled[type="file"]:hover+label,
-.form-input-button-link input:disabled[type="file"]:focus+label {
- background-color: transparent;
-}
-
-.input-color-dot input[type="color"] {
- margin: 0;
- position: absolute;
- top: 50%;
- right: 1em;
- width: calc(var(--form-thumb-size) * 0.8);
- height: calc(var(--form-thumb-size) * 0.8);
- min-width: inherit;
- z-index: 4;
- border-radius: 50%;
- transform: translateY(-50%);
- transition: none;
-}
-
-.input-color-dot input[type="color"]:hover {
- outline: none;
- box-shadow: none;
-}
-
-.input-color-dot input[type="color"]:focus {
- outline: none;
- box-shadow: none;
-}
-
-.input-color-dot-accent input[type="color"],
-.input-color-dot-accent input[type="color"]:hover,
-.input-color-dot-accent input[type="color"]:focus {
- box-shadow: 0 0 0.25em 0 rgba(var(--theme-accent), 0.6), 0 0 0.5em 0 rgba(var(--theme-accent), 0.4);
-}
-
-.input-color-dot-shade input[type="color"],
-.input-color-dot-shade input[type="color"]:hover,
-.input-color-dot-shade input[type="color"]:focus {
- box-shadow: 0 0 0.25em 0 rgba(var(--theme-shade), 0.6), 0 0 0.5em 0 rgba(var(--theme-shade), 0.4);
-}
-
-.input-color-dot input[type="color"]+label {
- padding-right: calc(calc(var(--form-thumb-size) * 0.8) + 2em);
- position: relative;
-}
-
-.form-input-hide input[type="checkbox"]+label .label-icon,
-.form-input-hide input[type="checkbox"]:checked+label .label-icon,
-.form-input-hide input[type="radio"]+label .label-icon,
-.form-input-hide input[type="radio"]:checked+label .label-icon,
-.form-input-hide input[type="file"]+label .label-icon,
-.form-input-hide input[type="file"]:checked+label .label-icon {
- display: none;
-}
-
-.form-input-hide input[type="color"],
-.form-input-hide input[type="file"] {
- margin: 0;
- opacity: 0;
- width: 1px;
- height: 1px;
- min-width: 1px;
- min-height: 1px;
- position: absolute;
- bottom: 0;
- left: 0;
- -webkit-appearance: none;
-}
-
-/* form grid */
-.form-grid {
- background-color: rgb(var(--form-grid-background));
- padding: calc(var(--form-thumb-size) / 2);
- display: inline-grid;
- overflow: hidden;
- transition: background-color var(--layout-transition-extra-fast);
-}
-
-.form-grid:hover {
- outline: none;
- background-color: rgb(var(--form-grid-background-hover));
-}
-
-.form-grid:focus,
-.form-grid:focus-within {
- outline: none;
- background-color: rgb(var(--form-grid-background-focus));
-}
-
-.form-grid.disabled,
-.form-grid.disabled:focus,
-.form-grid.disabled:focus-within {
- background-color: rgb(var(--form-grid-background-disabled));
-}
-
-.form-grid-3x3 {
- grid-template-columns: repeat(3, 1fr);
- grid-template-rows: repeat(3, 1fr);
- border-radius: var(--theme-radius);
-}
-
-.form-grid-3x1 {
- grid-template-columns: repeat(3, 1fr);
- border-radius: var(--theme-radius);
-}
-
-.form-grid-1x3 {
- grid-template-rows: repeat(3, 1fr);
- border-radius: var(--theme-radius);
-}
-
-.form-grid .form-wrap {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-.form-grid input[type="checkbox"]+label,
-.form-grid input[type="radio"]+label {
- background-color: transparent;
- padding: 0;
- margin: 0;
- display: block;
- width: calc(var(--form-thumb-size) * 1.75);
- height: calc(var(--form-thumb-size) * 1.75);
- position: relative;
- transition: none;
- z-index: 1;
-}
-
-.form-grid input[type="checkbox"]:hover+label,
-.form-grid input[type="checkbox"]:focus+label,
-.form-grid input[type="radio"]:hover+label,
-.form-grid input[type="radio"]:focus+label {
- box-shadow: none;
-}
-
-.form-grid input[type="checkbox"]+label .label-icon,
-.form-grid input[type="radio"]+label .label-icon {
- margin-right: 0;
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
-}
-
-.form-grid-3x3 {
- --radiusPart: calc(var(--theme-radius) / 20);
- --responsivePos: calc(var(--radiusPart) + -50%);
- --responsiveNeg: calc(calc(var(--radiusPart) * -1) + -50%);
-}
-
-.form-grid-3x3 .form-wrap:nth-child(1) input[type="checkbox"]+label .label-icon,
-.form-grid-3x3 .form-wrap:nth-child(1) input[type="radio"]+label .label-icon {
- transform: translate(var(--responsivePos), var(--responsivePos));
-}
-
-.form-grid-3x3 .form-wrap:nth-child(2) input[type="checkbox"]+label .label-icon,
-.form-grid-3x3 .form-wrap:nth-child(2) input[type="radio"]+label .label-icon {
- transform: translate(-50%, var(--responsivePos));
-}
-
-.form-grid-3x3 .form-wrap:nth-child(3) input[type="checkbox"]+label .label-icon,
-.form-grid-3x3 .form-wrap:nth-child(3) input[type="radio"]+label .label-icon {
- transform: translate(var(--responsiveNeg), var(--responsivePos));
-}
-
-.form-grid-3x3 .form-wrap:nth-child(4) input[type="checkbox"]+label .label-icon,
-.form-grid-3x3 .form-wrap:nth-child(4) input[type="radio"]+label .label-icon {
- transform: translate(var(--responsivePos), -50%);
-}
-
-.form-grid-3x3 .form-wrap:nth-child(6) input[type="checkbox"]+label .label-icon,
-.form-grid-3x3 .form-wrap:nth-child(6) input[type="radio"]+label .label-icon {
- transform: translate(var(--responsiveNeg), -50%);
-}
-
-.form-grid-3x3 .form-wrap:nth-child(7) input[type="checkbox"]+label .label-icon,
-.form-grid-3x3 .form-wrap:nth-child(7) input[type="radio"]+label .label-icon {
- transform: translate(var(--responsivePos), var(--responsiveNeg));
-}
-
-.form-grid-3x3 .form-wrap:nth-child(8) input[type="checkbox"]+label .label-icon,
-.form-grid-3x3 .form-wrap:nth-child(8) input[type="radio"]+label .label-icon {
- transform: translate(-50%, var(--responsiveNeg));
-}
-
-.form-grid-3x3 .form-wrap:nth-child(9) input[type="checkbox"]+label .label-icon,
-.form-grid-3x3 .form-wrap:nth-child(9) input[type="radio"]+label .label-icon {
- transform: translate(var(--responsiveNeg), var(--responsiveNeg));
-}
-
-/* form group */
-.form-group {
- position: relative;
- display: inline-flex;
- flex-direction: row;
- justify-content: flex-start;
- align-items: stretch;
-}
-
-.form-group .form-wrap {
- margin-top: 0;
- margin-bottom: 0;
- margin-right: var(--form-wrap-space);
- display: flex;
- align-items: center;
-}
-
-.form-group .form-group-text,
-.form-group .button,
-.form-group .form-input-button input[type="checkbox"]+label,
-.form-group .form-input-button input[type="radio"]+label,
-.form-group .form-input-button input[type="color"]+label,
-.form-group .form-input-button input[type="file"]+label,
-.form-group>select,
-.form-group>input[type="email"],
-.form-group>input[type="number"],
-.form-group>input[type="password"],
-.form-group>input[type="search"],
-.form-group>input[type="tel"],
-.form-group>input[type="text"],
-.form-group>input[type="color"],
-.form-group>input[type="range"] {
- margin: 0;
- border-radius: 0;
- height: inherit;
- min-height: 2.5em;
- flex-grow: 1;
- flex-shrink: 1;
- flex-basis: auto;
- z-index: 1;
-}
-
-.form-group .button-line:after,
-.form-group .form-input-button-line input[type="checkbox"]+label:after,
-.form-group .form-input-button-line input[type="radio"]+label:after,
-.form-group .form-input-button-line input[type="color"]+label:after,
-.form-group .form-input-button-line input[type="file"]+label:after {
- border-radius: 0;
-}
-
-.form-group .form-group-text {
- flex-shrink: 0;
-}
-
-.form-group .form-group-text:focus,
-.form-group .button:focus,
-.form-group .form-input-button input[type="checkbox"]:focus+label,
-.form-group .form-input-button input[type="radio"]:focus+label,
-.form-group .form-input-button input[type="color"]:focus+label,
-.form-group .form-input-button input[type="file"]:focus+label,
-.form-group>select:focus,
-.form-group>input[type="email"]:focus,
-.form-group>input[type="number"]:focus,
-.form-group>input[type="password"]:focus,
-.form-group>input[type="search"]:focus,
-.form-group>input[type="tel"]:focus,
-.form-group>input[type="text"]:focus,
-.form-group>input[type="color"]:focus,
-.form-group>input[type="range"]:focus {
- z-index: 2;
-}
-
-.form-group .form-group-text:hover,
-.form-group .form-group-text:active,
-.form-group .button:hover,
-.form-group .button:active,
-.form-group .form-input-button input[type="checkbox"]:hover+label,
-.form-group .form-input-button input[type="checkbox"]:active+label,
-.form-group .form-input-button input[type="radio"]:hover+label,
-.form-group .form-input-button input[type="radio"]:active+label,
-.form-group .form-input-button input[type="color"]:hover+label,
-.form-group .form-input-button input[type="color"]:active+label,
-.form-group .form-input-button input[type="file"]:hover+label,
-.form-group .form-input-button input[type="file"]:active+label,
-.form-group>select:hover,
-.form-group>select:active,
-.form-group>input[type="email"]:hover,
-.form-group>input[type="email"]:active,
-.form-group>input[type="number"]:hover,
-.form-group>input[type="number"]:active,
-.form-group>input[type="password"]:hover,
-.form-group>input[type="password"]:active,
-.form-group>input[type="search"]:hover,
-.form-group>input[type="search"]:active,
-.form-group>input[type="tel"]:hover,
-.form-group>input[type="tel"]:active,
-.form-group>input[type="text"]:hover,
-.form-group>input[type="text"]:active,
-.form-group>input[type="color"]:hover,
-.form-group>input[type="color"]:active,
-.form-group>input[type="range"]:hover,
-.form-group>input[type="range"]:active {
- z-index: 3;
-}
-
-.form-group .form-input-button input[type="checkbox"]:checked+label,
-.form-group .form-input-button input[type="radio"]:checked+label,
-.form-group .form-input-button input[type="color"]:checked+label,
-.form-group .form-input-button input[type="file"]:checked+label {
- z-index: 3;
-}
-
-.form-group .form-group-text:first-child,
-.form-group .button:first-child,
-.form-group .button-line:first-child:after,
-.form-group .form-input-button:first-child input[type="checkbox"]+label,
-.form-group .form-input-button:first-child input[type="radio"]+label,
-.form-group .form-input-button:first-child input[type="color"]+label,
-.form-group .form-input-button:first-child input[type="file"]+label,
-.form-group .form-input-button-line:first-child input[type="checkbox"]+label:after,
-.form-group .form-input-button-line:first-child input[type="radio"]+label:after,
-.form-group .form-input-button-line:first-child input[type="color"]+label:after,
-.form-group .form-input-button-line:first-child input[type="file"]+label:after,
-.form-group>select:first-child,
-.form-group>input[type="email"]:first-child,
-.form-group>input[type="number"]:first-child,
-.form-group>input[type="password"]:first-child,
-.form-group>input[type="search"]:first-child,
-.form-group>input[type="tel"]:first-child,
-.form-group>input[type="text"]:first-child,
-.form-group>input[type="color"]:first-child,
-.form-group>input[type="range"]:first-child {
- border-radius: var(--theme-radius) 0 0 var(--theme-radius);
-}
-
-.form-group .form-group-text:last-child,
-.form-group .button:last-child,
-.form-group .button-line:last-child:after,
-.form-group .form-input-button:last-child input[type="checkbox"]+label,
-.form-group .form-input-button:last-child input[type="radio"]+label,
-.form-group .form-input-button:last-child input[type="color"]+label,
-.form-group .form-input-button:last-child input[type="file"]+label,
-.form-group .form-input-button-line:last-child input[type="checkbox"]+label:after,
-.form-group .form-input-button-line:last-child input[type="radio"]+label:after,
-.form-group .form-input-button-line:last-child input[type="color"]+label:after,
-.form-group .form-input-button-line:last-child input[type="file"]+label:after,
-.form-group>select:last-child,
-.form-group>input[type="email"]:last-child,
-.form-group>input[type="number"]:last-child,
-.form-group>input[type="password"]:last-child,
-.form-group>input[type="search"]:last-child,
-.form-group>input[type="tel"]:last-child,
-.form-group>input[type="text"]:last-child,
-.form-group>input[type="color"]:last-child,
-.form-group>input[type="range"]:last-child {
- border-radius: 0 var(--theme-radius) var(--theme-radius) 0;
-}
-
-.form-group .form-group-text:only-child,
-.form-group .button:only-child,
-.form-group .button-line:only-child:after,
-.form-group>select:only-child,
-.form-group>input[type="email"]:only-child,
-.form-group>input[type="number"]:only-child,
-.form-group>input[type="password"]:only-child,
-.form-group>input[type="search"]:only-child,
-.form-group>input[type="tel"]:only-child,
-.form-group>input[type="text"]:only-child,
-.form-group>input[type="color"]:only-child,
-.form-group>input[type="range"]:only-child {
- border-radius: var(--theme-radius);
-}
-
-.form-group.form-group-nested-button * .button,
-.form-group.form-group-nested-button * .button-line:after,
-.form-group.form-group-nested-button * input[type="checkbox"]+label,
-.form-group.form-group-nested-button * input[type="radio"]+label,
-.form-group.form-group-nested-button * input[type="color"]+label {
- border-radius: 0;
-}
-
-.form-group.form-group-nested-button *:first-child .button,
-.form-group.form-group-nested-button *:first-child .button-line:after,
-.form-group.form-group-nested-button *:first-child input[type="checkbox"]+label,
-.form-group.form-group-nested-button *:first-child input[type="radio"]+label,
-.form-group.form-group-nested-button *:first-child input[type="color"]+label {
- border-radius: var(--theme-radius) 0 0 var(--theme-radius);
-}
-
-.form-group.form-group-nested-button *:last-child .button,
-.form-group.form-group-nested-button *:last-child .button-line:after,
-.form-group.form-group-nested-button *:last-child input[type="checkbox"]+label,
-.form-group.form-group-nested-button *:last-child input[type="radio"]+label,
-.form-group.form-group-nested-button *:last-child input[type="color"]+label {
- border-radius: 0 var(--theme-radius) var(--theme-radius) 0;
-}
-
-.form-group .form-group-radius-left.form-group-text,
-.form-group .form-group-radius-left.button,
-.form-group .form-group-radius-left.button-line:after,
-.form-group>select.form-group-radius-left,
-.form-group>input.form-group-radius-left[type="email"],
-.form-group>input.form-group-radius-left[type="number"],
-.form-group>input.form-group-radius-left[type="password"],
-.form-group>input.form-group-radius-left[type="search"],
-.form-group>input.form-group-radius-left[type="tel"],
-.form-group>input.form-group-radius-left[type="text"],
-.form-group>input.form-group-radius-left[type="color"],
-.form-group>input.form-group-radius-left[type="range"] {
- border-top-left-radius: var(--theme-radius);
- border-bottom-left-radius: var(--theme-radius);
-}
-
-.form-group .form-group-radius-right.form-group-text,
-.form-group .form-group-radius-right.button,
-.form-group .form-group-radius-right.butbutton-lineton:after,
-.form-group>select.form-group-radius-right,
-.form-group>input.form-group-radius-right[type="email"],
-.form-group>input.form-group-radius-right[type="number"],
-.form-group>input.form-group-radius-right[type="password"],
-.form-group>input.form-group-radius-right[type="search"],
-.form-group>input.form-group-radius-right[type="tel"],
-.form-group>input.form-group-radius-right[type="text"],
-.form-group>input.form-group-radius-right[type="color"],
-.form-group>input.form-group-radius-right[type="range"] {
- border-top-right-radius: var(--theme-radius);
- border-bottom-right-radius: var(--theme-radius);
-}
-
-.form-group-block {
- display: flex;
- width: 100%;
-}
-
-.form-group-border {
- border-radius: var(--theme-radius);
- border-width: var(--layout-line-width);
- border-color: rgb(var(--form-group-text-border));
- border-style: solid;
- overflow: hidden;
-}
-
-.form-group-border-theme-color {
- border-color: rgb(var(--theme-color));
-}
-
-.form-group.form-group-border .form-group-text,
-.form-group.form-group-border .button,
-.form-group.form-group-border .button-line:after,
-.form-group.form-group-border>select,
-.form-group.form-group-border>input[type="email"],
-.form-group.form-group-border>input[type="number"],
-.form-group.form-group-border>input[type="password"],
-.form-group.form-group-border>input[type="search"],
-.form-group.form-group-border>input[type="tel"],
-.form-group.form-group-border>input[type="text"],
-.form-group.form-group-border>input[type="color"],
-.form-group.form-group-border>input[type="range"],
-.form-group.form-group-border.form-group-nested-button * .button,
-.form-group.form-group-border.form-group-nested-button * .button-line:after,
-.form-group.form-group-border.form-group-nested-button * input[type="checkbox"]+label,
-.form-group.form-group-border.form-group-nested-button * input[type="radio"]+label,
-.form-group.form-group-border.form-group-nested-button * input[type="color"]+label {
- border-radius: 0;
-}
-
-.form-group-text {
- background-color: rgb(var(--form-group-text-background));
- padding: 0 1.25em;
- margin: 0;
- color: rgb(var(--form-input-text));
- min-width: 4em;
- font-size: 1em;
- font-family: var(--theme-font-ui-name);
- font-weight: var(--theme-font-ui-weight);
- font-style: var(--theme-font-ui-style);
- display: flex;
- align-items: center;
- justify-content: center;
- border: 0;
- border-width: var(--layout-line-width);
- border-color: rgb(var(--form-group-text-border));
- border-style: solid;
- border-radius: var(--theme-radius);
- white-space: nowrap;
- transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast), color var(--layout-transition-extra-fast);
-}
-
-.form-group-text:hover,
-.form-group-text:focus {
- background-color: rgb(var(--form-group-text-background-focus-hover));
- border-color: rgb(var(--form-group-text-border-focus-hover));
- color: rgb(var(--form-input-text-hover));
- outline: none;
-}
-
-.form-group-text:active {
- background-color: rgb(var(--form-group-text-background-active));
- border-color: rgb(var(--form-group-text-border-active));
- color: rgb(var(--form-input-text-hover));
- outline: none;
-}
-
-.form-group-text.disabled,
-.form-group-text.disabled:hover,
-.form-group-text.disabled:focus,
-.form-group-text.disable:active {
- background-color: rgb(var(--form-group-text-background-disabled));
- border-color: rgb(var(--form-group-text-border-disabled));
- color: rgb(var(--form-input-text-disabled));
- box-shadow: none;
- cursor: default;
-}
-
-.form-group-text-left {
- justify-content: flex-start;
-}
-
-.form-group-text-right {
- justify-content: flex-end;
-}
-
-.form-group-item-small,
-.form-group-item-medium,
-.form-group-item-large,
-.form-group>.button.form-group-item-small,
-.form-group>.button.form-group-item-medium,
-.form-group>.button.form-group-item-large,
-.form-group>select.form-group-item-small,
-.form-group>select.form-group-item-medium,
-.form-group>select.form-group-item-large,
-.form-group>input[type].form-group-item-small,
-.form-group>input[type].form-group-item-medium,
-.form-group>input[type].form-group-item-large {
- padding-left: 0.5em;
- padding-right: 0.5em;
-}
-
-.form-group-item-small,
-.form-group>.button.form-group-item-small,
-.form-group>select.form-group-item-small,
-.form-group>input[type].form-group-item-small {
- width: 3em;
-}
-
-.form-group-item-medium,
-.form-group>.button.form-group-item-medium,
-.form-group>select.form-group-item-medium,
-.form-group>input[type].form-group-item-medium {
- width: 6em;
-}
-
-.form-group-item-large,
-.form-group>.button.form-group-item-large,
-.form-group>select.form-group-item-large,
-.form-group>input[type].form-group-item-large {
- width: 9em;
-}
-
-.form-group-item-shrink,
-.form-group>.button.form-group-item-shrink,
-.form-group>select.form-group-item-shrink,
-.form-group>input[type].form-group-item-shrink {
- flex-grow: 0;
-}
-
-.form-group-item-grow,
-.form-group>.button.form-group-item-grow,
-.form-group>select.form-group-item-grow,
-.form-group>input[type].form-group-item-grow {
- flex-grow: 1;
-}
-
-.form-group-item-half,
-.form-group>.button.form-group-item-half,
-.form-group>select.form-group-item-half,
-.form-group>input[type].form-group-item-half {
- flex-basis: 50%;
-}
-
-.form-group-text-borderless {
- padding: 0;
- border-width: 0;
- min-width: inherit;
-}
-
-.form-group-text-transparent,
-.form-group-text-transparent:hover,
-.form-group-text-transparent:focus,
-.form-group-text-transparent:active,
-.form-group-text-transparent.disabled,
-.form-group-text-transparent.disabled:hover,
-.form-group-text-transparent.disabled:focus,
-.form-group-text-transparent.disable:active {
- background-color: transparent;
-}
-
-/* form dropdown */
-.form-dropdown {
- position: relative;
-}
-
-.form-dropdown.form-dropdown-inline {
- display: inline-block;
-}
-
-.form-dropdown-menu {
- background-color: rgb(var(--form-dropdown-background));
- border-radius: var(--theme-radius);
- padding: 0.75em 0;
- position: absolute;
- width: 100%;
- min-width: 12em;
- box-shadow: var(--theme-shadow-bottom-large);
- z-index: var(--z-index-dropdown);
- overflow: hidden;
- display: none;
-}
-
-.form-dropdown-menu-left {
- right: 0;
-}
-
-.form-dropdown-menu-right {
- left: 0;
-}
-
-.form-dropdown-menu-top {
- bottom: calc(100% + calc(var(--layout-line-width) * 2));
-}
-
-.form-dropdown-menu-bottom {
- top: calc(100% + calc(var(--layout-line-width) * 2));
-}
-
-.form-dropdown-open .form-dropdown-menu {
- display: flex;
- flex-direction: column;
-}
-
-.form-dropdown-menu button,
-.form-dropdown-menu .button {
- border-radius: 0;
- justify-content: flex-start;
- position: relative;
-}
-
-.form-dropdown-menu .button-line:after {
- border-radius: 0;
-}
-
-.form-group.form-group-nested-button .form-dropdown-menu *:first-child .button,
-.form-group.form-group-nested-button .form-dropdown-menu *:last-child .button,
-.form-group.form-group-nested-button .form-dropdown-menu *:first-child input[type="checkbox"]+label,
-.form-group.form-group-nested-button .form-dropdown-menu *:last-child input[type="checkbox"]+label,
-.form-group.form-group-nested-button .form-dropdown-menu *:first-child input[type="radio"]+label,
-.form-group.form-group-nested-button .form-dropdown-menu *:last-child input[type="radio"]+label,
-.form-group.form-group-nested-button .form-dropdown-menu *:first-child input[type="color"]+label,
-.form-group.form-group-nested-button .form-dropdown-menu *:last-child input[type="color"]+label {
- border-radius: 0;
-}
-
-/* form feedback */
-.form-feedback {
- padding: 0.75em 1.25em;
- background-color: rgb(var(--form-feedback-background));
- border-width: 0;
- border-left-width: calc(var(--layout-line-width) * 2);
- border-style: solid;
- border-color: rgb(var(--form-feedback-border));
- border-top-right-radius: var(--theme-radius);
- border-bottom-right-radius: var(--theme-radius);
- width: 100%;
- transition: background-color var(--layout-transition-extra-fast), border-color var(--layout-transition-extra-fast);
-}
-
-.form-feedback p {
- color: rgb(var(--form-feedback-text));
-}
-
-.form-feedback p.muted {
- color: rgb(var(--form-feedback-text-muted));
-}
-
-.form-feedback.disabled {
- background-color: rgb(var(--form-feedback-background-disabled));
- border-color: rgb(var(--form-feedback-border-disabled));
-}
-
-.form-feedback.disabled p {
- color: rgb(var(--form-feedback-text-disabled));
-}
diff --git a/src/css/group.css b/src/css/group.css
deleted file mode 100644
index 3f4a0838..00000000
--- a/src/css/group.css
+++ /dev/null
@@ -1,202 +0,0 @@
-.group {
- padding-top: calc(calc(var(--layout-space) / 2) * var(--layout-padding));
- padding-bottom: calc(calc(var(--layout-space) / 2) * var(--layout-padding));
- padding-left: calc(var(--layout-space) * var(--layout-padding));
- padding-right: calc(var(--layout-space) * var(--layout-padding));
- width: 100%;
- display: flex;
-}
-
-.group:first-child {
- padding-top: calc(var(--layout-space) * var(--layout-padding));
-}
-
-.group:last-child {
- padding-bottom: calc(var(--layout-space) * var(--layout-padding));
-}
-
-.is-group-order-headerbody .group {
- flex-direction: column;
-}
-
-.is-group-order-bodyheader .group {
- flex-direction: column-reverse;
-}
-
-.is-group-border .group:not(:last-child):not(:only-child) {
- border-bottom: calc(var(--layout-line-width) * var(--group-border)) solid rgb(var(--theme-accent));
-}
-
-.is-group-border .group {
- padding: calc(var(--layout-space) * var(--layout-padding));
-}
-
-.group-header {
- position: relative;
- display: flex;
- align-items: center;
- flex-wrap: nowrap;
- transition: padding var(--layout-transition-extra-fast) var(--layout-duration-04);
-}
-
-.group-header-item {
- display: flex;
-}
-
-.is-group-area-justify-center .group-header-item:not(:only-child):not(:last-child),
-.is-group-area-justify-left .group-header-item:not(:only-child):not(:last-child) {
- margin-right: calc(var(--layout-space) * var(--layout-gutter));
-}
-
-.is-group-area-justify-right .group-header-item:not(:only-child):not(:last-child) {
- margin-left: calc(var(--layout-space) * var(--layout-gutter));
-}
-
-.group-header-item-name {
- flex-shrink: 1;
- overflow: hidden;
-}
-
-.group-header-item-control {
- height: 0;
- width: 0;
- overflow: hidden;
- flex-shrink: 0;
- transition:
- width var(--layout-transition-extra-fast),
- height var(--layout-transition-extra-fast) var(--layout-duration-04),
- margin var(--layout-transition-extra-fast);
-}
-
-.is-edit .group-header-item-control {
- height: 2.5em;
- width: 15em;
- transition:
- width var(--layout-duration-04) var(--layout-timing-bounce) var(--layout-duration-04),
- height var(--layout-transition-extra-fast),
- margin var(--layout-duration-04) var(--layout-timing-bounce) var(--layout-duration-04);
-}
-
-.is-group-area-justify-center .group-header-item-control:not(:only-child):not(:last-child),
-.is-group-area-justify-left .group-header-item-control:not(:only-child):not(:last-child) {
- margin-right: 0;
-}
-
-.is-edit.is-group-area-justify-center .group-header-item-control:not(:only-child):not(:last-child),
-.is-edit.is-group-area-justify-left .group-header-item-control:not(:only-child):not(:last-child) {
- margin-right: calc(var(--layout-space) * var(--layout-gutter));
-}
-
-.is-group-area-justify-right .group-header-item-control:not(:only-child):not(:last-child) {
- margin-left: 0;
-}
-
-.is-edit.is-group-area-justify-right .group-header-item-control:not(:only-child):not(:last-child) {
- margin-left: calc(var(--layout-space) * var(--layout-gutter));
-}
-
-.is-edit .group-header {
- transition: padding var(--layout-transition-extra-fast);
-}
-
-.is-group-area-justify-left .group-header {
- flex-direction: row;
-}
-
-.is-group-area-justify-center .group-header {
- flex-direction: row;
- justify-content: center;
-}
-
-.is-group-area-justify-right .group-header {
- flex-direction: row-reverse;
- justify-content: flex-start;
-}
-
-.is-group-order-headerbody .group-header-name.group-header,
-.is-group-order-headerbody .group-header-openall.group-header,
-.is-group-order-headerbody.is-edit .group-header {
- padding-bottom: calc(var(--layout-space) * var(--layout-gutter));
-}
-
-.is-group-order-bodyheader .group-header-name.group-header,
-.is-group-order-bodyheader .group-header-openall.group-header,
-.is-group-order-bodyheader.is-edit .group-header {
- padding-top: calc(var(--layout-space) * var(--layout-gutter));
-}
-
-.group-name {
- height: 2.5em;
- display: flex;
- align-items: center;
- max-width: 100%;
- overflow: hidden;
- font-size: var(--group-name-size);
-}
-
-.group-name-text {
- margin-bottom: 0;
- text-overflow: ellipsis;
- overflow: hidden;
- white-space: nowrap;
-}
-
-.group-control-item {
- padding-left: 0;
- padding-right: 0;
- flex-shrink: 0;
- width: 3em;
-}
-
-.group-openall {
- font-size: var(--group-openall-size);
-}
-
-.group-openall-item {
- background-color: rgba(var(--button-background), var(--group-openall-opacity));
-}
-
-.group-openall-item:focus,
-.group-openall-item:hover {
- background-color: rgba(var(--button-background-focus-hover), var(--group-openall-opacity));
-}
-
-.group-openall-item:active {
- background-color: rgba(var(--button-background-active), var(--group-openall-opacity));
-}
-
-.group-openall-item:after {
- background-color: rgba(var(--button-border), 0);
-}
-
-.group-openall-item:focus:after,
-.group-openall-item:hover:after {
- background-color: rgba(var(--button-border-focus-hover), var(--group-openall-opacity));
-}
-
-.group-openall-item:active:after {
- background-color: rgb(var(--button-border-active));
-}
-
-.is-group-openall-opacity .group-openall-item:active:after {
- background-color: transparent;
-}
-
-.group-body {
- background-color: transparent;
- font-size: var(--link-item-size);
- position: relative;
- display: grid;
- grid-auto-rows: var(--link-item-height);
- grid-gap: calc(var(--layout-space) * var(--layout-gutter));
- grid-template-columns: repeat(auto-fill, minmax(var(--link-item-width), 1fr));
- grid-auto-flow: dense;
-}
-
-.is-link-area-direction-ltr .group-body {
- direction: ltr;
-}
-
-.is-link-area-direction-rtl .group-body {
- direction: rtl;
-}
diff --git a/src/css/header.css b/src/css/header.css
deleted file mode 100755
index 50f18857..00000000
--- a/src/css/header.css
+++ /dev/null
@@ -1,456 +0,0 @@
-.header {
- position: relative;
- display: flex;
- flex-direction: row;
- z-index: var(--z-index-header);
- pointer-events: none;
-}
-
-.is-layout-direction-horizontal .header {
- max-height: 100vh;
- position: sticky;
- top: 0;
- left: initial;
- align-self: stretch;
- align-items: center;
-}
-
-.is-layout-direction-horizontal .header {
- width: 100%;
-}
-
-.is-link-show.is-layout-direction-horizontal .header {
- width: calc(calc(var(--header-area-width) / 2) - calc(calc(var(--link-area-width) / 2) - 50%));
-}
-
-.is-layout-direction-vertical .header {
- width: 100%;
-}
-
-.is-header-color-show .header {
- pointer-events: all;
-}
-
-.is-header-area-justify-left .header {
- justify-content: flex-start;
-}
-
-.is-header-area-justify-center .header {
- justify-content: center;
-}
-
-.is-header-area-justify-right .header {
- justify-content: flex-end;
-}
-
-.is-layout-direction-vertical.is-link-show.is-header-position-sticky .header {
- position: sticky;
- left: 0;
-}
-
-.is-layout-direction-vertical.is-link-show.is-header-position-inline .header {
- position: relative;
- left: 0;
-}
-
-.is-layout-direction-vertical.is-layout-order-headerlink.is-link-show .header {
- top: 0;
-}
-
-.is-layout-direction-vertical.is-layout-order-linkheader.is-link-show .header {
- bottom: 0;
-}
-
-.header-area {
- background-color: transparent;
- transition: background-color var(--layout-transition-medium), opacity var(--layout-transition-medium), border-radius var(--layout-transition-extra-fast);
-}
-
-.is-layout-direction-vertical .header-area {
- width: var(--header-area-width);
-}
-
-.is-layout-direction-horizontal .header-area {
- width: 100%;
-}
-
-.is-header-radius .header-area {
- border-radius: calc(var(--theme-radius) * 4);
-}
-
-.is-header-color-by-theme.is-header-color-style-always .header-area {
- background-color: rgba(var(--header-color-theme), var(--header-opacity));
-}
-
-.is-header-color-by-theme.is-header-color-style-scroll.is-header-color-style-scrolling .header-area {
- background-color: rgba(var(--header-color-theme), var(--header-opacity));
-}
-
-.is-header-color-by-custom.is-header-color-style-always .header-area {
- background-color: rgba(var(--header-color-custom), var(--header-opacity));
-}
-
-.is-header-color-by-custom.is-header-color-style-scroll.is-header-color-style-scrolling .header-area {
- background-color: rgba(var(--header-color-custom), var(--header-opacity));
-}
-
-.header-area {
- padding: calc(var(--layout-space) * var(--layout-padding));
- position: relative;
- pointer-events: none;
-}
-
-.is-header-border-top .header-area {
- border-top: calc(var(--layout-line-width) * var(--header-border-top)) solid rgb(var(--theme-accent));
-}
-
-.is-header-border-bottom .header-area {
- border-bottom: calc(var(--layout-line-width) * var(--header-border-bottom)) solid rgb(var(--theme-accent));
-}
-
-.header-item-grid {
- margin: calc(-1 * calc(var(--layout-space) * var(--layout-gutter))) 0 0 calc(-1 * calc(var(--layout-space) * var(--layout-gutter)));
- position: relative;
- display: flex;
- flex-direction: row;
- flex-wrap: wrap;
-}
-
-.is-header-area-align-center .header-item-grid {
- align-items: center;
-}
-
-.is-header-area-align-baseline .header-item-grid {
- align-items: baseline;
-}
-
-.is-header-item-justify-left .header-item-grid {
- justify-content: flex-start;
-}
-
-.is-header-item-justify-center .header-item-grid {
- justify-content: center;
-}
-
-.is-header-item-justify-right .header-item-grid {
- justify-content: flex-end;
-}
-
-.header-item {
- margin: calc(var(--layout-space) * var(--layout-gutter)) 0 0 calc(var(--layout-space) * var(--layout-gutter));
- display: flex;
- flex-wrap: nowrap;
- justify-content: flex-start;
- align-items: center;
- position: relative;
- pointer-events: all;
-}
-
-.is-header-search-width-by-auto .header-item-search {
- flex-grow: 1;
- width: 15em;
- min-width: 15em;
-}
-
-.is-header-search-width-by-custom .header-item-search {
- flex-grow: 0;
- width: var(--header-search-width-size);
-}
-
-.is-header-item-newline-greeting .header-item-greeting {
- flex-basis: 100%;
-}
-
-.is-header-item-newline-clock .header-item-clock {
- flex-basis: 100%;
-}
-
-.is-header-item-newline-transitional .header-item-transitional {
- flex-basis: 100%;
-}
-
-.is-header-item-newline-date .header-item-date {
- flex-basis: 100%;
-}
-
-.is-header-item-newline-search .header-item-search {
- flex-basis: 100%;
-}
-
-.is-header-item-newline-editadd .header-item-editadd {
- flex-basis: 100%;
-}
-
-.is-header-item-newline-coloraccent .header-item-coloraccent {
- flex-basis: 100%;
-}
-
-.is-header-item-newline-menu .header-item-menu {
- flex-basis: 100%;
- position: relative;
-}
-
-.header-item-body {
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-.header-item-body-greeting,
-.header-item-body-date,
-.header-item-body-transitional,
-.header-item-body-clock,
-.header-item-body-search,
-.header-item-body-editadd,
-.header-item-body-coloraccent,
-.header-item-body-menu {
- position: relative;
-}
-
-.header-item-body-greeting {
- font-size: var(--header-greeting-size);
- flex-grow: 1;
-}
-
-.header-item-body-clock {
- font-size: var(--header-clock-size);
- flex-grow: 1;
-}
-
-.header-item-body-transitional {
- font-size: var(--header-transitional-size);
- flex-grow: 1;
-}
-
-.header-item-body-date {
- font-size: var(--header-date-size);
- flex-grow: 1;
-}
-
-.header-item-body-search {
- font-size: var(--header-search-size);
- flex-grow: 1;
-}
-
-.header-item-body-editadd {
- font-size: var(--header-editadd-size);
- flex-grow: 1;
-}
-
-.header-item-body-coloraccent {
- font-size: var(--header-coloraccent-size);
- flex-grow: 1;
-}
-
-.header-item-body-menu {
- font-size: var(--header-menu-size);
- flex-grow: 1;
-}
-
-.form-input-button .header-edit[type="checkbox"]+label {
- background-color: rgba(var(--button-background), var(--header-editadd-opacity));
-}
-
-.form-input-button .header-edit[type="checkbox"]:focus+label,
-.form-input-button .header-edit[type="checkbox"]:hover+label {
- background-color: rgba(var(--button-background-focus-hover), var(--header-editadd-opacity));
-}
-
-.form-input-button .header-edit[type="checkbox"]:active+label {
- background-color: rgba(var(--button-background-active), var(--header-editadd-opacity));
-}
-
-.form-input-button .header-edit[type="checkbox"]:checked+label {
- background-color: rgba(var(--button-background-active), var(--header-editadd-opacity));
-}
-
-.is-header-editadd-opacity .form-input-button .header-edit[type="checkbox"]:active+label,
-.is-header-editadd-opacity .form-input-button .header-edit[type="checkbox"]:checked+label {
- background-color: transparent;
-}
-
-.form-input-button .header-edit[type="checkbox"]+label:after {
- background-color: rgba(var(--button-border), 0);
-}
-
-.form-input-button .header-edit[type="checkbox"]:focus+label:after,
-.form-input-button .header-edit[type="checkbox"]:hover+label:after {
- background-color: rgba(var(--button-border-focus-hover), var(--header-editadd-opacity));
-}
-
-.form-input-button .header-edit[type="checkbox"]:active+label:after {
- background-color: rgb(var(--button-border-active));
-}
-
-.form-input-button .header-edit[type="checkbox"]:checked+label:after {
- background-color: rgb(var(--button-border-active));
-}
-
-.is-header-editadd-opacity .form-input-button .header-edit[type="checkbox"]:active+label:after,
-.is-header-editadd-opacity .form-input-button .header-edit[type="checkbox"]:checked+label:after {
- background-color: transparent;
-}
-
-.header-add {
- background-color: rgba(var(--button-background), var(--header-editadd-opacity));
-}
-
-.header-add:focus,
-.header-add:hover {
- background-color: rgba(var(--button-background-focus-hover), var(--header-editadd-opacity));
-}
-
-.header-add:active {
- background-color: rgba(var(--button-background-active), var(--header-editadd-opacity));
-}
-
-.header-add:after {
- background-color: rgba(var(--button-border), 0);
-}
-
-.header-add:focus:after,
-.header-add:hover:after {
- background-color: rgba(var(--button-border-focus-hover), var(--header-editadd-opacity));
-}
-
-.header-add:active:after {
- background-color: rgb(var(--button-border-active));
-}
-
-.is-header-editadd-opacity .header-add:active:after {
- background-color: transparent;
-}
-
-.form-input-button .header-color[type="color"]+label,
-.form-input-button .header-accent[type="color"]+label {
- background-color: rgba(var(--button-background), var(--header-coloraccent-opacity));
-}
-
-.form-input-button .header-color[type="color"]:focus+label,
-.form-input-button .header-color[type="color"]:hover+label,
-.form-input-button .header-accent[type="color"]:focus+label,
-.form-input-button .header-accent[type="color"]:hover+label {
- background-color: rgba(var(--button-background-focus-hover), var(--header-coloraccent-opacity));
-}
-
-.form-input-button .header-color[type="color"]:active+label,
-.form-input-button .header-accent[type="color"]:active+label {
- background-color: rgba(var(--button-background-active), var(--header-coloraccent-opacity));
-}
-
-.form-input-button .header-color[type="color"]+label:after,
-.form-input-button .header-accent[type="color"]+label:after {
- background-color: rgba(var(--button-border), 0);
-}
-
-.form-input-button .header-color[type="color"]:focus+label:after,
-.form-input-button .header-color[type="color"]:hover+label:after,
-.form-input-button .header-accent[type="color"]:focus+label:after,
-.form-input-button .header-accent[type="color"]:hover+label:after {
- background-color: rgba(var(--button-border-focus-hover), var(--header-coloraccent-opacity));
-}
-
-.form-input-button .header-color[type="color"]:active+label:after,
-.form-input-button .header-accent[type="color"]:active+label:after {
- background-color: rgb(var(--button-border-active));
-}
-
-.is-header-coloraccent-opacity .form-input-button .header-color[type="color"]:active+label:after,
-.is-header-coloraccent-opacity .form-input-button .header-accent[type="color"]:active+label:after {
- background-color: transparent;
-}
-
-.header-menu {
- background-color: rgba(var(--button-background), var(--header-menu-opacity));
-}
-
-.header-menu:focus,
-.header-menu:hover {
- background-color: rgba(var(--button-background-focus-hover), var(--header-menu-opacity));
-}
-
-.header-menu:active {
- background-color: rgba(var(--button-background-active), var(--header-menu-opacity));
-}
-
-.header-menu:after {
- background-color: rgba(var(--button-border), 0);
-}
-
-.header-menu:focus:after,
-.header-menu:hover:after {
- background-color: rgba(var(--button-border-focus-hover), var(--header-menu-opacity));
-}
-
-.header-menu:active:after {
- background-color: rgb(var(--button-border-active));
-}
-
-.is-header-menu-opacity .header-menu:active:after {
- background-color: transparent;
-}
-
-.is-header-item-newline-search.is-header-search-width-by-custom .header-item-body-search {
- flex-grow: 0;
- width: var(--header-search-width-size);
-}
-
-.is-header-item-justify-left.is-header-item-newline-search.is-header-search-width-by-custom .header-item-search {
- justify-content: flex-start;
-}
-
-.is-header-item-justify-center.is-header-item-newline-search.is-header-search-width-by-custom .header-item-search {
- justify-content: center;
-}
-
-.is-header-item-justify-right.is-header-item-newline-search.is-header-search-width-by-custom .header-item-search {
- justify-content: flex-end;
-}
-
-.is-header-item-justify-left .header-item-body-greeting,
-.is-header-item-justify-left .header-item-body-clock,
-.is-header-item-justify-left .header-item-body-transitional,
-.is-header-item-justify-left .header-item-body-date,
-.is-header-item-justify-left .header-item-body-search,
-.is-header-item-justify-left .header-item-body-editadd,
-.is-header-item-justify-left .header-item-body-coloraccent,
-.is-header-item-justify-left .header-item-body-menu {
- justify-content: flex-start;
-}
-
-.is-header-item-justify-center .header-item-body-greeting,
-.is-header-item-justify-center .header-item-body-clock,
-.is-header-item-justify-center .header-item-body-transitional,
-.is-header-item-justify-center .header-item-body-date,
-.is-header-item-justify-center .header-item-body-search,
-.is-header-item-justify-center .header-item-body-editadd,
-.is-header-item-justify-center .header-item-body-coloraccent,
-.is-header-item-justify-center .header-item-body-menu {
- justify-content: center;
-}
-
-.is-header-item-justify-right .header-item-body-greeting,
-.is-header-item-justify-right .header-item-body-clock,
-.is-header-item-justify-right .header-item-body-transitional,
-.is-header-item-justify-right .header-item-body-date,
-.is-header-item-justify-right .header-item-body-search,
-.is-header-item-justify-right .header-item-body-editadd,
-.is-header-item-justify-right .header-item-body-coloraccent,
-.is-header-item-justify-right .header-item-body-menu {
- justify-content: flex-end;
-}
-
-.header-item-sort-placeholder {
- width: 0.5em;
- height: 100%;
-}
-
-.header-item-sort-placeholder-edge {
- background-color: rgba(var(--theme-accent), 0.2);
- border-radius: var(--theme-radius);
- width: 100%;
- height: 2.5em;
- position: relative;
- box-shadow: var(--edge-shadow);
- pointer-events: none;
-}
diff --git a/src/css/icons.css b/src/css/icons.css
deleted file mode 100755
index 4a7b65b0..00000000
--- a/src/css/icons.css
+++ /dev/null
@@ -1,145 +0,0 @@
-@font-face {
- font-family: "Icons";
- src: url("../fonts/icons/icons.eot?4e687y");
- src: url("../fonts/icons/icons.eot?4e687y#iefix") format("embedded-opentype"),
- url("../fonts/icons/icons.ttf?4e687y") format("truetype"),
- url("../fonts/icons/icons.woff?4e687y") format("woff"),
- url("../fonts/icons/icons.svg?4e687y#icons") format("svg");
- font-weight: normal;
- font-style: normal;
-}
-
-[class^="icon-"],
-[class*=" icon-"] {
- /* use !important to prevent issues with browser extensions that change fonts */
- font-family: "Icons" !important;
- speak: none;
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- text-transform: none;
- line-height: 1;
- /* Better Font Rendering =========== */
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.icon-add:before {
- content: "\e145";
-}
-
-.icon-arrow-back:before {
- content: "\e5c4";
-}
-
-.icon-arrow-downward:before {
- content: "\e5db";
-}
-
-.icon-arrow-forward:before {
- content: "\e5c8";
-}
-
-.icon-arrow-upward:before {
- content: "\e5d8";
-}
-
-.icon-check:before {
- content: "\e5ca";
-}
-
-.icon-check-box-checked:before {
- content: "\e834";
-}
-
-.icon-check-box-unchecked:before {
- content: "\e835";
-}
-
-.icon-check-box-indeterminate:before {
- content: "\e909";
-}
-
-.icon-close:before {
- content: "\e5cd";
-}
-
-.icon-edit:before {
- content: "\e254";
-}
-
-.icon-done:before {
- content: "\e876";
-}
-
-.icon-arrow-down:before {
- content: "\e313";
-}
-
-.icon-arrow-left:before {
- content: "\e314";
-}
-
-.icon-arrow-right:before {
- content: "\e315";
-}
-
-.icon-arrow-up:before {
- content: "\e316";
-}
-
-.icon-more-horiz:before {
- content: "\e5d3";
-}
-
-.icon-more-vert:before {
- content: "\e5d4";
-}
-
-.icon-radio-unchecked:before {
- content: "\e836";
-}
-
-.icon-radio-checked:before {
- content: "\e837";
-}
-
-.icon-remove:before {
- content: "\e15b";
-}
-
-.icon-settings:before {
- content: "\e8b8";
-}
-
-.icon-unfold-less:before {
- content: "\e5d6";
-}
-
-.icon-unfold-more:before {
- content: "\e5d7";
-}
-
-.icon-refresh:before {
- content: "\e900";
-}
-
-.icon-reorder:before {
- content: "\e901";
-}
-
-.icon-undo:before {
- content: "\e902";
-}
-
-.icon-redo:before {
- content: "\e903";
-}
-
-.icon-replay:before {
- content: "\e904";
-}
-
-.icon-coffee:before {
- content: "\e906";
-}
diff --git a/src/css/layout.css b/src/css/layout.css
deleted file mode 100644
index bbf0812d..00000000
--- a/src/css/layout.css
+++ /dev/null
@@ -1,78 +0,0 @@
-.layout {
- position: relative;
- width: var(--layout-width);
- font-size: calc(1em * var(--layout-size));
- flex-wrap: nowrap;
-}
-
-.is-layout-direction-vertical .layout {
- display: flex;
-}
-
-.is-layout-direction-vertical.is-layout-order-headerlink .layout {
- flex-direction: column;
-}
-
-.is-layout-direction-vertical.is-layout-order-linkheader .layout {
- flex-direction: column-reverse;
-}
-
-.is-layout-direction-horizontal .layout {
- display: inline-flex;
- align-items: center;
- justify-content: center;
-}
-
-.is-layout-direction-horizontal.is-layout-order-headerlink .layout {
- flex-direction: row;
-}
-
-.is-layout-direction-horizontal.is-layout-order-linkheader .layout {
- flex-direction: row-reverse;
-}
-
-.is-layout-alignment-horizontal-left body {
- align-items: flex-start;
-}
-
-.is-layout-alignment-horizontal-center body {
- align-items: center;
-}
-
-.is-layout-alignment-horizontal-right body {
- align-items: flex-end;
-}
-
-.is-layout-alignment-vertical-top body {
- justify-content: flex-start;
-}
-
-.is-layout-alignment-vertical-center body {
- justify-content: center;
-}
-
-.is-layout-alignment-vertical-bottom body {
- justify-content: flex-end;
-}
-
-html.is-layout-scrollbars-auto,
-.is-layout-scrollbars-auto body,
-.is-layout-scrollbars-auto * {
- scrollbar-width: auto;
-}
-
-html.is-layout-scrollbars-thin,
-.is-layout-scrollbars-thin body,
-.is-layout-scrollbars-thin * {
- scrollbar-width: thin;
-}
-
-html.is-layout-scrollbars-none,
-.is-layout-scrollbars-none body,
-.is-layout-scrollbars-none * {
- scrollbar-width: none;
-}
-
-.is-layout-scrollbars-none ::-webkit-scrollbar {
- display: none;
-}
diff --git a/src/css/link.css b/src/css/link.css
deleted file mode 100755
index 7f76af0a..00000000
--- a/src/css/link.css
+++ /dev/null
@@ -1,1511 +0,0 @@
-.link {
- display: none;
- position: relative;
- flex-direction: column;
- z-index: var(--z-index-link);
-}
-
-.is-layout-direction-horizontal .link {
- align-items: center;
-}
-
-.is-layout-direction-vertical .link {
- width: 100%;
-}
-
-.is-layout-direction-vertical.is-layout-order-headerlink .link {
- margin-top: calc(-1 * calc(var(--layout-space) * var(--layout-padding)));
-}
-
-.is-layout-direction-vertical.is-layout-order-linkheader .link {
- margin-bottom: calc(-1 * calc(var(--layout-space) * var(--layout-padding)));
-}
-
-.is-layout-direction-horizontal.is-layout-order-headerlink .link {
- margin-left: calc(-1 * calc(var(--layout-space) * var(--layout-padding)));
-}
-
-.is-layout-direction-horizontal.is-layout-order-linkheader .link {
- margin-right: calc(-1 * calc(var(--layout-space) * var(--layout-padding)));
-}
-
-.is-layout-direction-horizontal .link {
- width: calc(calc(var(--link-area-width) / 2) - calc(calc(var(--header-area-width) / 2) - 50%) + calc(var(--layout-space) * var(--layout-padding)));
-}
-
-.is-layout-direction-vertical.is-layout-order-headerlink.is-header-border-bottom .link,
-.is-layout-direction-vertical.is-layout-order-headerlink.is-header-color-style-always .link {
- margin-top: 0;
-}
-
-.is-layout-direction-vertical.is-layout-order-linkheader.is-header-border-top .link,
-.is-layout-direction-vertical.is-layout-order-linkheader.is-header-color-style-always .link {
- margin-bottom: 0;
-}
-
-.is-layout-direction-horizontal.is-layout-order-headerlink.is-group-border .link,
-.is-layout-direction-horizontal.is-layout-order-headerlink.is-header-border-top .link,
-.is-layout-direction-horizontal.is-layout-order-headerlink.is-header-border-bottom .link,
-.is-layout-direction-horizontal.is-layout-order-headerlink.is-header-color-style-always .link {
- width: 50%;
- margin-left: 0;
-}
-
-.is-layout-direction-horizontal.is-layout-order-linkheader.is-group-border .link,
-.is-layout-direction-horizontal.is-layout-order-linkheader.is-header-border-top .link,
-.is-layout-direction-horizontal.is-layout-order-linkheader.is-header-border-bottom .link,
-.is-layout-direction-horizontal.is-layout-order-linkheader.is-header-color-style-always .link {
- width: 50%;
- margin-right: 0;
-}
-
-.is-link-show .link {
- display: flex;
-}
-
-.is-layout-direction-vertical .link-area {
- width: var(--link-area-width);
-}
-
-.is-layout-direction-horizontal .link-area {
- width: 100%;
-}
-
-.is-link-area-justify-left .link {
- align-items: flex-start;
-}
-
-.is-link-area-justify-center .link {
- align-items: center;
-}
-
-.is-link-area-justify-right .link {
- align-items: flex-end;
-}
-
-.link-sort-placeholder {
- background-color: rgba(var(--theme-accent), 0.2);
- border-radius: var(--theme-radius);
- width: 100%;
- height: 100%;
- position: relative;
- box-shadow: var(--edge-shadow);
- pointer-events: none;
-}
-
-@media (min-width: 900px) {
-
- .is-link-breakpoint-md .link-sort-placeholder-wide,
- .is-link-breakpoint-lg .link-sort-placeholder-wide,
- .is-link-breakpoint-xl .link-sort-placeholder-wide,
- .is-link-breakpoint-xxl .link-sort-placeholder-wide {
- grid-column: span 2;
- }
-
- .is-link-breakpoint-md .link-sort-placeholder-tall,
- .is-link-breakpoint-lg .link-sort-placeholder-tall,
- .is-link-breakpoint-xl .link-sort-placeholder-tall,
- .is-link-breakpoint-xxl .link-sort-placeholder-tall {
- grid-row: span 2;
- }
-}
-
-.link-item.link-empty {
- background-color: rgba(var(--theme-color-04), 0.2);
- padding: 0.5em 1em;
- border-radius: var(--theme-radius);
- height: inherit;
- text-align: center;
- display: flex;
- grid-column-start: 1;
- grid-column-end: -1;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- flex-wrap: wrap;
-}
-
-.is-link-style-block .link-item.link-empty {
- flex-direction: column;
-}
-
-.is-link-style-list .link-item.link-empty {
- flex-direction: row;
-}
-
-.is-link-style-block .link-item.link-empty>*:not(:last-child) {
- margin-bottom: 1em;
-}
-
-.is-link-style-list .link-item.link-empty>*:not(:last-child) {
- margin-right: 1em;
- margin-bottom: 0;
-}
-
-.is-link-item-hoverscale-show .link-item.link-empty:hover {
- transform: scale(1);
-}
-
-.is-sorting-link .header {
- display: inline;
-}
-
-/* link item */
-.link-item {
- font-size: 1em;
- position: relative;
- width: 100%;
- height: 100%;
- display: block;
- transform: scale(1);
- transition: transform var(--layout-transition-extra-fast);
- z-index: 1;
-}
-
-.is-link-area-direction-ltr .link-item,
-.is-link-area-direction-rtl .link-item {
- direction: ltr;
-}
-
-.link-item:focus-within,
-.link-item:focus,
-.link-item:hover {
- z-index: 2;
- outline: 0;
-}
-
-.is-link-item-hoverscale-show .link-item:focus-within,
-.is-link-item-hoverscale-show .link-item:focus,
-.is-link-item-hoverscale-show .link-item:hover {
- transform: scale(1.05);
-}
-
-.is-link-item-hoverscale-show .link-item:active {
- transform: scale(1.04);
- transition: none;
-}
-
-@media (min-width: 900px) {
-
- .is-link-breakpoint-lg.is-link-style-list .link-item-wide,
- .is-link-breakpoint-xl.is-link-style-list .link-item-wide,
- .is-link-breakpoint-xxl.is-link-style-list .link-item-wide {
- grid-column: span 2;
- }
-
- .is-link-breakpoint-md.is-link-style-block .link-item-wide,
- .is-link-breakpoint-lg.is-link-style-block .link-item-wide,
- .is-link-breakpoint-xl.is-link-style-block .link-item-wide,
- .is-link-breakpoint-xxl.is-link-style-block .link-item-wide {
- grid-column: span 2;
- }
-
- .is-link-breakpoint-md .link-item-tall,
- .is-link-breakpoint-lg .link-item-tall,
- .is-link-breakpoint-xl .link-item-tall,
- .is-link-breakpoint-xxl .link-item-tall {
- grid-row: span 2;
- }
-}
-
-/* link panel front */
-.link-panel-front {
- background-color: rgba(var(--link-item-color), var(--link-item-color-opacity));
- position: absolute;
- left: 0;
- width: 100%;
- height: 100%;
- display: flex;
- flex-direction: column;
- z-index: 3;
- overflow: hidden;
- text-decoration: none;
- outline: none;
- user-select: none;
- transition: background-color var(--layout-transition-extra-fast), height var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast);
-}
-
-.link-background-image {
- background-image: var(--link-item-background-image-url);
- background-size: cover;
- background-position: center;
- background-repeat: no-repeat;
- opacity: var(--link-item-background-opacity);
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- z-index: 1;
- pointer-events: none;
-}
-
-.link-background-video {
- opacity: var(--link-item-background-opacity);
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- overflow: hidden;
- z-index: 1;
- pointer-events: none;
-}
-
-.link-background-video video {
- opacity: var(--link-item-background-opacity);
- width: 100%;
- height: 100%;
- object-fit: cover;
- pointer-events: none;
-}
-
-.is-link-style-block .link-panel-front {
- padding: calc(1em * var(--link-item-padding));
-}
-
-.is-link-style-list .link-panel-front {
- padding: calc(0.5em * var(--link-item-padding)) calc(1.5em * var(--link-item-padding));
-}
-
-.is-theme-radius .link-panel-front {
- border-radius: var(--theme-radius);
-}
-
-.is-link-orientation-top .link-panel-front {
- top: inherit;
- bottom: 0;
-}
-
-.is-link-orientation-bottom .link-panel-front {
- top: 0;
- bottom: inherit;
-}
-
-.is-link-item-border .link-panel-front {
- border: calc(calc(var(--layout-line-width) / 2) * var(--link-item-border)) solid rgb(var(--theme-accent));
-}
-
-.is-link-item-line-show .link-panel-front {
- height: calc(100% - var(--layout-line-width));
-}
-
-.link-panel-front:hover,
-.link-panel-front:focus,
-.link-item:focus-within .link-panel-front,
-.link-item:focus .link-panel-front,
-.link-item:hover .link-panel-front {
- background-color: rgba(var(--link-item-color-focus-hover), var(--link-item-color-opacity));
- outline: none;
- text-decoration: none;
-}
-
-.is-link-item-shadow-show.is-link-orientation-bottom .link-item:focus .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom .link-item:focus-within .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom .link-item:hover .link-panel-front {
- box-shadow: var(--theme-shadow-bottom-large);
-}
-
-.is-link-item-shadow-show.is-link-orientation-top .link-item:focus .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top .link-item:focus-within .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top .link-item:hover .link-panel-front {
- box-shadow: var(--theme-shadow-top-large);
-}
-
-.link-item-alignment-topleft .link-panel-front {
- justify-content: flex-start;
- align-items: flex-start;
-}
-
-.link-item-alignment-topcenter .link-panel-front {
- justify-content: flex-start;
- align-items: center;
-}
-
-.link-item-alignment-topright .link-panel-front {
- justify-content: flex-start;
- align-items: flex-end;
-}
-
-.link-item-alignment-centerleft .link-panel-front {
- justify-content: center;
- align-items: flex-start;
-}
-
-.link-item-alignment-centercenter .link-panel-front {
- justify-content: center;
- align-items: center;
-}
-
-.link-item-alignment-centerright .link-panel-front {
- justify-content: center;
- align-items: flex-end;
-}
-
-.link-item-alignment-bottomleft .link-panel-front {
- justify-content: flex-end;
- align-items: flex-start;
-}
-
-.link-item-alignment-bottomcenter .link-panel-front {
- justify-content: flex-end;
- align-items: center;
-}
-
-.link-item-alignment-bottomright .link-panel-front {
- justify-content: flex-end;
- align-items: flex-end;
-}
-
-.is-link-item-url-show .link-item:focus .link-panel-front,
-.is-link-item-url-show .link-item:focus-within .link-panel-front,
-.is-link-item-url-show .link-item:hover .link-panel-front {
- height: calc(100% - var(--link-item-url-height));
-}
-
-.is-theme-radius.is-link-item-url-show.is-link-orientation-top .link-item:focus .link-panel-front,
-.is-theme-radius.is-link-item-url-show.is-link-orientation-top .link-item:focus-within .link-panel-front,
-.is-theme-radius.is-link-item-url-show.is-link-orientation-top .link-item:hover .link-panel-front {
- border-top-left-radius: calc(var(--theme-radius) / 4);
- border-top-right-radius: calc(var(--theme-radius) / 4);
-}
-
-.is-theme-radius.is-link-item-url-show.is-link-orientation-bottom .link-item:focus .link-panel-front,
-.is-theme-radius.is-link-item-url-show.is-link-orientation-bottom .link-item:focus-within .link-panel-front,
-.is-theme-radius.is-link-item-url-show.is-link-orientation-bottom .link-item:hover .link-panel-front {
- border-bottom-left-radius: calc(var(--theme-radius) / 4);
- border-bottom-right-radius: calc(var(--theme-radius) / 4);
-}
-
-.is-edit .link-item .link-panel-front,
-.is-edit .link-item:hover .link-panel-front,
-.is-edit .link-item:focus .link-panel-front {
- height: calc(100% - var(--link-item-edit-height));
-}
-
-.is-theme-radius.is-edit.is-link-orientation-top .link-item .link-panel-front,
-.is-theme-radius.is-edit.is-link-orientation-top .link-item:hover .link-panel-front,
-.is-theme-radius.is-edit.is-link-orientation-top .link-item:focus .link-panel-front {
- border-top-left-radius: calc(var(--theme-radius) / 4);
- border-top-right-radius: calc(var(--theme-radius) / 4);
-}
-
-.is-theme-radius.is-edit.is-link-orientation-bottom .link-item .link-panel-front,
-.is-theme-radius.is-edit.is-link-orientation-bottom .link-item:hover .link-panel-front,
-.is-theme-radius.is-edit.is-link-orientation-bottom .link-item:focus .link-panel-front {
- border-bottom-left-radius: calc(var(--theme-radius) / 4);
- border-bottom-right-radius: calc(var(--theme-radius) / 4);
-}
-
-.is-link-item-shadow-show.is-link-orientation-bottom.is-edit .link-item .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom.is-edit .link-item:hover .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom.is-edit .link-item:focus .link-panel-front {
- box-shadow: var(--theme-shadow-bottom-medium);
-}
-
-.is-link-item-shadow-show.is-link-orientation-top.is-edit .link-item .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top.is-edit .link-item:hover .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top.is-edit .link-item:focus .link-panel-front {
- box-shadow: var(--theme-shadow-top-medium);
-}
-
-/* link display */
-.link-display {
- display: flex;
- position: relative;
- top: var(--link-item-display-translate-y);
- left: var(--link-item-display-translate-x);
- font-size: 1em;
- z-index: 2;
- transform: rotate(var(--link-item-display-rotate));
- transition: font-size var(--layout-transition-extra-fast), top var(--layout-transition-extra-fast), left var(--layout-transition-extra-fast);
-}
-
-.is-edit .link-display {
- font-size: 0.6em;
-}
-
-.link-item-direction-horizontal.link-item-order-visualname .link-display {
- flex-direction: row;
-}
-
-.link-item-direction-horizontal.link-item-order-namevisual .link-display {
- flex-direction: row-reverse;
-}
-
-.link-item-direction-vertical.link-item-order-visualname .link-display {
- flex-direction: column;
-}
-
-.link-item-direction-vertical.link-item-order-namevisual .link-display {
- flex-direction: column-reverse;
-}
-
-.link-item-name.link-item-visual.link-item-direction-horizontal.link-item-order-visualname .link-display-visual:not(:only-child) {
- margin-right: calc(var(--link-item-display-space) * var(--link-item-display-gutter));
-}
-
-.link-item-name.link-item-visual.link-item-direction-horizontal.link-item-order-namevisual .link-display-visual:not(:only-child) {
- margin-left: calc(var(--link-item-display-space) * var(--link-item-display-gutter));
-}
-
-.link-item-name.link-item-visual.link-item-direction-vertical.link-item-order-visualname .link-display-visual:not(:only-child) {
- margin-bottom: calc(var(--link-item-display-space) * var(--link-item-display-gutter));
-}
-
-.link-item-name.link-item-visual.link-item-direction-vertical.link-item-order-namevisual .link-display-visual:not(:only-child) {
- margin-top: calc(var(--link-item-display-space) * var(--link-item-display-gutter));
-}
-
-.link-item-alignment-topleft .link-display {
- transform-origin: top left;
-}
-
-.link-item-alignment-topcenter .link-display {
- transform-origin: top center;
-}
-
-.link-item-alignment-topright .link-display {
- transform-origin: top right;
-}
-
-.link-item-alignment-centerleft .link-display {
- transform-origin: center left;
-}
-
-.link-item-alignment-centercenter .link-display {
- transform-origin: center center;
-}
-
-.link-item-alignment-centerright .link-display {
- transform-origin: center right;
-}
-
-.link-item-alignment-bottomleft .link-display {
- transform-origin: bottom left;
-}
-
-.link-item-alignment-bottomcenter .link-display {
- transform-origin: bottom center;
-}
-
-.link-item-alignment-bottomright .link-display {
- transform-origin: bottom right;
-}
-
-/* vertical visual name */
-.link-item-direction-vertical.link-item-order-visualname.link-item-alignment-topleft .link-display {
- justify-content: flex-start;
- align-items: flex-start;
-}
-
-.link-item-direction-vertical.link-item-order-visualname.link-item-alignment-topcenter .link-display {
- justify-content: flex-start;
- align-items: center;
-}
-
-.link-item-direction-vertical.link-item-order-visualname.link-item-alignment-topright .link-display {
- justify-content: flex-start;
- align-items: flex-end;
-}
-
-.link-item-direction-vertical.link-item-order-visualname.link-item-alignment-centerleft .link-display {
- justify-content: center;
- align-items: flex-start;
-}
-
-.link-item-direction-vertical.link-item-order-visualname.link-item-alignment-centercenter .link-display {
- justify-content: center;
- align-items: center;
-}
-
-.link-item-direction-vertical.link-item-order-visualname.link-item-alignment-centerright .link-display {
- justify-content: center;
- align-items: flex-end;
-}
-
-.link-item-direction-vertical.link-item-order-visualname.link-item-alignment-bottomleft .link-display {
- justify-content: flex-end;
- align-items: flex-start;
-}
-
-.link-item-direction-vertical.link-item-order-visualname.link-item-alignment-bottomcenter .link-display {
- justify-content: flex-end;
- align-items: center;
-}
-
-.link-item-direction-vertical.link-item-order-visualname.link-item-alignment-bottomright .link-display {
- justify-content: flex-end;
- align-items: flex-end;
-}
-
-/* vertical name visual */
-.link-item-direction-vertical.link-item-order-namevisual.link-item-alignment-topleft .link-display {
- justify-content: flex-end;
- align-items: flex-start;
-}
-
-.link-item-direction-vertical.link-item-order-namevisual.link-item-alignment-topcenter .link-display {
- justify-content: flex-end;
- align-items: center;
-}
-
-.link-item-direction-vertical.link-item-order-namevisual.link-item-alignment-topright .link-display {
- justify-content: flex-end;
- align-items: flex-end;
-}
-
-.link-item-direction-vertical.link-item-order-namevisual.link-item-alignment-centerleft .link-display {
- justify-content: center;
- align-items: flex-start;
-}
-
-.link-item-direction-vertical.link-item-order-namevisual.link-item-alignment-centercenter .link-display {
- justify-content: center;
- align-items: center;
-}
-
-.link-item-direction-vertical.link-item-order-namevisual.link-item-alignment-centerright .link-display {
- justify-content: center;
- align-items: flex-end;
-}
-
-.link-item-direction-vertical.link-item-order-namevisual.link-item-alignment-bottomleft .link-display {
- justify-content: flex-start;
- align-items: flex-start;
-}
-
-.link-item-direction-vertical.link-item-order-namevisual.link-item-alignment-bottomcenter .link-display {
- justify-content: flex-start;
- align-items: center;
-}
-
-.link-item-direction-vertical.link-item-order-namevisual.link-item-alignment-bottomright .link-display {
- justify-content: flex-start;
- align-items: flex-end;
-}
-
-/* horizontal visual name */
-.link-item-direction-horizontal.link-item-order-visualname.link-item-alignment-topleft .link-display {
- justify-content: flex-start;
- align-items: flex-start;
-}
-
-.link-item-direction-horizontal.link-item-order-visualname.link-item-alignment-topcenter .link-display {
- justify-content: center;
- align-items: flex-start;
-}
-
-.link-item-direction-horizontal.link-item-order-visualname.link-item-alignment-topright .link-display {
- justify-content: flex-end;
- align-items: flex-start;
-}
-
-.link-item-direction-horizontal.link-item-order-visualname.link-item-alignment-centerleft .link-display {
- justify-content: flex-start;
- align-items: center;
-}
-
-.link-item-direction-horizontal.link-item-order-visualname.link-item-alignment-centercenter .link-display {
- justify-content: center;
- align-items: center;
-}
-
-.link-item-direction-horizontal.link-item-order-visualname.link-item-alignment-centerright .link-display {
- justify-content: flex-end;
- align-items: center;
-}
-
-.link-item-direction-horizontal.link-item-order-visualname.link-item-alignment-bottomleft .link-display {
- justify-content: flex-start;
- align-items: flex-end;
-}
-
-.link-item-direction-horizontal.link-item-order-visualname.link-item-alignment-bottomcenter .link-display {
- justify-content: center;
- align-items: flex-end;
-}
-
-.link-item-direction-horizontal.link-item-order-visualname.link-item-alignment-bottomright .link-display {
- justify-content: flex-end;
- align-items: flex-end;
-}
-
-/* horizontal name visual */
-.link-item-direction-horizontal.link-item-order-namevisual.link-item-alignment-topleft .link-display {
- justify-content: flex-end;
- align-items: flex-start;
-}
-
-.link-item-direction-horizontal.link-item-order-namevisual.link-item-alignment-topcenter .link-display {
- justify-content: center;
- align-items: flex-start;
-}
-
-.link-item-direction-horizontal.link-item-order-namevisual.link-item-alignment-topright .link-display {
- justify-content: flex-start;
- align-items: flex-start;
-}
-
-.link-item-direction-horizontal.link-item-order-namevisual.link-item-alignment-centerleft .link-display {
- justify-content: flex-end;
- align-items: center;
-}
-
-.link-item-direction-horizontal.link-item-order-namevisual.link-item-alignment-centercenter .link-display {
- justify-content: center;
- align-items: center;
-}
-
-.link-item-direction-horizontal.link-item-order-namevisual.link-item-alignment-centerright .link-display {
- justify-content: flex-start;
- align-items: center;
-}
-
-.link-item-direction-horizontal.link-item-order-namevisual.link-item-alignment-bottomleft .link-display {
- justify-content: flex-end;
- align-items: flex-end;
-}
-
-.link-item-direction-horizontal.link-item-order-namevisual.link-item-alignment-bottomcenter .link-display {
- justify-content: center;
- align-items: flex-end;
-}
-
-.link-item-direction-horizontal.link-item-order-namevisual.link-item-alignment-bottomright .link-display {
- justify-content: flex-start;
- align-items: flex-end;
-}
-
-.link-display-letter,
-.link-display-icon {
- margin: 0;
- text-align: center;
-}
-
-.link-display-visual {
- display: none;
-}
-
-.link-item-visual .link-display-visual {
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.link-item-display-visual-shadow .link-display-visual {
- text-shadow: var(--link-item-display-visual-shadow);
-}
-
-.link-display-letter {
- font-family: var(--theme-font-display-name);
- font-weight: var(--theme-font-display-weight);
- font-style: var(--theme-font-display-style);
- color: rgb(var(--link-item-visual-element-color));
- line-height: 1;
- white-space: nowrap;
- transition: color var(--layout-transition-extra-fast);
-}
-
-.link-display-icon {
- color: rgb(var(--link-item-visual-element-color));
- transition: color var(--layout-transition-extra-fast);
-}
-
-.link-display-image {
- background-image: var(--link-display-image-url);
- background-size: contain;
- background-position: center;
- background-repeat: no-repeat;
- width: 1em;
- height: 1em;
-}
-
-.is-theme-accent-cycle .link-display-letter,
-.is-theme-accent-cycle .link-display-icon {
- transition: none;
-}
-
-.is-link-style-block .link-display-letter,
-.is-link-style-list .link-display-letter {
- font-size: var(--link-item-display-visual-letter-size);
-}
-
-.is-link-style-block .link-display-icon,
-.is-link-style-list .link-display-icon {
- font-size: var(--link-item-display-visual-icon-size);
-}
-
-.is-link-style-block .link-display-image,
-.is-link-style-list .link-display-image {
- font-size: var(--link-item-display-visual-image-size);
-}
-
-.link-item:hover .link-display-letter,
-.link-item:focus .link-display-letter,
-.link-item:hover .link-display-icon,
-.link-item:focus .link-display-icon {
- color: rgb(var(--link-item-visual-element-color-focus-hover));
-}
-
-.link-panel-front:focus .link-display-letter,
-.link-panel-front:focus .link-display-icon {
- color: rgb(var(--link-item-visual-element-color-focus-hover));
-}
-
-/* link name */
-.link-display-name {
- margin: 0;
- font-size: var(--link-item-display-name-size);
- font-family: var(--theme-font-ui-name);
- font-weight: var(--theme-font-ui-weight);
- font-style: var(--theme-font-ui-style);
- color: rgb(var(--link-item-name-color));
- display: none;
- transition: color var(--layout-transition-extra-fast);
-}
-
-.link-item-name .link-display-name {
- display: block;
-}
-
-.link-display-name,
-.link-display-name:not(:last-child) {
- margin-bottom: 0;
-}
-
-.link-item-alignment-topleft .link-display-name,
-.link-item-alignment-centerleft .link-display-name,
-.link-item-alignment-bottomleft .link-display-name {
- text-align: left;
-}
-
-.link-item-alignment-topcenter .link-display-name,
-.link-item-alignment-centercenter .link-display-name,
-.link-item-alignment-bottomcenter .link-display-name {
- text-align: center;
-}
-
-.link-item-alignment-topright .link-display-name,
-.link-item-alignment-centerright .link-display-name,
-.link-item-alignment-bottomright .link-display-name {
- text-align: right;
-}
-
-.link-item:hover .link-display-name,
-.link-item:focus .link-display-name {
- color: rgb(var(--theme-style-text));
-}
-
-.link-panel-front:focus .link-display-name {
- color: rgb(var(--link-item-name-color-focus-hover));
-}
-
-/* link panel back */
-.link-panel-back {
- background-color: rgb(var(--theme-accent));
- border-radius: var(--theme-radius);
- width: calc(100% - calc(var(--layout-line-width) * 2));
- height: calc(100% - calc(var(--layout-line-width) * 2));
- position: absolute;
- top: var(--layout-line-width);
- left: var(--layout-line-width);
- overflow: hidden;
- display: flex;
- align-items: stretch;
- justify-content: flex-end;
- z-index: 2;
- transition: height var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast), top var(--layout-transition-extra-fast), clip-path var(--layout-transition-extra-fast);
-}
-
-.is-edit .link-panel-back {
- height: 100%;
- top: 0;
-}
-
-.is-link-orientation-top .link-panel-back {
- flex-direction: column-reverse;
-}
-
-.is-link-orientation-bottom .link-panel-back {
- flex-direction: column;
-}
-
-.is-link-item-line-show .link-panel-back {
- height: calc(100% - var(--layout-line-width));
-}
-
-.is-link-item-line-show.is-link-orientation-top .link-panel-back {
- top: 0;
-}
-
-.is-link-item-line-show.is-link-orientation-bottom .link-panel-back {
- top: var(--layout-line-width);
-}
-
-.is-edit.is-link-item-line-show .link-panel-back {
- height: 100%;
-}
-
-.is-edit.is-link-item-line-show.is-link-orientation-top .link-panel-back,
-.is-edit.is-link-item-line-show.is-link-orientation-bottom .link-panel-back {
- top: 0;
-}
-
-.is-link-orientation-top .link-panel-back {
- clip-path: polygon(0 0, 100% 0, 100% calc(0% + var(--link-item-clip-padding)), 0 calc(0% + var(--link-item-clip-padding)));
-}
-
-.is-link-orientation-bottom .link-panel-back {
- clip-path: polygon(0 calc(100% - var(--link-item-clip-padding)), 100% calc(100% - var(--link-item-clip-padding)), 100% 100%, 0 100%);
-}
-
-.is-link-orientation-top.is-link-item-line-show .link-panel-back {
- clip-path: polygon(0 0, 100% 0, 100% calc(var(--layout-line-width) + var(--link-item-clip-padding)), 0 calc(var(--layout-line-width) + var(--link-item-clip-padding)));
-}
-
-.is-link-orientation-bottom.is-link-item-line-show .link-panel-back {
- clip-path: polygon(0 calc(100% - var(--layout-line-width) - var(--link-item-clip-padding)), 100% calc(100% - var(--layout-line-width) - var(--link-item-clip-padding)), 100% 100%, 0 100%);
-}
-
-.is-link-orientation-top .link-item:focus .link-panel-back,
-.is-link-orientation-top .link-item:focus-within .link-panel-back,
-.is-link-orientation-top .link-item:hover .link-panel-back,
-.is-link-orientation-bottom .link-item:focus .link-panel-back,
-.is-link-orientation-bottom .link-item:focus-within .link-panel-back,
-.is-link-orientation-bottom .link-item:hover .link-panel-back {
- top: 0;
- height: 100%;
-}
-
-.is-link-item-url-show.is-link-orientation-top .link-item:focus .link-panel-back,
-.is-link-item-url-show.is-link-orientation-top .link-item:focus-within .link-panel-back,
-.is-link-item-url-show.is-link-orientation-top .link-item:hover .link-panel-back {
- clip-path: polygon(0 0, 100% 0, 100% calc(var(--link-item-url-height) + var(--link-item-clip-padding)), 0 calc(var(--link-item-url-height) + var(--link-item-clip-padding)));
-}
-
-.is-link-item-url-show.is-link-orientation-bottom .link-item:focus .link-panel-back,
-.is-link-item-url-show.is-link-orientation-bottom .link-item:focus-within .link-panel-back,
-.is-link-item-url-show.is-link-orientation-bottom .link-item:hover .link-panel-back {
- clip-path: polygon(0 calc(100% - calc(var(--link-item-url-height) + var(--link-item-clip-padding))), 100% calc(100% - calc(var(--link-item-url-height) + var(--link-item-clip-padding))), 100% 100%, 0 100%);
-}
-
-.is-edit.is-link-orientation-top .link-item .link-panel-back,
-.is-edit.is-link-orientation-top .link-item:focus .link-panel-back,
-.is-edit.is-link-orientation-top .link-item:focus-within .link-panel-back,
-.is-edit.is-link-orientation-top .link-item:hover .link-panel-back {
- clip-path: polygon(0 0, 100% 0, 100% calc(var(--link-item-edit-height) + var(--link-item-clip-padding)), 0 calc(var(--link-item-edit-height) + var(--link-item-clip-padding)));
-}
-
-.is-edit.is-link-orientation-bottom .link-item .link-panel-back,
-.is-edit.is-link-orientation-bottom .link-item:focus .link-panel-back,
-.is-edit.is-link-orientation-bottom .link-item:focus-within .link-panel-back,
-.is-edit.is-link-orientation-bottom .link-item:hover .link-panel-back {
- clip-path: polygon(0 calc(100% - var(--link-item-edit-height) - var(--link-item-clip-padding)), 100% calc(100% - var(--link-item-edit-height) - var(--link-item-clip-padding)), 100% 100%, 0 100%);
-}
-
-.link-control {
- margin: 0;
- padding: 0;
- height: 0;
- height: var(--link-item-edit-height);
- width: 100%;
- position: absolute;
- display: flex;
- overflow: hidden;
- flex-direction: row;
- align-items: stretch;
- justify-content: center;
- transition: top var(--layout-transition-extra-fast), bottom var(--layout-transition-extra-fast);
-}
-
-.is-link-orientation-top .link-control {
- top: calc(-1 * var(--link-item-edit-height));
-}
-
-.is-link-orientation-bottom .link-control {
- bottom: calc(-1 * var(--link-item-edit-height));
-}
-
-.is-edit.is-link-orientation-top .link-control {
- top: 0;
- transition: top var(--layout-duration-04) var(--layout-timing-bounce);
-}
-
-.is-edit.is-link-orientation-bottom .link-control {
- bottom: 0;
- transition: bottom var(--layout-duration-04) var(--layout-timing-bounce) var(--layout-duration-01);
-}
-
-.link-control-item {
- background-color: transparent;
- border-radius: 0;
- margin-bottom: 0;
- border: 0;
- padding: 0;
- flex-grow: 1;
-}
-
-.link-control-item.disabled,
-.link-control-item:disabled {
- background-color: transparent;
-}
-
-.is-link-style-list .link-control-item {
- flex-basis: inherit;
-}
-
-.is-link-style-block .link-control-item {
- flex-basis: 30%;
-}
-
-.link-control-item {
- color: hsl(var(--theme-accent-accessible-color));
-}
-
-.link-control-item:focus,
-.link-control-item:hover {
- color: hsl(var(--theme-accent-accessible-color));
- background-color: hsla(var(--theme-accent-accessible-color), 0.2);
-}
-
-.link-control-item.disabled:focus,
-.link-control-item.disabled:hover,
-.link-control-item:disabled:focus,
-.link-control-item:disabled:hover {
- color: hsla(var(--theme-accent-accessible-color), 0.25);
- background-color: transparent;
-}
-
-.link-control-item:active {
- color: hsl(var(--theme-accent-accessible-color));
- background-color: hsla(var(--theme-accent-accessible-color), 0.1);
-}
-
-.link-control-item.disabled,
-.link-control-item:disabled {
- color: hsla(var(--theme-accent-accessible-color), 0.25);
-}
-
-.is-link-orientation-top.is-link-style-list .link-control-item:nth-child(1) {
- border-top-left-radius: var(--theme-radius);
-}
-
-.is-link-orientation-top.is-link-style-list .link-control-item:nth-child(5) {
- border-top-right-radius: var(--theme-radius);
-}
-
-.is-link-orientation-bottom.is-link-style-list .link-control-item:nth-child(1) {
- border-bottom-left-radius: var(--theme-radius);
-}
-
-.is-link-orientation-bottom.is-link-style-list .link-control-item:nth-child(5) {
- border-bottom-right-radius: var(--theme-radius);
-}
-
-.is-link-orientation-top.is-link-style-block .link-control-item:nth-child(4) {
- border-top-left-radius: var(--theme-radius);
-}
-
-.is-link-orientation-top.is-link-style-block .link-control-item:nth-child(5) {
- border-top-right-radius: var(--theme-radius);
-}
-
-.is-link-orientation-bottom.is-link-style-block .link-control-item:nth-child(4) {
- border-bottom-left-radius: var(--theme-radius);
-}
-
-.is-link-orientation-bottom.is-link-style-block .link-control-item:nth-child(5) {
- border-bottom-right-radius: var(--theme-radius);
-}
-
-.is-link-orientation-top.is-link-style-list .link-control,
-.is-link-orientation-bottom.is-link-style-list .link-control {
- flex-wrap: nowrap;
-}
-
-.is-link-orientation-top.is-link-style-block .link-control {
- flex-wrap: wrap-reverse;
-}
-
-.is-link-orientation-bottom.is-link-style-block .link-control {
- flex-wrap: wrap;
-}
-
-@media (min-width: 900px) {
-
- .is-link-breakpoint-md.is-link-orientation-top.is-link-style-block .link-item-wide,
- .is-link-breakpoint-lg.is-link-orientation-top.is-link-style-block .link-item-wide,
- .is-link-breakpoint-xl.is-link-orientation-top.is-link-style-block .link-item-wide,
- .is-link-breakpoint-xxl.is-link-orientation-top.is-link-style-block .link-item-wide,
- .is-link-breakpoint-md.is-link-orientation-bottom.is-link-style-block .link-item-wide,
- .is-link-breakpoint-lg.is-link-orientation-bottom.is-link-style-block .link-item-wide,
- .is-link-breakpoint-xl.is-link-orientation-bottom.is-link-style-block .link-item-wide,
- .is-link-breakpoint-xxl.is-link-orientation-bottom.is-link-style-block .link-item-wide {
- --link-item-edit-height: var(--link-item-edit-height-short);
- }
-
- .is-link-breakpoint-md.is-link-orientation-top.is-link-style-block .link-item-wide .link-control,
- .is-link-breakpoint-lg.is-link-orientation-top.is-link-style-block .link-item-wide .link-control,
- .is-link-breakpoint-xl.is-link-orientation-top.is-link-style-block .link-item-wide .link-control,
- .is-link-breakpoint-xxl.is-link-orientation-top.is-link-style-block .link-item-wide .link-control,
- .is-link-breakpoint-md.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control,
- .is-link-breakpoint-lg.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control,
- .is-link-breakpoint-xl.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control,
- .is-link-breakpoint-xxl.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control {
- flex-wrap: nowrap;
- }
-
- .is-link-breakpoint-md.is-link-orientation-top.is-link-style-block .link-item-wide .link-control-item:nth-child(1),
- .is-link-breakpoint-lg.is-link-orientation-top.is-link-style-block .link-item-wide .link-control-item:nth-child(1),
- .is-link-breakpoint-xl.is-link-orientation-top.is-link-style-block .link-item-wide .link-control-item:nth-child(1),
- .is-link-breakpoint-xxl.is-link-orientation-top.is-link-style-block .link-item-wide .link-control-item:nth-child(1) {
- border-top-left-radius: var(--theme-radius);
- border-bottom-left-radius: 0;
- }
-
- .is-link-breakpoint-md.is-link-orientation-top.is-link-style-block .link-item-wide .link-control-item:nth-child(4),
- .is-link-breakpoint-lg.is-link-orientation-top.is-link-style-block .link-item-wide .link-control-item:nth-child(4),
- .is-link-breakpoint-xl.is-link-orientation-top.is-link-style-block .link-item-wide .link-control-item:nth-child(4),
- .is-link-breakpoint-xxl.is-link-orientation-top.is-link-style-block .link-item-wide .link-control-item:nth-child(4) {
- border-top-left-radius: 0;
- }
-
- .is-link-breakpoint-md.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control-item:nth-child(1),
- .is-link-breakpoint-lg.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control-item:nth-child(1),
- .is-link-breakpoint-xl.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control-item:nth-child(1),
- .is-link-breakpoint-xxl.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control-item:nth-child(1) {
- border-bottom-left-radius: var(--theme-radius);
- }
-
- .is-link-breakpoint-md.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control-item:nth-child(4),
- .is-link-breakpoint-lg.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control-item:nth-child(4),
- .is-link-breakpoint-xl.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control-item:nth-child(4),
- .is-link-breakpoint-xxl.is-link-orientation-bottom.is-link-style-block .link-item-wide .link-control-item:nth-child(4) {
- border-bottom-left-radius: 0;
- }
-}
-
-.link-url {
- height: var(--link-item-url-height);
- width: 100%;
- position: absolute;
- overflow: hidden;
- display: none;
- align-items: center;
- transition: top var(--layout-transition-extra-fast), bottom var(--layout-duration-04) var(--layout-timing-bounce);
-}
-
-.is-link-orientation-top .link-url {
- top: calc(-1 * var(--link-item-url-height));
-}
-
-.is-link-orientation-bottom .link-url {
- bottom: calc(-1 * var(--link-item-url-height));
-}
-
-.is-link-item-url-show .link-url {
- display: flex;
-}
-
-.link-item-alignment-topleft .link-url,
-.link-item-alignment-centerleft .link-url,
-.link-item-alignment-bottomleft .link-url {
- justify-content: flex-start;
-}
-
-.link-item-alignment-topcenter .link-url,
-.link-item-alignment-centercenter .link-url,
-.link-item-alignment-bottomcenter .link-url {
- justify-content: center;
-}
-
-.link-item-alignment-topright .link-url,
-.link-item-alignment-centerright .link-url,
-.link-item-alignment-bottomright .link-url {
- justify-content: flex-end;
-}
-
-.is-link-orientation-top.is-link-item-url-show:not(.is-edit) .link-item:focus-within .link-url,
-.is-link-orientation-top.is-link-item-url-show:not(.is-edit) .link-item:focus .link-url,
-.is-link-orientation-top.is-link-item-url-show:not(.is-edit) .link-item:hover .link-url {
- top: 0;
-}
-
-.is-link-orientation-bottom.is-link-item-url-show:not(.is-edit) .link-item:focus-within .link-url,
-.is-link-orientation-bottom.is-link-item-url-show:not(.is-edit) .link-item:focus .link-url,
-.is-link-orientation-bottom.is-link-item-url-show:not(.is-edit) .link-item:hover .link-url {
- bottom: 0;
-}
-
-.link-url-text {
- margin: 0 1em;
- font-size: 0.75em;
- font-family: var(--theme-font-ui-name);
- font-weight: var(--theme-font-ui-weight);
- font-style: var(--theme-font-ui-style);
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- color: hsl(var(--theme-accent-accessible-color));
-}
-
-.is-edit.is-link-item-url-show .link-item:focus .link-panel-front,
-.is-edit.is-link-item-url-show .link-item:focus-within .link-panel-front,
-.is-edit.is-link-item-url-show .link-item:hover .link-panel-front {
- height: calc(100% - var(--link-item-edit-height));
-}
-
-.is-edit .link-item:hover .link-url,
-.is-edit .link-item:focus .link-url {
- bottom: calc(-1 * var(--link-item-url-height));
-}
-
-/* link form */
-.link-form {
- margin-bottom: calc(var(--form-wrap-space) * 4);
-}
-
-.link-form-area {
- display: block;
-}
-
-@media (min-width: 900px) {
- .link-form-area {
- display: grid;
- grid-template-columns: 5fr 2fr;
- grid-gap: calc(var(--form-wrap-space) * 2);
- align-items: stretch;
- }
-}
-
-.link-form-text-icon {
- position: relative;
-}
-
-.link-form-text-icon:empty:before {
- content: "";
- background-color: rgb(var(--theme-color-04));
- top: 50%;
- left: 50%;
- position: absolute;
- width: 0.5em;
- height: 0.5em;
- border-radius: 50%;
- display: block;
- transform: translate(-50%, -50%);
-}
-
-.link-form-text-icon .link-form-icon {
- transform: scale(1) rotate(0deg);
- transition: transform var(--layout-transition-extra-fast);
-}
-
-.link-form-text-icon:not(.disabled):hover .link-form-icon {
- transform: scale(2) rotate(360deg);
- z-index: 1;
-}
-
-.link-form-text-icon:not(.disabled):active .link-form-icon {
- transform: scale(4) rotate(360deg);
-}
-
-.link-form-icon {
- font-size: 1.5em;
-}
-
-.link-form-collapse {
- margin-right: -1em;
- margin-bottom: -1em;
- margin-left: -1em;
- padding-right: 1em;
- padding-bottom: 1em;
- padding-left: 1em;
- height: 0;
- opacity: 0;
- overflow: hidden;
- transition: height var(--layout-transition-extra-slow), opacity var(--layout-transition-extra-slow);
-}
-
-.link-form-collapse.active {
- height: var(--link-form-collapse-height);
- opacity: 1;
-}
-
-.link-form-collapse-button [class^="icon-"],
-.link-form-collapse-button [class*=" icon-"] {
- transition: transform var(--layout-transition-extra-fast);
-}
-
-.link-form-collapse-button.active [class^="icon-"],
-.link-form-collapse-button.active [class*=" icon-"] {
- transform: rotate(-180deg);
-}
-
-.link-form-aside {
- display: none;
-}
-
-@media (min-width: 900px) {
- .link-form-aside {
- display: block;
- }
-}
-
-/* link form preview */
-.link-form-preview-area {
- position: sticky;
- top: 50%;
- transform: translateY(-50%);
-}
-
-.link-item-preview-grid {
- display: grid;
-}
-
-.link-item-preview-grid-large {
- display: grid;
- grid-template-rows: repeat(1, var(--link-item-height));
- grid-template-columns: repeat(1, minmax(var(--link-item-width), 1fr));
-}
-
-.link-item-preview-grid-small {
- font-size: 0.5em;
- grid-template-rows: repeat(2, var(--link-item-height));
- grid-template-columns: repeat(2, minmax(var(--link-item-width), 1fr));
-}
-
-.link-item-preview-grid-small .link-item-preview {
- left: 50%;
- top: 50%;
-}
-
-.link-item-preview-grid-small .link-item-preview.link-item-wide {
- left: 0;
- grid-column: span 2;
-}
-
-.link-item-preview-grid-small .link-item-preview.link-item-tall {
- top: 0;
- grid-row: span 2;
-}
-
-.is-link-item-shadow-show.is-link-orientation-bottom .link-item-preview .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom .link-item-preview:hover .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom .link-item-preview:focus .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top .link-item-preview .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top .link-item-preview:hover .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top .link-item-preview:focus .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom.is-edit .link-item-preview .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom.is-edit .link-item-preview:hover .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom.is-edit .link-item-preview:focus .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top.is-edit .link-item-preview .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top.is-edit .link-item-preview:hover .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top.is-edit .link-item-preview:focus .link-panel-front {
- box-shadow: none;
-}
-
-.is-link-item-shadow-show.is-link-orientation-bottom.is-edit .link-item-preview:focus .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom.is-edit .link-item-preview:focus-within .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom.is-edit .link-item-preview:hover .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom .link-item-preview:focus .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom .link-item-preview:focus-within .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-bottom .link-item-preview:hover .link-panel-front {
- box-shadow: var(--theme-shadow-bottom-large);
-}
-
-.is-link-item-shadow-show.is-link-orientation-top.is-edit .link-item-preview:focus .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top.is-edit .link-item-preview:focus-within .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top.is-edit .link-item-preview:hover .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top .link-item-preview:focus .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top .link-item-preview:focus-within .link-panel-front,
-.is-link-item-shadow-show.is-link-orientation-top .link-item-preview:hover .link-panel-front {
- box-shadow: var(--theme-shadow-top-large);
-}
-
-.is-theme-radius .link-item-preview .link-panel-front,
-.is-edit.is-theme-radius .link-item-preview .link-panel-front {
- border-radius: var(--theme-radius);
-}
-
-.is-theme-radius.is-edit.is-link-orientation-top .link-item-preview .link-panel-front,
-.is-theme-radius.is-edit.is-link-orientation-top .link-item-preview:hover .link-panel-front,
-.is-theme-radius.is-edit.is-link-orientation-top .link-item-preview:focus .link-panel-front {
- border-top-left-radius: var(--theme-radius);
- border-top-right-radius: var(--theme-radius);
-}
-
-.is-theme-radius.is-edit.is-link-orientation-bottom .link-item-preview .link-panel-front,
-.is-theme-radius.is-edit.is-link-orientation-bottom .link-item-preview:hover .link-panel-front,
-.is-theme-radius.is-edit.is-link-orientation-bottom .link-item-preview:focus .link-panel-front {
- border-bottom-left-radius: var(--theme-radius);
- border-bottom-right-radius: var(--theme-radius);
-}
-
-.is-edit .link-item-preview .link-display {
- font-size: 1em;
-}
-
-.link-item-preview:hover .link-display-letter,
-.link-item-preview:focus .link-display-letter,
-.link-item-preview:hover .link-display-icon,
-.link-item-preview:focus .link-display-icon {
- color: rgb(var(--theme-style-text));
-}
-
-.link-item-preview .link-panel-front:focus .link-display-letter,
-.link-item-preview .link-panel-front:focus .link-display-icon {
- color: rgb(var(--theme-style-text));
-}
-
-.link-item-preview:hover .link-display-name,
-.link-item-preview:focus .link-display-name {
- color: rgb(var(--theme-style-text));
-}
-
-.link-item-preview .link-panel-front:focus .link-display-name {
- color: rgb(var(--theme-style-text));
-}
-
-.is-theme-radius.is-link-item-url-show.is-link-orientation-top .link-item-preview:focus .link-panel-front,
-.is-theme-radius.is-link-item-url-show.is-link-orientation-top .link-item-preview:focus-within .link-panel-front,
-.is-theme-radius.is-link-item-url-show.is-link-orientation-top .link-item-preview:hover .link-panel-front {
- border-top-left-radius: calc(var(--theme-radius) / 4);
- border-top-right-radius: calc(var(--theme-radius) / 4);
-}
-
-.is-theme-radius.is-link-item-url-show.is-link-orientation-bottom .link-item-preview:focus .link-panel-front,
-.is-theme-radius.is-link-item-url-show.is-link-orientation-bottom .link-item-preview:focus-within .link-panel-front,
-.is-theme-radius.is-link-item-url-show.is-link-orientation-bottom .link-item-preview:hover .link-panel-front {
- border-bottom-left-radius: calc(var(--theme-radius) / 4);
- border-bottom-right-radius: calc(var(--theme-radius) / 4);
-}
-
-.link-item-preview .link-panel-front,
-.link-item-preview:hover .link-panel-front,
-.link-item-preview:focus .link-panel-front,
-.is-edit .link-item-preview .link-panel-front,
-.is-edit .link-item-preview:hover .link-panel-front,
-.is-edit .link-item-preview:focus .link-panel-front {
- height: 100%;
-}
-
-.is-link-item-line-show .link-item-preview .link-panel-front,
-.is-edit.is-link-item-line-show .link-item-preview .link-panel-front {
- height: calc(100% - var(--layout-line-width));
-}
-
-.is-link-item-line-show .link-item-preview:focus .link-panel-front,
-.is-link-item-line-show .link-item-preview:focus-within .link-panel-front,
-.is-link-item-line-show .link-item-preview:hover .link-panel-front,
-.is-edit.is-link-item-line-show .link-item-preview:focus .link-panel-front,
-.is-edit.is-link-item-line-show .link-item-preview:focus-within .link-panel-front,
-.is-edit.is-link-item-line-show .link-item-preview:hover .link-panel-front {
- height: calc(100% - var(--layout-line-width));
-}
-
-.is-link-item-url-show .link-item-preview:focus .link-panel-front,
-.is-link-item-url-show .link-item-preview:focus-within .link-panel-front,
-.is-link-item-url-show .link-item-preview:hover .link-panel-front,
-.is-edit.is-link-item-url-show .link-item-preview:focus .link-panel-front,
-.is-edit.is-link-item-url-show .link-item-preview:focus-within .link-panel-front,
-.is-edit.is-link-item-url-show .link-item-preview:hover .link-panel-front {
- height: calc(100% - var(--link-item-url-height));
-}
-
-.is-edit .link-item-preview .link-panel-back {
- height: 100%;
- top: 0;
-}
-
-.is-link-orientation-top .link-item-preview .link-panel-back {
- clip-path: polygon(0 0, 100% 0, 100% calc(0% + var(--link-item-clip-padding)), 0 calc(0% + var(--link-item-clip-padding)));
-}
-
-.is-link-orientation-bottom .link-item-preview .link-panel-back {
- clip-path: polygon(0 calc(100% - var(--link-item-clip-padding)), 100% calc(100% - var(--link-item-clip-padding)), 100% 100%, 0 100%);
-}
-
-.is-link-orientation-top.is-link-item-line-show .link-item-preview .link-panel-back {
- clip-path: polygon(0 0, 100% 0, 100% calc(var(--layout-line-width) + var(--link-item-clip-padding)), 0 calc(var(--layout-line-width) + var(--link-item-clip-padding)));
-}
-
-.is-link-orientation-bottom.is-link-item-line-show .link-item-preview .link-panel-back {
- clip-path: polygon(0 calc(100% - var(--layout-line-width) - var(--link-item-clip-padding)), 100% calc(100% - var(--layout-line-width) - var(--link-item-clip-padding)), 100% 100%, 0 100%);
-}
-
-.is-link-orientation-top .link-item-preview:focus .link-panel-back,
-.is-link-orientation-top .link-item-preview:focus-within .link-panel-back,
-.is-link-orientation-top .link-item-preview:hover .link-panel-back,
-.is-link-orientation-bottom .link-item-preview:focus .link-panel-back,
-.is-link-orientation-bottom .link-item-preview:focus-within .link-panel-back,
-.is-link-orientation-bottom .link-item-preview:hover .link-panel-back {
- top: 0;
- height: 100%;
-}
-
-.is-link-item-url-show.is-link-orientation-top .link-item-preview:focus .link-panel-back,
-.is-link-item-url-show.is-link-orientation-top .link-item-preview:focus-within .link-panel-back,
-.is-link-item-url-show.is-link-orientation-top .link-item-preview:hover .link-panel-back {
- clip-path: polygon(0 0, 100% 0, 100% calc(var(--link-item-url-height) + var(--link-item-clip-padding)), 0 calc(var(--link-item-url-height) + var(--link-item-clip-padding)));
-}
-
-.is-link-item-url-show.is-link-orientation-bottom .link-item-preview:focus .link-panel-back,
-.is-link-item-url-show.is-link-orientation-bottom .link-item-preview:focus-within .link-panel-back,
-.is-link-item-url-show.is-link-orientation-bottom .link-item-preview:hover .link-panel-back {
- clip-path: polygon(0 calc(100% - calc(var(--link-item-url-height) + var(--link-item-clip-padding))), 100% calc(100% - calc(var(--link-item-url-height) + var(--link-item-clip-padding))), 100% 100%, 0 100%);
-}
-
-.is-link-orientation-top.is-link-item-url-show .link-item-preview:focus-within .link-url,
-.is-link-orientation-top.is-link-item-url-show .link-item-preview:focus .link-url,
-.is-link-orientation-top.is-link-item-url-show .link-item-preview:hover .link-url {
- top: 0;
-}
-
-.is-link-orientation-bottom.is-link-item-url-show .link-item-preview:focus-within .link-url,
-.is-link-orientation-bottom.is-link-item-url-show .link-item-preview:focus .link-url,
-.is-link-orientation-bottom.is-link-item-url-show .link-item-preview:hover .link-url {
- bottom: 0;
-}
-
-.is-edit.is-link-orientation-top .link-item-preview .link-panel-back,
-.is-edit.is-link-orientation-top .link-item-preview:focus .link-panel-back,
-.is-edit.is-link-orientation-top .link-item-preview:focus-within .link-panel-back,
-.is-edit.is-link-orientation-top .link-item-preview:hover .link-panel-back {
- clip-path: polygon(0 0, 100% 0, 100% 0, 0 0);
-}
-
-.is-edit.is-link-orientation-bottom .link-item-preview .link-panel-back,
-.is-edit.is-link-orientation-bottom .link-item-preview:focus .link-panel-back,
-.is-edit.is-link-orientation-bottom .link-item-preview:focus-within .link-panel-back,
-.is-edit.is-link-orientation-bottom .link-item-preview:hover .link-panel-back {
- clip-path: polygon(0 100%, 100% 100%, 100% 100%, 0 100%);
-}
-
-.is-edit.is-link-item-line-show.is-link-orientation-top .link-item-preview .link-panel-back,
-.is-edit.is-link-item-line-show.is-link-orientation-top .link-item-preview:focus .link-panel-back,
-.is-edit.is-link-item-line-show.is-link-orientation-top .link-item-preview:focus-within .link-panel-back,
-.is-edit.is-link-item-line-show.is-link-orientation-top .link-item-preview:hover .link-panel-back {
- clip-path: polygon(0 0, 100% 0, 100% var(--layout-line-width), 0 var(--layout-line-width));
-}
-
-.is-edit.is-link-item-line-show.is-link-orientation-bottom .link-item-preview .link-panel-back,
-.is-edit.is-link-item-line-show.is-link-orientation-bottom .link-item-preview:focus .link-panel-back,
-.is-edit.is-link-item-line-show.is-link-orientation-bottom .link-item-preview:focus-within .link-panel-back,
-.is-edit.is-link-item-line-show.is-link-orientation-bottom .link-item-preview:hover .link-panel-back {
- clip-path: polygon(0 calc(100% - var(--layout-line-width) - var(--link-item-clip-padding)), 100% calc(100% - var(--layout-line-width) - var(--link-item-clip-padding)), 100% 100%, 0 100%);
-}
-
-.is-edit.is-link-item-url-show.is-link-orientation-top .link-item-preview:focus .link-panel-back,
-.is-edit.is-link-item-url-show.is-link-orientation-top .link-item-preview:focus-within .link-panel-back,
-.is-edit.is-link-item-url-show.is-link-orientation-top .link-item-preview:hover .link-panel-back {
- clip-path: polygon(0 0, 100% 0, 100% calc(var(--link-item-url-height) + var(--link-item-clip-padding)), 0 calc(var(--link-item-url-height) + var(--link-item-clip-padding)));
-}
-
-.is-edit.is-link-item-url-show.is-link-orientation-bottom .link-item-preview:focus .link-panel-back,
-.is-edit.is-link-item-url-show.is-link-orientation-bottom .link-item-preview:focus-within .link-panel-back,
-.is-edit.is-link-item-url-show.is-link-orientation-bottom .link-item-preview:hover .link-panel-back {
- clip-path: polygon(0 calc(100% - var(--link-item-url-height) - var(--link-item-clip-padding)), 100% calc(100% - var(--link-item-url-height) - var(--link-item-clip-padding)), 100% 100%, 0 100%);
-}
diff --git a/src/css/menu.css b/src/css/menu.css
deleted file mode 100755
index 76c8fd6d..00000000
--- a/src/css/menu.css
+++ /dev/null
@@ -1,308 +0,0 @@
-.menu {
- padding: 1em;
- position: fixed;
- top: 0;
- right: 0;
- width: 100vw;
- height: 90vh;
- transform: translateY(calc(-100% - 2em));
- user-select: none;
- z-index: var(--z-index-menu);
- pointer-events: none;
- transition: transform var(--layout-transition-extra-fast);
-}
-
-.menu:focus {
- outline: none;
-}
-
-.is-menu-open .menu {
- transform: translateY(0);
- user-select: auto;
-}
-
-.menu-area {
- background-color: rgb(var(--theme-color-01));
- border-radius: var(--theme-radius);
- width: 100%;
- max-height: 100%;
- display: grid;
- grid-template-rows: auto 1fr;
- grid-template-columns: 1fr calc(var(--menu-space) * 5);
- justify-items: stretch;
- align-items: stretch;
- overflow-y: auto;
- pointer-events: all;
- transition: background-color var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast);
-}
-
-.is-menu-open .menu-area {
- box-shadow: var(--theme-shadow-bottom-large);
-}
-
-.is-edge .menu-area {
- background-color: rgba(var(--theme-color-01), var(--menu-edge-opacity));
-}
-
-.menu-nav {
- display: flex;
- flex-direction: row;
- flex-wrap: wrap;
-}
-
-.menu-nav-item {
- flex-grow: 1;
- flex-basis: 33.33333333%;
-}
-
-.menu-nav-tab {
- background-color: transparent;
- margin: 0;
- padding-top: 0;
- padding-bottom: 0;
- border-radius: 0;
- height: calc(var(--menu-space) * 5);
- width: 100%;
- line-height: 1;
-}
-
-.menu-nav-tab:after {
- background-color: transparent;
- border-radius: 0;
-}
-
-.menu-close-tab {
- background-color: transparent;
- margin: 0;
- padding: 0;
- border-radius: 0;
- height: calc(var(--menu-space) * 5);
- width: calc(var(--menu-space) * 5);
- line-height: 1;
-}
-
-.menu-subnav {
- display: none;
-}
-
-.menu-nav-area-tab {
- display: flex;
- flex-direction: row;
- flex-wrap: wrap;
- align-items: flex-start;
- flex-grow: 1;
-}
-
-.menu-nav-area-close {
- display: flex;
- flex-direction: row;
- flex-wrap: wrap;
- align-items: flex-start;
-}
-
-.menu-list {
- display: none;
-}
-
-.menu-content {
- grid-column-start: 1;
- grid-column-end: 3;
-}
-
-.menu-content-item {
- padding: calc(var(--menu-space) * 3);
- position: relative;
- z-index: 1;
-}
-
-.menu-content-item:not(:last-child) {
- border-bottom: var(--horizontal-rule-large);
- transition: border-color var(--layout-transition-extra-fast);
-}
-
-.menu-item-header {
- margin-bottom: var(--menu-space);
-}
-
-.menu-item-header-text {
- margin-bottom: 0;
-}
-
-.menu-item-form {
- padding-left: calc(var(--menu-space) * 3);
- z-index: 1;
-}
-
-@media (min-width: 550px) {
- .menu {
- width: 90vw;
- }
-}
-
-@media (min-width: 700px) {
- .menu {
- width: 100%;
- height: 100%;
- max-height: initial;
- }
-
- .menu-area {
- max-height: 100%;
- grid-template-rows: 1fr;
- grid-template-columns: calc(var(--menu-space) * 20) 1fr calc(var(--menu-space) * 4);
- overflow: hidden;
- position: relative;
- }
-
- .menu-nav {
- background-color: rgb(var(--theme-color-02));
- grid-column-start: 1;
- grid-column-end: 2;
- grid-row-start: 1;
- grid-row-end: 2;
- flex-direction: column;
- align-items: stretch;
- flex-wrap: nowrap;
- overflow-y: auto;
- z-index: 1;
- transition: background-color var(--layout-transition-extra-fast);
- }
-
- .is-edge .menu-nav {
- background-color: transparent;
- }
-
- .menu-content {
- grid-column-start: 2;
- grid-column-end: 4;
- grid-row-start: 1;
- grid-row-end: 2;
- scroll-behavior: smooth;
- overflow-y: auto;
- z-index: 2;
- }
-
- .menu-close {
- grid-column-start: 3;
- grid-column-end: 4;
- grid-row-start: 1;
- grid-row-end: 2;
- align-self: start;
- position: absolute;
- z-index: 3;
- }
-
- .menu-content-item {
- padding: calc(var(--menu-space) * 2) calc(var(--menu-space) * 4);
- }
-
- .menu-content-overscroll .menu-content-item:last-child {
- padding-bottom: calc(var(--menu-space) * 50);
- }
-
- .menu-item-header {
- margin-bottom: calc(var(--menu-space) * 2);
- }
-
- .menu-nav-item {
- flex-grow: 0;
- flex-basis: auto;
- }
-
- .menu-nav-tab {
- padding-left: calc(calc(var(--menu-space) * 2) + calc(var(--theme-radius) / 3));
- padding-right: calc(var(--menu-space) * 2);
- height: calc(var(--menu-space) * 4);
- justify-content: flex-start;
- }
-
- .menu-subnav {
- background-color: rgb(var(--theme-color-03));
- display: flex;
- flex-direction: column;
- flex-wrap: nowrap;
- overflow: hidden;
- height: 0;
- transition: background-color var(--layout-transition-extra-fast), height var(--layout-transition-extra-fast);
- }
-
- .menu-subnav.active {
- height: var(--menu-subnav-height);
- }
-
- .is-edge .menu-subnav {
- background-color: transparent;
- }
-
- .menu-nav-sub {
- background-color: transparent;
- margin: 0;
- padding-top: 0;
- padding-bottom: 0;
- padding-left: calc(calc(var(--menu-space) * 4) + calc(var(--theme-radius) / 3));
- border-radius: 0;
- height: 3em;
- min-height: 3em;
- width: 100%;
- line-height: 1;
- justify-content: flex-start;
- }
-
- .menu-nav-sub:focus,
- .menu-nav-sub:hover {
- background-color: rgb(var(--theme-color-04));
- }
-
- .menu-nav-sub:active {
- background-color: rgb(var(--theme-color-05));
- }
-
- .menu-nav-sub:after,
- .menu-nav-sub:after {
- background-color: transparent;
- border-radius: 0;
- }
-
- .menu-close-tab {
- border-radius: var(--theme-radius);
- height: calc(var(--menu-space) * 4);
- width: calc(var(--menu-space) * 4);
- position: relative;
- top: calc(var(--theme-radius) / 6);
- right: calc(var(--theme-radius) / 6);
- }
-
- .menu-item-form {
- padding-left: calc(var(--menu-space) * 4);
- }
-}
-
-@media (min-width: 900px) {
- .menu {
- width: 90vw;
- }
-
- .menu-area {
- grid-template-columns: calc(var(--menu-space) * 20) 1fr calc(var(--menu-space) * 5);
- }
-
- .menu-content-item {
- padding: calc(var(--menu-space) * 3) calc(var(--menu-space) * 5);
- }
-
- .menu-close-tab {
- height: calc(var(--menu-space) * 5);
- width: calc(var(--menu-space) * 5);
- }
-
- .menu-item-form {
- padding-left: calc(var(--menu-space) * 5);
- }
-}
-
-@media (min-width: 1100px) {
- .menu {
- width: 80vw;
- max-width: 60em;
- }
-}
diff --git a/src/css/modal.css b/src/css/modal.css
deleted file mode 100755
index 50b4ada6..00000000
--- a/src/css/modal.css
+++ /dev/null
@@ -1,74 +0,0 @@
-.modal {
- position: fixed;
- top: 50%;
- left: 50%;
- font-size: 1em;
- width: var(--modal-size);
- max-width: calc(100% - 2em);
- min-width: 10em;
- transform: translate(-50%, -50%);
- opacity: 0;
- perspective: 1000px;
- transition: opacity var(--layout-transition-extra-fast);
- z-index: var(--z-index-modal);
-}
-
-.modal-wrapper {
- background-color: rgb(var(--theme-color-01));
- border-radius: var(--theme-radius);
- box-shadow: var(--theme-shadow-bottom-large);
- position: relative;
- max-height: calc(100vh - 2em);
- overflow-y: auto;
- display: grid;
- grid-template-columns: 1fr;
- grid-template-rows: 1fr auto;
- justify-items: stretch;
- align-items: stretch;
- transition: background-color var(--layout-transition-extra-fast), opacity var(--layout-transition-extra-fast);
-}
-
-.modal-wrapper .container {
- max-width: 100%;
-}
-
-.modal-body {
- border-radius: var(--theme-radius) var(--theme-radius) 0 0;
- overflow-y: auto;
- box-sizing: border-box;
- z-index: 1;
- position: relative;
-}
-
-.modal-body-spacer {
- margin: calc(var(--form-wrap-space) * 2) calc(var(--form-wrap-space) * 2.5);
-}
-
-.modal-heading:focus {
- outline: none;
-}
-
-.modal-controls {
- background-color: rgb(var(--theme-color-01));
- border-radius: 0 0 var(--theme-radius) var(--theme-radius);
- position: relative;
- z-index: 2;
- display: flex;
- transition: background-color var(--layout-transition-extra-fast);
-}
-
-.modal-button {
- background-color: transparent;
- margin: 0;
- padding-top: 1.5em;
- padding-bottom: 1.5em;
- flex-basis: 50%;
-}
-
-.modal-controls .modal-button:first-child {
- border-radius: 0 0 0 var(--theme-radius);
-}
-
-.modal-controls .modal-button:last-child {
- border-radius: 0 0 var(--theme-radius) 0
-}
diff --git a/src/css/search.css b/src/css/search.css
deleted file mode 100755
index 8a3452f1..00000000
--- a/src/css/search.css
+++ /dev/null
@@ -1,44 +0,0 @@
-.search-wrapper {
- flex-grow: 1;
- position: relative;
-}
-
-.search-input {
- width: 100%;
-}
-
-.search-input[type="search"] {
- background-color: rgba(var(--form-input-background), var(--header-search-opacity));
-}
-
-.search-input[type="search"]:hover {
- background-color: rgba(var(--form-input-background-hover), var(--header-search-opacity));
-}
-
-.search-input[type="search"]:focus,
-.search-input[type="search"]:active {
- background-color: rgba(var(--form-input-background-focus-active), var(--header-search-opacity));
-}
-
-.search-clear {
- position: absolute;
- top: 50%;
- right: 0;
- transform: translate(0, -50%);
-}
-
-.is-header-search-text-justify-left .search-input {
- text-align: left;
-}
-
-.is-header-search-text-justify-center .search-input {
- text-align: center;
-}
-
-.is-header-search-text-justify-right .search-input {
- text-align: right;
-}
-
-.is-header-searching .search-input[type="search"] {
- padding-right: 3.5em;
-}
diff --git a/src/css/shade.css b/src/css/shade.css
deleted file mode 100755
index 7ab977b4..00000000
--- a/src/css/shade.css
+++ /dev/null
@@ -1,19 +0,0 @@
-.shade {
- background-color: rgba(var(--theme-accent), var(--theme-shade-opacity));
- position: fixed;
- top: -1em;
- left: -1em;
- width: calc(100% + 2em);
- height: calc(100% + 2em);
- opacity: 0;
- transition: opacity var(--layout-transition-extra-fast), background-color var(--layout-transition-extra-fast);
- z-index: var(--z-index-shade);
-}
-
-.is-theme-accent-cycle .shade {
- transition: opacity var(--layout-transition-extra-fast);
-}
-
-.is-edge:not(.is-background-visual-show) .shade {
- background-color: rgba(var(--theme-accent), 0.05);
-}
diff --git a/src/css/theme.css b/src/css/theme.css
deleted file mode 100644
index 169ba00d..00000000
--- a/src/css/theme.css
+++ /dev/null
@@ -1,421 +0,0 @@
-.theme-preset-item,
-.theme-custom-item {
- position: relative;
-}
-
-.theme-preset-tile,
-.theme-custom-tile {
- position: relative;
- width: var(--theme-preview-size);
- height: var(--theme-preview-size);
-}
-
-.theme-preset-button,
-.theme-custom-button {
- padding: 0;
- border-radius: var(--theme-radius);
- width: 100%;
- height: 100%;
- line-height: 1.6;
- position: absolute;
- top: 0;
- left: 0;
- display: block;
- z-index: 2;
- transition: height var(--layout-transition-extra-fast), box-shadow var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast);
-}
-
-.is-theme-custom-edit .theme-custom-button {
- border-radius: var(--theme-radius) var(--theme-radius) 0 0;
- height: calc(100% - var(--theme-custom-edit-height));
- box-shadow: var(--theme-shadow-bottom-medium);
-}
-
-.is-theme-custom-edit .theme-custom-button:hover {
- box-shadow: var(--form-ring-hover);
-}
-
-.is-theme-custom-edit .theme-custom-button:focus,
-.is-theme-custom-edit .theme-custom-button:active {
- box-shadow: var(--form-ring-accent);
-}
-
-.theme-custom-control-wrap {
- background-color: rgb(var(--button-background));
- border-radius: var(--theme-radius);
- width: 100%;
- height: 100%;
- position: absolute;
- bottom: 0;
- overflow: hidden;
- z-index: 1;
- transition: background-color var(--layout-transition-extra-fast), border-radius var(--layout-transition-extra-fast);
-}
-
-.theme-custom-control {
- width: 100%;
- position: absolute;
- bottom: calc(-1 * var(--theme-custom-edit-height));
- display: flex;
- align-items: flex-end;
- transition: bottom var(--layout-transition-extra-fast);
-}
-
-.is-theme-custom-edit .theme-custom-control {
- bottom: 0;
- transition: bottom var(--layout-duration-04) var(--layout-timing-bounce) var(--layout-duration-01);
-}
-
-.theme-custom-control .theme-custom-control-item {
- border-radius: 0;
- padding: 0;
- flex-grow: 1;
-}
-
-.theme-custom-control-item .button-icon {
- font-size: 1em;
- position: relative;
- transition: bottom var(--layout-transition-extra-fast), left var(--layout-transition-extra-fast), right var(--layout-transition-extra-fast);
-}
-
-.theme-custom-control-item:first-child .button-icon {
- bottom: calc(var(--theme-radius) / 16);
- left: calc(var(--theme-radius) / 8);
-}
-
-.theme-custom-control-item:last-child .button-icon {
- bottom: calc(var(--theme-radius) / 16);
- right: calc(var(--theme-radius) / 8);
-}
-
-.theme-preset-preview,
-.theme-custom-preview {
- border-radius: var(--theme-radius);
- width: 100%;
- height: 100%;
- position: absolute;
- top: 0;
- left: 0;
- overflow: hidden;
- transition: border-radius var(--layout-transition-extra-fast);
-}
-
-.is-theme-custom-edit .theme-custom-preview {
- border-radius: var(--theme-radius) var(--theme-radius) 0 0;
-}
-
-.theme-preset-background-01,
-.theme-preset-background-02,
-.theme-preset-background-03,
-.theme-preset-background-04,
-.theme-preset-accent,
-.theme-custom-background-01,
-.theme-custom-background-02,
-.theme-custom-background-03,
-.theme-custom-background-04,
-.theme-custom-accent {
- width: var(--theme-preview-size);
- height: var(--theme-preview-size);
- position: absolute;
- top: 0;
- left: 0;
- display: block;
- transition: clip-path var(--layout-transition-extra-fast);
-}
-
-.theme-preset-background-01,
-.theme-custom-background-01 {
- z-index: 1;
-}
-
-.theme-preset-background-01 {
- background-color: rgb(var(--theme-preset-background-01));
-}
-
-.theme-custom-background-01 {
- background-color: rgb(var(--theme-custom-background-01));
-}
-
-.theme-preset-background-02,
-.theme-custom-background-02 {
- z-index: 2;
- clip-path: polygon(70% 0%, 100% 0%, 100% 100%, 0% 100%, 0% 70%);
- transition-delay: var(--layout-duration-03);
-}
-
-.theme-preset-background-02 {
- background-color: rgb(var(--theme-preset-background-02));
-}
-
-.theme-custom-background-02 {
- background-color: rgb(var(--theme-custom-background-02));
-}
-
-.theme-preset-background-03,
-.theme-custom-background-03 {
- z-index: 3;
- clip-path: polygon(100% 0%, 100% 0%, 100% 100%, 0% 100%, 0% 100%);
- transition-delay: var(--layout-duration-02);
-}
-
-.theme-preset-background-03 {
- background-color: rgb(var(--theme-preset-background-03));
-}
-
-.theme-custom-background-03 {
- background-color: rgb(var(--theme-custom-background-03));
-}
-
-.theme-preset-background-04,
-.theme-custom-background-04 {
- z-index: 4;
- clip-path: polygon(100% 30%, 100% 100%, 30% 100%);
- transition-delay: var(--layout-duration-01);
-}
-
-.theme-preset-background-04 {
- background-color: rgb(var(--theme-preset-background-04));
-}
-
-.theme-custom-background-04 {
- background-color: rgb(var(--theme-custom-background-04));
-}
-
-.theme-preset-accent,
-.theme-custom-accent {
- z-index: 5;
- clip-path: circle(30% at calc(100% - calc(var(--theme-radius) / 12)) calc(100% - calc(var(--theme-radius) / 12)));
-}
-
-.theme-preset-accent {
- background-color: rgb(var(--theme-preset-accent));
-}
-
-.theme-custom-accent {
- background-color: rgb(var(--theme-custom-accent));
-}
-
-.is-theme-custom-edit .theme-custom-accent {
- clip-path: circle(30% at calc(100% - calc(var(--theme-radius) / 12)) calc(60% - calc(var(--theme-radius) / 12)));
-}
-
-.theme-preset-name,
-.theme-custom-name {
- color: rgb(var(--theme-style-text));
- font-style: normal;
- font-size: 0.75em;
- text-align: left;
- display: block;
- max-width: calc(100% - 1.5em - calc(var(--theme-radius) / 3));
- max-height: calc(100% - 1.5em - calc(var(--theme-radius) / 3));
- position: absolute;
- top: calc(0.75em + calc(var(--theme-radius) / 6));
- left: calc(0.75em + calc(var(--theme-radius) / 6));
- z-index: 6;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: initial;
- transform: scale(1);
- transition: color var(--layout-transition-extra-fast), transform var(--layout-transition-extra-fast), max-width var(--layout-transition-extra-fast), max-height var(--layout-transition-extra-fast), top var(--layout-transition-extra-fast), left var(--layout-transition-extra-fast);
-}
-
-.theme-preset-button:focus .theme-preset-background-02,
-.theme-preset-button:hover .theme-preset-background-02,
-.theme-custom-button:focus .theme-custom-background-02,
-.theme-custom-button:hover .theme-custom-background-02 {
- clip-path: polygon(60% 0%, 100% 0%, 100% 100%, 0% 100%, 0% 60%);
-}
-
-.theme-preset-button:focus .theme-preset-background-03,
-.theme-preset-button:hover .theme-preset-background-03,
-.theme-custom-button:focus .theme-custom-background-03,
-.theme-custom-button:hover .theme-custom-background-03 {
- clip-path: polygon(90% 0%, 100% 0%, 100% 100%, 0% 100%, 0% 90%);
-}
-
-.theme-preset-button:focus .theme-preset-background-04,
-.theme-preset-button:hover .theme-preset-background-04,
-.theme-custom-button:focus .theme-custom-background-04,
-.theme-custom-button:hover .theme-custom-background-04 {
- clip-path: polygon(100% 20%, 100% 100%, 20% 100%);
-}
-
-.theme-preset-button:focus .theme-preset-accent,
-.theme-preset-button:hover .theme-preset-accent,
-.theme-custom-button:focus .theme-custom-accent,
-.theme-custom-button:hover .theme-custom-accent {
- clip-path: circle(40% at calc(100% - calc(var(--theme-radius) / 12)) calc(100% - calc(var(--theme-radius) / 12)));
-}
-
-.is-theme-custom-edit .theme-custom-button:focus .theme-custom-accent,
-.is-theme-custom-edit .theme-custom-button:hover .theme-custom-accent {
- clip-path: circle(40% at calc(100% - calc(var(--theme-radius) / 12)) calc(60% - calc(var(--theme-radius) / 12)));
-}
-
-.theme-color-box {
- width: 100%;
- height: 100%;
-}
-
-.theme-color-negative-10 {
- background-color: rgb(var(--theme-color-01));
-}
-
-.theme-color-negative-09 {
- background-color: rgb(var(--theme-color-02));
-}
-
-.theme-color-negative-08 {
- background-color: rgb(var(--theme-color-03));
-}
-
-.theme-color-negative-07 {
- background-color: rgb(var(--theme-color-04));
-}
-
-.theme-color-negative-06 {
- background-color: rgb(var(--theme-color-05));
-}
-
-.theme-color-negative-05 {
- background-color: rgb(var(--theme-color-06));
-}
-
-.theme-color-negative-04 {
- background-color: rgb(var(--theme-color-07));
-}
-
-.theme-color-negative-03 {
- background-color: rgb(var(--theme-color-08));
-}
-
-.theme-color-negative-02 {
- background-color: rgb(var(--theme-color-09));
-}
-
-.theme-color-negative-01 {
- background-color: rgb(var(--theme-color-10));
-}
-
-.theme-color {
- background-color: rgb(var(--theme-color));
-}
-
-.theme-color-positive-01 {
- background-color: rgb(var(--theme-color-11));
-}
-
-.theme-color-positive-02 {
- background-color: rgb(var(--theme-color-12));
-}
-
-.theme-color-positive-03 {
- background-color: rgb(var(--theme-color-13));
-}
-
-.theme-color-positive-04 {
- background-color: rgb(var(--theme-color-14));
-}
-
-.theme-color-positive-05 {
- background-color: rgb(var(--theme-color-15));
-}
-
-.theme-color-positive-06 {
- background-color: rgb(var(--theme-color-16));
-}
-
-.theme-color-positive-07 {
- background-color: rgb(var(--theme-color-17));
-}
-
-.theme-color-positive-08 {
- background-color: rgb(var(--theme-color-18));
-}
-
-.theme-color-positive-09 {
- background-color: rgb(var(--theme-color-19));
-}
-
-.theme-color-positive-10 {
- background-color: rgb(var(--theme-color-20));
-}
-
-.theme-accent-preset {
- display: grid;
- grid-gap: calc(var(--form-wrap-space) / 2);
- grid-template-rows: repeat(7, auto);
- grid-auto-flow: column;
- justify-items: center;
-}
-
-.theme-accent-preset-item {
- background-color: hsl(var(--theme-accent-preset-item-color-h), calc(var(--theme-accent-preset-item-color-s) * 1%), calc(var(--theme-accent-preset-item-color-l) * 1%));
- padding: 0;
- width: 1.5em;
- height: 1.5em;
- min-width: initial;
- min-height: initial;
-}
-
-.theme-accent-preset-type-grey {
- display: block;
-}
-
-.theme-accent-preset-type-primary {
- display: block;
-}
-
-.theme-accent-preset-type-secondary {
- display: none;
-}
-
-.theme-accent-preset-item:focus,
-.theme-accent-preset-item:hover,
-.theme-accent-preset-item:active {
- background-color: hsl(var(--theme-accent-preset-item-color-h), calc(var(--theme-accent-preset-item-color-s) * 1%), calc(var(--theme-accent-preset-item-color-l) * 1%));
-}
-
-@media (min-width: 550px) {
- .theme-accent-preset-item {
- width: 1.25em;
- height: 1.25em;
- }
-
- .theme-accent-preset-type-secondary {
- display: block;
- }
-}
-
-@media (min-width: 700px) {
- .theme-accent-preset-item {
- width: 1.5em;
- height: 1.5em;
- }
-
- .theme-accent-preset-type-secondary {
- display: none;
- }
-}
-
-@media (min-width: 900px) {
- .theme-accent-preset-item {
- width: 1.25em;
- height: 1.25em;
- }
-
- .theme-accent-preset-type-secondary {
- display: block;
- }
-}
-
-@media (min-width: 1100px) {
- .theme-accent-preset-item {
- width: 1.5em;
- height: 1.5em;
- }
-
- .theme-accent-preset-type-secondary {
- display: block;
- }
-}
diff --git a/src/css/tip.css b/src/css/tip.css
deleted file mode 100755
index af8fb8b2..00000000
--- a/src/css/tip.css
+++ /dev/null
@@ -1,73 +0,0 @@
-.tip {
- position: absolute;
- max-width: 20em;
- margin: 1em 1em;
- left: 0;
- top: 0;
- opacity: 1;
- z-index: var(--z-index-tip);
- transition: opacity var(--layout-transition-extra-fast);
- transform-origin: bottom center;
- pointer-events: none;
-}
-
-@keyframes grow {
- 0% {
- transform: translate(0, 0.2em) scale(0.95);
- clip-path: circle(0 at 50% 100%);
- }
-
- 100% {
- transform: translate(0, 0) scale(1);
- clip-path: circle(100% at 50% 100%);
- }
-}
-
-@keyframes shirnk {
- 0% {
- transform: translate(0, 0) scale(1);
- clip-path: circle(100% at 50% 100%);
- }
-
- 100% {
- transform: translate(0, 0.2em) scale(0.95);
- clip-path: circle(0 at 50% 100%);
- }
-}
-
-.tip-intro {
- animation: grow var(--layout-transition-medium) 1;
-}
-
-.tip-outro {
- animation: shirnk var(--layout-transition-medium) 1;
-}
-
-.tip-message {
- padding: 0.5em 1em;
- background-color: rgb(var(--theme-color-04));
- border: 0;
- border-radius: calc(var(--theme-radius) * 2);
- color: rgb(var(--theme-color-18));
- font-size: 0.8em;
- font-family: var(--theme-font-ui-name);
- font-weight: var(--theme-font-ui-weight);
- font-style: var(--theme-font-ui-style);
- text-align: center;
- position: relative;
- display: block;
- z-index: 1;
-}
-
-.tip-arrow {
- border: 0.5em solid transparent;
- border-top-color: rgb(var(--theme-color-04));
- position: absolute;
- width: 0;
- height: 0;
- top: 100%;
- left: 50%;
- display: block;
- z-index: 2;
- transform: translate(-50%, 0);
-}
diff --git a/src/css/variables.css b/src/css/variables.css
deleted file mode 100644
index 9023a421..00000000
--- a/src/css/variables.css
+++ /dev/null
@@ -1,435 +0,0 @@
-:root {
- /* theme */
- --theme-root-font-size: 14px;
- --theme-accent-r: 25;
- --theme-accent-g: 25;
- --theme-accent-b: 25;
- --theme-accent: var(--theme-accent-r), var(--theme-accent-g), var(--theme-accent-b);
- --theme-accent-accessible-threshold: 0.5;
- --theme-accent-accessible-r: calc(var(--theme-accent-r) * 0.50);
- --theme-accent-accessible-g: calc(var(--theme-accent-g) * 0.60);
- --theme-accent-accessible-b: calc(var(--theme-accent-b) * 0.20);
- --theme-accent-accessible-sum: calc(var(--theme-accent-accessible-r) + var(--theme-accent-accessible-g) + var(--theme-accent-accessible-b));
- --theme-accent-accessible-perceived-lightness: calc(var(--theme-accent-accessible-sum) / 255);
- --theme-accent-accessible-color: 0, calc(0 * 1%), calc((var(--theme-accent-accessible-perceived-lightness) - var(--theme-accent-accessible-threshold)) * -10000000%);
- --theme-radius: 0.2rem;
- --theme-font-display-name: "Fjalla One", sans-serif;
- --theme-font-display-weight: 400;
- --theme-font-display-style: "normal";
- --theme-font-ui-name: "Open Sans", sans-serif;
- --theme-font-ui-weight: 400;
- --theme-font-ui-style: "normal";
- --theme-black: 0, 0, 0;
- --theme-white: 255, 255, 255;
- --theme-shade-negative-10: 25, 25, 25;
- --theme-shade-negative-09: 25, 25, 25;
- --theme-shade-negative-08: 25, 25, 25;
- --theme-shade-negative-07: 25, 25, 25;
- --theme-shade-negative-06: 25, 25, 25;
- --theme-shade-negative-05: 25, 25, 25;
- --theme-shade-negative-04: 25, 25, 25;
- --theme-shade-negative-03: 25, 25, 25;
- --theme-shade-negative-02: 25, 25, 25;
- --theme-shade-negative-01: 25, 25, 25;
- --theme-shade: 25, 25, 25;
- --theme-shade-positive-01: 25, 25, 25;
- --theme-shade-positive-02: 25, 25, 25;
- --theme-shade-positive-03: 25, 25, 25;
- --theme-shade-positive-04: 25, 25, 25;
- --theme-shade-positive-05: 25, 25, 25;
- --theme-shade-positive-06: 25, 25, 25;
- --theme-shade-positive-07: 25, 25, 25;
- --theme-shade-positive-08: 25, 25, 25;
- --theme-shade-positive-09: 25, 25, 25;
- --theme-shade-positive-10: 25, 25, 25;
- --theme-preview-size: 6em;
- --theme-custom-edit-height: 2.5em;
- --theme-shadow: 1;
- --theme-shadow-offset-y: 0.02em;
- --theme-shadow-blur: 0.02em;
- --theme-shadow-opacity: 0.02;
- --theme-shadow-size-small: calc(var(--theme-shadow) * 1);
- --theme-shadow-size-medium: calc(var(--theme-shadow) * 2);
- --theme-shadow-size-large: calc(var(--theme-shadow) * 3);
- --theme-shadow-bottom-small:
- 0 calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-offset-y) * 2)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 1))),
- 0 calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-offset-y) * 4)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 2))),
- 0 calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-offset-y) * 8)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 3))),
- 0 calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-offset-y) * 16)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 4)));
- --theme-shadow-bottom-medium:
- 0 calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-offset-y) * 2)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 1))),
- 0 calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-offset-y) * 4)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 2))),
- 0 calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-offset-y) * 8)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 3))),
- 0 calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-offset-y) * 16)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 4)));
- --theme-shadow-bottom-large:
- 0 calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-offset-y) * 2)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 1))),
- 0 calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-offset-y) * 4)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 2))),
- 0 calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-offset-y) * 8)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 3))),
- 0 calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-offset-y) * 16)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 4)));
- --theme-shadow-top-small:
- 0 calc(var(--theme-shadow-size-small) * calc(calc(var(--theme-shadow-offset-y) * -1) * 2)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 1))),
- 0 calc(var(--theme-shadow-size-small) * calc(calc(var(--theme-shadow-offset-y) * -1) * 4)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 2))),
- 0 calc(var(--theme-shadow-size-small) * calc(calc(var(--theme-shadow-offset-y) * -1) * 8)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 3))),
- 0 calc(var(--theme-shadow-size-small) * calc(calc(var(--theme-shadow-offset-y) * -1) * 16)) calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-small) * calc(var(--theme-shadow-opacity) * 4)));
- --theme-shadow-top-medium:
- 0 calc(var(--theme-shadow-size-medium) * calc(calc(var(--theme-shadow-offset-y) * -1) * 2)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 1))),
- 0 calc(var(--theme-shadow-size-medium) * calc(calc(var(--theme-shadow-offset-y) * -1) * 4)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 2))),
- 0 calc(var(--theme-shadow-size-medium) * calc(calc(var(--theme-shadow-offset-y) * -1) * 8)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 3))),
- 0 calc(var(--theme-shadow-size-medium) * calc(calc(var(--theme-shadow-offset-y) * -1) * 16)) calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-medium) * calc(var(--theme-shadow-opacity) * 4)));
- --theme-shadow-top-large:
- 0 calc(var(--theme-shadow-size-large) * calc(calc(var(--theme-shadow-offset-y) * -1) * 2)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 1))),
- 0 calc(var(--theme-shadow-size-large) * calc(calc(var(--theme-shadow-offset-y) * -1) * 4)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 8)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 2))),
- 0 calc(var(--theme-shadow-size-large) * calc(calc(var(--theme-shadow-offset-y) * -1) * 8)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 16)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 3))),
- 0 calc(var(--theme-shadow-size-large) * calc(calc(var(--theme-shadow-offset-y) * -1) * 16)) calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-blur) * 32)) rgba(0, 0, 0, calc(var(--theme-shadow-size-large) * calc(var(--theme-shadow-opacity) * 4)));
- --theme-shade-opacity: 0.4;
- /* header */
- --header-area-width: 100%;
- --header-color-theme: var(--theme-color-01);
- --header-color-custom: rgb(0, 0, 0);
- --header-opacity: 0.95;
- --header-border-top: 0;
- --header-border-bottom: 0;
- --header-date-size: 1em;
- --header-clock-size: 1em;
- --header-search-size: 1em;
- --header-search-width-size: 30%;
- --header-search-opacity: 1;
- --header-editadd-size: 1em;
- --header-editadd-opacity: 1;
- --header-coloraccent-size: 1em;
- --header-coloraccent-opacity: 1;
- --header-menu-size: 1em;
- --header-menu-opacity: 1;
- --header-greeting-size: 1em;
- --header-transitional-size: 1em;
- /* group */
- --group-name-size: 1em;
- --group-openall-size: 1em;
- --group-openall-opacity: 1;
- --group-border: 0;
- /* link */
- --link-area-width: 100%;
- --link-item-color: var(--theme-color-02);
- --link-item-color-opacity: 1;
- --link-item-color-focus-hover: var(--theme-color-03);
- --link-item-visual-element-color: var(--theme-accent);
- --link-item-visual-element-color-focus-hover: var(--theme-style-text);
- --link-item-name-color: var(--theme-color-14);
- --link-item-name-color-focus-hover: var(--theme-style-text);
- --link-item-background-opacity: 1;
- --link-item-size: 1em;
- --link-item-display-space: 0.25em;
- --link-item-border: 0;
- --link-item-padding: 1;
- --link-item-clip-padding: 1em;
- --link-item-display-visual-shadow-size: 1;
- --link-item-display-visual-shadow-offset: 0.02em;
- --link-item-display-visual-shadow-blur: 0.02em;
- --link-item-display-visual-shadow-opacity: 0.01;
- --link-item-display-visual-shadow:
- 0 calc(var(--link-item-display-visual-shadow-size) * calc(var(--link-item-display-visual-shadow-offset) * 1)) calc(var(--link-item-display-visual-shadow-size) * calc(var(--link-item-display-visual-shadow-blur) * 2)) rgba(0, 0, 0, calc(var(--link-item-display-visual-shadow-size) * calc(var(--link-item-display-visual-shadow-opacity) * 1))),
- 0 calc(var(--link-item-display-visual-shadow-size) * calc(var(--link-item-display-visual-shadow-offset) * 2)) calc(var(--link-item-display-visual-shadow-size) * calc(var(--link-item-display-visual-shadow-blur) * 4)) rgba(0, 0, 0, calc(var(--link-item-display-visual-shadow-size) * calc(var(--link-item-display-visual-shadow-opacity) * 2))),
- 0 calc(var(--link-item-display-visual-shadow-size) * calc(var(--link-item-display-visual-shadow-offset) * 4)) calc(var(--link-item-display-visual-shadow-size) * calc(var(--link-item-display-visual-shadow-blur) * 6)) rgba(0, 0, 0, calc(var(--link-item-display-visual-shadow-size) * calc(var(--link-item-display-visual-shadow-opacity) * 3)));
-
- /* layout */
- --layout-size: 1;
- --layout-width: 80%;
- --layout-line-width: 0.2em;
- --layout-space: 0.5em;
- --layout-padding: 4;
- --layout-gutter: 4;
- --layout-duration-01: 0.1s;
- --layout-duration-02: 0.2s;
- --layout-duration-03: 0.3s;
- --layout-duration-04: 0.4s;
- --layout-duration-05: 0.5s;
- --layout-duration-06: 0.6s;
- --layout-duration-07: 0.7s;
- --layout-duration-08: 0.8s;
- --layout-duration-09: 0.9s;
- --layout-duration-10: 1s;
- --layout-timing-ease: ease-in-out;
- --layout-timing-bounce: cubic-bezier(0.8, 0.8, 0.4, 1.4);
- --layout-transition-extra-fast: var(--layout-duration-02) var(--layout-timing-ease);
- --layout-transition-fast: var(--layout-duration-04) var(--layout-timing-ease);
- --layout-transition-medium: var(--layout-duration-06) var(--layout-timing-ease);
- --layout-transition-slow: var(--layout-duration-08) var(--layout-timing-ease);
- --layout-transition-extra-slow: var(--layout-duration-10) var(--layout-timing-ease);
- --horizontal-rule-small: 1px solid rgb(var(--theme-color-02));
- --horizontal-rule-large: 2px solid rgb(var(--theme-color-02));
- /* background */
- --background-color-theme: var(--theme-color-01);
- --background-color-custom: rgb(0, 0, 0);
- --background-visual-image: none;
- --background-visual-opacity: 1;
- --background-visual-scale: 1;
- --background-visual-accent: 0;
- --background-visual-blur: 0;
- --background-visual-vignette-opacity: 0%;
- --background-visual-vignette-start: 90%;
- --background-visual-vignette-end: 70%;
- /* form */
- --form-label: var(--theme-color-16);
- --form-label-hover: var(--theme-color-20);
- --form-label-focus-active: var(--theme-style-text);
- --form-label-checked: var(--theme-style-text);
- --form-label-disabled: var(--theme-color-04);
- --form-input-text: var(--theme-color-16);
- --form-input-text-hover: var(--theme-color-18);
- --form-input-text-focus-active: var(--theme-style-text);
- --form-input-text-disabled: var(--theme-color-04);
- --form-input-background: var(--theme-color-02);
- --form-input-background-hover: var(--theme-color-02);
- --form-input-background-focus-active: var(--theme-color-01);
- --form-input-background-disabled: var(--theme-color-01);
- --form-group-text-background: var(--theme-color-02);
- --form-group-text-background-focus-hover: var(--theme-color-02);
- --form-group-text-background-active: var(--theme-color-02);
- --form-group-text-background-disabled: var(--theme-color-01);
- --form-group-text-border: var(--theme-color-02);
- --form-group-text-border-focus-hover: var(--theme-color-02);
- --form-group-text-border-active: var(--theme-color-02);
- --form-group-text-border-disabled: var(--theme-color-01);
- --form-border-disabled: var(--theme-color-02);
- --form-icon: var(--theme-color-08);
- --form-icon-hover: var(--theme-color-16);
- --form-icon-focus: var(--theme-color-18);
- --form-icon-active: var(--theme-style-text);
- --form-icon-checked: var(--theme-style-text);
- --form-icon-disabled: var(--theme-color-04);
- --form-icon-symbol: var(--theme-color-01);
- --form-icon-symbol-active: var(--theme-color-01);
- --form-icon-symbol-disabled: var(--theme-color-01);
- --form-placeholder: var(--theme-color-06);
- --form-placeholder-focus-hover: var(--theme-color-10);
- --form-placeholder-disabled: var(--theme-color-03);
- --form-checkbox-radio-label: var(--theme-color-12);
- --form-checkbox-radio-checked-label: var(--theme-color-16);
- --form-checkbox-radio-disabled-label: var(--theme-color-04);
- --form-feedback-text: var(--theme-color-16);
- --form-feedback-text-muted: var(--theme-color-12);
- --form-feedback-text-disabled: var(--theme-color-04);
- --form-feedback-background: var(--theme-color-02);
- --form-feedback-background-disabled: var(--theme-color-01);
- --form-feedback-border: var(--theme-color-04);
- --form-feedback-border-disabled: var(--theme-color-02);
- --form-helper: var(--theme-color-12);
- --form-helper-disabled: var(--theme-color-04);
- --form-thumb-size: 1.25em;
- --form-range-thumb-background: var(--theme-color-16);
- --form-range-thumb-background-hover: var(--theme-color-18);
- --form-range-thumb-background-focus: var(--theme-style-text);
- --form-range-thumb-background-active: var(--theme-style-text);
- --form-range-thumb-background-disabled: var(--theme-color-03);
- --form-range-track-background: var(--theme-color-06);
- --form-range-track-background-focus-hover: var(--theme-color-04);
- --form-range-track-background-active: var(--theme-color-03);
- --form-range-track-background-disabled: var(--theme-color-02);
- --form-range-progress-background: var(--theme-color-08);
- --form-range-progress-background-active: var(--theme-accent);
- --form-range-progress-background-disabled: var(--theme-color-02);
- --form-grid-background: var(--theme-color-02);
- --form-grid-background-hover: var(--theme-color-02);
- --form-grid-background-focus: var(--theme-color-02);
- --form-grid-background-disabled: var(--theme-color-01);
- --form-grid-border: var(--theme-color-08);
- --form-grid-border-hover-focus: var(--theme-color-20);
- --form-grid-border-active: var(--theme-accent);
- --form-grid-border-checked: var(--theme-accent);
- --form-grid-border-disabled: var(--theme-color-04);
- --form-dropdown-background: var(--theme-color-02);
- --form-ring-hover: 0 0 0 var(--layout-line-width) rgb(var(--theme-color-06));
- --form-ring-focus: 0 0 0 var(--layout-line-width) rgb(var(--theme-color-10)),
- 0 0 0 calc(var(--layout-line-width) * 2) rgba(var(--theme-color-10), 0.25);
- --form-ring-accent: 0 0 0 var(--layout-line-width) rgb(var(--theme-accent)),
- 0 0 0 calc(var(--layout-line-width) * 2) rgba(var(--theme-accent), 0.25);
- --form-wrap-space: 1em;
- /* utilities */
- --utilities-muted: var(--theme-color-12);
- --utilities-muted-hover: var(--theme-color-13);
- --utilities-muted-focus-active: var(--theme-color-14);
- --utilities-muted-checked: var(--theme-color-14);
- --utilities-muted-disabled: var(--theme-color-04);
- /* menu */
- --menu-space: 0.75em;
- --menu-edge-opacity: 0.75;
- /* button */
- --button-background: var(--theme-color-02);
- --button-background-focus-hover: var(--theme-color-03);
- --button-background-active: var(--theme-color-04);
- --button-background-disabled: var(--theme-color-01);
- --button-border: var(--theme-color-02);
- --button-border-focus-hover: var(--theme-color-06);
- --button-border-active: var(--theme-accent);
- --button-border-disabled: var(--theme-color-01);
- --button-text: var(--theme-color-12);
- --button-text-focus-hover: var(--theme-color-20);
- --button-text-active: var(--theme-style-text);
- --button-text-disabled: var(--theme-color-04);
- --button-link-text: var(--theme-color-12);
- --button-link-text-focus-hover: var(--theme-style-text);
- --button-link-text-active: var(--theme-style-text);
- --button-link-text-disabled: var(--theme-color-04);
- /* edge */
- --edge-shadow: inset 0 0 0 var(--layout-line-width) rgb(var(--theme-accent)),
- inset 0 0 0 calc(var(--layout-line-width) * 4) rgba(var(--theme-accent), 0.1),
- inset 0 0 0 calc(var(--layout-line-width) * 8) rgba(var(--theme-accent), 0.1);
- /* modal */
- --modal-small: 30em;
- --modal-medium: 50em;
- --modal-large: 70em;
- --modal-size: var(--modal-medium);
- /* coffee */
- --coffee-size: 80;
- /* z index */
- --z-index-background: 1000;
- --z-index-link: 2000;
- --z-index-header: 3000;
- --z-index-tip: 4000;
- --z-index-shade: 5000;
- --z-index-modal: 6000;
- --z-index-menu: 7000;
- --z-index-auto-suggest: 8000;
- --z-index-dropdown: 9000;
- --z-index-edge: 10000;
- /* breakpoint */
- /* can not be used in @media as of yet */
- --breakpoint-sm: 550px;
- --breakpoint-md: 700px;
- --breakpoint-lg: 900px;
- --breakpoint-xl: 1100px;
- --breakpoint-xxl: 1600px;
-}
-
-.is-theme-style-dark {
- /* theme */
- --theme-color: var(--theme-shade);
- --theme-color-01: var(--theme-shade-negative-10);
- --theme-color-02: var(--theme-shade-negative-09);
- --theme-color-03: var(--theme-shade-negative-08);
- --theme-color-04: var(--theme-shade-negative-07);
- --theme-color-05: var(--theme-shade-negative-06);
- --theme-color-06: var(--theme-shade-negative-05);
- --theme-color-07: var(--theme-shade-negative-04);
- --theme-color-08: var(--theme-shade-negative-03);
- --theme-color-09: var(--theme-shade-negative-02);
- --theme-color-10: var(--theme-shade-negative-01);
- --theme-color-11: var(--theme-shade-positive-01);
- --theme-color-12: var(--theme-shade-positive-02);
- --theme-color-13: var(--theme-shade-positive-03);
- --theme-color-14: var(--theme-shade-positive-04);
- --theme-color-15: var(--theme-shade-positive-05);
- --theme-color-16: var(--theme-shade-positive-06);
- --theme-color-17: var(--theme-shade-positive-07);
- --theme-color-18: var(--theme-shade-positive-08);
- --theme-color-19: var(--theme-shade-positive-09);
- --theme-color-20: var(--theme-shade-positive-10);
- --theme-style-text: var(--theme-white);
-}
-
-.is-theme-style-light {
- /* theme */
- --theme-color: var(--theme-shade);
- --theme-color-01: var(--theme-shade-positive-10);
- --theme-color-02: var(--theme-shade-positive-09);
- --theme-color-03: var(--theme-shade-positive-08);
- --theme-color-04: var(--theme-shade-positive-07);
- --theme-color-05: var(--theme-shade-positive-06);
- --theme-color-06: var(--theme-shade-positive-05);
- --theme-color-07: var(--theme-shade-positive-04);
- --theme-color-08: var(--theme-shade-positive-03);
- --theme-color-09: var(--theme-shade-positive-02);
- --theme-color-10: var(--theme-shade-positive-01);
- --theme-color-11: var(--theme-shade-negative-01);
- --theme-color-12: var(--theme-shade-negative-02);
- --theme-color-13: var(--theme-shade-negative-03);
- --theme-color-14: var(--theme-shade-negative-04);
- --theme-color-15: var(--theme-shade-negative-05);
- --theme-color-16: var(--theme-shade-negative-06);
- --theme-color-17: var(--theme-shade-negative-07);
- --theme-color-18: var(--theme-shade-negative-08);
- --theme-color-19: var(--theme-shade-negative-09);
- --theme-color-20: var(--theme-shade-negative-10);
- --theme-style-text: var(--theme-black);
-}
-
-@media (prefers-color-scheme: light) {
- .is-theme-style-system {
- --theme-color: var(--theme-shade);
- --theme-color-01: var(--theme-shade-positive-10);
- --theme-color-02: var(--theme-shade-positive-09);
- --theme-color-03: var(--theme-shade-positive-08);
- --theme-color-04: var(--theme-shade-positive-07);
- --theme-color-05: var(--theme-shade-positive-06);
- --theme-color-06: var(--theme-shade-positive-05);
- --theme-color-07: var(--theme-shade-positive-04);
- --theme-color-08: var(--theme-shade-positive-03);
- --theme-color-09: var(--theme-shade-positive-02);
- --theme-color-10: var(--theme-shade-positive-01);
- --theme-color-11: var(--theme-shade-negative-01);
- --theme-color-12: var(--theme-shade-negative-02);
- --theme-color-13: var(--theme-shade-negative-03);
- --theme-color-14: var(--theme-shade-negative-04);
- --theme-color-15: var(--theme-shade-negative-05);
- --theme-color-16: var(--theme-shade-negative-06);
- --theme-color-17: var(--theme-shade-negative-07);
- --theme-color-18: var(--theme-shade-negative-08);
- --theme-color-19: var(--theme-shade-negative-09);
- --theme-color-20: var(--theme-shade-negative-10);
- --theme-style-text: var(--theme-black);
- }
-}
-
-@media (prefers-color-scheme: dark) {
- .is-theme-style-system {
- --theme-color: var(--theme-shade);
- --theme-color-01: var(--theme-shade-negative-10);
- --theme-color-02: var(--theme-shade-negative-09);
- --theme-color-03: var(--theme-shade-negative-08);
- --theme-color-04: var(--theme-shade-negative-07);
- --theme-color-05: var(--theme-shade-negative-06);
- --theme-color-06: var(--theme-shade-negative-05);
- --theme-color-07: var(--theme-shade-negative-04);
- --theme-color-08: var(--theme-shade-negative-03);
- --theme-color-09: var(--theme-shade-negative-02);
- --theme-color-10: var(--theme-shade-negative-01);
- --theme-color-11: var(--theme-shade-positive-01);
- --theme-color-12: var(--theme-shade-positive-02);
- --theme-color-13: var(--theme-shade-positive-03);
- --theme-color-14: var(--theme-shade-positive-04);
- --theme-color-15: var(--theme-shade-positive-05);
- --theme-color-16: var(--theme-shade-positive-06);
- --theme-color-17: var(--theme-shade-positive-07);
- --theme-color-18: var(--theme-shade-positive-08);
- --theme-color-19: var(--theme-shade-positive-09);
- --theme-color-20: var(--theme-shade-positive-10);
- --theme-style-text: var(--theme-white);
- }
-}
-
-.is-link-style-block {
- /* link */
- --link-item-edit-height-tall: 5em;
- --link-item-edit-height-short: calc(var(--link-item-edit-height-tall) / 2);
- --link-item-width: 11em;
- --link-item-height: 10em;
- --link-item-url-height: 2.25em;
- --link-item-edit-height: var(--link-item-edit-height-tall);
-}
-
-.is-link-style-list {
- /* link */
- --link-item-edit-height-tall: 5em;
- --link-item-edit-height-short: 2em;
- --link-item-width: 20em;
- --link-item-height: 4em;
- --link-item-url-height: 1.5em;
- --link-item-edit-height: var(--link-item-edit-height-short);
-}
-
-@media (min-width: 700px) {
- :root {
- /* theme */
- --theme-root-font-size: 16px;
- }
-}
diff --git a/src/fonts/fa/fa-brands-400.ttf b/src/font/fa/fa-brands-400.ttf
similarity index 80%
rename from src/fonts/fa/fa-brands-400.ttf
rename to src/font/fa/fa-brands-400.ttf
index 948a2a6c..16852bfd 100644
Binary files a/src/fonts/fa/fa-brands-400.ttf and b/src/font/fa/fa-brands-400.ttf differ
diff --git a/src/font/fa/fa-brands-400.woff b/src/font/fa/fa-brands-400.woff
new file mode 100644
index 00000000..6cf6fb38
Binary files /dev/null and b/src/font/fa/fa-brands-400.woff differ
diff --git a/src/font/fa/fa-brands-400.woff2 b/src/font/fa/fa-brands-400.woff2
new file mode 100644
index 00000000..f2a4e36f
Binary files /dev/null and b/src/font/fa/fa-brands-400.woff2 differ
diff --git a/src/fonts/fa/fa-regular-400.ttf b/src/font/fa/fa-regular-400.ttf
similarity index 87%
rename from src/fonts/fa/fa-regular-400.ttf
rename to src/font/fa/fa-regular-400.ttf
index abe99e20..42a04fde 100644
Binary files a/src/fonts/fa/fa-regular-400.ttf and b/src/font/fa/fa-regular-400.ttf differ
diff --git a/src/font/fa/fa-regular-400.woff b/src/font/fa/fa-regular-400.woff
new file mode 100644
index 00000000..c390c60e
Binary files /dev/null and b/src/font/fa/fa-regular-400.woff differ
diff --git a/src/font/fa/fa-regular-400.woff2 b/src/font/fa/fa-regular-400.woff2
new file mode 100644
index 00000000..11c71d28
Binary files /dev/null and b/src/font/fa/fa-regular-400.woff2 differ
diff --git a/src/fonts/fa/fa-solid-900.ttf b/src/font/fa/fa-solid-900.ttf
similarity index 76%
rename from src/fonts/fa/fa-solid-900.ttf
rename to src/font/fa/fa-solid-900.ttf
index 5b979039..7c59512f 100644
Binary files a/src/fonts/fa/fa-solid-900.ttf and b/src/font/fa/fa-solid-900.ttf differ
diff --git a/src/font/fa/fa-solid-900.woff b/src/font/fa/fa-solid-900.woff
new file mode 100644
index 00000000..aff125d6
Binary files /dev/null and b/src/font/fa/fa-solid-900.woff differ
diff --git a/src/font/fa/fa-solid-900.woff2 b/src/font/fa/fa-solid-900.woff2
new file mode 100644
index 00000000..aa2b7910
Binary files /dev/null and b/src/font/fa/fa-solid-900.woff2 differ
diff --git a/src/fonts/fjalla-one/fjalla-one-400.ttf b/src/font/fjalla-one/fjalla-one-400.ttf
similarity index 100%
rename from src/fonts/fjalla-one/fjalla-one-400.ttf
rename to src/font/fjalla-one/fjalla-one-400.ttf
diff --git a/src/fonts/fjalla-one/fjalla-one-400.woff b/src/font/fjalla-one/fjalla-one-400.woff
similarity index 100%
rename from src/fonts/fjalla-one/fjalla-one-400.woff
rename to src/font/fjalla-one/fjalla-one-400.woff
diff --git a/src/fonts/fjalla-one/fjalla-one-400.woff2 b/src/font/fjalla-one/fjalla-one-400.woff2
similarity index 100%
rename from src/fonts/fjalla-one/fjalla-one-400.woff2
rename to src/font/fjalla-one/fjalla-one-400.woff2
diff --git a/src/fonts/open-sans/open-sans-300.ttf b/src/font/open-sans/open-sans-300.ttf
similarity index 100%
rename from src/fonts/open-sans/open-sans-300.ttf
rename to src/font/open-sans/open-sans-300.ttf
diff --git a/src/fonts/open-sans/open-sans-300.woff b/src/font/open-sans/open-sans-300.woff
similarity index 100%
rename from src/fonts/open-sans/open-sans-300.woff
rename to src/font/open-sans/open-sans-300.woff
diff --git a/src/fonts/open-sans/open-sans-300.woff2 b/src/font/open-sans/open-sans-300.woff2
similarity index 100%
rename from src/fonts/open-sans/open-sans-300.woff2
rename to src/font/open-sans/open-sans-300.woff2
diff --git a/src/fonts/open-sans/open-sans-400.ttf b/src/font/open-sans/open-sans-400.ttf
similarity index 100%
rename from src/fonts/open-sans/open-sans-400.ttf
rename to src/font/open-sans/open-sans-400.ttf
diff --git a/src/fonts/open-sans/open-sans-400.woff b/src/font/open-sans/open-sans-400.woff
similarity index 100%
rename from src/fonts/open-sans/open-sans-400.woff
rename to src/font/open-sans/open-sans-400.woff
diff --git a/src/fonts/open-sans/open-sans-400.woff2 b/src/font/open-sans/open-sans-400.woff2
similarity index 100%
rename from src/fonts/open-sans/open-sans-400.woff2
rename to src/font/open-sans/open-sans-400.woff2
diff --git a/src/fonts/open-sans/open-sans-600.ttf b/src/font/open-sans/open-sans-600.ttf
similarity index 100%
rename from src/fonts/open-sans/open-sans-600.ttf
rename to src/font/open-sans/open-sans-600.ttf
diff --git a/src/fonts/open-sans/open-sans-600.woff b/src/font/open-sans/open-sans-600.woff
similarity index 100%
rename from src/fonts/open-sans/open-sans-600.woff
rename to src/font/open-sans/open-sans-600.woff
diff --git a/src/fonts/open-sans/open-sans-600.woff2 b/src/font/open-sans/open-sans-600.woff2
similarity index 100%
rename from src/fonts/open-sans/open-sans-600.woff2
rename to src/font/open-sans/open-sans-600.woff2
diff --git a/src/fonts/open-sans/open-sans-700.ttf b/src/font/open-sans/open-sans-700.ttf
similarity index 100%
rename from src/fonts/open-sans/open-sans-700.ttf
rename to src/font/open-sans/open-sans-700.ttf
diff --git a/src/fonts/open-sans/open-sans-700.woff b/src/font/open-sans/open-sans-700.woff
similarity index 100%
rename from src/fonts/open-sans/open-sans-700.woff
rename to src/font/open-sans/open-sans-700.woff
diff --git a/src/fonts/open-sans/open-sans-700.woff2 b/src/font/open-sans/open-sans-700.woff2
similarity index 100%
rename from src/fonts/open-sans/open-sans-700.woff2
rename to src/font/open-sans/open-sans-700.woff2
diff --git a/src/fonts/open-sans/open-sans-800.ttf b/src/font/open-sans/open-sans-800.ttf
similarity index 100%
rename from src/fonts/open-sans/open-sans-800.ttf
rename to src/font/open-sans/open-sans-800.ttf
diff --git a/src/fonts/open-sans/open-sans-800.woff b/src/font/open-sans/open-sans-800.woff
similarity index 100%
rename from src/fonts/open-sans/open-sans-800.woff
rename to src/font/open-sans/open-sans-800.woff
diff --git a/src/fonts/open-sans/open-sans-800.woff2 b/src/font/open-sans/open-sans-800.woff2
similarity index 100%
rename from src/fonts/open-sans/open-sans-800.woff2
rename to src/font/open-sans/open-sans-800.woff2
diff --git a/src/fonts/open-sans/open-sans-italic-300.ttf b/src/font/open-sans/open-sans-italic-300.ttf
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-300.ttf
rename to src/font/open-sans/open-sans-italic-300.ttf
diff --git a/src/fonts/open-sans/open-sans-italic-300.woff b/src/font/open-sans/open-sans-italic-300.woff
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-300.woff
rename to src/font/open-sans/open-sans-italic-300.woff
diff --git a/src/fonts/open-sans/open-sans-italic-300.woff2 b/src/font/open-sans/open-sans-italic-300.woff2
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-300.woff2
rename to src/font/open-sans/open-sans-italic-300.woff2
diff --git a/src/fonts/open-sans/open-sans-italic-400.ttf b/src/font/open-sans/open-sans-italic-400.ttf
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-400.ttf
rename to src/font/open-sans/open-sans-italic-400.ttf
diff --git a/src/fonts/open-sans/open-sans-italic-400.woff b/src/font/open-sans/open-sans-italic-400.woff
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-400.woff
rename to src/font/open-sans/open-sans-italic-400.woff
diff --git a/src/fonts/open-sans/open-sans-italic-400.woff2 b/src/font/open-sans/open-sans-italic-400.woff2
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-400.woff2
rename to src/font/open-sans/open-sans-italic-400.woff2
diff --git a/src/fonts/open-sans/open-sans-italic-600.ttf b/src/font/open-sans/open-sans-italic-600.ttf
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-600.ttf
rename to src/font/open-sans/open-sans-italic-600.ttf
diff --git a/src/fonts/open-sans/open-sans-italic-600.woff b/src/font/open-sans/open-sans-italic-600.woff
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-600.woff
rename to src/font/open-sans/open-sans-italic-600.woff
diff --git a/src/fonts/open-sans/open-sans-italic-600.woff2 b/src/font/open-sans/open-sans-italic-600.woff2
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-600.woff2
rename to src/font/open-sans/open-sans-italic-600.woff2
diff --git a/src/fonts/open-sans/open-sans-italic-700.ttf b/src/font/open-sans/open-sans-italic-700.ttf
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-700.ttf
rename to src/font/open-sans/open-sans-italic-700.ttf
diff --git a/src/fonts/open-sans/open-sans-italic-700.woff b/src/font/open-sans/open-sans-italic-700.woff
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-700.woff
rename to src/font/open-sans/open-sans-italic-700.woff
diff --git a/src/fonts/open-sans/open-sans-italic-700.woff2 b/src/font/open-sans/open-sans-italic-700.woff2
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-700.woff2
rename to src/font/open-sans/open-sans-italic-700.woff2
diff --git a/src/fonts/open-sans/open-sans-italic-800.ttf b/src/font/open-sans/open-sans-italic-800.ttf
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-800.ttf
rename to src/font/open-sans/open-sans-italic-800.ttf
diff --git a/src/fonts/open-sans/open-sans-italic-800.woff b/src/font/open-sans/open-sans-italic-800.woff
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-800.woff
rename to src/font/open-sans/open-sans-italic-800.woff
diff --git a/src/fonts/open-sans/open-sans-italic-800.woff2 b/src/font/open-sans/open-sans-italic-800.woff2
similarity index 100%
rename from src/fonts/open-sans/open-sans-italic-800.woff2
rename to src/font/open-sans/open-sans-italic-800.woff2
diff --git a/src/fonts/fa/fa-brands-400.eot b/src/fonts/fa/fa-brands-400.eot
deleted file mode 100644
index a1bc094a..00000000
Binary files a/src/fonts/fa/fa-brands-400.eot and /dev/null differ
diff --git a/src/fonts/fa/fa-brands-400.woff b/src/fonts/fa/fa-brands-400.woff
deleted file mode 100644
index 2a89d521..00000000
Binary files a/src/fonts/fa/fa-brands-400.woff and /dev/null differ
diff --git a/src/fonts/fa/fa-brands-400.woff2 b/src/fonts/fa/fa-brands-400.woff2
deleted file mode 100644
index 141a90a9..00000000
Binary files a/src/fonts/fa/fa-brands-400.woff2 and /dev/null differ
diff --git a/src/fonts/fa/fa-regular-400.eot b/src/fonts/fa/fa-regular-400.eot
deleted file mode 100644
index 38cf2517..00000000
Binary files a/src/fonts/fa/fa-regular-400.eot and /dev/null differ
diff --git a/src/fonts/fa/fa-regular-400.woff b/src/fonts/fa/fa-regular-400.woff
deleted file mode 100644
index 24de566a..00000000
Binary files a/src/fonts/fa/fa-regular-400.woff and /dev/null differ
diff --git a/src/fonts/fa/fa-regular-400.woff2 b/src/fonts/fa/fa-regular-400.woff2
deleted file mode 100644
index 7e0118e5..00000000
Binary files a/src/fonts/fa/fa-regular-400.woff2 and /dev/null differ
diff --git a/src/fonts/fa/fa-solid-900.eot b/src/fonts/fa/fa-solid-900.eot
deleted file mode 100644
index d3b77c22..00000000
Binary files a/src/fonts/fa/fa-solid-900.eot and /dev/null differ
diff --git a/src/fonts/fa/fa-solid-900.woff b/src/fonts/fa/fa-solid-900.woff
deleted file mode 100644
index beec7917..00000000
Binary files a/src/fonts/fa/fa-solid-900.woff and /dev/null differ
diff --git a/src/fonts/fa/fa-solid-900.woff2 b/src/fonts/fa/fa-solid-900.woff2
deleted file mode 100644
index 978a681a..00000000
Binary files a/src/fonts/fa/fa-solid-900.woff2 and /dev/null differ
diff --git a/src/fonts/icons/icons.eot b/src/fonts/icons/icons.eot
deleted file mode 100644
index bd4cb832..00000000
Binary files a/src/fonts/icons/icons.eot and /dev/null differ
diff --git a/src/fonts/icons/icons.json b/src/fonts/icons/icons.json
deleted file mode 100644
index 06708c40..00000000
--- a/src/fonts/icons/icons.json
+++ /dev/null
@@ -1 +0,0 @@
-{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M810 554h-256v256h-84v-256h-256v-84h256v-256h84v256h256v84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["add"],"defaultCode":57669,"grid":24},"attrs":[],"properties":{"ligatures":"add","id":0,"order":8,"prevSize":48,"code":57669,"name":"add"},"setIdx":1,"setId":4,"iconIdx":0},{"icon":{"paths":["M854 470v84h-520l238 240-60 60-342-342 342-342 60 60-238 240h520z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow_back"],"defaultCode":58820,"grid":24},"attrs":[],"properties":{"ligatures":"arrow_back","id":1,"order":16,"prevSize":48,"code":58820,"name":"arrow_back"},"setIdx":1,"setId":4,"iconIdx":1},{"icon":{"paths":["M854 512l-342 342-342-342 62-60 238 238v-520h84v520l240-238z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow_downward"],"defaultCode":58843,"grid":24},"attrs":[],"properties":{"ligatures":"arrow_downward","id":2,"order":17,"prevSize":48,"code":58843,"name":"arrow_downward"},"setIdx":1,"setId":4,"iconIdx":2},{"icon":{"paths":["M512 170l342 342-342 342-60-60 238-240h-520v-84h520l-238-240z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow_forward"],"defaultCode":58824,"grid":24},"attrs":[],"properties":{"ligatures":"arrow_forward","id":3,"order":18,"prevSize":48,"code":58824,"name":"arrow_forward"},"setIdx":1,"setId":4,"iconIdx":3},{"icon":{"paths":["M170 512l342-342 342 342-62 60-238-238v520h-84v-520l-240 238z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow_upward"],"defaultCode":58840,"grid":24},"attrs":[],"properties":{"ligatures":"arrow_upward","id":4,"order":19,"prevSize":48,"code":58840,"name":"arrow_upward"},"setIdx":1,"setId":4,"iconIdx":4},{"icon":{"paths":["M384 690l452-452 60 60-512 512-238-238 60-60z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["check"],"defaultCode":58826,"grid":24},"attrs":[],"properties":{"ligatures":"check","id":5,"order":14,"prevSize":48,"code":58826,"name":"check"},"setIdx":1,"setId":4,"iconIdx":5},{"icon":{"paths":["M426 726l384-384-60-62-324 324-152-152-60 60zM810 128c48 0 86 40 86 86v596c0 46-38 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h596z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["check_box"],"defaultCode":59444,"grid":24},"attrs":[],"properties":{"ligatures":"check_box","id":6,"order":35,"prevSize":48,"name":"check_box","code":59444},"setIdx":1,"setId":4,"iconIdx":6},{"icon":{"paths":["M810 128c46 0 86 40 86 86v596c0 46-40 86-86 86h-596c-46 0-86-40-86-86v-596c0-46 40-86 86-86h596zM810 214h-596v596h596v-596z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["check_box_outline_blank"],"defaultCode":59445,"grid":24},"attrs":[],"properties":{"ligatures":"check_box_outline_blank","id":7,"order":36,"prevSize":48,"name":"check_box_outline_blank","code":59445},"setIdx":1,"setId":4,"iconIdx":7},{"icon":{"paths":["M810 274l-238 238 238 238-60 60-238-238-238 238-60-60 238-238-238-238 60-60 238 238 238-238z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["close"],"defaultCode":58829,"grid":24},"attrs":[],"properties":{"ligatures":"clear, close","id":8,"order":2,"prevSize":48,"code":58829,"name":"close"},"setIdx":1,"setId":4,"iconIdx":8},{"icon":{"paths":["M884 300l-78 78-160-160 78-78c16-16 44-16 60 0l100 100c16 16 16 44 0 60zM128 736l472-472 160 160-472 472h-160v-160z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mode_edit"],"defaultCode":57940,"grid":24},"attrs":[],"properties":{"ligatures":"create, edit, mode_edit","id":9,"order":5,"prevSize":48,"code":57940,"name":"mode_edit"},"setIdx":1,"setId":4,"iconIdx":9},{"icon":{"paths":["M384 692l452-454 60 60-512 512-238-238 58-60z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["done"],"defaultCode":59510,"grid":24},"attrs":[],"properties":{"ligatures":"done","id":10,"order":38,"prevSize":48,"name":"done","code":59510},"setIdx":1,"setId":4,"iconIdx":10},{"icon":{"paths":["M726 554v-84h-428v84h428zM810 128c46 0 86 40 86 86v596c0 46-40 86-86 86h-596c-46 0-86-40-86-86v-596c0-46 40-86 86-86h596z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["indeterminate_check_box"],"defaultCode":59657,"grid":24},"attrs":[],"properties":{"ligatures":"indeterminate_check_box","id":11,"order":37,"prevSize":48,"name":"indeterminate_check_box","code":59657},"setIdx":1,"setId":4,"iconIdx":11},{"icon":{"paths":["M316 334l196 196 196-196 60 60-256 256-256-256z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["keyboard_arrow_down"],"defaultCode":58131,"grid":24},"attrs":[],"properties":{"ligatures":"keyboard_arrow_down","id":12,"order":20,"prevSize":48,"code":58131,"name":"keyboard_arrow_down"},"setIdx":1,"setId":4,"iconIdx":12},{"icon":{"paths":["M658 686l-60 60-256-256 256-256 60 60-196 196z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["keyboard_arrow_left"],"defaultCode":58132,"grid":24},"attrs":[],"properties":{"ligatures":"keyboard_arrow_left","id":13,"order":21,"prevSize":48,"code":58132,"name":"keyboard_arrow_left"},"setIdx":1,"setId":4,"iconIdx":13},{"icon":{"paths":["M366 698l196-196-196-196 60-60 256 256-256 256z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["keyboard_arrow_right"],"defaultCode":58133,"grid":24},"attrs":[],"properties":{"ligatures":"keyboard_arrow_right","id":14,"order":22,"prevSize":48,"code":58133,"name":"keyboard_arrow_right"},"setIdx":1,"setId":4,"iconIdx":14},{"icon":{"paths":["M316 658l-60-60 256-256 256 256-60 60-196-196z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["keyboard_arrow_up"],"defaultCode":58134,"grid":24},"attrs":[],"properties":{"ligatures":"keyboard_arrow_up","id":15,"order":23,"prevSize":48,"code":58134,"name":"keyboard_arrow_up"},"setIdx":1,"setId":4,"iconIdx":15},{"icon":{"paths":["M512 426c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM768 426c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM256 426c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["more_horiz"],"defaultCode":58835,"grid":24},"attrs":[],"properties":{"ligatures":"more_horiz","id":16,"order":24,"prevSize":48,"code":58835,"name":"more_horiz"},"setIdx":1,"setId":4,"iconIdx":16},{"icon":{"paths":["M512 682c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 426c46 0 86 40 86 86s-40 86-86 86-86-40-86-86 40-86 86-86zM512 342c-46 0-86-40-86-86s40-86 86-86 86 40 86 86-40 86-86 86z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["more_vert"],"defaultCode":58836,"grid":24},"attrs":[],"properties":{"ligatures":"more_vert","id":17,"order":25,"prevSize":48,"code":58836,"name":"more_vert"},"setIdx":1,"setId":4,"iconIdx":17},{"icon":{"paths":["M512 854c188 0 342-154 342-342s-154-342-342-342-342 154-342 342 154 342 342 342zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["radio_button_unchecked"],"defaultCode":59446,"grid":24},"attrs":[],"properties":{"ligatures":"panorama_fish_eye, radio_button_unchecked","id":18,"order":33,"prevSize":48,"name":"radio_button_unchecked","code":59446},"setIdx":1,"setId":4,"iconIdx":18},{"icon":{"paths":["M512 854c188 0 342-154 342-342s-154-342-342-342-342 154-342 342 154 342 342 342zM512 86c236 0 426 190 426 426s-190 426-426 426-426-190-426-426 190-426 426-426zM512 298c118 0 214 96 214 214s-96 214-214 214-214-96-214-214 96-214 214-214z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["radio_button_checked"],"defaultCode":59447,"grid":24},"attrs":[],"properties":{"ligatures":"radio_button_checked","id":19,"order":34,"prevSize":48,"name":"radio_button_checked","code":59447},"setIdx":1,"setId":4,"iconIdx":19},{"icon":{"paths":["M810 554h-596v-84h596v84z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["remove"],"defaultCode":57691,"grid":24},"attrs":[],"properties":{"ligatures":"remove","id":20,"order":29,"prevSize":48,"code":57691,"name":"remove"},"setIdx":1,"setId":4,"iconIdx":20},{"icon":{"paths":["M512 662c82 0 150-68 150-150s-68-150-150-150-150 68-150 150 68 150 150 150zM830 554l90 70c8 6 10 18 4 28l-86 148c-6 10-16 12-26 8l-106-42c-22 16-46 32-72 42l-16 112c-2 10-10 18-20 18h-172c-10 0-18-8-20-18l-16-112c-26-10-50-24-72-42l-106 42c-10 4-20 2-26-8l-86-148c-6-10-4-22 4-28l90-70c-2-14-2-28-2-42s0-28 2-42l-90-70c-8-6-10-18-4-28l86-148c6-10 16-12 26-8l106 42c22-16 46-32 72-42l16-112c2-10 10-18 20-18h172c10 0 18 8 20 18l16 112c26 10 50 24 72 42l106-42c10-4 20-2 26 8l86 148c6 10 4 22-4 28l-90 70c2 14 2 28 2 42s0 28-2 42z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["settings"],"defaultCode":59576,"grid":24},"attrs":[],"properties":{"ligatures":"settings","id":21,"order":39,"prevSize":48,"code":59576,"name":"settings"},"setIdx":1,"setId":4,"iconIdx":21},{"icon":{"paths":["M708 230l-196 196-196-196 60-60 136 136 136-136zM316 794l196-196 196 196-60 60-136-136-136 136z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["unfold_less"],"defaultCode":58838,"grid":24},"attrs":[],"properties":{"ligatures":"unfold_less","id":22,"order":26,"prevSize":48,"code":58838,"name":"unfold_less"},"setIdx":1,"setId":4,"iconIdx":22},{"icon":{"paths":["M512 776l136-136 60 60-196 196-196-196 60-60zM512 248l-136 136-60-60 196-196 196 196-60 60z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["unfold_more"],"defaultCode":58839,"grid":24},"attrs":[],"properties":{"ligatures":"unfold_more","id":23,"order":27,"prevSize":48,"code":58839,"name":"unfold_more"},"setIdx":1,"setId":4,"iconIdx":23},{"icon":{"paths":["M754 270l100-100v300h-300l138-138c-46-46-110-76-180-76-142 0-256 114-256 256s114 256 256 256c112 0 208-70 242-170h88c-38 148-170 256-330 256-188 0-340-154-340-342s152-342 340-342c94 0 180 38 242 100z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["refresh"],"grid":24},"attrs":[{}],"properties":{"order":40,"id":24,"name":"refresh","prevSize":48,"code":59648},"setIdx":1,"setId":4,"iconIdx":24},{"icon":{"paths":["M128 214h768v84h-768v-84zM128 470v-86h768v86h-768zM128 810v-84h768v84h-768zM128 640v-86h768v86h-768z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["reorder"],"grid":24},"attrs":[{}],"properties":{"order":42,"id":25,"name":"reorder","prevSize":48,"code":59649},"setIdx":1,"setId":4,"iconIdx":25},{"icon":{"paths":["M534 342q146 0 262 86t162 222l-100 32q-34-104-123-169t-201-65q-124 0-220 80l156 154h-384v-384l152 154q126-110 296-110z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["undo"],"grid":24},"attrs":[{}],"properties":{"order":43,"id":26,"name":"undo","prevSize":48,"code":59650},"setIdx":1,"setId":4,"iconIdx":26},{"icon":{"paths":["M786 452l152-154v384h-384l156-154q-96-80-220-80-102 0-197 68t-127 166l-100-32q44-136 161-222t263-86q170 0 296 110z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["redo"],"grid":24},"attrs":[{}],"properties":{"order":44,"id":27,"name":"redo","prevSize":48,"code":59651},"setIdx":1,"setId":4,"iconIdx":27},{"icon":{"paths":["M512 214q142 0 242 100t100 240q0 142-101 242t-241 100-241-100-101-242h86q0 106 75 181t181 75 181-75 75-181-75-181-181-75v172l-214-214 214-214v172z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["replay"],"grid":24},"attrs":[{}],"properties":{"order":46,"id":28,"name":"replay","prevSize":48,"code":59652},"setIdx":1,"setId":4,"iconIdx":28},{"icon":{"paths":["M170 810h684v86h-684v-86zM854 342v-128h-86v128h86zM854 128q36 0 60 25t24 61v128q0 36-24 60t-60 24h-86v128q0 70-50 121t-120 51h-256q-70 0-121-51t-51-121v-426h684z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":24,"tags":["coffee"]},"attrs":[{}],"properties":{"order":3,"id":29,"name":"coffee","prevSize":48,"code":59654},"setIdx":1,"setId":4,"iconIdx":29}],"height":1024,"metadata":{"name":""},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false,"showSelector":true,"selector":"","classSelector":".icon","showMetrics":true,"showMetadata":true,"showVersion":true},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon","name":"","height":32,"columns":16,"margin":16},"historySize":50,"showCodes":true,"gridSize":16,"showGrid":true}}
\ No newline at end of file
diff --git a/src/fonts/icons/icons.svg b/src/fonts/icons/icons.svg
deleted file mode 100644
index c1604824..00000000
--- a/src/fonts/icons/icons.svg
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/src/fonts/icons/icons.ttf b/src/fonts/icons/icons.ttf
deleted file mode 100644
index 6d7a814d..00000000
Binary files a/src/fonts/icons/icons.ttf and /dev/null differ
diff --git a/src/fonts/icons/icons.woff b/src/fonts/icons/icons.woff
deleted file mode 100644
index fc379be0..00000000
Binary files a/src/fonts/icons/icons.woff and /dev/null differ
diff --git a/src/html/background.html b/src/html/background.html
deleted file mode 100644
index b8bed395..00000000
--- a/src/html/background.html
+++ /dev/null
@@ -1,6 +0,0 @@
-