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 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ 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 @@ -
-
-
-
-
-
diff --git a/src/html/layout.html b/src/html/layout.html deleted file mode 100644 index 93fc6f7a..00000000 --- a/src/html/layout.html +++ /dev/null @@ -1,7 +0,0 @@ -
- -
- - - -
diff --git a/src/html/link-css.html b/src/html/link-css.html deleted file mode 100644 index 0d6421e2..00000000 --- a/src/html/link-css.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/html/menu.html b/src/html/menu.html deleted file mode 100644 index 3f693f3f..00000000 --- a/src/html/menu.html +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/src/html/menu/close.html b/src/html/menu/close.html deleted file mode 100644 index 1011f0e5..00000000 --- a/src/html/menu/close.html +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/src/html/menu/content/background.html b/src/html/menu/content/background.html deleted file mode 100644 index 9456db89..00000000 --- a/src/html/menu/content/background.html +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/src/html/menu/content/background/color.html b/src/html/menu/content/background/color.html deleted file mode 100644 index e5aadf66..00000000 --- a/src/html/menu/content/background/color.html +++ /dev/null @@ -1,88 +0,0 @@ - diff --git a/src/html/menu/content/background/visual.html b/src/html/menu/content/background/visual.html deleted file mode 100644 index 8e05f916..00000000 --- a/src/html/menu/content/background/visual.html +++ /dev/null @@ -1,159 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks.html b/src/html/menu/content/bookmarks.html deleted file mode 100644 index 5e23e5d3..00000000 --- a/src/html/menu/content/bookmarks.html +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/accent.html b/src/html/menu/content/bookmarks/accent.html deleted file mode 100644 index e249440e..00000000 --- a/src/html/menu/content/bookmarks/accent.html +++ /dev/null @@ -1,87 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/alignment.html b/src/html/menu/content/bookmarks/alignment.html deleted file mode 100644 index 18f67785..00000000 --- a/src/html/menu/content/bookmarks/alignment.html +++ /dev/null @@ -1,45 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/area.html b/src/html/menu/content/bookmarks/area.html deleted file mode 100644 index 1f57879d..00000000 --- a/src/html/menu/content/bookmarks/area.html +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/background.html b/src/html/menu/content/bookmarks/background.html deleted file mode 100644 index f31acb04..00000000 --- a/src/html/menu/content/bookmarks/background.html +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/border.html b/src/html/menu/content/bookmarks/border.html deleted file mode 100644 index 6418c900..00000000 --- a/src/html/menu/content/bookmarks/border.html +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/color.html b/src/html/menu/content/bookmarks/color.html deleted file mode 100644 index 02f1d226..00000000 --- a/src/html/menu/content/bookmarks/color.html +++ /dev/null @@ -1,99 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/content.html b/src/html/menu/content/bookmarks/content.html deleted file mode 100644 index d9791576..00000000 --- a/src/html/menu/content/bookmarks/content.html +++ /dev/null @@ -1,152 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/general.html b/src/html/menu/content/bookmarks/general.html deleted file mode 100644 index 154be9be..00000000 --- a/src/html/menu/content/bookmarks/general.html +++ /dev/null @@ -1,51 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/name.html b/src/html/menu/content/bookmarks/name.html deleted file mode 100644 index 5305e22c..00000000 --- a/src/html/menu/content/bookmarks/name.html +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/orientation.html b/src/html/menu/content/bookmarks/orientation.html deleted file mode 100644 index 51af8f43..00000000 --- a/src/html/menu/content/bookmarks/orientation.html +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/sort.html b/src/html/menu/content/bookmarks/sort.html deleted file mode 100644 index 8e13ecc2..00000000 --- a/src/html/menu/content/bookmarks/sort.html +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/style.html b/src/html/menu/content/bookmarks/style.html deleted file mode 100644 index 7db6887a..00000000 --- a/src/html/menu/content/bookmarks/style.html +++ /dev/null @@ -1,27 +0,0 @@ - diff --git a/src/html/menu/content/bookmarks/visual.html b/src/html/menu/content/bookmarks/visual.html deleted file mode 100644 index 456da0d8..00000000 --- a/src/html/menu/content/bookmarks/visual.html +++ /dev/null @@ -1,74 +0,0 @@ - diff --git a/src/html/menu/content/coffee.html b/src/html/menu/content/coffee.html deleted file mode 100644 index ffcc8f10..00000000 --- a/src/html/menu/content/coffee.html +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/src/html/menu/content/coffee/coffee.html b/src/html/menu/content/coffee/coffee.html deleted file mode 100644 index 7de136ee..00000000 --- a/src/html/menu/content/coffee/coffee.html +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/src/html/menu/content/data.html b/src/html/menu/content/data.html deleted file mode 100644 index 9022aa3e..00000000 --- a/src/html/menu/content/data.html +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/src/html/menu/content/data/backup.html b/src/html/menu/content/data/backup.html deleted file mode 100644 index 36fee07f..00000000 --- a/src/html/menu/content/data/backup.html +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/src/html/menu/content/data/clear.html b/src/html/menu/content/data/clear.html deleted file mode 100644 index 6ad869ea..00000000 --- a/src/html/menu/content/data/clear.html +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/src/html/menu/content/data/restore.html b/src/html/menu/content/data/restore.html deleted file mode 100644 index 4b55d7f6..00000000 --- a/src/html/menu/content/data/restore.html +++ /dev/null @@ -1,19 +0,0 @@ - diff --git a/src/html/menu/content/firefox.html b/src/html/menu/content/firefox.html deleted file mode 100644 index 3f9bc53d..00000000 --- a/src/html/menu/content/firefox.html +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/src/html/menu/content/firefox/homepage.html b/src/html/menu/content/firefox/homepage.html deleted file mode 100644 index 2222e704..00000000 --- a/src/html/menu/content/firefox/homepage.html +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/src/html/menu/content/groups.html b/src/html/menu/content/groups.html deleted file mode 100644 index 5a1dc85c..00000000 --- a/src/html/menu/content/groups.html +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/src/html/menu/content/groups/area.html b/src/html/menu/content/groups/area.html deleted file mode 100644 index c99ca92b..00000000 --- a/src/html/menu/content/groups/area.html +++ /dev/null @@ -1,31 +0,0 @@ - diff --git a/src/html/menu/content/groups/border.html b/src/html/menu/content/groups/border.html deleted file mode 100644 index 00776231..00000000 --- a/src/html/menu/content/groups/border.html +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/src/html/menu/content/groups/names.html b/src/html/menu/content/groups/names.html deleted file mode 100644 index bbe643ef..00000000 --- a/src/html/menu/content/groups/names.html +++ /dev/null @@ -1,25 +0,0 @@ - diff --git a/src/html/menu/content/groups/openall.html b/src/html/menu/content/groups/openall.html deleted file mode 100644 index c017209e..00000000 --- a/src/html/menu/content/groups/openall.html +++ /dev/null @@ -1,34 +0,0 @@ - diff --git a/src/html/menu/content/groups/order.html b/src/html/menu/content/groups/order.html deleted file mode 100644 index 40dea5ce..00000000 --- a/src/html/menu/content/groups/order.html +++ /dev/null @@ -1,27 +0,0 @@ - diff --git a/src/html/menu/content/header.html b/src/html/menu/content/header.html deleted file mode 100644 index 65b419f4..00000000 --- a/src/html/menu/content/header.html +++ /dev/null @@ -1,31 +0,0 @@ - diff --git a/src/html/menu/content/header/alignment.html b/src/html/menu/content/header/alignment.html deleted file mode 100644 index ee2b471d..00000000 --- a/src/html/menu/content/header/alignment.html +++ /dev/null @@ -1,84 +0,0 @@ - diff --git a/src/html/menu/content/header/area.html b/src/html/menu/content/header/area.html deleted file mode 100644 index a6d1624b..00000000 --- a/src/html/menu/content/header/area.html +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/src/html/menu/content/header/border.html b/src/html/menu/content/header/border.html deleted file mode 100644 index ae75aec0..00000000 --- a/src/html/menu/content/header/border.html +++ /dev/null @@ -1,24 +0,0 @@ - diff --git a/src/html/menu/content/header/clock.html b/src/html/menu/content/header/clock.html deleted file mode 100644 index c0101b33..00000000 --- a/src/html/menu/content/header/clock.html +++ /dev/null @@ -1,101 +0,0 @@ - diff --git a/src/html/menu/content/header/color.html b/src/html/menu/content/header/color.html deleted file mode 100644 index 6b5f9298..00000000 --- a/src/html/menu/content/header/color.html +++ /dev/null @@ -1,141 +0,0 @@ - diff --git a/src/html/menu/content/header/coloraccent.html b/src/html/menu/content/header/coloraccent.html deleted file mode 100644 index e191ef63..00000000 --- a/src/html/menu/content/header/coloraccent.html +++ /dev/null @@ -1,51 +0,0 @@ - diff --git a/src/html/menu/content/header/date.html b/src/html/menu/content/header/date.html deleted file mode 100644 index f6555b49..00000000 --- a/src/html/menu/content/header/date.html +++ /dev/null @@ -1,193 +0,0 @@ - diff --git a/src/html/menu/content/header/editadd.html b/src/html/menu/content/header/editadd.html deleted file mode 100644 index c54b3005..00000000 --- a/src/html/menu/content/header/editadd.html +++ /dev/null @@ -1,43 +0,0 @@ - diff --git a/src/html/menu/content/header/greeting.html b/src/html/menu/content/header/greeting.html deleted file mode 100644 index 124ddd98..00000000 --- a/src/html/menu/content/header/greeting.html +++ /dev/null @@ -1,66 +0,0 @@ - diff --git a/src/html/menu/content/header/menu.html b/src/html/menu/content/header/menu.html deleted file mode 100644 index 48a50764..00000000 --- a/src/html/menu/content/header/menu.html +++ /dev/null @@ -1,35 +0,0 @@ - diff --git a/src/html/menu/content/header/order.html b/src/html/menu/content/header/order.html deleted file mode 100644 index 69c7836e..00000000 --- a/src/html/menu/content/header/order.html +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/src/html/menu/content/header/position.html b/src/html/menu/content/header/position.html deleted file mode 100644 index 794e13c3..00000000 --- a/src/html/menu/content/header/position.html +++ /dev/null @@ -1,30 +0,0 @@ - diff --git a/src/html/menu/content/header/search.html b/src/html/menu/content/header/search.html deleted file mode 100644 index 06254b4c..00000000 --- a/src/html/menu/content/header/search.html +++ /dev/null @@ -1,166 +0,0 @@ - diff --git a/src/html/menu/content/header/transitional.html b/src/html/menu/content/header/transitional.html deleted file mode 100644 index b1255e5c..00000000 --- a/src/html/menu/content/header/transitional.html +++ /dev/null @@ -1,49 +0,0 @@ - diff --git a/src/html/menu/content/layout.html b/src/html/menu/content/layout.html deleted file mode 100644 index 399a265d..00000000 --- a/src/html/menu/content/layout.html +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/src/html/menu/content/layout/alignment.html b/src/html/menu/content/layout/alignment.html deleted file mode 100644 index 8eeb0c73..00000000 --- a/src/html/menu/content/layout/alignment.html +++ /dev/null @@ -1,98 +0,0 @@ - diff --git a/src/html/menu/content/layout/area.html b/src/html/menu/content/layout/area.html deleted file mode 100644 index 096c66e9..00000000 --- a/src/html/menu/content/layout/area.html +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/src/html/menu/content/layout/gutter.html b/src/html/menu/content/layout/gutter.html deleted file mode 100644 index 6f9b5b38..00000000 --- a/src/html/menu/content/layout/gutter.html +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/src/html/menu/content/layout/padding.html b/src/html/menu/content/layout/padding.html deleted file mode 100644 index 78c4c900..00000000 --- a/src/html/menu/content/layout/padding.html +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/src/html/menu/content/layout/page.html b/src/html/menu/content/layout/page.html deleted file mode 100644 index 33058b27..00000000 --- a/src/html/menu/content/layout/page.html +++ /dev/null @@ -1,38 +0,0 @@ - diff --git a/src/html/menu/content/layout/scaling.html b/src/html/menu/content/layout/scaling.html deleted file mode 100644 index f7754d84..00000000 --- a/src/html/menu/content/layout/scaling.html +++ /dev/null @@ -1,19 +0,0 @@ - diff --git a/src/html/menu/content/nighttab.html b/src/html/menu/content/nighttab.html deleted file mode 100644 index b724e100..00000000 --- a/src/html/menu/content/nighttab.html +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/src/html/menu/content/nighttab/nighttab.html b/src/html/menu/content/nighttab/nighttab.html deleted file mode 100644 index 3eb037ac..00000000 --- a/src/html/menu/content/nighttab/nighttab.html +++ /dev/null @@ -1,19 +0,0 @@ - diff --git a/src/html/menu/content/theme.html b/src/html/menu/content/theme.html deleted file mode 100644 index 639aab7c..00000000 --- a/src/html/menu/content/theme.html +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/src/html/menu/content/theme/accent.html b/src/html/menu/content/theme/accent.html deleted file mode 100644 index f88f39e4..00000000 --- a/src/html/menu/content/theme/accent.html +++ /dev/null @@ -1,129 +0,0 @@ - diff --git a/src/html/menu/content/theme/color.html b/src/html/menu/content/theme/color.html deleted file mode 100644 index e0e678b6..00000000 --- a/src/html/menu/content/theme/color.html +++ /dev/null @@ -1,163 +0,0 @@ - diff --git a/src/html/menu/content/theme/fonts.html b/src/html/menu/content/theme/fonts.html deleted file mode 100644 index 47ac280f..00000000 --- a/src/html/menu/content/theme/fonts.html +++ /dev/null @@ -1,126 +0,0 @@ - diff --git a/src/html/menu/content/theme/preset.html b/src/html/menu/content/theme/preset.html deleted file mode 100644 index 25d4ef35..00000000 --- a/src/html/menu/content/theme/preset.html +++ /dev/null @@ -1,11 +0,0 @@ - diff --git a/src/html/menu/content/theme/radius.html b/src/html/menu/content/theme/radius.html deleted file mode 100644 index b3096f92..00000000 --- a/src/html/menu/content/theme/radius.html +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/src/html/menu/content/theme/saved.html b/src/html/menu/content/theme/saved.html deleted file mode 100644 index 19be89d1..00000000 --- a/src/html/menu/content/theme/saved.html +++ /dev/null @@ -1,20 +0,0 @@ - diff --git a/src/html/menu/content/theme/shade.html b/src/html/menu/content/theme/shade.html deleted file mode 100644 index 82248447..00000000 --- a/src/html/menu/content/theme/shade.html +++ /dev/null @@ -1,18 +0,0 @@ - diff --git a/src/html/menu/content/theme/shadow.html b/src/html/menu/content/theme/shadow.html deleted file mode 100644 index bf75fa2f..00000000 --- a/src/html/menu/content/theme/shadow.html +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/src/html/menu/content/theme/style.html b/src/html/menu/content/theme/style.html deleted file mode 100644 index 487afb12..00000000 --- a/src/html/menu/content/theme/style.html +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/src/html/menu/nav.html b/src/html/menu/nav.html deleted file mode 100644 index 37041e44..00000000 --- a/src/html/menu/nav.html +++ /dev/null @@ -1,98 +0,0 @@ - diff --git a/src/html/script-js.html b/src/html/script-js.html deleted file mode 100644 index 123c8e28..00000000 --- a/src/html/script-js.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/icon/favicon.svg b/src/icon/favicon.svg new file mode 100644 index 00000000..7fcfaa8e --- /dev/null +++ b/src/icon/favicon.svg @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/icon/icon-128.png b/src/icon/icon-128.png new file mode 100644 index 00000000..312c6d64 Binary files /dev/null and b/src/icon/icon-128.png differ diff --git a/src/icon/icon-16.png b/src/icon/icon-16.png new file mode 100644 index 00000000..96f44a97 Binary files /dev/null and b/src/icon/icon-16.png differ diff --git a/src/icon/icon-48.png b/src/icon/icon-48.png new file mode 100644 index 00000000..ee8d5d5a Binary files /dev/null and b/src/icon/icon-48.png differ diff --git a/src/icon/icon-512.png b/src/icon/icon-512.png new file mode 100644 index 00000000..15fe6ab3 Binary files /dev/null and b/src/icon/icon-512.png differ diff --git a/src/icon/icon-512.svg b/src/icon/icon-512.svg new file mode 100644 index 00000000..3d3f3d38 --- /dev/null +++ b/src/icon/icon-512.svg @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/icons/icon-128.png b/src/icons/icon-128.png deleted file mode 100644 index fee5f4b1..00000000 Binary files a/src/icons/icon-128.png and /dev/null differ diff --git a/src/icons/icon-16.png b/src/icons/icon-16.png deleted file mode 100644 index 6f39b3af..00000000 Binary files a/src/icons/icon-16.png and /dev/null differ diff --git a/src/icons/icon-48.png b/src/icons/icon-48.png deleted file mode 100644 index d18c3a77..00000000 Binary files a/src/icons/icon-48.png and /dev/null differ diff --git a/src/index.html b/src/index.html index 33c62858..14c033e8 100644 --- a/src/index.html +++ b/src/index.html @@ -5,41 +5,12 @@ New Tab + + - - - @@include("./html/link-css.html") - - - + - - - @@include("./html/background.html") - - @@include("./html/layout.html") - - @@include("./html/menu.html") - - @@include("./html/script-js.html") - - + diff --git a/src/index.js b/src/index.js new file mode 100644 index 00000000..0ed9eafa --- /dev/null +++ b/src/index.js @@ -0,0 +1,29 @@ +import { component } from './component'; + +console.log(component.appName + ' version:', component.version.number, component.version.name); + +component.data.init(); + +component.theme.init(); + +component.layout.init(); + +component.toolbar.init(); + +component.header.init(); + +component.group.init(); + +component.bookmark.init(); + +component.groupAndBookmark.init(); + +component.pageLock.init(); + +component.keyboard.init(); + +component.menu.init(); + +// component.menu.open(); + +// document.addEventListener('focusin', () => { console.log('focused: ', document.activeElement); }); diff --git a/src/initialBackground.js b/src/initialBackground.js new file mode 100644 index 00000000..86a2e0b5 --- /dev/null +++ b/src/initialBackground.js @@ -0,0 +1,15 @@ +// inital check for systems which do not have light or dark mode +if (localStorage.getItem('hexagonTabStyle')) { + var style = document.createElement('style'); + style.type = 'text/css'; + style.media = 'screen'; + switch (localStorage.getItem('hexagonTabStyle')) { + case 'light': + style.innerHTML = 'html, body {background-color: rgb(255, 255, 255);}'; + break; + case 'dark': + style.innerHTML = 'html, body {background-color: rgb(0, 0, 0);}'; + break; + }; + document.querySelector('head').appendChild(style); +}; diff --git a/src/js/auto-suggest.js b/src/js/auto-suggest.js deleted file mode 100644 index d8561512..00000000 --- a/src/js/auto-suggest.js +++ /dev/null @@ -1,287 +0,0 @@ -var autoSuggest = (function() { - - var _timer = null; - var _currentInputOptions = {}; - var _autoSuggestActive = false; - - var mod = {}; - - mod.open = function() { - helper.setObject({ - object: state.get.current(), - path: "autoSuggest", - newValue: true - }); - }; - - mod.close = function() { - helper.setObject({ - object: state.get.current(), - path: "autoSuggest", - newValue: false - }); - }; - - var bind = {}; - - bind.input = function(override) { - var options = { - input: null, - anchorElement: null, - type: null, - postFocus: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - if (options.input) { - options.input.addEventListener("focus", function() { - if (!_autoSuggestActive) { - clearTimeout(_timer); - _timer = setTimeout(render.delay, 300, options); - }; - }, false); - options.input.addEventListener("input", function() { - clearTimeout(_timer); - _timer = setTimeout(render.delay, 300, options); - }, false); - }; - }; - - bind.navigateResults = function(event) { - var elementToFocus = null; - var focusIndex = null; - var allSuggestItems = helper.eA(".auto-suggest-item"); - var columnCount = getComputedStyle(helper.e(".auto-suggest-list")).getPropertyValue("grid-template-columns").split(" ").length; - var _findInput = function() { - if (event.target.classList.contains("auto-suggest-input")) { - _currentInputOptions.input = event.target; - }; - }; - var _findFocus = function() { - for (var i = 0; i < allSuggestItems.length; i++) { - if (allSuggestItems[i] == document.activeElement) { - focusIndex = i; - }; - }; - }; - var _keyEvents = function() { - // 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 = _currentInputOptions.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 = _currentInputOptions.input; - }; - }; - }; - // right - if (event.keyCode == 39 && document.activeElement != _currentInputOptions.input) { - event.preventDefault(); - if (focusIndex == null) { - elementToFocus = allSuggestItems[0]; - } else { - if (focusIndex >= 0 && focusIndex < allSuggestItems.length - 1) { - elementToFocus = allSuggestItems[focusIndex + 1]; - } else { - elementToFocus = _currentInputOptions.input; - }; - }; - }; - // left - if (event.keyCode == 37 && document.activeElement != _currentInputOptions.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 = _currentInputOptions.input; - }; - }; - }; - // tab - if (!event.shiftKey && event.keyCode == 9 && document.activeElement == _currentInputOptions.input) { - event.preventDefault(); - elementToFocus = allSuggestItems[0]; - }; - if (!event.shiftKey && event.keyCode == 9 && document.activeElement == allSuggestItems[allSuggestItems.length - 1]) { - event.preventDefault(); - elementToFocus = _currentInputOptions.postFocus; - render.close(); - }; - // shift tab - if (event.shiftKey && event.keyCode == 9 && document.activeElement == allSuggestItems[0]) { - event.preventDefault(); - elementToFocus = _currentInputOptions.input; - }; - if (event.shiftKey && event.keyCode == 9 && document.activeElement == _currentInputOptions.input) { - render.close(); - }; - }; - _findInput(); - _findFocus(); - _keyEvents(); - if (elementToFocus) { - elementToFocus.focus(); - }; - }; - - bind.documentEvent = { - add: function() { - document.addEventListener("click", bind.documentEvent.clickOut, false); - document.addEventListener("keydown", bind.navigateResults, false); - }, - remove: function() { - document.removeEventListener("click", bind.documentEvent.clickOut, false); - document.removeEventListener("keydown", bind.navigateResults, false); - }, - clickOut: function(event) { - if (!(event.target.classList.contains("auto-suggest")) && !(event.target.classList.contains("auto-suggest-list")) && !(event.target.classList.contains("auto-suggest-input"))) { - render.close(); - }; - } - }; - - var render = {}; - - render.delay = function(options) { - mod.open(); - render.open(options); - }; - - render.open = function(options) { - _currentInputOptions = options; - var body = helper.e("body"); - var suggestItems = render.suggestItems(options); - var _populateList = function(list) { - var action = { - fontawesomeIcon: function() { - suggestItems.forEach(function(arrayItem) { - var li = helper.node("li|class:auto-suggest-list-item"); - var button = helper.node("button|tabindex:1,class:button button-link button-ring auto-suggest-item"); - var icon = helper.node("span|class:auto-suggest-icon fa-" + arrayItem.name); - if (arrayItem.styles.includes("solid")) { - helper.addClass(icon, "fas"); - } else if (arrayItem.styles.includes("brands")) { - helper.addClass(icon, "fab"); - }; - button.addEventListener("click", function() { - link.render.autoSuggestIconAction(arrayItem); - }, false); - var text = helper.node("span:" + arrayItem.label + "|class:auto-suggest-icon-text"); - button.appendChild(icon); - button.appendChild(text); - li.appendChild(button); - list.appendChild(li); - }); - } - }; - action[_currentInputOptions.type](); - }; - var _renderAutoSuggest = function() { - var autoSuggestInput = helper.e(".auto-suggest-input"); - var autoSuggest = helper.e(".auto-suggest"); - var autoSuggestList = helper.e(".auto-suggest-list"); - if (autoSuggest) { - while (autoSuggestList.lastChild) { - autoSuggestList.removeChild(autoSuggestList.lastChild); - }; - } else { - var box = { - left: autoSuggestInput.getBoundingClientRect().left, - top: autoSuggestInput.getBoundingClientRect().bottom + window.scrollY, - width: autoSuggestInput.getBoundingClientRect().width - }; - if (options.anchorElement) { - box.width = options.anchorElement.getBoundingClientRect().width; - box.left = options.anchorElement.getBoundingClientRect().left; - }; - var autoSuggest = helper.node("div|class:auto-suggest list-unstyled is-jello"); - var autoSuggestList = helper.node("ul|class:auto-suggest-list list-unstyled"); - autoSuggest.appendChild(autoSuggestList); - body.appendChild(autoSuggest); - autoSuggest.setAttribute("style", "width: " + box.width + "px; top: " + box.top + "px; left: " + box.left + "px;"); - bind.documentEvent.add(); - }; - _populateList(autoSuggestList); - }; - if (suggestItems.length > 0) { - _autoSuggestActive = true; - _renderAutoSuggest(); - } else { - render.close(); - }; - }; - - render.close = function() { - mod.close(); - var autoSuggest = helper.e(".auto-suggest"); - if (autoSuggest) { - autoSuggest.remove(); - bind.documentEvent.remove(); - _currentInputOptions = {}; - _autoSuggestActive = false; - }; - }; - - render.suggestItems = function() { - var searchTerm = helper.trimString(_currentInputOptions.input.value); - var action = { - fontawesomeIcon: function() { - if (helper.checkIfValidString(searchTerm)) { - return fontawesome.icons.filter(function(item) { - var match = false; - if (item.name.toLowerCase().includes(searchTerm.toLowerCase()) || item.label.toLowerCase().includes(searchTerm.toLowerCase())) { - match = true; - }; - item.search.forEach(function(item, index) { - if (item.toLowerCase().includes(searchTerm.toLowerCase())) { - match = true; - }; - }); - item.styles.forEach(function(item, index) { - if (item.toLowerCase().includes(searchTerm.toLowerCase())) { - match = true; - }; - }); - return match; - }); - } else { - return fontawesome.icons; - }; - } - }; - return action[_currentInputOptions.type](); - }; - - var close = function() { - render.close(); - }; - - // exposed methods - return { - bind: bind, - render: render, - close: close - }; - -})(); diff --git a/src/js/background.js b/src/js/background.js deleted file mode 100644 index 3f95486c..00000000 --- a/src/js/background.js +++ /dev/null @@ -1,322 +0,0 @@ -var background = (function() { - - var mod = {}; - - mod.color = { - hsl: function() { - var hsl = helper.convertColor.rgb.hsl(state.get.current().background.color.rgb); - helper.setObject({ - object: state.get.current(), - path: "background.color.hsl", - newValue: { - h: Math.round(hsl.h), - s: Math.round(hsl.s), - l: Math.round(hsl.l) - } - }); - }, - rgb: function() { - var rgb = helper.convertColor.hsl.rgb(state.get.current().background.color.hsl); - helper.setObject({ - object: state.get.current(), - path: "background.color.rgb", - newValue: { - r: Math.round(rgb.r), - g: Math.round(rgb.g), - b: Math.round(rgb.b) - } - }); - } - }; - - mod.import = function() { - // get files from input - var fileList = helper.e(".control-background-visual-image-file").files; - // if file was added - if (fileList.length > 0) { - // validate the file - _validateImageFile(fileList); - }; - }; - - mod.visual = {}; - - mod.visual.image = { - file: function(name, data) { - helper.setObject({ - object: state.get.current(), - path: "background.visual.image.file.name", - newValue: name - }); - helper.setObject({ - object: state.get.current(), - path: "background.visual.image.file.data", - newValue: data - }); - }, - clear: function() { - helper.setObject({ - object: state.get.current(), - path: "background.visual.image.file.name", - newValue: "" - }); - helper.setObject({ - object: state.get.current(), - path: "background.visual.image.file.data", - newValue: "" - }); - } - }; - - var bind = {}; - - bind.feedback = { - animation: { - set: function(animationClass, action) { - var controlBackgroundImageFileFeedback = helper.e(".control-background-visual-image-file-feedback"); - helper.addClass(controlBackgroundImageFileFeedback, animationClass); - var animationEndAction = function() { - if (action) { - action(); - }; - bind.feedback.animation.reset(); - }; - controlBackgroundImageFileFeedback.addEventListener("animationend", animationEndAction, false); - }, - reset: function() { - var controlBackgroundImageFileFeedback = helper.e(".control-background-visual-image-file-feedback"); - helper.removeClass(controlBackgroundImageFileFeedback, "is-shake"); - helper.removeClass(controlBackgroundImageFileFeedback, "is-pop"); - helper.removeClass(controlBackgroundImageFileFeedback, "is-jello"); - controlBackgroundImageFileFeedback.removeEventListener("animationend", bind.feedback.animation.reset, false); - } - } - }; - - var render = {}; - - render.color = { - custom: function() { - helper.e("html").style.setProperty("--background-color-custom", state.get.current().background.color.rgb.r + ", " + state.get.current().background.color.rgb.g + ", " + state.get.current().background.color.rgb.b); - } - }; - - render.visual = { - blur: function() { - var html = helper.e("html"); - html.style.setProperty("--background-visual-blur", state.get.current().background.visual.blur + "px"); - }, - grayscale: function() { - var html = helper.e("html"); - html.style.setProperty("--background-visual-grayscale", state.get.current().background.visual.grayscale); - }, - opacity: function() { - var html = helper.e("html"); - html.style.setProperty("--background-visual-opacity", state.get.current().background.visual.opacity); - }, - scale: function() { - var html = helper.e("html"); - html.style.setProperty("--background-visual-scale", state.get.current().background.visual.scale); - }, - accent: function() { - var html = helper.e("html"); - html.style.setProperty("--background-visual-accent", state.get.current().background.visual.accent); - }, - vignette: { - opacity: function() { - var html = helper.e("html"); - html.style.setProperty("--background-visual-vignette-opacity", state.get.current().background.visual.vignette.opacity + "%"); - }, - start: function() { - var html = helper.e("html"); - html.style.setProperty("--background-visual-vignette-start", state.get.current().background.visual.vignette.start + "%"); - }, - end: function() { - var html = helper.e("html"); - html.style.setProperty("--background-visual-vignette-end", state.get.current().background.visual.vignette.end + "%"); - } - } - }; - - render.visual.image = { - set: function() { - var html = helper.e("html"); - if (state.get.current().background.visual.show && state.get.current().background.visual.type == "image") { - if (state.get.current().background.visual.image.type == "file") { - html.style.setProperty("--background-visual-image", "url(" + state.get.current().background.visual.image.file.data + ")"); - } else if (state.get.current().background.visual.image.type == "url") { - if (helper.checkIfValidString(state.get.current().background.visual.image.url)) { - var allUrls = state.get.current().background.visual.image.url.split(/\s+/); - allUrls = allUrls.filter(function(arrayItem) { - return arrayItem.length > 0 && arrayItem != ""; - }); - var randomUrl = allUrls[Math.floor(Math.random() * allUrls.length)]; - html.style.setProperty("--background-visual-image", "url(" + randomUrl + ")"); - } else { - html.style.setProperty("--background-visual-image", "url(" + state.get.current().background.visual.image.url + ")"); - }; - }; - } else { - render.visual.image.clear(); - }; - }, - clear: function() { - var html = helper.e("html"); - html.style.setProperty("--background-visual-image", "none"); - helper.e(".control-background-visual-image-file").value = ""; - } - }; - - render.visual.video = { - set: function() { - if (state.get.current().background.visual.show && state.get.current().background.visual.type == "video") { - if (helper.checkIfValidString(state.get.current().background.visual.video.url)) { - var backgroundVisualVideo = helper.e(".background-visual-video"); - if (state.get.current().background.visual.video.url.includes("mp4") || state.get.current().background.visual.video.url.endsWith("mp4")) { - var video = helper.node("video|autoplay,loop,muted,type:video/mp4") - var source = helper.node("source|src:" + state.get.current().background.visual.video.url); - video.muted = true; - video.loop = true; - video.autoplay = true; - video.appendChild(source); - backgroundVisualVideo.appendChild(video); - } else if (state.get.current().background.visual.video.url.includes("webm") || state.get.current().background.visual.video.url.endsWith("webm")) { - var video = helper.node("video|autoplay,loop,muted,type:video/webm") - var source = helper.node("source|src:" + state.get.current().background.visual.video.url); - video.muted = true; - video.loop = true; - video.autoplay = true; - video.appendChild(source); - backgroundVisualVideo.appendChild(video); - }; - } else { - render.visual.video.clear(); - }; - }; - }, - clear: function() { - var backgroundVisualVideo = helper.e(".background-visual-video"); - while (backgroundVisualVideo.lastChild) { - backgroundVisualVideo.removeChild(backgroundVisualVideo.lastChild); - }; - } - }; - - render.feedback = { - init: function() { - if (helper.checkIfValidString(state.get.current().background.visual.image.file.name)) { - render.feedback.current(); - } else { - render.feedback.empty(); - }; - }, - empty: function() { - var controlBackgroundImageFileFeedback = helper.e(".control-background-visual-image-file-feedback"); - var para1 = helper.node("p:No image selected.|class:muted small"); - controlBackgroundImageFileFeedback.appendChild(para1); - }, - current: function() { - var controlBackgroundImageFileFeedback = helper.e(".control-background-visual-image-file-feedback"); - var para1 = helper.node("p:Image loaded.|class:muted small"); - var para2 = helper.node("p:" + state.get.current().background.visual.image.file.name); - controlBackgroundImageFileFeedback.appendChild(para1); - controlBackgroundImageFileFeedback.appendChild(para2); - }, - success: function(name, action) { - var controlBackgroundImageFileFeedback = helper.e(".control-background-visual-image-file-feedback"); - var para1 = helper.node("p:Success! Setting Background image.|class:muted small"); - var para2 = helper.node("p:" + name); - controlBackgroundImageFileFeedback.appendChild(para1); - controlBackgroundImageFileFeedback.appendChild(para2); - if (action) { - bind.feedback.animation.set("is-pop", action); - }; - }, - clear: function(override) { - var options = { - animate: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - var controlBackgroundImageFileFeedback = helper.e(".control-background-visual-image-file-feedback"); - while (controlBackgroundImageFileFeedback.lastChild) { - controlBackgroundImageFileFeedback.removeChild(controlBackgroundImageFileFeedback.lastChild); - }; - if (options.animate) { - bind.feedback.animation.set("is-jello"); - }; - }, - fail: { - filetype: function(name) { - var controlBackgroundImageFileFeedback = helper.e(".control-background-visual-image-file-feedback"); - var para1 = helper.node("p:Not the right kind of file. Make sure the selected file is an image.|class:small muted"); - var para2 = helper.node("p:" + name); - controlBackgroundImageFileFeedback.appendChild(para1); - controlBackgroundImageFileFeedback.appendChild(para2); - bind.feedback.animation.set("is-shake"); - }, - size: function(name) { - var controlBackgroundImageFileFeedback = helper.e(".control-background-visual-image-file-feedback"); - var para1 = helper.node("p:File size is too big. Max file size of 5MB.|class:small muted"); - var para2 = helper.node("p:" + name); - controlBackgroundImageFileFeedback.appendChild(para1); - controlBackgroundImageFileFeedback.appendChild(para2); - bind.feedback.animation.set("is-shake"); - } - } - }; - - var _validateImageFile = function(fileList) { - // make new file reader - var reader = new FileReader(); - // define the on load event for the reader - reader.onload = function(event) { - if (fileList.item(0).size <= 5000000) { - if (fileList.item(0).type.split("/")[0] == "image") { - mod.visual.image.file(fileList[0].name, event.target.result); - data.save(); - render.feedback.clear(); - render.feedback.success(fileList[0].name, render.visual.image.set); - render.visual.image.clear(); - } else { - // not an image file - render.feedback.clear(); - render.feedback.fail.filetype(fileList[0].name); - render.visual.image.clear(); - }; - } else { - // file size too big - render.feedback.clear(); - render.feedback.fail.size(fileList[0].name); - render.visual.image.clear(); - }; - }; - // invoke the reader - reader.readAsDataURL(fileList.item(0)); - }; - - var init = function() { - render.color.custom(); - render.visual.image.set(); - render.visual.video.set(); - render.visual.blur(); - render.visual.grayscale(); - render.visual.opacity(); - render.visual.scale(); - render.visual.accent(); - render.visual.vignette.opacity(); - render.visual.vignette.start(); - render.visual.vignette.end(); - render.feedback.init(); - }; - - // exposed methods - return { - init: init, - mod: mod, - render: render, - bind: bind - }; - -})(); diff --git a/src/js/bookmarks.js b/src/js/bookmarks.js deleted file mode 100644 index 32c56f4b..00000000 --- a/src/js/bookmarks.js +++ /dev/null @@ -1,846 +0,0 @@ -var bookmarks = (function() { - - var mod = {}; - - mod.all = [{ - name: { - text: "Cool stuff", - show: true - }, - openAll: { - show: true - }, - items: [{ - display: { - direction: "vertical", - order: "visualname", - alignment: "centercenter", - gutter: 2, - rotate: 0, - translate: { - x: 0, - y: 0 - }, - visual: { - show: true, - type: "icon", - 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: 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 - }, - background: { - show: false, - type: "image", - opacity: 1, - image: { - url: "" - }, - video: { - url: "" - } - }, - wide: false, - tall: false, - searchMatch: false, - timeStamp: 1546453104010 - }, { - display: { - direction: "vertical", - order: "visualname", - alignment: "centercenter", - gutter: 2, - rotate: 0, - translate: { - x: 0, - y: 0 - }, - 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: 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 - }, - background: { - show: false, - type: "image", - opacity: 1, - image: { - url: "" - }, - video: { - url: "" - } - }, - wide: false, - tall: false, - searchMatch: false, - timeStamp: 1546453107633 - }, { - display: { - direction: "vertical", - order: "visualname", - alignment: "centercenter", - gutter: 2, - rotate: 0, - translate: { - x: 0, - y: 0 - }, - 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: 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 - }, - background: { - show: false, - type: "image", - opacity: 1, - image: { - url: "" - }, - video: { - url: "" - } - }, - wide: false, - tall: false, - searchMatch: false, - timeStamp: 1546453110265 - }, { - display: { - direction: "vertical", - order: "visualname", - alignment: "centercenter", - gutter: 2, - rotate: 0, - translate: { - x: 0, - y: 0 - }, - visual: { - show: true, - type: "icon", - 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: 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 - }, - background: { - show: false, - type: "image", - opacity: 1, - image: { - url: "" - }, - video: { - url: "" - } - }, - wide: false, - tall: false, - searchMatch: false, - timeStamp: 1546453111491 - }, { - display: { - direction: "vertical", - order: "visualname", - alignment: "centercenter", - gutter: 2, - rotate: 0, - translate: { - x: 0, - y: 0 - }, - visual: { - show: true, - type: "icon", - letter: { - size: 3, - 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 - }, - background: { - show: false, - type: "image", - opacity: 1, - image: { - url: "" - }, - video: { - url: "" - } - }, - wide: false, - tall: false, - searchMatch: false, - timeStamp: 1546453104460 - }, { - display: { - direction: "vertical", - order: "visualname", - alignment: "centercenter", - gutter: 2, - rotate: 0, - translate: { - x: 0, - y: 0 - }, - 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: 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 - }, - background: { - show: false, - type: "image", - opacity: 1, - image: { - url: "" - }, - video: { - url: "" - } - }, - wide: false, - tall: false, - searchMatch: false, - timeStamp: 1546453111953 - }] - }, { - name: { - text: "Dev sites", - show: true - }, - openAll: { - show: true - }, - items: [{ - display: { - direction: "vertical", - order: "visualname", - alignment: "centercenter", - gutter: 2, - rotate: 0, - translate: { - x: 0, - y: 0 - }, - visual: { - show: true, - type: "icon", - letter: { - size: 3, - 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 - }, - background: { - show: false, - type: "image", - opacity: 1, - image: { - url: "" - }, - video: { - url: "" - } - }, - wide: false, - tall: false, - searchMatch: false, - timeStamp: 1546453101749 - }, { - display: { - direction: "vertical", - order: "visualname", - alignment: "centercenter", - gutter: 2, - rotate: 0, - translate: { - x: 0, - y: 0 - }, - visual: { - show: true, - type: "icon", - letter: { - size: 3, - 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 - }, - background: { - show: false, - type: "image", - opacity: 1, - image: { - url: "" - }, - video: { - url: "" - } - }, - wide: false, - tall: false, - searchMatch: false, - timeStamp: 1546453108926 - }] - }]; - - mod.get = function(data) { - var _singleBookmark = function() { - var found = false; - if (mod.all.length > 0) { - mod.all.forEach(function(arrayItem, index) { - arrayItem.forEach(function(arrayItem, index) { - if (arrayItem[index].timeStamp === data.timeStamp) { - found = arrayItem[index]; - }; - }); - }); - }; - return found; - }; - if (data && typeof data.timeStamp == "number") { - return _singleBookmark(); - } else { - return mod.all; - }; - }; - - mod.restore = function(data) { - if ("bookmarks" in data) { - mod.all = data.bookmarks; - }; - }; - - mod.add = { - link: function(data) { - if (data) { - if (data.position.group.new) { - mod.add.group({ - position: { - origin: null, - destination: data.position.destination.group - }, - group: { - name: { - text: data.position.group.name.text, - show: data.position.group.name.show - }, - openAll: { - show: data.position.group.openAll.show - }, - items: [] - } - }); - }; - mod.all[data.position.destination.group].items.splice(data.position.destination.item, 0, data.link); - }; - }, - group: function(data) { - if (data) { - mod.all.splice(data.position.destination, 0, data.group); - }; - } - }; - - mod.edit = { - link: function(data) { - if (data.position.group.new) { - mod.add.group({ - position: { - origin: null, - destination: data.position.destination.group - }, - group: { - name: { - text: data.position.group.name.text, - show: data.position.group.name.show - }, - openAll: { - show: data.position.group.openAll.show - }, - items: [] - } - }); - }; - var item = JSON.parse(JSON.stringify(data.link)); - mod.all[data.position.origin.group].items.splice(data.position.origin.item, 1); - mod.all[data.position.destination.group].items.splice(data.position.destination.item, 0, item); - }, - group: function(data) { - var group = JSON.parse(JSON.stringify(data.group)); - mod.all.splice(data.position.origin, 1); - mod.all.splice(data.position.destination, 0, group); - } - }; - - mod.remove = { - link: function(data) { - mod.all[data.position.origin.group].items.splice(data.position.origin.item, 1); - }, - group: function(data) { - mod.all.splice(data.position.origin, 1); - } - }; - - mod.sort = function(by) { - var action = { - name: function(array) { - return helper.sortObject(array, "display.name.text"); - }, - letter: function(array) { - return helper.sortObject(array, "display.visual.letter.text"); - }, - icon: function(array) { - return helper.sortObject(array, "display.visual.icon.name"); - } - }; - mod.all.forEach(function(arrayItem, index) { - arrayItem.items = action[by](arrayItem.items); - }); - }; - - mod.move = { - link: function(data) { - var item = JSON.parse(JSON.stringify(mod.all[data.position.origin.group].items[data.position.origin.item])); - mod.all[data.position.origin.group].items.splice(data.position.origin.item, 1); - mod.all[data.position.destination.group].items.splice(data.position.destination.item, 0, item); - }, - group: function(data) { - var group = JSON.parse(JSON.stringify(mod.all[data.position.origin])); - mod.all.splice(data.position.origin, 1); - mod.all.splice(data.position.destination, 0, group); - } - }; - - mod.count = function() { - var count = 0; - mod.all.forEach(function(arrayItem, index) { - count = count + arrayItem.items.length - }); - return count; - }; - - var count = function() { - return mod.count(); - }; - - var get = function(data) { - return mod.get(data); - }; - - var sort = function(by) { - mod.sort(by); - }; - - var remove = { - link: function(data) { - mod.remove.link(data); - }, - group: function(data) { - mod.remove.group(data); - } - }; - - var init = function() { - if (data.load()) { - mod.restore(data.load()); - }; - }; - - // exposed methods - return { - init: init, - mod: mod, - get: get, - sort: sort, - count: count, - remove: remove - }; - -})(); diff --git a/src/js/clock.js b/src/js/clock.js deleted file mode 100644 index a1666bc7..00000000 --- a/src/js/clock.js +++ /dev/null @@ -1,152 +0,0 @@ -var clock = (function() { - - var bind = {}; - - bind.tick = function() { - window.setInterval(function() { - render.clear(); - render.all(); - }, 1000); - }; - - var render = {}; - - render.clear = function() { - if (state.get.current().header.clock.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.show) { - var clock = helper.e(".clock"); - while (clock.lastChild) { - clock.removeChild(clock.lastChild); - }; - }; - }; - - render.all = function() { - if (state.get.current().header.clock.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.show) { - var timeDateNow = moment(); - var timeStrings = { - hours: null, - minutes: null, - seconds: null, - meridiem: null - }; - var action = { - hours: { - word: function() { - timeStrings.hours = timeDateNow.hours(); - if (!state.get.current().header.clock.hour24.show && timeDateNow.hours() > 12) { - timeStrings.hours = timeStrings.hours - 12; - }; - if (!state.get.current().header.clock.hour24.show && timeDateNow.hours() == 0) { - timeStrings.hours = 12; - }; - timeStrings.hours = helper.toWords(timeStrings.hours); - if (state.get.current().header.clock.hour24.show && timeDateNow.hours() > 0 && timeDateNow.hours() < 10) { - timeStrings.hours = "Zero " + timeStrings.hours; - }; - }, - number: function() { - timeStrings.hours = timeDateNow.hours(); - if (!state.get.current().header.clock.hour24.show && timeDateNow.hours() > 12) { - timeStrings.hours = timeStrings.hours - 12; - }; - if (!state.get.current().header.clock.hour24.show && timeDateNow.hours() == 0) { - timeStrings.hours = 12; - }; - if (state.get.current().header.clock.hour24.show && timeDateNow.hours() < 10) { - timeStrings.hours = "0" + timeStrings.hours; - }; - } - }, - minutes: { - word: function() { - timeStrings.minutes = helper.toWords(timeDateNow.minutes()); - if (timeDateNow.minutes() > 0 && timeDateNow.minutes() < 10) { - timeStrings.minutes = "Zero " + timeStrings.minutes; - }; - }, - number: function() { - timeStrings.minutes = timeDateNow.minutes(); - if (timeDateNow.minutes() < 10) { - timeStrings.minutes = "0" + timeStrings.minutes; - }; - } - }, - seconds: { - word: function() { - timeStrings.seconds = helper.toWords(timeDateNow.seconds()); - if (timeDateNow.seconds() > 0 && timeDateNow.seconds() < 10) { - timeStrings.seconds = "Zero " + timeStrings.seconds; - }; - }, - number: function() { - timeStrings.seconds = timeDateNow.seconds(); - if (timeDateNow.seconds() < 10) { - timeStrings.seconds = "0" + timeStrings.seconds; - }; - } - }, - meridiem: function() { - timeStrings.meridiem = timeDateNow.format("A"); - } - }; - action.hours[state.get.current().header.clock.hours.display](); - action.minutes[state.get.current().header.clock.minutes.display](); - action.seconds[state.get.current().header.clock.seconds.display](); - action.meridiem(); - var clock = helper.e(".clock"); - var elementHours = helper.node("span:" + timeStrings.hours + "|class:clock-item clock-hours"); - var elementMinutes = helper.node("span:" + timeStrings.minutes + "|class:clock-item clock-minutes"); - var elementSeconds = helper.node("span:" + timeStrings.seconds + "|class:clock-item clock-seconds"); - var elementMeridiem = helper.node("span:" + timeStrings.meridiem + "|class:clock-item clock-meridiem"); - if (state.get.current().header.clock.hours.show) { - clock.appendChild(elementHours); - }; - if (state.get.current().header.clock.minutes.show) { - clock.appendChild(elementMinutes); - }; - if (state.get.current().header.clock.seconds.show) { - clock.appendChild(elementSeconds); - }; - if (!state.get.current().header.clock.hour24.show && state.get.current().header.clock.meridiem.show) { - clock.appendChild(elementMeridiem); - }; - if (state.get.current().header.clock.separator.show) { - var separatorCharacter; - if (helper.checkIfValidString(state.get.current().header.clock.separator.text)) { - separatorCharacter = helper.trimString(state.get.current().header.clock.separator.text); - } else { - separatorCharacter = ":"; - }; - var parts = clock.querySelectorAll("span"); - if (parts.length > 1) { - parts.forEach(function(arrayItem, index) { - if (index > 0 && !arrayItem.classList.contains("clock-meridiem")) { - var separator = helper.makeNode({ - tag: "span", - text: separatorCharacter, - attr: [{ - key: "class", - value: "clock-item clock-separator" - }] - }); - clock.insertBefore(separator, arrayItem); - }; - }); - }; - }; - }; - }; - - var init = function() { - bind.tick(); - render.all(); - }; - - // exposed methods - return { - init: init, - bind: bind, - render: render - }; - -})(); diff --git a/src/js/control.js b/src/js/control.js deleted file mode 100644 index f2f7b7b6..00000000 --- a/src/js/control.js +++ /dev/null @@ -1,11982 +0,0 @@ -var control = (function() { - - var mod = {}; - - mod.debug = { - active: false, - toggle: function() { - if (mod.debug.active) { - mod.debug.active = false; - } else { - mod.debug.active = true; - }; - } - }; - - mod.header = [{ - element: ".control-menu-open", - type: "button", - func: function() { - menu.open(); - theme.render.custom.tabIndex(); - }, - }, { - element: ".control-add-link", - type: "button", - func: function() { - link.add.item.open(); - } - }, { - element: ".control-add-group", - type: "button", - func: function() { - link.add.group.open(); - } - }, { - element: ".control-edit", - path: "edit", - type: "checkbox", - func: function() { - link.tabindex(); - render.class(); - } - }, { - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color", - mirrorElement: [{ - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-hsl-h-range", - path: "theme.color.hsl.h", - type: "range" - }, { - element: ".control-theme-color-hsl-h-number", - path: "theme.color.hsl.h", - type: "number" - }, { - element: ".control-theme-color-hsl-s-range", - path: "theme.color.hsl.s", - type: "range" - }, { - element: ".control-theme-color-hsl-s-number", - path: "theme.color.hsl.s", - type: "number" - }, { - element: ".control-theme-color-hsl-l-range", - path: "theme.color.hsl.l", - type: "range" - }, { - element: ".control-theme-color-hsl-l-number", - path: "theme.color.hsl.l", - type: "number" - }, { - element: ".control-theme-color-rgb-r-range", - path: "theme.color.rgb.r", - type: "range" - }, { - element: ".control-theme-color-rgb-r-number", - path: "theme.color.rgb.r", - type: "number" - }, { - element: ".control-theme-color-rgb-g-range", - path: "theme.color.rgb.g", - type: "range" - }, { - element: ".control-theme-color-rgb-g-number", - path: "theme.color.rgb.g", - type: "number" - }, { - element: ".control-theme-color-rgb-b-range", - path: "theme.color.rgb.b", - type: "range" - }, { - element: ".control-theme-color-rgb-b-number", - path: "theme.color.rgb.b", - type: "number" - }], - func: function() { - theme.mod.color.hsl(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color", - mirrorElement: [{ - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-hsl-h-range", - path: "theme.accent.hsl.h", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-number", - path: "theme.accent.hsl.h", - type: "number" - }, { - element: ".control-theme-accent-hsl-s-range", - path: "theme.accent.hsl.s", - type: "range" - }, { - element: ".control-theme-accent-hsl-s-number", - path: "theme.accent.hsl.s", - type: "number" - }, { - element: ".control-theme-accent-hsl-l-range", - path: "theme.accent.hsl.l", - type: "range" - }, { - element: ".control-theme-accent-hsl-l-number", - path: "theme.accent.hsl.l", - type: "number" - }, { - element: ".control-theme-accent-rgb-r-range", - path: "theme.accent.rgb.r", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-number", - path: "theme.accent.rgb.r", - type: "number" - }, { - element: ".control-theme-accent-rgb-g-range", - path: "theme.accent.rgb.g", - type: "range" - }, { - element: ".control-theme-accent-rgb-g-number", - path: "theme.accent.rgb.g", - type: "number" - }, { - element: ".control-theme-accent-rgb-b-range", - path: "theme.accent.rgb.b", - type: "range" - }, { - element: ".control-theme-accent-rgb-b-number", - path: "theme.accent.rgb.b", - type: "number" - }], - func: function() { - theme.mod.accent.hsl(); - theme.render.accent.color(); - } - }]; - - mod.menu = { - controls: { - nav: { - buttons: [{ - element: ".control-menu-layout", - type: "button", - func: function() { - menu.nav("layout"); - theme.render.custom.tabIndex(); - } - }, { - element: ".control-menu-header", - type: "button", - func: function() { - menu.nav("header"); - theme.render.custom.tabIndex(); - } - }, { - element: ".control-menu-groups", - type: "button", - func: function() { - menu.nav("groups"); - theme.render.custom.tabIndex(); - } - }, { - element: ".control-menu-bookmarks", - type: "button", - func: function() { - menu.nav("bookmarks"); - theme.render.custom.tabIndex(); - } - }, { - element: ".control-menu-theme", - type: "button", - func: function() { - menu.nav("theme"); - theme.render.custom.tabIndex(); - } - }, { - element: ".control-menu-background", - type: "button", - func: function() { - menu.nav("background"); - theme.render.custom.tabIndex(); - } - }, { - element: ".control-menu-data", - type: "button", - func: function() { - menu.nav("data"); - theme.render.custom.tabIndex(); - } - }, { - element: ".control-menu-firefox", - type: "button", - func: function() { - menu.nav("firefox"); - theme.render.custom.tabIndex(); - } - }, { - element: ".control-menu-coffee", - type: "button", - func: function() { - menu.nav("coffee"); - theme.render.custom.tabIndex(); - } - }, { - element: ".control-menu-nighttab", - type: "button", - func: function() { - menu.nav("nighttab"); - theme.render.custom.tabIndex(); - } - }, { - element: ".control-menu-close", - type: "button", - func: function() { - menu.close(); - theme.render.custom.tabIndex(); - } - }] - }, - layout: { - scaling: [{ - element: ".control-layout-size-range", - path: "layout.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 50, - max: 200, - step: 5 - }, - mirrorElement: [{ - element: ".control-layout-size-number", - path: "layout.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".layout"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - layout.render.size(); - } - }, { - element: ".control-layout-size-number", - path: "layout.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 50, - max: 200, - step: 5 - }, - mirrorElement: [{ - element: ".control-layout-size-range", - path: "layout.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - layout.render.size(); - } - }, { - element: ".control-layout-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - delay: 500 - }); - } - }], - func: function() { - mod.default("layout.size"); - layout.render.size(); - render.update.control.menu(); - } - }], - area: [{ - element: ".control-layout-width-range", - path: "layout.width", - type: "range", - valueModify: { - min: 10, - max: 100 - }, - mirrorElement: [{ - element: ".control-layout-width-number", - path: "layout.width", - type: "number" - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".layout"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - render.class(); - layout.render.width(); - } - }, { - element: ".control-layout-width-number", - path: "layout.width", - type: "number", - valueModify: { - min: 10, - max: 100 - }, - mirrorElement: [{ - element: ".control-layout-width-range", - path: "layout.width", - type: "number" - }], - func: function() { - render.class(); - layout.render.width(); - } - }, { - element: ".control-layout-width-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - delay: 500 - }); - } - }], - func: function() { - mod.default("layout.width"); - layout.render.width(); - render.update.control.menu(); - } - }], - alignment: [{ - element: ".control-layout-alignment-topleft", - path: "layout.alignment", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-layout-alignment-topcenter", - path: "layout.alignment", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-layout-alignment-topright", - path: "layout.alignment", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-layout-alignment-centerleft", - path: "layout.alignment", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-layout-alignment-centercenter", - path: "layout.alignment", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-layout-alignment-centerright", - path: "layout.alignment", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-layout-alignment-bottomleft", - path: "layout.alignment", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-layout-alignment-bottomcenter", - path: "layout.alignment", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-layout-alignment-bottomright", - path: "layout.alignment", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-layout-order-headerlink", - path: "layout.order", - type: "radio", - func: function() { - render.class(); - header.render.color.scrolling(); - } - }, { - element: ".control-layout-order-linkheader", - path: "layout.order", - type: "radio", - func: function() { - render.class(); - header.render.color.scrolling(); - } - }, { - element: ".control-layout-direction-vertical", - path: "layout.direction", - type: "radio", - func: function() { - render.class(); - render.dependents(); - header.render.color.scrolling(); - } - }, { - element: ".control-layout-direction-horizontal", - path: "layout.direction", - type: "radio", - func: function() { - render.class(); - render.dependents(); - header.render.color.scrolling(); - } - }], - padding: [{ - element: ".control-layout-padding-range", - path: "layout.padding", - type: "range", - valueModify: { - min: 0, - max: 40 - }, - mirrorElement: [{ - element: ".control-layout-padding-number", - path: "layout.padding", - type: "number" - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".layout"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - layout.render.padding(); - } - }, { - element: ".control-layout-padding-number", - path: "layout.padding", - type: "number", - valueModify: { - min: 0, - max: 40 - }, - mirrorElement: [{ - element: ".control-layout-padding-range", - path: "layout.padding", - type: "range" - }], - func: function() { - layout.render.padding(); - } - }, { - element: ".control-layout-padding-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - delay: 500 - }); - } - }], - func: function() { - mod.default("layout.padding"); - layout.render.padding(); - render.update.control.menu(); - } - }], - gutter: [{ - element: ".control-layout-gutter-range", - path: "layout.gutter", - type: "range", - valueModify: { - min: 0, - max: 40 - }, - mirrorElement: [{ - element: ".control-layout-gutter-number", - path: "layout.gutter", - type: "number" - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".layout"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - layout.render.gutter(); - } - }, { - element: ".control-layout-gutter-number", - path: "layout.gutter", - type: "number", - valueModify: { - min: 0, - max: 40 - }, - mirrorElement: [{ - element: ".control-layout-gutter-range", - path: "layout.gutter", - type: "range" - }], - func: function() { - layout.render.gutter(); - } - }, { - element: ".control-layout-gutter-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".layout"), - delay: 500 - }); - } - }], - func: function() { - mod.default("layout.gutter"); - layout.render.gutter(); - render.update.control.menu(); - } - }], - page: [{ - element: ".control-layout-title", - path: "layout.title", - type: "text", - func: function() { - layout.render.title(); - } - }, { - element: ".control-layout-title-default", - type: "button", - func: function() { - mod.default("layout.title"); - layout.render.title(); - render.update.control.menu(); - } - }, { - element: ".control-layout-scrollpastend", - path: "layout.scrollPastEnd", - type: "checkbox", - func: function() { - render.class(); - header.render.color.scrolling(); - } - }, { - element: ".control-layout-scrollbars-auto", - path: "layout.scrollbars", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-layout-scrollbars-thin", - path: "layout.scrollbars", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-layout-scrollbars-none", - path: "layout.scrollbars", - type: "radio", - func: function() { - render.class(); - } - }] - }, - header: { - area: [{ - element: ".control-header-area-width-range", - path: "header.area.width", - type: "range", - valueModify: { - min: 10, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-area-width-number", - path: "header.area.width", - type: "number" - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".header-area") - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".header-area") - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".header-area"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - header.render.area.width(); - } - }, { - element: ".control-header-area-width-number", - path: "header.area.width", - type: "number", - valueModify: { - min: 10, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-area-width-range", - path: "header.area.width", - type: "range" - }], - func: function() { - header.render.area.width(); - } - }, { - element: ".control-header-area-width-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".header-area"), - delay: 500 - }); - } - }], - func: function() { - mod.default("header.area.width"); - header.render.area.width(); - render.update.control.menu(); - } - }, { - element: ".control-header-area-width-match", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".header-area"), - delay: 500 - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }], - func: function() { - mod.match("header.area.width", "link.area.width"); - header.render.area.width(); - render.update.control.menu(); - } - }], - alignment: [{ - element: ".control-header-area-justify-left", - path: "header.area.justify", - type: "radio", - additionalEvents: [{ - event: "change", - func: function() { - edge.box.open({ - element: helper.e(".header-area"), - delay: 500 - }); - } - }], - func: function() { - render.class(); - } - }, { - element: ".control-header-area-justify-center", - path: "header.area.justify", - type: "radio", - additionalEvents: [{ - event: "change", - func: function() { - edge.box.open({ - element: helper.e(".header-area"), - delay: 500 - }); - } - }], - func: function() { - render.class(); - } - }, { - element: ".control-header-area-justify-right", - path: "header.area.justify", - type: "radio", - additionalEvents: [{ - event: "change", - func: function() { - edge.box.open({ - element: helper.e(".header-area"), - delay: 500 - }); - } - }], - func: function() { - render.class(); - } - }, { - element: ".control-header-area-align-center", - path: "header.area.align", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-header-area-align-baseline", - path: "header.area.align", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-header-item-justify-left", - path: "header.item.justify", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-header-item-justify-center", - path: "header.item.justify", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-header-item-justify-right", - path: "header.item.justify", - type: "radio", - func: function() { - render.class(); - } - }], - greeting: [{ - element: ".control-header-greeting-show", - path: "header.greeting.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-greeting-type-good", - path: "header.greeting.type", - type: "radio", - func: function() { - render.dependents(); - greeting.render.clear(); - greeting.render.all(); - } - }, { - element: ".control-header-greeting-type-hello", - path: "header.greeting.type", - type: "radio", - func: function() { - render.dependents(); - greeting.render.clear(); - greeting.render.all(); - } - }, { - element: ".control-header-greeting-type-hi", - path: "header.greeting.type", - type: "radio", - func: function() { - render.dependents(); - greeting.render.clear(); - greeting.render.all(); - } - }, { - element: ".control-header-greeting-type-custom", - path: "header.greeting.type", - type: "radio", - func: function() { - render.dependents(); - greeting.render.clear(); - greeting.render.all(); - } - }, { - element: ".control-header-greeting-custom", - path: "header.greeting.custom", - type: "text", - func: function() { - greeting.render.clear(); - greeting.render.all(); - } - }, { - element: ".control-header-greeting-name", - path: "header.greeting.name", - type: "text", - func: function() { - greeting.render.clear(); - greeting.render.all(); - } - }, { - element: ".control-header-greeting-size-range", - path: "header.greeting.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-greeting-size-number", - path: "header.greeting.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".greeting"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".greeting"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".greeting"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - header.render.greeting.size(); - } - }, { - element: ".control-header-greeting-size-number", - path: "header.greeting.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-greeting-size-range", - path: "header.greeting.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - header.render.greeting.size(); - } - }, { - element: ".control-header-greeting-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".greeting"), - delay: 500 - }); - } - }], - func: function() { - mod.default("header.greeting.size"); - header.render.greeting.size(); - render.update.control.menu(); - } - }, { - element: ".control-header-greeting-newline", - path: "header.greeting.newLine", - type: "checkbox", - func: function() { - render.class(); - } - }], - transitional: [{ - element: ".control-header-transitional-show", - path: "header.transitional.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-transitional-type-timeanddate", - path: "header.transitional.type", - type: "radio", - func: function() { - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-transitional-type-its", - path: "header.transitional.type", - type: "radio", - func: function() { - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-transitional-size-range", - path: "header.transitional.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-transitional-size-number", - path: "header.transitional.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".transitional"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".transitional"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".transitional"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - header.render.transitional.size(); - } - }, { - element: ".control-header-transitional-size-number", - path: "header.transitional.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-transitional-size-range", - path: "header.transitional.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - header.render.transitional.size(); - } - }, { - element: ".control-header-transitional-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".transitional"), - delay: 500 - }); - } - }], - func: function() { - mod.default("header.transitional.size"); - header.render.transitional.size(); - render.update.control.menu(); - } - }, { - element: ".control-header-transitional-newline", - path: "header.transitional.newLine", - type: "checkbox", - func: function() { - render.class(); - } - }], - clock: [{ - element: ".control-header-clock-hours-show", - path: "header.clock.hours.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-clock-hours-display-number", - path: "header.clock.hours.display", - type: "radio", - func: function() { - clock.render.clear(); - clock.render.all(); - } - }, { - element: ".control-header-clock-hours-display-word", - path: "header.clock.hours.display", - type: "radio", - func: function() { - clock.render.clear(); - clock.render.all(); - } - }, { - element: ".control-header-clock-minutes-show", - path: "header.clock.minutes.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-clock-minutes-display-number", - path: "header.clock.minutes.display", - type: "radio", - func: function() { - clock.render.clear(); - clock.render.all(); - } - }, { - element: ".control-header-clock-minutes-display-word", - path: "header.clock.minutes.display", - type: "radio", - func: function() { - clock.render.clear(); - clock.render.all(); - } - }, { - element: ".control-header-clock-seconds-show", - path: "header.clock.seconds.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-clock-seconds-display-number", - path: "header.clock.seconds.display", - type: "radio", - func: function() { - clock.render.clear(); - clock.render.all(); - } - }, { - element: ".control-header-clock-seconds-display-word", - path: "header.clock.seconds.display", - type: "radio", - func: function() { - clock.render.clear(); - clock.render.all(); - } - }, { - element: ".control-header-clock-separator-show", - path: "header.clock.separator.show", - type: "checkbox", - func: function() { - clock.render.clear(); - clock.render.all(); - render.dependents(); - } - }, { - element: ".control-header-clock-separator-text", - path: "header.clock.separator.text", - type: "text", - func: function() { - clock.render.clear(); - clock.render.all(); - } - }, { - element: ".control-header-clock-separator-text-default", - type: "button", - func: function() { - mod.default("header.clock.separator.text"); - clock.render.clear(); - clock.render.all(); - render.update.control.menu(); - } - }, { - element: ".control-header-clock-hour24-show", - path: "header.clock.hour24.show", - type: "checkbox", - func: function() { - clock.render.clear(); - clock.render.all(); - render.dependents(); - } - }, { - element: ".control-header-clock-meridiem-show", - path: "header.clock.meridiem.show", - type: "checkbox", - func: function() { - clock.render.clear(); - clock.render.all(); - render.dependents(); - } - }, { - element: ".control-header-clock-size-range", - path: "header.clock.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-clock-size-number", - path: "header.clock.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".clock"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".clock"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".clock"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - header.render.clock.size(); - } - }, { - element: ".control-header-clock-size-number", - path: "header.clock.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-clock-size-range", - path: "header.clock.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - header.render.clock.size(); - } - }, { - element: ".control-header-clock-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".clock"), - delay: 500 - }); - } - }], - func: function() { - mod.default("header.clock.size"); - header.render.clock.size(); - render.update.control.menu(); - } - }, { - element: ".control-header-clock-newline", - path: "header.clock.newLine", - type: "checkbox", - func: function() { - render.class(); - } - }], - date: [{ - element: ".control-header-date-day-show", - path: "header.date.day.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-date-day-display-number", - path: "header.date.day.display", - type: "radio", - func: function() { - render.dependents(); - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-day-week-start-monday", - path: "header.date.day.weekStart", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-day-week-start-sunday", - path: "header.date.day.weekStart", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-day-display-word", - path: "header.date.day.display", - type: "radio", - func: function() { - render.dependents(); - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-day-length-long", - path: "header.date.day.length", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-day-length-short", - path: "header.date.day.length", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-date-show", - path: "header.date.date.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-date-date-display-number", - path: "header.date.date.display", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-date-display-word", - path: "header.date.date.display", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-date-ordinal", - path: "header.date.date.ordinal", - type: "checkbox", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-month-show", - path: "header.date.month.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-date-month-display-number", - path: "header.date.month.display", - type: "radio", - func: function() { - render.dependents(); - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-month-ordinal", - path: "header.date.month.ordinal", - type: "checkbox", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-month-display-word", - path: "header.date.month.display", - type: "radio", - func: function() { - render.dependents(); - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-month-length-long", - path: "header.date.month.length", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-month-length-short", - path: "header.date.month.length", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-year-show", - path: "header.date.year.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-date-year-display-number", - path: "header.date.year.display", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-year-display-word", - path: "header.date.year.display", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-separator-show", - path: "header.date.separator.show", - type: "checkbox", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - render.dependents(); - } - }, { - element: ".control-header-date-separator-text", - path: "header.date.separator.text", - type: "text", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-separator-text-default", - type: "button", - func: function() { - mod.default("header.date.separator.text"); - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - render.update.control.menu(); - } - }, { - element: ".control-header-date-format-datemonth", - path: "header.date.format", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-format-monthdate", - path: "header.date.format", - type: "radio", - func: function() { - date.render.clear(); - date.render.all(); - greeting.render.clear(); - greeting.render.all(); - transitional.render.clear(); - transitional.render.all(); - } - }, { - element: ".control-header-date-size-range", - path: "header.date.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-date-size-number", - path: "header.date.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".date"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".date"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".date"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - header.render.date.size(); - } - }, { - element: ".control-header-date-size-number", - path: "header.date.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-date-size-range", - path: "header.date.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - header.render.date.size(); - } - }, { - element: ".control-header-date-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".date"), - delay: 500 - }); - } - }], - func: function() { - mod.default("header.date.size"); - header.render.date.size(); - render.update.control.menu(); - } - }, { - element: ".control-header-date-newline", - path: "header.date.newLine", - type: "checkbox", - func: function() { - render.class(); - } - }], - search: [{ - element: ".control-header-search-show", - path: "header.search.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - header.render.search.width.size(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.class(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-search-width-by-auto", - path: "header.search.width.by", - type: "radio", - func: function() { - render.class(); - render.dependents(); - header.render.search.width.size(); - } - }, { - element: ".control-header-search-width-by-custom", - path: "header.search.width.by", - type: "radio", - func: function() { - render.class(); - render.dependents(); - header.render.search.width.size(); - } - }, { - element: ".control-header-search-width-size-range", - path: "header.search.width.size", - type: "range", - valueModify: { - min: 10, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-search-width-size-number", - path: "header.search.width.size", - type: "number", - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".search-wrapper"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".search-wrapper"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".search-wrapper"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - header.render.search.width.size(); - } - }, { - element: ".control-header-search-width-size-number", - path: "header.search.width.size", - type: "number", - valueModify: { - min: 10, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-search-width-size-range", - path: "header.search.width.size", - type: "range", - }], - func: function() { - header.render.search.width.size(); - } - }, { - element: ".control-header-search-width-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".search-wrapper"), - delay: 500 - }); - } - }], - func: function() { - mod.default("header.search.width.size"); - header.render.search.width.size(); - render.update.control.menu(); - } - }, { - element: ".control-header-search-opacity-range", - path: "header.search.opacity", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-search-opacity-number", - path: "header.search.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - header.render.search.opacity(); - render.class(); - } - }, { - element: ".control-header-search-opacity-number", - path: "header.search.opacity", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-search-opacity-range", - path: "header.search.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - header.render.search.opacity(); - render.class(); - } - }, { - element: ".control-header-search-opacity-default", - type: "button", - func: function() { - mod.default("header.search.opacity"); - header.render.search.opacity(); - render.update.control.menu(); - render.class(); - } - }, { - element: ".control-header-search-focus", - path: "header.search.focus", - type: "checkbox" - }, { - element: ".control-header-search-engine-google", - path: "header.search.engine.selected", - type: "radio", - func: function() { - render.dependents(); - search.render.engine(); - } - }, { - element: ".control-header-search-engine-duckduckgo", - path: "header.search.engine.selected", - type: "radio", - func: function() { - render.dependents(); - search.render.engine(); - } - }, { - element: ".control-header-search-engine-youtube", - path: "header.search.engine.selected", - type: "radio", - func: function() { - render.dependents(); - search.render.engine(); - } - }, { - element: ".control-header-search-engine-giphy", - path: "header.search.engine.selected", - type: "radio", - func: function() { - render.dependents(); - search.render.engine(); - } - }, { - element: ".control-header-search-engine-bing", - path: "header.search.engine.selected", - type: "radio", - func: function() { - render.dependents(); - search.render.engine(); - } - }, { - element: ".control-header-search-engine-custom", - path: "header.search.engine.selected", - type: "radio", - func: function() { - render.dependents(); - search.render.engine(); - } - }, { - element: ".control-header-search-engine-custom-name", - path: "header.search.engine.custom.name", - type: "text", - func: function() { - search.render.engine(); - } - }, { - element: ".control-header-search-engine-custom-url", - path: "header.search.engine.custom.url", - type: "text", - func: function() { - search.render.engine(); - } - }, { - element: ".control-header-search-engine-custom-queryname", - path: "header.search.engine.custom.queryName", - type: "text", - func: function() { - header.render.item.clear(); - header.render.item.all(); - header.render.search.width.size(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.class(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-search-text-justify-left", - path: "header.search.text.justify", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-header-search-text-justify-center", - path: "header.search.text.justify", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-header-search-text-justify-right", - path: "header.search.text.justify", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-header-search-size-range", - path: "header.search.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-search-size-number", - path: "header.search.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".search"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".search"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".search"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - header.render.search.size(); - } - }, { - element: ".control-header-search-size-number", - path: "header.search.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-search-size-range", - path: "header.search.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - header.render.search.size(); - } - }, { - element: ".control-header-search-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".search-wrapper"), - delay: 500 - }); - } - }], - func: function() { - mod.default("header.search.size"); - header.render.search.size(); - render.update.control.menu(); - } - }, { - element: ".control-header-search-newtab", - path: "header.search.newTab", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - header.render.search.width.size(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.class(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-search-newline", - path: "header.search.newLine", - type: "checkbox", - func: function() { - render.class(); - } - }], - editadd: [{ - element: ".control-header-editadd-show", - path: "header.editAdd.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - render.dependents(); - } - }, { - element: ".control-header-editadd-size-range", - path: "header.editAdd.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-editadd-size-number", - path: "header.editAdd.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".header-editadd"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".header-editadd"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: ".header-item-editadd", - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - header.render.editadd.size(); - } - }, { - element: ".control-header-editadd-size-number", - path: "header.editAdd.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-editadd-size-range", - path: "header.editAdd.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - header.render.editadd.size(); - } - }, { - element: ".control-header-editadd-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".header-editadd"), - delay: 500 - }); - } - }], - func: function() { - mod.default("header.editAdd.size"); - header.render.editadd.size(); - render.update.control.menu(); - } - }, { - element: ".control-header-editadd-opacity-range", - path: "header.editAdd.opacity", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-editadd-opacity-number", - path: "header.editAdd.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - header.render.editadd.opacity(); - render.class(); - } - }, { - element: ".control-header-editadd-opacity-number", - path: "header.editAdd.opacity", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-editadd-opacity-range", - path: "header.editAdd.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - header.render.editadd.opacity(); - render.class(); - } - }, { - element: ".control-header-editadd-opacity-default", - type: "button", - func: function() { - mod.default("header.editAdd.opacity"); - header.render.editadd.opacity(); - render.update.control.menu(); - render.class(); - } - }, { - element: ".control-header-editadd-newline", - path: "header.editAdd.newLine", - type: "checkbox", - func: function() { - render.class(); - } - }], - coloraccent: [{ - element: ".control-header-coloraccent-show", - path: "header.colorAccent.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-coloraccent-dot-show", - path: "header.colorAccent.dot.show", - type: "checkbox", - func: function() { - header.render.item.clear(); - header.render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - render.dependents(); - render.update.control.header(); - bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - } - }, { - element: ".control-header-coloraccent-size-range", - path: "header.colorAccent.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-coloraccent-size-number", - path: "header.colorAccent.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".header-coloraccent"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".header-coloraccent"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: ".header-item-coloraccent", - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - header.render.coloraccent.size(); - } - }, { - element: ".control-header-coloraccent-size-number", - path: "header.colorAccent.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-coloraccent-size-range", - path: "header.colorAccent.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - header.render.coloraccent.size(); - } - }, { - element: ".control-header-coloraccent-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".header-coloraccent"), - delay: 500 - }); - } - }], - func: function() { - mod.default("header.colorAccent.size"); - header.render.coloraccent.size(); - render.update.control.menu(); - } - }, { - element: ".control-header-coloraccent-opacity-range", - path: "header.colorAccent.opacity", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-coloraccent-opacity-number", - path: "header.colorAccent.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - header.render.coloraccent.opacity(); - render.class(); - } - }, { - element: ".control-header-coloraccent-opacity-number", - path: "header.colorAccent.opacity", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-coloraccent-opacity-range", - path: "header.colorAccent.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - header.render.coloraccent.opacity(); - render.class(); - } - }, { - element: ".control-header-coloraccent-opacity-default", - type: "button", - func: function() { - mod.default("header.colorAccent.opacity"); - header.render.coloraccent.opacity(); - render.update.control.menu(); - render.class(); - } - }, { - element: ".control-header-coloraccent-newline", - path: "header.colorAccent.newLine", - type: "checkbox", - func: function() { - render.class(); - } - }], - menu: [{ - element: ".control-header-menu-size-range", - path: "header.menu.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-menu-size-number", - path: "header.menu.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".control-menu-open"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".control-menu-open"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: ".control-menu-open", - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - header.render.menu.size(); - } - }, { - element: ".control-header-menu-size-number", - path: "header.menu.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-header-menu-size-range", - path: "header.menu.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - header.render.menu.size(); - } - }, { - element: ".control-header-menu-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".control-menu-open"), - delay: 500 - }); - } - }], - func: function() { - mod.default("header.menu.size"); - header.render.menu.size(); - render.update.control.menu(); - } - }, { - element: ".control-header-menu-opacity-range", - path: "header.menu.opacity", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-menu-opacity-number", - path: "header.menu.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - header.render.menu.opacity(); - render.class(); - } - }, { - element: ".control-header-menu-opacity-number", - path: "header.menu.opacity", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-menu-opacity-range", - path: "header.menu.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - header.render.menu.opacity(); - render.class(); - } - }, { - element: ".control-header-menu-opacity-default", - type: "button", - func: function() { - mod.default("header.menu.opacity"); - header.render.menu.opacity(); - render.update.control.menu(); - render.class(); - } - }, { - element: ".control-header-menu-newline", - path: "header.menu.newLine", - type: "checkbox", - func: function() { - render.class(); - } - }], - border: [{ - element: ".control-header-border-top-range", - path: "header.border.top", - type: "range", - valueModify: { - min: 0, - max: 60 - }, - mirrorElement: [{ - element: ".control-header-border-top-number", - path: "header.border.top", - type: "number" - }], - func: function() { - header.render.border(); - render.class(); - } - }, { - element: ".control-header-border-top-number", - path: "header.border.top", - type: "number", - valueModify: { - min: 0, - max: 60 - }, - mirrorElement: [{ - element: ".control-header-border-top-range", - path: "header.border.top", - type: "range" - }], - func: function() { - header.render.border(); - render.class(); - } - }, { - element: ".control-header-border-top-default", - type: "button", - func: function() { - mod.default("header.border.top"); - header.render.border(); - render.class(); - render.update.control.menu(); - } - }, { - element: ".control-header-border-bottom-range", - path: "header.border.bottom", - type: "range", - valueModify: { - min: 0, - max: 60 - }, - mirrorElement: [{ - element: ".control-header-border-bottom-number", - path: "header.border.bottom", - type: "number" - }], - func: function() { - header.render.border(); - render.class(); - } - }, { - element: ".control-header-border-bottom-number", - path: "header.border.bottom", - type: "number", - valueModify: { - min: 0, - max: 60 - }, - mirrorElement: [{ - element: ".control-header-border-bottom-range", - path: "header.border.bottom", - type: "range" - }], - func: function() { - header.render.border(); - render.class(); - } - }, { - element: ".control-header-border-bottom-default", - type: "button", - func: function() { - mod.default("header.border.bottom"); - header.render.border(); - render.class(); - render.update.control.menu(); - } - }], - position: [{ - element: ".control-header-position-sticky", - path: "header.position", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-header-position-inline", - path: "header.position", - type: "radio", - func: function() { - render.class(); - } - }], - color: [{ - element: ".control-header-color-show", - path: "header.color.show", - type: "checkbox", - func: function() { - render.class(); - render.dependents(); - header.render.color.scrolling(); - } - }, { - element: ".control-header-color-style-always", - path: "header.color.style", - type: "radio", - func: function() { - render.class(); - header.render.color.scrolling(); - } - }, { - element: ".control-header-color-style-scroll", - path: "header.color.style", - type: "radio", - func: function() { - render.class(); - header.render.color.scrolling(); - } - }, { - element: ".control-header-color-by-theme", - path: "header.color.by", - type: "radio", - func: function() { - render.class(); - render.dependents(); - } - }, { - element: ".control-header-color-by-custom", - path: "header.color.by", - type: "radio", - func: function() { - render.class(); - render.dependents(); - } - }, { - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color", - mirrorElement: [{ - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-hsl-h-range", - path: "header.color.hsl.h", - type: "range" - }, { - element: ".control-header-color-hsl-h-number", - path: "header.color.hsl.h", - type: "number" - }, { - element: ".control-header-color-hsl-s-range", - path: "header.color.hsl.s", - type: "range" - }, { - element: ".control-header-color-hsl-s-number", - path: "header.color.hsl.s", - type: "number" - }, { - element: ".control-header-color-hsl-l-range", - path: "header.color.hsl.l", - type: "range" - }, { - element: ".control-header-color-hsl-l-number", - path: "header.color.hsl.l", - type: "number" - }, { - element: ".control-header-color-rgb-r-range", - path: "header.color.rgb.r", - type: "range" - }, { - element: ".control-header-color-rgb-r-number", - path: "header.color.rgb.r", - type: "number" - }, { - element: ".control-header-color-rgb-g-range", - path: "header.color.rgb.g", - type: "range" - }, { - element: ".control-header-color-rgb-g-number", - path: "header.color.rgb.g", - type: "number" - }, { - element: ".control-header-color-rgb-b-range", - path: "header.color.rgb.b", - type: "range" - }, { - element: ".control-header-color-rgb-b-number", - path: "header.color.rgb.b", - type: "number" - }], - func: function() { - header.mod.color.hsl(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"], - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-hsl-h-range", - path: "header.color.hsl.h", - type: "range" - }, { - element: ".control-header-color-hsl-h-number", - path: "header.color.hsl.h", - type: "number" - }, { - element: ".control-header-color-hsl-s-range", - path: "header.color.hsl.s", - type: "range" - }, { - element: ".control-header-color-hsl-s-number", - path: "header.color.hsl.s", - type: "number" - }, { - element: ".control-header-color-hsl-l-range", - path: "header.color.hsl.l", - type: "range" - }, { - element: ".control-header-color-hsl-l-number", - path: "header.color.hsl.l", - type: "number" - }, { - element: ".control-header-color-rgb-r-range", - path: "header.color.rgb.r", - type: "range" - }, { - element: ".control-header-color-rgb-r-number", - path: "header.color.rgb.r", - type: "number" - }, { - element: ".control-header-color-rgb-g-range", - path: "header.color.rgb.g", - type: "range" - }, { - element: ".control-header-color-rgb-g-number", - path: "header.color.rgb.g", - type: "number" - }, { - element: ".control-header-color-rgb-b-range", - path: "header.color.rgb.b", - type: "range" - }, { - element: ".control-header-color-rgb-b-number", - path: "header.color.rgb.b", - type: "number" - }], - func: function() { - header.mod.color.hsl(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-hsl-h-range", - path: "header.color.hsl.h", - type: "range", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-hsl-h-number", - path: "header.color.hsl.h", - type: "number" - }, { - element: ".control-header-color-rgb-r-range", - path: "header.color.rgb.r", - type: "range" - }, { - element: ".control-header-color-rgb-r-number", - path: "header.color.rgb.r", - type: "number" - }, { - element: ".control-header-color-rgb-g-range", - path: "header.color.rgb.g", - type: "range" - }, { - element: ".control-header-color-rgb-g-number", - path: "header.color.rgb.g", - type: "number" - }, { - element: ".control-header-color-rgb-b-range", - path: "header.color.rgb.b", - type: "range" - }, { - element: ".control-header-color-rgb-b-number", - path: "header.color.rgb.b", - type: "number" - }], - func: function() { - header.mod.color.rgb(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-hsl-h-number", - path: "header.color.hsl.h", - type: "number", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-hsl-h-range", - path: "header.color.hsl.h", - type: "range" - }, { - element: ".control-header-color-rgb-r-range", - path: "header.color.rgb.r", - type: "range" - }, { - element: ".control-header-color-rgb-r-number", - path: "header.color.rgb.r", - type: "number" - }, { - element: ".control-header-color-rgb-g-range", - path: "header.color.rgb.g", - type: "range" - }, { - element: ".control-header-color-rgb-g-number", - path: "header.color.rgb.g", - type: "number" - }, { - element: ".control-header-color-rgb-b-range", - path: "header.color.rgb.b", - type: "range" - }, { - element: ".control-header-color-rgb-b-number", - path: "header.color.rgb.b", - type: "number" - }], - func: function() { - header.mod.color.rgb(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-hsl-s-range", - path: "header.color.hsl.s", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-hsl-s-number", - path: "header.color.hsl.s", - type: "number" - }, { - element: ".control-header-color-rgb-r-range", - path: "header.color.rgb.r", - type: "range" - }, { - element: ".control-header-color-rgb-r-number", - path: "header.color.rgb.r", - type: "number" - }, { - element: ".control-header-color-rgb-g-range", - path: "header.color.rgb.g", - type: "range" - }, { - element: ".control-header-color-rgb-g-number", - path: "header.color.rgb.g", - type: "number" - }, { - element: ".control-header-color-rgb-b-range", - path: "header.color.rgb.b", - type: "range" - }, { - element: ".control-header-color-rgb-b-number", - path: "header.color.rgb.b", - type: "number" - }], - func: function() { - header.mod.color.rgb(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-hsl-s-number", - path: "header.color.hsl.s", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-hsl-s-range", - path: "header.color.hsl.s", - type: "range" - }, { - element: ".control-header-color-rgb-r-range", - path: "header.color.rgb.r", - type: "range" - }, { - element: ".control-header-color-rgb-r-number", - path: "header.color.rgb.r", - type: "number" - }, { - element: ".control-header-color-rgb-g-range", - path: "header.color.rgb.g", - type: "range" - }, { - element: ".control-header-color-rgb-g-number", - path: "header.color.rgb.g", - type: "number" - }, { - element: ".control-header-color-rgb-b-range", - path: "header.color.rgb.b", - type: "range" - }, { - element: ".control-header-color-rgb-b-number", - path: "header.color.rgb.b", - type: "number" - }], - func: function() { - header.mod.color.rgb(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-hsl-l-range", - path: "header.color.hsl.l", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-hsl-l-number", - path: "header.color.hsl.l", - type: "number" - }, { - element: ".control-header-color-rgb-r-range", - path: "header.color.rgb.r", - type: "range" - }, { - element: ".control-header-color-rgb-r-number", - path: "header.color.rgb.r", - type: "number" - }, { - element: ".control-header-color-rgb-g-range", - path: "header.color.rgb.g", - type: "range" - }, { - element: ".control-header-color-rgb-g-number", - path: "header.color.rgb.g", - type: "number" - }, { - element: ".control-header-color-rgb-b-range", - path: "header.color.rgb.b", - type: "range" - }, { - element: ".control-header-color-rgb-b-number", - path: "header.color.rgb.b", - type: "number" - }], - func: function() { - header.mod.color.rgb(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-hsl-l-number", - path: "header.color.hsl.l", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-hsl-l-range", - path: "header.color.hsl.l", - type: "range" - }, { - element: ".control-header-color-rgb-r-range", - path: "header.color.rgb.r", - type: "range" - }, { - element: ".control-header-color-rgb-r-number", - path: "header.color.rgb.r", - type: "number" - }, { - element: ".control-header-color-rgb-g-range", - path: "header.color.rgb.g", - type: "range" - }, { - element: ".control-header-color-rgb-g-number", - path: "header.color.rgb.g", - type: "number" - }, { - element: ".control-header-color-rgb-b-range", - path: "header.color.rgb.b", - type: "range" - }, { - element: ".control-header-color-rgb-b-number", - path: "header.color.rgb.b", - type: "number" - }], - func: function() { - header.mod.color.rgb(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-rgb-r-range", - path: "header.color.rgb.r", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-rgb-r-number", - path: "header.color.rgb.r", - type: "number" - }, { - element: ".control-header-color-hsl-h-range", - path: "header.color.hsl.h", - type: "range" - }, { - element: ".control-header-color-hsl-h-number", - path: "header.color.hsl.h", - type: "number" - }, { - element: ".control-header-color-hsl-s-range", - path: "header.color.hsl.s", - type: "range" - }, { - element: ".control-header-color-hsl-s-number", - path: "header.color.hsl.s", - type: "number" - }, { - element: ".control-header-color-hsl-l-range", - path: "header.color.hsl.l", - type: "range" - }, { - element: ".control-header-color-hsl-l-number", - path: "header.color.hsl.l", - type: "number" - }], - func: function() { - header.mod.color.hsl(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-rgb-r-number", - path: "header.color.rgb.r", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-rgb-r-range", - path: "header.color.rgb.r", - type: "range" - }, { - element: ".control-header-color-hsl-h-range", - path: "header.color.hsl.h", - type: "range" - }, { - element: ".control-header-color-hsl-h-number", - path: "header.color.hsl.h", - type: "number" - }, { - element: ".control-header-color-hsl-s-range", - path: "header.color.hsl.s", - type: "range" - }, { - element: ".control-header-color-hsl-s-number", - path: "header.color.hsl.s", - type: "number" - }, { - element: ".control-header-color-hsl-l-range", - path: "header.color.hsl.l", - type: "range" - }, { - element: ".control-header-color-hsl-l-number", - path: "header.color.hsl.l", - type: "number" - }], - func: function() { - header.mod.color.hsl(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-rgb-g-range", - path: "header.color.rgb.g", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-rgb-g-number", - path: "header.color.rgb.g", - type: "number" - }, { - element: ".control-header-color-hsl-h-range", - path: "header.color.hsl.h", - type: "range" - }, { - element: ".control-header-color-hsl-h-number", - path: "header.color.hsl.h", - type: "number" - }, { - element: ".control-header-color-hsl-s-range", - path: "header.color.hsl.s", - type: "range" - }, { - element: ".control-header-color-hsl-s-number", - path: "header.color.hsl.s", - type: "number" - }, { - element: ".control-header-color-hsl-l-range", - path: "header.color.hsl.l", - type: "range" - }, { - element: ".control-header-color-hsl-l-number", - path: "header.color.hsl.l", - type: "number" - }], - func: function() { - header.mod.color.hsl(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-rgb-g-number", - path: "header.color.rgb.g", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-rgb-g-range", - path: "header.color.rgb.g", - type: "range" - }, { - element: ".control-header-color-hsl-h-range", - path: "header.color.hsl.h", - type: "range" - }, { - element: ".control-header-color-hsl-h-number", - path: "header.color.hsl.h", - type: "number" - }, { - element: ".control-header-color-hsl-s-range", - path: "header.color.hsl.s", - type: "range" - }, { - element: ".control-header-color-hsl-s-number", - path: "header.color.hsl.s", - type: "number" - }, { - element: ".control-header-color-hsl-l-range", - path: "header.color.hsl.l", - type: "range" - }, { - element: ".control-header-color-hsl-l-number", - path: "header.color.hsl.l", - type: "number" - }], - func: function() { - header.mod.color.hsl(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-rgb-b-range", - path: "header.color.rgb.b", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-rgb-b-number", - path: "header.color.rgb.b", - type: "number" - }, { - element: ".control-header-color-hsl-h-range", - path: "header.color.hsl.h", - type: "range" - }, { - element: ".control-header-color-hsl-h-number", - path: "header.color.hsl.h", - type: "number" - }, { - element: ".control-header-color-hsl-s-range", - path: "header.color.hsl.s", - type: "range" - }, { - element: ".control-header-color-hsl-s-number", - path: "header.color.hsl.s", - type: "number" - }, { - element: ".control-header-color-hsl-l-range", - path: "header.color.hsl.l", - type: "range" - }, { - element: ".control-header-color-hsl-l-number", - path: "header.color.hsl.l", - type: "number" - }], - func: function() { - header.mod.color.hsl(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-rgb-b-number", - path: "header.color.rgb.b", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-header-color-rgb-color", - path: "header.color.rgb", - type: "color" - }, { - element: ".control-header-color-rgb-text", - path: "header.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-header-color-rgb-b-range", - path: "header.color.rgb.b", - type: "range" - }, { - element: ".control-header-color-hsl-h-range", - path: "header.color.hsl.h", - type: "range" - }, { - element: ".control-header-color-hsl-h-number", - path: "header.color.hsl.h", - type: "number" - }, { - element: ".control-header-color-hsl-s-range", - path: "header.color.hsl.s", - type: "range" - }, { - element: ".control-header-color-hsl-s-number", - path: "header.color.hsl.s", - type: "number" - }, { - element: ".control-header-color-hsl-l-range", - path: "header.color.hsl.l", - type: "range" - }, { - element: ".control-header-color-hsl-l-number", - path: "header.color.hsl.l", - type: "number" - }], - func: function() { - header.mod.color.hsl(); - header.render.color.custom(); - } - }, { - element: ".control-header-color-opacity-range", - path: "header.color.opacity", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-color-opacity-number", - path: "header.color.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - header.render.opacity(); - } - }, { - element: ".control-header-color-opacity-number", - path: "header.color.opacity", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-header-color-opacity-range", - path: "header.color.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - header.render.opacity(); - } - }, { - element: ".control-header-color-opacity-default", - type: "button", - func: function() { - mod.default("header.color.opacity"); - header.render.opacity(); - render.update.control.menu(); - } - }, { - element: ".control-header-radius", - path: "header.radius", - type: "checkbox", - func: function() { - render.class(); - } - }] - }, - bookmarks: { - area: [{ - element: ".control-link-area-width-range", - path: "link.area.width", - type: "range", - valueModify: { - min: 10, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-area-width-number", - path: "link.area.width", - type: "number" - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".link-area"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".link-area"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".group"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - link.render.area.width(); - } - }, { - element: ".control-link-area-width-number", - path: "link.area.width", - type: "number", - valueModify: { - min: 10, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-area-width-range", - path: "link.area.width", - type: "range" - }], - func: function() { - link.render.area.width(); - } - }, { - element: ".control-link-area-width-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".link-area"), - delay: 500 - }); - } - }], - func: function() { - mod.default("link.area.width"); - link.render.area.width(); - render.update.control.menu(); - } - }, { - element: ".control-link-area-width-match", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".link-area"), - delay: 500 - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }], - func: function() { - mod.match("link.area.width", "header.area.width"); - link.render.area.width(); - render.update.control.menu(); - } - }], - alignment: [{ - element: ".control-link-area-justify-left", - path: "link.area.justify", - type: "radio", - additionalEvents: [{ - event: "change", - func: function() { - edge.box.open({ - element: helper.e(".link-area"), - delay: 500 - }); - } - }], - func: function() { - render.class(); - } - }, { - element: ".control-link-area-justify-center", - path: "link.area.justify", - type: "radio", - additionalEvents: [{ - event: "change", - func: function() { - edge.box.open({ - element: helper.e(".link-area"), - delay: 500 - }); - } - }], - func: function() { - render.class(); - } - }, { - element: ".control-link-area-justify-right", - path: "link.area.justify", - type: "radio", - additionalEvents: [{ - event: "change", - func: function() { - edge.box.open({ - element: helper.e(".link-area"), - delay: 500 - }); - } - }], - func: function() { - render.class(); - } - }, { - element: ".control-link-area-direction-ltr", - path: "link.area.direction", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-link-area-direction-rtl", - path: "link.area.direction", - type: "radio", - func: function() { - render.class(); - } - }], - bookmarks: [{ - element: ".control-link-item-size-range", - path: "link.item.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 50, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-size-number", - path: "link.item.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".link-item"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".link-item"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".link-item"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - link.render.item.size(); - } - }, { - element: ".control-link-item-size-number", - path: "link.item.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 50, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-size-range", - path: "link.item.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - link.render.item.size(); - } - }, { - element: ".control-link-show", - path: "link.show", - type: "checkbox", - func: function() { - render.class(); - render.dependents(); - search.render.engine(); - } - }, { - element: ".control-link-item-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".link-item"), - delay: 500 - }); - } - }], - func: function() { - mod.default("link.item.size"); - link.render.item.size(); - render.update.control.menu(); - } - }, { - element: ".control-link-item-url-show", - path: "link.item.url.show", - type: "checkbox", - func: function() { - render.class(); - render.dependents(); - } - }, { - element: ".control-link-item-line-show", - path: "link.item.line.show", - type: "checkbox", - func: function() { - render.class(); - } - }, { - element: ".control-link-item-shadow-show", - path: "link.item.shadow.show", - type: "checkbox", - func: function() { - render.class(); - } - }, { - element: ".control-link-item-hoverscale", - path: "link.item.hoverScale.show", - type: "checkbox", - func: function() { - render.class(); - } - }, { - element: ".control-link-newtab", - path: "link.item.newTab", - type: "checkbox", - func: function() { - link.groupAndItems(); - } - }], - content: [{ - element: ".control-link-item-display-alignment-topleft", - path: "link.item.display.alignment", - type: "radio" - }, { - element: ".control-link-item-display-alignment-topcenter", - path: "link.item.display.alignment", - type: "radio" - }, { - element: ".control-link-item-display-alignment-topright", - path: "link.item.display.alignment", - type: "radio" - }, { - element: ".control-link-item-display-alignment-centerleft", - path: "link.item.display.alignment", - type: "radio" - }, { - element: ".control-link-item-display-alignment-centercenter", - path: "link.item.display.alignment", - type: "radio" - }, { - element: ".control-link-item-display-alignment-centerright", - path: "link.item.display.alignment", - type: "radio" - }, { - element: ".control-link-item-display-alignment-bottomleft", - path: "link.item.display.alignment", - type: "radio" - }, { - element: ".control-link-item-display-alignment-bottomcenter", - path: "link.item.display.alignment", - type: "radio" - }, { - element: ".control-link-item-display-alignment-bottomright", - path: "link.item.display.alignment", - type: "radio" - }, { - element: ".control-link-item-display-alignment-apply", - type: "button", - func: function() { - link.mod.item.display.alignment(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-rotate-range", - path: "link.item.display.rotate", - type: "range", - valueModify: { - min: -180, - max: 180 - }, - mirrorElement: [{ - element: ".control-link-item-display-rotate-number", - path: "link.item.display.rotate", - type: "number" - }] - }, { - element: ".control-link-item-display-rotate-number", - path: "link.item.display.rotate", - type: "number", - valueModify: { - min: -180, - max: 180 - }, - mirrorElement: [{ - element: ".control-link-item-display-rotate-range", - path: "link.item.display.rotate", - type: "range" - }] - }, { - element: ".control-link-item-display-rotate-default", - type: "button", - func: function() { - mod.default("link.item.display.rotate"); - render.update.control.menu(); - } - }, { - element: ".control-link-item-display-rotate-apply", - type: "button", - func: function() { - link.mod.item.display.rotate(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-translate-x-range", - path: "link.item.display.translate.x", - type: "range", - valueConvert: ["float"], - valueModify: { - min: -1000, - max: 1000, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-translate-x-number", - path: "link.item.display.translate.x", - type: "number", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-display-translate-x-number", - path: "link.item.display.translate.x", - type: "number", - valueConvert: ["float"], - valueModify: { - min: -1000, - max: 1000, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-translate-x-range", - path: "link.item.display.translate.x", - type: "range", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-display-translate-x-default", - type: "button", - func: function() { - mod.default("link.item.display.translate.x"); - render.update.control.menu(); - } - }, { - element: ".control-link-item-display-translate-x-apply", - type: "button", - func: function() { - link.mod.item.display.translate.x(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-translate-y-range", - path: "link.item.display.translate.y", - type: "range", - valueConvert: ["float"], - valueModify: { - min: -1000, - max: 1000, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-translate-y-number", - path: "link.item.display.translate.y", - type: "number", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-display-translate-y-number", - path: "link.item.display.translate.y", - type: "number", - valueConvert: ["float"], - valueModify: { - min: -1000, - max: 1000, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-translate-y-range", - path: "link.item.display.translate.y", - type: "range", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-display-translate-y-default", - type: "button", - func: function() { - mod.default("link.item.display.translate.y"); - render.update.control.menu(); - } - }, { - element: ".control-link-item-display-translate-y-apply", - type: "button", - func: function() { - link.mod.item.display.translate.y(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-gutter-range", - path: "link.item.display.gutter", - type: "range", - valueModify: { - min: 0, - max: 40 - }, - mirrorElement: [{ - element: ".control-link-item-display-gutter-number", - path: "link.item.display.gutter", - type: "number" - }] - }, { - element: ".control-link-item-display-gutter-number", - path: "link.item.display.gutter", - type: "number", - valueModify: { - min: 0, - max: 40 - }, - mirrorElement: [{ - element: ".control-link-item-display-gutter-range", - path: "link.item.display.gutter", - type: "range" - }] - }, { - element: ".control-link-item-display-gutter-default", - type: "button", - func: function() { - mod.default("link.item.display.gutter"); - render.update.control.menu(); - } - }, { - element: ".control-link-item-display-gutter-apply", - type: "button", - func: function() { - link.mod.item.display.gutter(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-direction-horizontal", - path: "link.item.display.direction", - type: "radio" - }, { - element: ".control-link-item-display-direction-vertical", - path: "link.item.display.direction", - type: "radio" - }, { - element: ".control-link-item-display-direction-apply", - type: "button", - func: function() { - link.mod.item.display.direction(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-order-visualname", - path: "link.item.display.order", - type: "radio" - }, { - element: ".control-link-item-display-order-namevisual", - path: "link.item.display.order", - type: "radio" - }, { - element: ".control-link-item-display-order-apply", - type: "button", - func: function() { - link.mod.item.display.order(); - link.groupAndItems(); - } - }], - visual: [{ - element: ".control-link-item-display-visual-show", - type: "button", - func: function() { - link.mod.item.display.visual.show(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-visual-hide", - type: "button", - func: function() { - link.mod.item.display.visual.hide(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-visual-letter-size-range", - path: "link.item.display.visual.letter.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 3000, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-visual-letter-size-number", - path: "link.item.display.visual.letter.size", - type: "number", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-display-visual-letter-size-number", - path: "link.item.display.visual.letter.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 3000, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-visual-letter-size-range", - path: "link.item.display.visual.letter.size", - type: "range", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-display-visual-letter-size-default", - type: "button", - func: function() { - mod.default("link.item.display.visual.letter.size"); - render.update.control.menu(); - } - }, { - element: ".control-link-item-display-visual-letter-size-apply", - type: "button", - func: function() { - link.mod.item.display.visual.letter.size(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-visual-icon-size-range", - path: "link.item.display.visual.icon.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 3000, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-visual-icon-size-number", - path: "link.item.display.visual.icon.size", - type: "number", - valueConvert: ["float"] - }], - }, { - element: ".control-link-item-display-visual-icon-size-number", - path: "link.item.display.visual.icon.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 3000, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-visual-icon-size-range", - path: "link.item.display.visual.icon.size", - type: "range", - valueConvert: ["float"] - }], - }, { - element: ".control-link-item-display-visual-icon-size-default", - type: "button", - func: function() { - mod.default("link.item.display.visual.icon.size"); - render.update.control.menu(); - } - }, { - element: ".control-link-item-display-visual-icon-size-apply", - type: "button", - func: function() { - link.mod.item.display.visual.icon.size(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-visual-image-size-range", - path: "link.item.display.visual.image.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 3000, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-visual-image-size-number", - path: "link.item.display.visual.image.size", - type: "number", - valueConvert: ["float"] - }], - }, { - element: ".control-link-item-display-visual-image-size-number", - path: "link.item.display.visual.image.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 3000, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-visual-image-size-range", - path: "link.item.display.visual.image.size", - type: "range", - valueConvert: ["float"] - }], - }, { - element: ".control-link-item-display-visual-image-size-default", - type: "button", - func: function() { - mod.default("link.item.display.visual.image.size"); - render.update.control.menu(); - } - }, { - element: ".control-link-item-display-visual-image-size-apply", - type: "button", - func: function() { - link.mod.item.display.visual.image.size(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-visual-shadow-size-range", - path: "link.item.display.visual.shadow.size", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-display-visual-shadow-size-number", - path: "link.item.display.visual.shadow.size", - type: "number" - }], - }, { - element: ".control-link-item-display-visual-shadow-size-number", - path: "link.item.display.visual.shadow.size", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-display-visual-shadow-size-range", - path: "link.item.display.visual.shadow.size", - type: "range" - }], - }, { - element: ".control-link-item-display-visual-shadow-size-default", - type: "button", - func: function() { - mod.default("link.item.display.visual.shadow.size"); - render.update.control.menu(); - } - }, { - element: ".control-link-item-display-visual-shadow-size-apply", - type: "button", - func: function() { - link.mod.item.display.visual.shadow.size(); - link.groupAndItems(); - } - }], - name: [{ - element: ".control-link-item-display-name-show", - type: "button", - func: function() { - link.mod.item.display.name.show(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-name-hide", - type: "button", - func: function() { - link.mod.item.display.name.hide(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-display-name-size-range", - path: "link.item.display.name.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 1500, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-name-size-number", - path: "link.item.display.name.size", - type: "number", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-display-name-size-number", - path: "link.item.display.name.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 1500, - step: 10 - }, - mirrorElement: [{ - element: ".control-link-item-display-name-size-range", - path: "link.item.display.name.size", - type: "range", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-display-name-size-default", - type: "button", - func: function() { - mod.default("link.item.display.name.size"); - render.update.control.menu(); - } - }, { - element: ".control-link-item-display-name-size-apply", - type: "button", - func: function() { - link.mod.item.display.name.size(); - link.groupAndItems(); - } - }], - style: [{ - element: ".control-link-style-block", - path: "link.style", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-link-style-list", - path: "link.style", - type: "radio", - func: function() { - render.class(); - } - }], - color: [{ - element: ".control-link-item-color-by-theme", - path: "link.item.color.by", - type: "radio", - func: function() { - render.dependents(); - } - }, { - element: ".control-link-item-color-by-custom", - path: "link.item.color.by", - type: "radio", - func: function() { - render.dependents(); - } - }, { - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color", - mirrorElement: [{ - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-hsl-h-range", - path: "link.item.color.hsl.h", - type: "range" - }, { - element: ".control-link-item-color-hsl-h-number", - path: "link.item.color.hsl.h", - type: "number" - }, { - element: ".control-link-item-color-hsl-s-range", - path: "link.item.color.hsl.s", - type: "range" - }, { - element: ".control-link-item-color-hsl-s-number", - path: "link.item.color.hsl.s", - type: "number" - }, { - element: ".control-link-item-color-hsl-l-range", - path: "link.item.color.hsl.l", - type: "range" - }, { - element: ".control-link-item-color-hsl-l-number", - path: "link.item.color.hsl.l", - type: "number" - }, { - element: ".control-link-item-color-rgb-r-range", - path: "link.item.color.rgb.r", - type: "range" - }, { - element: ".control-link-item-color-rgb-r-number", - path: "link.item.color.rgb.r", - type: "number" - }, { - element: ".control-link-item-color-rgb-g-range", - path: "link.item.color.rgb.g", - type: "range" - }, { - element: ".control-link-item-color-rgb-g-number", - path: "link.item.color.rgb.g", - type: "number" - }, { - element: ".control-link-item-color-rgb-b-range", - path: "link.item.color.rgb.b", - type: "range" - }, { - element: ".control-link-item-color-rgb-b-number", - path: "link.item.color.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.color.hsl(); - } - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"], - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-hsl-h-range", - path: "link.item.color.hsl.h", - type: "range" - }, { - element: ".control-link-item-color-hsl-h-number", - path: "link.item.color.hsl.h", - type: "number" - }, { - element: ".control-link-item-color-hsl-s-range", - path: "link.item.color.hsl.s", - type: "range" - }, { - element: ".control-link-item-color-hsl-s-number", - path: "link.item.color.hsl.s", - type: "number" - }, { - element: ".control-link-item-color-hsl-l-range", - path: "link.item.color.hsl.l", - type: "range" - }, { - element: ".control-link-item-color-hsl-l-number", - path: "link.item.color.hsl.l", - type: "number" - }, { - element: ".control-link-item-color-rgb-r-range", - path: "link.item.color.rgb.r", - type: "range" - }, { - element: ".control-link-item-color-rgb-r-number", - path: "link.item.color.rgb.r", - type: "number" - }, { - element: ".control-link-item-color-rgb-g-range", - path: "link.item.color.rgb.g", - type: "range" - }, { - element: ".control-link-item-color-rgb-g-number", - path: "link.item.color.rgb.g", - type: "number" - }, { - element: ".control-link-item-color-rgb-b-range", - path: "link.item.color.rgb.b", - type: "range" - }, { - element: ".control-link-item-color-rgb-b-number", - path: "link.item.color.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.color.hsl(); - } - }, { - element: ".control-link-item-color-hsl-h-range", - path: "link.item.color.hsl.h", - type: "range", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-hsl-h-number", - path: "link.item.color.hsl.h", - type: "number" - }, { - element: ".control-link-item-color-rgb-r-range", - path: "link.item.color.rgb.r", - type: "range" - }, { - element: ".control-link-item-color-rgb-r-number", - path: "link.item.color.rgb.r", - type: "number" - }, { - element: ".control-link-item-color-rgb-g-range", - path: "link.item.color.rgb.g", - type: "range" - }, { - element: ".control-link-item-color-rgb-g-number", - path: "link.item.color.rgb.g", - type: "number" - }, { - element: ".control-link-item-color-rgb-b-range", - path: "link.item.color.rgb.b", - type: "range" - }, { - element: ".control-link-item-color-rgb-b-number", - path: "link.item.color.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.color.rgb(); - } - }, { - element: ".control-link-item-color-hsl-h-number", - path: "link.item.color.hsl.h", - type: "number", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-hsl-h-range", - path: "link.item.color.hsl.h", - type: "range" - }, { - element: ".control-link-item-color-rgb-r-range", - path: "link.item.color.rgb.r", - type: "range" - }, { - element: ".control-link-item-color-rgb-r-number", - path: "link.item.color.rgb.r", - type: "number" - }, { - element: ".control-link-item-color-rgb-g-range", - path: "link.item.color.rgb.g", - type: "range" - }, { - element: ".control-link-item-color-rgb-g-number", - path: "link.item.color.rgb.g", - type: "number" - }, { - element: ".control-link-item-color-rgb-b-range", - path: "link.item.color.rgb.b", - type: "range" - }, { - element: ".control-link-item-color-rgb-b-number", - path: "link.item.color.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.color.rgb(); - } - }, { - element: ".control-link-item-color-hsl-s-range", - path: "link.item.color.hsl.s", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-hsl-s-number", - path: "link.item.color.hsl.s", - type: "number" - }, { - element: ".control-link-item-color-rgb-r-range", - path: "link.item.color.rgb.r", - type: "range" - }, { - element: ".control-link-item-color-rgb-r-number", - path: "link.item.color.rgb.r", - type: "number" - }, { - element: ".control-link-item-color-rgb-g-range", - path: "link.item.color.rgb.g", - type: "range" - }, { - element: ".control-link-item-color-rgb-g-number", - path: "link.item.color.rgb.g", - type: "number" - }, { - element: ".control-link-item-color-rgb-b-range", - path: "link.item.color.rgb.b", - type: "range" - }, { - element: ".control-link-item-color-rgb-b-number", - path: "link.item.color.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.color.rgb(); - } - }, { - element: ".control-link-item-color-hsl-s-number", - path: "link.item.color.hsl.s", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-hsl-s-range", - path: "link.item.color.hsl.s", - type: "range" - }, { - element: ".control-link-item-color-rgb-r-range", - path: "link.item.color.rgb.r", - type: "range" - }, { - element: ".control-link-item-color-rgb-r-number", - path: "link.item.color.rgb.r", - type: "number" - }, { - element: ".control-link-item-color-rgb-g-range", - path: "link.item.color.rgb.g", - type: "range" - }, { - element: ".control-link-item-color-rgb-g-number", - path: "link.item.color.rgb.g", - type: "number" - }, { - element: ".control-link-item-color-rgb-b-range", - path: "link.item.color.rgb.b", - type: "range" - }, { - element: ".control-link-item-color-rgb-b-number", - path: "link.item.color.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.color.rgb(); - } - }, { - element: ".control-link-item-color-hsl-l-range", - path: "link.item.color.hsl.l", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-hsl-l-number", - path: "link.item.color.hsl.l", - type: "number" - }, { - element: ".control-link-item-color-rgb-r-range", - path: "link.item.color.rgb.r", - type: "range" - }, { - element: ".control-link-item-color-rgb-r-number", - path: "link.item.color.rgb.r", - type: "number" - }, { - element: ".control-link-item-color-rgb-g-range", - path: "link.item.color.rgb.g", - type: "range" - }, { - element: ".control-link-item-color-rgb-g-number", - path: "link.item.color.rgb.g", - type: "number" - }, { - element: ".control-link-item-color-rgb-b-range", - path: "link.item.color.rgb.b", - type: "range" - }, { - element: ".control-link-item-color-rgb-b-number", - path: "link.item.color.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.color.rgb(); - } - }, { - element: ".control-link-item-color-hsl-l-number", - path: "link.item.color.hsl.l", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-hsl-l-range", - path: "link.item.color.hsl.l", - type: "range" - }, { - element: ".control-link-item-color-rgb-r-range", - path: "link.item.color.rgb.r", - type: "range" - }, { - element: ".control-link-item-color-rgb-r-number", - path: "link.item.color.rgb.r", - type: "number" - }, { - element: ".control-link-item-color-rgb-g-range", - path: "link.item.color.rgb.g", - type: "range" - }, { - element: ".control-link-item-color-rgb-g-number", - path: "link.item.color.rgb.g", - type: "number" - }, { - element: ".control-link-item-color-rgb-b-range", - path: "link.item.color.rgb.b", - type: "range" - }, { - element: ".control-link-item-color-rgb-b-number", - path: "link.item.color.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.color.rgb(); - } - }, { - element: ".control-link-item-color-rgb-r-range", - path: "link.item.color.rgb.r", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-rgb-r-number", - path: "link.item.color.rgb.r", - type: "number" - }, { - element: ".control-link-item-color-hsl-h-range", - path: "link.item.color.hsl.h", - type: "range" - }, { - element: ".control-link-item-color-hsl-h-number", - path: "link.item.color.hsl.h", - type: "number" - }, { - element: ".control-link-item-color-hsl-s-range", - path: "link.item.color.hsl.s", - type: "range" - }, { - element: ".control-link-item-color-hsl-s-number", - path: "link.item.color.hsl.s", - type: "number" - }, { - element: ".control-link-item-color-hsl-l-range", - path: "link.item.color.hsl.l", - type: "range" - }, { - element: ".control-link-item-color-hsl-l-number", - path: "link.item.color.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.color.hsl(); - } - }, { - element: ".control-link-item-color-rgb-r-number", - path: "link.item.color.rgb.r", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-rgb-r-range", - path: "link.item.color.rgb.r", - type: "range" - }, { - element: ".control-link-item-color-hsl-h-range", - path: "link.item.color.hsl.h", - type: "range" - }, { - element: ".control-link-item-color-hsl-h-number", - path: "link.item.color.hsl.h", - type: "number" - }, { - element: ".control-link-item-color-hsl-s-range", - path: "link.item.color.hsl.s", - type: "range" - }, { - element: ".control-link-item-color-hsl-s-number", - path: "link.item.color.hsl.s", - type: "number" - }, { - element: ".control-link-item-color-hsl-l-range", - path: "link.item.color.hsl.l", - type: "range" - }, { - element: ".control-link-item-color-hsl-l-number", - path: "link.item.color.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.color.hsl(); - } - }, { - element: ".control-link-item-color-rgb-g-range", - path: "link.item.color.rgb.g", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-rgb-g-number", - path: "link.item.color.rgb.g", - type: "number" - }, { - element: ".control-link-item-color-hsl-h-range", - path: "link.item.color.hsl.h", - type: "range" - }, { - element: ".control-link-item-color-hsl-h-number", - path: "link.item.color.hsl.h", - type: "number" - }, { - element: ".control-link-item-color-hsl-s-range", - path: "link.item.color.hsl.s", - type: "range" - }, { - element: ".control-link-item-color-hsl-s-number", - path: "link.item.color.hsl.s", - type: "number" - }, { - element: ".control-link-item-color-hsl-l-range", - path: "link.item.color.hsl.l", - type: "range" - }, { - element: ".control-link-item-color-hsl-l-number", - path: "link.item.color.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.color.hsl(); - } - }, { - element: ".control-link-item-color-rgb-g-number", - path: "link.item.color.rgb.g", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-rgb-g-range", - path: "link.item.color.rgb.g", - type: "range" - }, { - element: ".control-link-item-color-hsl-h-range", - path: "link.item.color.hsl.h", - type: "range" - }, { - element: ".control-link-item-color-hsl-h-number", - path: "link.item.color.hsl.h", - type: "number" - }, { - element: ".control-link-item-color-hsl-s-range", - path: "link.item.color.hsl.s", - type: "range" - }, { - element: ".control-link-item-color-hsl-s-number", - path: "link.item.color.hsl.s", - type: "number" - }, { - element: ".control-link-item-color-hsl-l-range", - path: "link.item.color.hsl.l", - type: "range" - }, { - element: ".control-link-item-color-hsl-l-number", - path: "link.item.color.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.color.hsl(); - } - }, { - element: ".control-link-item-color-rgb-b-range", - path: "link.item.color.rgb.b", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-rgb-b-number", - path: "link.item.color.rgb.b", - type: "number" - }, { - element: ".control-link-item-color-hsl-h-range", - path: "link.item.color.hsl.h", - type: "range" - }, { - element: ".control-link-item-color-hsl-h-number", - path: "link.item.color.hsl.h", - type: "number" - }, { - element: ".control-link-item-color-hsl-s-range", - path: "link.item.color.hsl.s", - type: "range" - }, { - element: ".control-link-item-color-hsl-s-number", - path: "link.item.color.hsl.s", - type: "number" - }, { - element: ".control-link-item-color-hsl-l-range", - path: "link.item.color.hsl.l", - type: "range" - }, { - element: ".control-link-item-color-hsl-l-number", - path: "link.item.color.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.color.hsl(); - } - }, { - element: ".control-link-item-color-rgb-b-number", - path: "link.item.color.rgb.b", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-color-rgb-color", - path: "link.item.color.rgb", - type: "color" - }, { - element: ".control-link-item-color-rgb-text", - path: "link.item.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-color-rgb-b-range", - path: "link.item.color.rgb.b", - type: "range" - }, { - element: ".control-link-item-color-hsl-h-range", - path: "link.item.color.hsl.h", - type: "range" - }, { - element: ".control-link-item-color-hsl-h-number", - path: "link.item.color.hsl.h", - type: "number" - }, { - element: ".control-link-item-color-hsl-s-range", - path: "link.item.color.hsl.s", - type: "range" - }, { - element: ".control-link-item-color-hsl-s-number", - path: "link.item.color.hsl.s", - type: "number" - }, { - element: ".control-link-item-color-hsl-l-range", - path: "link.item.color.hsl.l", - type: "range" - }, { - element: ".control-link-item-color-hsl-l-number", - path: "link.item.color.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.color.hsl(); - } - }, { - element: ".control-link-item-color-apply", - type: "button", - func: function() { - link.mod.item.color.set(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-color-rainbow", - type: "button", - func: function() { - link.mod.item.color.rainbow(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-color-opacity-range", - path: "link.item.color.opacity", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-color-opacity-number", - path: "link.item.color.opacity", - type: "number", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-color-opacity-number", - path: "link.item.color.opacity", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-color-opacity-range", - path: "link.item.color.opacity", - type: "number", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-color-opacity-default", - type: "button", - func: function() { - mod.default("link.item.color.opacity"); - render.update.control.menu(); - } - }, { - element: ".control-link-item-color-opacity-apply", - type: "button", - func: function() { - link.mod.item.color.opacity(); - link.groupAndItems(); - } - }], - accent: [{ - element: ".control-link-item-accent-by-theme", - path: "link.item.accent.by", - type: "radio", - func: function() { - render.dependents(); - } - }, { - element: ".control-link-item-accent-by-custom", - path: "link.item.accent.by", - type: "radio", - func: function() { - render.dependents(); - } - }, { - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color", - mirrorElement: [{ - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-hsl-h-range", - path: "link.item.accent.hsl.h", - type: "range" - }, { - element: ".control-link-item-accent-hsl-h-number", - path: "link.item.accent.hsl.h", - type: "number" - }, { - element: ".control-link-item-accent-hsl-s-range", - path: "link.item.accent.hsl.s", - type: "range" - }, { - element: ".control-link-item-accent-hsl-s-number", - path: "link.item.accent.hsl.s", - type: "number" - }, { - element: ".control-link-item-accent-hsl-l-range", - path: "link.item.accent.hsl.l", - type: "range" - }, { - element: ".control-link-item-accent-hsl-l-number", - path: "link.item.accent.hsl.l", - type: "number" - }, { - element: ".control-link-item-accent-rgb-r-range", - path: "link.item.accent.rgb.r", - type: "range" - }, { - element: ".control-link-item-accent-rgb-r-number", - path: "link.item.accent.rgb.r", - type: "number" - }, { - element: ".control-link-item-accent-rgb-g-range", - path: "link.item.accent.rgb.g", - type: "range" - }, { - element: ".control-link-item-accent-rgb-g-number", - path: "link.item.accent.rgb.g", - type: "number" - }, { - element: ".control-link-item-accent-rgb-b-range", - path: "link.item.accent.rgb.b", - type: "range" - }, { - element: ".control-link-item-accent-rgb-b-number", - path: "link.item.accent.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.accent.hsl(); - } - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"], - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-hsl-h-range", - path: "link.item.accent.hsl.h", - type: "range" - }, { - element: ".control-link-item-accent-hsl-h-number", - path: "link.item.accent.hsl.h", - type: "number" - }, { - element: ".control-link-item-accent-hsl-s-range", - path: "link.item.accent.hsl.s", - type: "range" - }, { - element: ".control-link-item-accent-hsl-s-number", - path: "link.item.accent.hsl.s", - type: "number" - }, { - element: ".control-link-item-accent-hsl-l-range", - path: "link.item.accent.hsl.l", - type: "range" - }, { - element: ".control-link-item-accent-hsl-l-number", - path: "link.item.accent.hsl.l", - type: "number" - }, { - element: ".control-link-item-accent-rgb-r-range", - path: "link.item.accent.rgb.r", - type: "range" - }, { - element: ".control-link-item-accent-rgb-r-number", - path: "link.item.accent.rgb.r", - type: "number" - }, { - element: ".control-link-item-accent-rgb-g-range", - path: "link.item.accent.rgb.g", - type: "range" - }, { - element: ".control-link-item-accent-rgb-g-number", - path: "link.item.accent.rgb.g", - type: "number" - }, { - element: ".control-link-item-accent-rgb-b-range", - path: "link.item.accent.rgb.b", - type: "range" - }, { - element: ".control-link-item-accent-rgb-b-number", - path: "link.item.accent.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.accent.hsl(); - } - }, { - element: ".control-link-item-accent-hsl-h-range", - path: "link.item.accent.hsl.h", - type: "range", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-hsl-h-number", - path: "link.item.accent.hsl.h", - type: "number" - }, { - element: ".control-link-item-accent-rgb-r-range", - path: "link.item.accent.rgb.r", - type: "range" - }, { - element: ".control-link-item-accent-rgb-r-number", - path: "link.item.accent.rgb.r", - type: "number" - }, { - element: ".control-link-item-accent-rgb-g-range", - path: "link.item.accent.rgb.g", - type: "range" - }, { - element: ".control-link-item-accent-rgb-g-number", - path: "link.item.accent.rgb.g", - type: "number" - }, { - element: ".control-link-item-accent-rgb-b-range", - path: "link.item.accent.rgb.b", - type: "range" - }, { - element: ".control-link-item-accent-rgb-b-number", - path: "link.item.accent.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.accent.rgb(); - } - }, { - element: ".control-link-item-accent-hsl-h-number", - path: "link.item.accent.hsl.h", - type: "number", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-hsl-h-range", - path: "link.item.accent.hsl.h", - type: "range" - }, { - element: ".control-link-item-accent-rgb-r-range", - path: "link.item.accent.rgb.r", - type: "range" - }, { - element: ".control-link-item-accent-rgb-r-number", - path: "link.item.accent.rgb.r", - type: "number" - }, { - element: ".control-link-item-accent-rgb-g-range", - path: "link.item.accent.rgb.g", - type: "range" - }, { - element: ".control-link-item-accent-rgb-g-number", - path: "link.item.accent.rgb.g", - type: "number" - }, { - element: ".control-link-item-accent-rgb-b-range", - path: "link.item.accent.rgb.b", - type: "range" - }, { - element: ".control-link-item-accent-rgb-b-number", - path: "link.item.accent.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.accent.rgb(); - } - }, { - element: ".control-link-item-accent-hsl-s-range", - path: "link.item.accent.hsl.s", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-hsl-s-number", - path: "link.item.accent.hsl.s", - type: "number" - }, { - element: ".control-link-item-accent-rgb-r-range", - path: "link.item.accent.rgb.r", - type: "range" - }, { - element: ".control-link-item-accent-rgb-r-number", - path: "link.item.accent.rgb.r", - type: "number" - }, { - element: ".control-link-item-accent-rgb-g-range", - path: "link.item.accent.rgb.g", - type: "range" - }, { - element: ".control-link-item-accent-rgb-g-number", - path: "link.item.accent.rgb.g", - type: "number" - }, { - element: ".control-link-item-accent-rgb-b-range", - path: "link.item.accent.rgb.b", - type: "range" - }, { - element: ".control-link-item-accent-rgb-b-number", - path: "link.item.accent.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.accent.rgb(); - } - }, { - element: ".control-link-item-accent-hsl-s-number", - path: "link.item.accent.hsl.s", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-hsl-s-range", - path: "link.item.accent.hsl.s", - type: "range" - }, { - element: ".control-link-item-accent-rgb-r-range", - path: "link.item.accent.rgb.r", - type: "range" - }, { - element: ".control-link-item-accent-rgb-r-number", - path: "link.item.accent.rgb.r", - type: "number" - }, { - element: ".control-link-item-accent-rgb-g-range", - path: "link.item.accent.rgb.g", - type: "range" - }, { - element: ".control-link-item-accent-rgb-g-number", - path: "link.item.accent.rgb.g", - type: "number" - }, { - element: ".control-link-item-accent-rgb-b-range", - path: "link.item.accent.rgb.b", - type: "range" - }, { - element: ".control-link-item-accent-rgb-b-number", - path: "link.item.accent.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.accent.rgb(); - } - }, { - element: ".control-link-item-accent-hsl-l-range", - path: "link.item.accent.hsl.l", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-hsl-l-number", - path: "link.item.accent.hsl.l", - type: "number" - }, { - element: ".control-link-item-accent-rgb-r-range", - path: "link.item.accent.rgb.r", - type: "range" - }, { - element: ".control-link-item-accent-rgb-r-number", - path: "link.item.accent.rgb.r", - type: "number" - }, { - element: ".control-link-item-accent-rgb-g-range", - path: "link.item.accent.rgb.g", - type: "range" - }, { - element: ".control-link-item-accent-rgb-g-number", - path: "link.item.accent.rgb.g", - type: "number" - }, { - element: ".control-link-item-accent-rgb-b-range", - path: "link.item.accent.rgb.b", - type: "range" - }, { - element: ".control-link-item-accent-rgb-b-number", - path: "link.item.accent.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.accent.rgb(); - } - }, { - element: ".control-link-item-accent-hsl-l-number", - path: "link.item.accent.hsl.l", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-hsl-l-range", - path: "link.item.accent.hsl.l", - type: "range" - }, { - element: ".control-link-item-accent-rgb-r-range", - path: "link.item.accent.rgb.r", - type: "range" - }, { - element: ".control-link-item-accent-rgb-r-number", - path: "link.item.accent.rgb.r", - type: "number" - }, { - element: ".control-link-item-accent-rgb-g-range", - path: "link.item.accent.rgb.g", - type: "range" - }, { - element: ".control-link-item-accent-rgb-g-number", - path: "link.item.accent.rgb.g", - type: "number" - }, { - element: ".control-link-item-accent-rgb-b-range", - path: "link.item.accent.rgb.b", - type: "range" - }, { - element: ".control-link-item-accent-rgb-b-number", - path: "link.item.accent.rgb.b", - type: "number" - }], - func: function() { - link.mod.item.accent.rgb(); - } - }, { - element: ".control-link-item-accent-rgb-r-range", - path: "link.item.accent.rgb.r", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-rgb-r-number", - path: "link.item.accent.rgb.r", - type: "number" - }, { - element: ".control-link-item-accent-hsl-h-range", - path: "link.item.accent.hsl.h", - type: "range" - }, { - element: ".control-link-item-accent-hsl-h-number", - path: "link.item.accent.hsl.h", - type: "number" - }, { - element: ".control-link-item-accent-hsl-s-range", - path: "link.item.accent.hsl.s", - type: "range" - }, { - element: ".control-link-item-accent-hsl-s-number", - path: "link.item.accent.hsl.s", - type: "number" - }, { - element: ".control-link-item-accent-hsl-l-range", - path: "link.item.accent.hsl.l", - type: "range" - }, { - element: ".control-link-item-accent-hsl-l-number", - path: "link.item.accent.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.accent.hsl(); - } - }, { - element: ".control-link-item-accent-rgb-r-number", - path: "link.item.accent.rgb.r", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-rgb-r-range", - path: "link.item.accent.rgb.r", - type: "range" - }, { - element: ".control-link-item-accent-hsl-h-range", - path: "link.item.accent.hsl.h", - type: "range" - }, { - element: ".control-link-item-accent-hsl-h-number", - path: "link.item.accent.hsl.h", - type: "number" - }, { - element: ".control-link-item-accent-hsl-s-range", - path: "link.item.accent.hsl.s", - type: "range" - }, { - element: ".control-link-item-accent-hsl-s-number", - path: "link.item.accent.hsl.s", - type: "number" - }, { - element: ".control-link-item-accent-hsl-l-range", - path: "link.item.accent.hsl.l", - type: "range" - }, { - element: ".control-link-item-accent-hsl-l-number", - path: "link.item.accent.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.accent.hsl(); - } - }, { - element: ".control-link-item-accent-rgb-g-range", - path: "link.item.accent.rgb.g", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-rgb-g-number", - path: "link.item.accent.rgb.g", - type: "number" - }, { - element: ".control-link-item-accent-hsl-h-range", - path: "link.item.accent.hsl.h", - type: "range" - }, { - element: ".control-link-item-accent-hsl-h-number", - path: "link.item.accent.hsl.h", - type: "number" - }, { - element: ".control-link-item-accent-hsl-s-range", - path: "link.item.accent.hsl.s", - type: "range" - }, { - element: ".control-link-item-accent-hsl-s-number", - path: "link.item.accent.hsl.s", - type: "number" - }, { - element: ".control-link-item-accent-hsl-l-range", - path: "link.item.accent.hsl.l", - type: "range" - }, { - element: ".control-link-item-accent-hsl-l-number", - path: "link.item.accent.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.accent.hsl(); - } - }, { - element: ".control-link-item-accent-rgb-g-number", - path: "link.item.accent.rgb.g", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-rgb-g-range", - path: "link.item.accent.rgb.g", - type: "range" - }, { - element: ".control-link-item-accent-hsl-h-range", - path: "link.item.accent.hsl.h", - type: "range" - }, { - element: ".control-link-item-accent-hsl-h-number", - path: "link.item.accent.hsl.h", - type: "number" - }, { - element: ".control-link-item-accent-hsl-s-range", - path: "link.item.accent.hsl.s", - type: "range" - }, { - element: ".control-link-item-accent-hsl-s-number", - path: "link.item.accent.hsl.s", - type: "number" - }, { - element: ".control-link-item-accent-hsl-l-range", - path: "link.item.accent.hsl.l", - type: "range" - }, { - element: ".control-link-item-accent-hsl-l-number", - path: "link.item.accent.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.accent.hsl(); - } - }, { - element: ".control-link-item-accent-rgb-b-range", - path: "link.item.accent.rgb.b", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-rgb-b-number", - path: "link.item.accent.rgb.b", - type: "number" - }, { - element: ".control-link-item-accent-hsl-h-range", - path: "link.item.accent.hsl.h", - type: "range" - }, { - element: ".control-link-item-accent-hsl-h-number", - path: "link.item.accent.hsl.h", - type: "number" - }, { - element: ".control-link-item-accent-hsl-s-range", - path: "link.item.accent.hsl.s", - type: "range" - }, { - element: ".control-link-item-accent-hsl-s-number", - path: "link.item.accent.hsl.s", - type: "number" - }, { - element: ".control-link-item-accent-hsl-l-range", - path: "link.item.accent.hsl.l", - type: "range" - }, { - element: ".control-link-item-accent-hsl-l-number", - path: "link.item.accent.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.accent.hsl(); - } - }, { - element: ".control-link-item-accent-rgb-b-number", - path: "link.item.accent.rgb.b", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-link-item-accent-rgb-color", - path: "link.item.accent.rgb", - type: "color" - }, { - element: ".control-link-item-accent-rgb-text", - path: "link.item.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-link-item-accent-rgb-b-range", - path: "link.item.accent.rgb.b", - type: "range" - }, { - element: ".control-link-item-accent-hsl-h-range", - path: "link.item.accent.hsl.h", - type: "range" - }, { - element: ".control-link-item-accent-hsl-h-number", - path: "link.item.accent.hsl.h", - type: "number" - }, { - element: ".control-link-item-accent-hsl-s-range", - path: "link.item.accent.hsl.s", - type: "range" - }, { - element: ".control-link-item-accent-hsl-s-number", - path: "link.item.accent.hsl.s", - type: "number" - }, { - element: ".control-link-item-accent-hsl-l-range", - path: "link.item.accent.hsl.l", - type: "range" - }, { - element: ".control-link-item-accent-hsl-l-number", - path: "link.item.accent.hsl.l", - type: "number" - }], - func: function() { - link.mod.item.accent.hsl(); - } - }, { - element: ".control-link-item-accent-apply", - type: "button", - func: function() { - link.mod.item.accent.set(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-accent-rainbow", - type: "button", - func: function() { - link.mod.item.accent.rainbow(); - link.groupAndItems(); - } - }], - background: [{ - element: ".control-link-item-background-show", - type: "button", - func: function() { - link.mod.item.background.show(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-background-hide", - type: "button", - func: function() { - link.mod.item.background.hide(); - link.groupAndItems(); - } - }, { - element: ".control-link-item-background-opacity-range", - path: "link.item.background.opacity", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-background-opacity-number", - path: "link.item.background.opacity", - type: "number", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-background-opacity-number", - path: "link.item.background.opacity", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-link-item-background-opacity-range", - path: "link.item.background.opacity", - type: "number", - valueConvert: ["float"] - }] - }, { - element: ".control-link-item-background-opacity-default", - type: "button", - func: function() { - mod.default("link.item.background.opacity"); - render.update.control.menu(); - } - }, { - element: ".control-link-item-background-opacity-apply", - type: "button", - func: function() { - link.mod.item.background.opacity(); - link.groupAndItems(); - } - }], - border: [{ - element: ".control-link-item-border-range", - path: "link.item.border", - type: "range", - valueModify: { - min: 0, - max: 60 - }, - mirrorElement: [{ - element: ".control-link-item-border-number", - path: "link.item.border", - type: "number" - }], - func: function() { - link.render.item.border(); - render.class(); - } - }, { - element: ".control-link-item-border-number", - path: "link.item.border", - type: "number", - valueModify: { - min: 0, - max: 60 - }, - mirrorElement: [{ - element: ".control-link-item-border-range", - path: "link.item.border", - type: "range" - }], - func: function() { - link.render.item.border(); - render.class(); - } - }, { - element: ".control-link-item-border-default", - type: "button", - func: function() { - mod.default("link.item.border"); - render.class(); - link.render.item.border(); - render.update.control.menu(); - } - }], - orientation: [{ - element: ".control-link-orientation-top", - path: "link.orientation", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-link-orientation-bottom", - path: "link.orientation", - type: "radio", - func: function() { - render.class(); - } - }], - sort: [{ - element: ".control-link-sort-letter", - type: "button", - func: function() { - bookmarks.sort("letter"); - link.groupAndItems(); - } - }, { - element: ".control-link-sort-icon", - type: "button", - func: function() { - bookmarks.sort("icon"); - link.groupAndItems(); - } - }, { - element: ".control-link-sort-name", - type: "button", - func: function() { - bookmarks.sort("name"); - link.groupAndItems(); - } - }] - }, - groups: { - area: [{ - element: ".control-group-area-justify-left", - path: "group.area.justify", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-group-area-justify-center", - path: "group.area.justify", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-group-area-justify-right", - path: "group.area.justify", - type: "radio", - func: function() { - render.class(); - } - }], - order: [{ - element: ".control-group-order-headerbody", - path: "group.order", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-group-order-bodyheader", - path: "group.order", - type: "radio", - func: function() { - render.class(); - } - }], - names: [{ - element: ".control-group-name-show", - type: "button", - func: function() { - link.mod.group.name.show(); - link.groupAndItems(); - } - }, { - element: ".control-group-name-hide", - type: "button", - func: function() { - link.mod.group.name.hide(); - link.groupAndItems(); - } - }, { - element: ".control-group-name-size-range", - path: "group.name.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-group-name-size-number", - path: "group.name.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".group-name-text"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".group-name-text"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: helper.e(".group-name-text"), - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - link.render.group.name.size(); - } - }, { - element: ".control-group-name-size-number", - path: "group.name.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-group-name-size-range", - path: "group.name.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - link.render.group.name.size(); - } - }, { - element: ".control-group-name-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".group-name-text"), - delay: 500 - }); - } - }], - func: function() { - mod.default("group.name.size"); - link.render.group.name.size(); - render.update.control.menu(); - } - }], - openall: [{ - element: ".control-group-openall-show", - type: "button", - func: function() { - link.mod.group.openall.show(); - link.groupAndItems(); - } - }, { - element: ".control-group-openall-hide", - type: "button", - func: function() { - link.mod.group.openall.hide(); - link.groupAndItems(); - } - }, { - element: ".control-group-openall-size-range", - path: "group.openAll.size", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-group-openall-size-number", - path: "group.openAll.size", - type: "number", - valueConvert: ["float"] - }], - additionalEvents: [{ - event: "input", - func: function() { - edge.box.open({ - element: helper.e(".group-openall"), - }); - } - }, { - event: "mousedown", - func: function() { - edge.box.open({ - element: helper.e(".group-openall"), - }); - } - }, { - event: "mouseup", - func: function() { - edge.box.close(); - } - }, { - event: "touchend", - func: function() { - edge.box.close(); - } - }, { - event: "keydown", - func: function() { - if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { - edge.box.open({ - element: ".header-item-coloraccent", - }); - }; - } - }, { - event: "keyup", - func: function() { - edge.box.close(); - } - }], - func: function() { - link.render.group.openall.size(); - } - }, { - element: ".control-group-openall-size-number", - path: "group.openAll.size", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 10, - max: 500, - step: 10 - }, - mirrorElement: [{ - element: ".control-group-openall-size-range", - path: "group.openAll.size", - type: "range", - valueConvert: ["float"] - }], - func: function() { - link.render.group.openall.size(); - } - }, { - element: ".control-group-openall-size-default", - type: "button", - additionalEvents: [{ - event: "click", - func: function() { - edge.box.open({ - element: helper.e(".group-openall"), - delay: 500 - }); - } - }], - func: function() { - mod.default("group.openAll.size"); - link.render.group.openall.size(); - render.update.control.menu(); - } - }, { - element: ".control-group-openall-opacity-range", - path: "group.openAll.opacity", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-group-openall-opacity-number", - path: "group.openAll.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - link.render.group.openall.opacity(); - render.class(); - } - }, { - element: ".control-group-openall-opacity-number", - path: "group.openAll.opacity", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-group-openall-opacity-range", - path: "group.openAll.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - link.render.group.openall.opacity(); - render.class(); - } - }, { - element: ".control-group-openall-opacity-default", - type: "button", - func: function() { - mod.default("group.openAll.opacity"); - link.render.group.openall.opacity(); - render.update.control.menu(); - render.class(); - } - }], - border: [{ - element: ".control-group-border-range", - path: "group.border", - type: "range", - valueModify: { - min: 0, - max: 60 - }, - mirrorElement: [{ - element: ".control-group-border-number", - path: "group.border", - type: "number" - }], - func: function() { - link.render.group.border(); - render.class(); - } - }, { - element: ".control-group-border-number", - path: "group.border", - type: "number", - valueModify: { - min: 0, - max: 60 - }, - mirrorElement: [{ - element: ".control-group-border-range", - path: "group.border", - type: "range" - }], - func: function() { - link.render.group.border(); - render.class(); - } - }, { - element: ".control-group-border-default", - type: "button", - func: function() { - mod.default("group.border"); - link.render.group.border(); - render.class(); - render.update.control.menu(); - } - }] - }, - theme: { - saved: [{ - element: ".control-theme-custom-add", - type: "button", - func: function() { - menu.close(); - theme.custom.add(); - } - }, { - element: ".control-theme-custom-edit", - path: "theme.custom.edit", - type: "checkbox", - func: function() { - theme.render.custom.tabIndex(); - render.class(); - } - }], - fonts: [{ - element: ".control-theme-font-display-name", - path: "theme.font.display.name", - type: "text", - func: function() { - theme.render.font.delay.display(); - } - }, { - element: ".control-theme-font-display-name-default", - type: "button", - func: function() { - mod.default("theme.font.display.name"); - theme.render.font.display.name(); - render.update.control.menu(); - } - }, { - element: ".control-theme-font-display-weight-range", - path: "theme.font.display.weight", - type: "range", - valueModify: { - min: 100, - max: 900, - step: 100 - }, - mirrorElement: [{ - element: ".control-theme-font-display-weight-number", - path: "theme.font.display.weight", - type: "number" - }], - func: function() { - theme.render.font.display.weight(); - } - }, { - element: ".control-theme-font-display-weight-default", - type: "button", - func: function() { - mod.default("theme.font.display.weight"); - theme.render.font.display.weight(); - render.update.control.menu(); - } - }, { - element: ".control-theme-font-display-weight-number", - path: "theme.font.display.weight", - type: "number", - valueModify: { - min: 100, - max: 900, - step: 100 - }, - mirrorElement: [{ - element: ".control-theme-font-display-weight-range", - path: "theme.font.display.weight", - type: "range" - }], - func: function() { - theme.render.font.display.weight(); - } - }, { - element: ".control-theme-font-display-light", - type: "button", - func: function() { - theme.mod.font.display.light(); - theme.render.font.display.weight(); - render.update.control.menu(); - } - }, { - element: ".control-theme-font-display-regular", - type: "button", - func: function() { - theme.mod.font.display.regular(); - theme.render.font.display.weight(); - render.update.control.menu(); - } - }, { - element: ".control-theme-font-display-bold", - type: "button", - func: function() { - theme.mod.font.display.bold(); - theme.render.font.display.weight(); - render.update.control.menu(); - } - }, { - element: ".control-theme-font-display-style-normal", - path: "theme.font.display.style", - type: "radio", - func: function() { - theme.render.font.display.style(); - } - }, { - element: ".control-theme-font-display-style-italic", - path: "theme.font.display.style", - type: "radio", - func: function() { - theme.render.font.display.style(); - } - }, { - element: ".control-theme-font-display-style-default", - type: "button", - func: function() { - mod.default("theme.font.display.style"); - theme.render.font.display.style(); - render.update.control.menu(); - } - }, { - element: ".control-theme-font-ui-name", - path: "theme.font.ui.name", - type: "text", - func: function() { - theme.render.font.delay.ui(); - } - }, { - element: ".control-theme-font-ui-name-default", - type: "button", - func: function() { - mod.default("theme.font.ui.name"); - theme.render.font.ui.name(); - render.update.control.menu(); - } - }, { - element: ".control-theme-font-ui-weight-range", - path: "theme.font.ui.weight", - type: "range", - valueModify: { - min: 100, - max: 900, - step: 100 - }, - mirrorElement: [{ - element: ".control-theme-font-ui-weight-number", - path: "theme.font.ui.weight", - type: "number" - }], - func: function() { - theme.render.font.ui.weight(); - } - }, { - element: ".control-theme-font-ui-weight-default", - type: "button", - func: function() { - mod.default("theme.font.ui.weight"); - theme.render.font.ui.weight(); - render.update.control.menu(); - } - }, { - element: ".control-theme-font-ui-weight-number", - path: "theme.font.ui.weight", - type: "number", - valueModify: { - min: 100, - max: 900, - step: 100 - }, - mirrorElement: [{ - element: ".control-theme-font-ui-weight-range", - path: "theme.font.ui.weight", - type: "range" - }], - func: function() { - theme.render.font.ui.weight(); - } - }, { - element: ".control-theme-font-ui-light", - type: "button", - func: function() { - theme.mod.font.ui.light(); - theme.render.font.ui.weight(); - render.update.control.menu(); - } - }, { - element: ".control-theme-font-ui-regular", - type: "button", - func: function() { - theme.mod.font.ui.regular(); - theme.render.font.ui.weight(); - render.update.control.menu(); - } - }, { - element: ".control-theme-font-ui-bold", - type: "button", - func: function() { - theme.mod.font.ui.bold(); - theme.render.font.ui.weight(); - render.update.control.menu(); - } - }, { - element: ".control-theme-font-ui-style-normal", - path: "theme.font.ui.style", - type: "radio", - func: function() { - theme.render.font.ui.style(); - } - }, { - element: ".control-theme-font-ui-style-italic", - path: "theme.font.ui.style", - type: "radio", - func: function() { - theme.render.font.ui.style(); - } - }, { - element: ".control-theme-font-ui-style-default", - type: "button", - func: function() { - mod.default("theme.font.ui.style"); - theme.render.font.ui.style(); - render.update.control.menu(); - } - }], - style: [{ - element: ".control-theme-style-dark", - path: "theme.style", - type: "radio", - func: function() { - theme.style.dark(); - } - }, { - element: ".control-theme-style-light", - path: "theme.style", - type: "radio", - func: function() { - theme.style.light(); - } - }, { - element: ".control-theme-style-system", - path: "theme.style", - type: "radio", - func: function() { - theme.style.system(); - } - }], - color: [{ - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color", - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-hsl-h-range", - path: "theme.color.hsl.h", - type: "range" - }, { - element: ".control-theme-color-hsl-h-number", - path: "theme.color.hsl.h", - type: "number" - }, { - element: ".control-theme-color-hsl-s-range", - path: "theme.color.hsl.s", - type: "range" - }, { - element: ".control-theme-color-hsl-s-number", - path: "theme.color.hsl.s", - type: "number" - }, { - element: ".control-theme-color-hsl-l-range", - path: "theme.color.hsl.l", - type: "range" - }, { - element: ".control-theme-color-hsl-l-number", - path: "theme.color.hsl.l", - type: "number" - }, { - element: ".control-theme-color-rgb-r-range", - path: "theme.color.rgb.r", - type: "range" - }, { - element: ".control-theme-color-rgb-r-number", - path: "theme.color.rgb.r", - type: "number" - }, { - element: ".control-theme-color-rgb-g-range", - path: "theme.color.rgb.g", - type: "range" - }, { - element: ".control-theme-color-rgb-g-number", - path: "theme.color.rgb.g", - type: "number" - }, { - element: ".control-theme-color-rgb-b-range", - path: "theme.color.rgb.b", - type: "range" - }, { - element: ".control-theme-color-rgb-b-number", - path: "theme.color.rgb.b", - type: "number" - }], - func: function() { - theme.mod.color.hsl(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"], - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-hsl-h-range", - path: "theme.color.hsl.h", - type: "range" - }, { - element: ".control-theme-color-hsl-h-number", - path: "theme.color.hsl.h", - type: "number" - }, { - element: ".control-theme-color-hsl-s-range", - path: "theme.color.hsl.s", - type: "range" - }, { - element: ".control-theme-color-hsl-s-number", - path: "theme.color.hsl.s", - type: "number" - }, { - element: ".control-theme-color-hsl-l-range", - path: "theme.color.hsl.l", - type: "range" - }, { - element: ".control-theme-color-hsl-l-number", - path: "theme.color.hsl.l", - type: "number" - }, { - element: ".control-theme-color-rgb-r-range", - path: "theme.color.rgb.r", - type: "range" - }, { - element: ".control-theme-color-rgb-r-number", - path: "theme.color.rgb.r", - type: "number" - }, { - element: ".control-theme-color-rgb-g-range", - path: "theme.color.rgb.g", - type: "range" - }, { - element: ".control-theme-color-rgb-g-number", - path: "theme.color.rgb.g", - type: "number" - }, { - element: ".control-theme-color-rgb-b-range", - path: "theme.color.rgb.b", - type: "range" - }, { - element: ".control-theme-color-rgb-b-number", - path: "theme.color.rgb.b", - type: "number" - }], - func: function() { - theme.mod.color.hsl(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-rgb-default", - type: "button", - func: function() { - mod.default("theme.color.rgb"); - theme.mod.color.hsl(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - render.update.control.header(); - render.update.control.menu(); - } - }, { - element: ".control-theme-color-hsl-h-range", - path: "theme.color.hsl.h", - type: "range", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-hsl-h-number", - path: "theme.color.hsl.h", - type: "number" - }, { - element: ".control-theme-color-rgb-r-range", - path: "theme.color.rgb.r", - type: "range" - }, { - element: ".control-theme-color-rgb-r-number", - path: "theme.color.rgb.r", - type: "number" - }, { - element: ".control-theme-color-rgb-g-range", - path: "theme.color.rgb.g", - type: "range" - }, { - element: ".control-theme-color-rgb-g-number", - path: "theme.color.rgb.g", - type: "number" - }, { - element: ".control-theme-color-rgb-b-range", - path: "theme.color.rgb.b", - type: "range" - }, { - element: ".control-theme-color-rgb-b-number", - path: "theme.color.rgb.b", - type: "number" - }], - func: function() { - theme.mod.color.rgb(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-hsl-h-number", - path: "theme.color.hsl.h", - type: "number", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-hsl-h-range", - path: "theme.color.hsl.h", - type: "range" - }, { - element: ".control-theme-color-rgb-r-range", - path: "theme.color.rgb.r", - type: "range" - }, { - element: ".control-theme-color-rgb-r-number", - path: "theme.color.rgb.r", - type: "number" - }, { - element: ".control-theme-color-rgb-g-range", - path: "theme.color.rgb.g", - type: "range" - }, { - element: ".control-theme-color-rgb-g-number", - path: "theme.color.rgb.g", - type: "number" - }, { - element: ".control-theme-color-rgb-b-range", - path: "theme.color.rgb.b", - type: "range" - }, { - element: ".control-theme-color-rgb-b-number", - path: "theme.color.rgb.b", - type: "number" - }], - func: function() { - theme.mod.color.rgb(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-hsl-s-range", - path: "theme.color.hsl.s", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-hsl-s-number", - path: "theme.color.hsl.s", - type: "number" - }, { - element: ".control-theme-color-rgb-r-range", - path: "theme.color.rgb.r", - type: "range" - }, { - element: ".control-theme-color-rgb-r-number", - path: "theme.color.rgb.r", - type: "number" - }, { - element: ".control-theme-color-rgb-g-range", - path: "theme.color.rgb.g", - type: "range" - }, { - element: ".control-theme-color-rgb-g-number", - path: "theme.color.rgb.g", - type: "number" - }, { - element: ".control-theme-color-rgb-b-range", - path: "theme.color.rgb.b", - type: "range" - }, { - element: ".control-theme-color-rgb-b-number", - path: "theme.color.rgb.b", - type: "number" - }], - func: function() { - theme.mod.color.rgb(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-hsl-s-number", - path: "theme.color.hsl.s", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-hsl-s-range", - path: "theme.color.hsl.s", - type: "range" - }, { - element: ".control-theme-color-rgb-r-range", - path: "theme.color.rgb.r", - type: "range" - }, { - element: ".control-theme-color-rgb-r-number", - path: "theme.color.rgb.r", - type: "number" - }, { - element: ".control-theme-color-rgb-g-range", - path: "theme.color.rgb.g", - type: "range" - }, { - element: ".control-theme-color-rgb-g-number", - path: "theme.color.rgb.g", - type: "number" - }, { - element: ".control-theme-color-rgb-b-range", - path: "theme.color.rgb.b", - type: "range" - }, { - element: ".control-theme-color-rgb-b-number", - path: "theme.color.rgb.b", - type: "number" - }], - func: function() { - theme.mod.color.rgb(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-hsl-l-range", - path: "theme.color.hsl.l", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-hsl-l-number", - path: "theme.color.hsl.l", - type: "number" - }, { - element: ".control-theme-color-rgb-r-range", - path: "theme.color.rgb.r", - type: "range" - }, { - element: ".control-theme-color-rgb-r-number", - path: "theme.color.rgb.r", - type: "number" - }, { - element: ".control-theme-color-rgb-g-range", - path: "theme.color.rgb.g", - type: "range" - }, { - element: ".control-theme-color-rgb-g-number", - path: "theme.color.rgb.g", - type: "number" - }, { - element: ".control-theme-color-rgb-b-range", - path: "theme.color.rgb.b", - type: "range" - }, { - element: ".control-theme-color-rgb-b-number", - path: "theme.color.rgb.b", - type: "number" - }], - func: function() { - theme.mod.color.rgb(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-hsl-l-number", - path: "theme.color.hsl.l", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-hsl-l-range", - path: "theme.color.hsl.l", - type: "range" - }, { - element: ".control-theme-color-rgb-r-range", - path: "theme.color.rgb.r", - type: "range" - }, { - element: ".control-theme-color-rgb-r-number", - path: "theme.color.rgb.r", - type: "number" - }, { - element: ".control-theme-color-rgb-g-range", - path: "theme.color.rgb.g", - type: "range" - }, { - element: ".control-theme-color-rgb-g-number", - path: "theme.color.rgb.g", - type: "number" - }, { - element: ".control-theme-color-rgb-b-range", - path: "theme.color.rgb.b", - type: "range" - }, { - element: ".control-theme-color-rgb-b-number", - path: "theme.color.rgb.b", - type: "number" - }], - func: function() { - theme.mod.color.rgb(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-rgb-r-range", - path: "theme.color.rgb.r", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-rgb-r-number", - path: "theme.color.rgb.r", - type: "number" - }, { - element: ".control-theme-color-hsl-h-range", - path: "theme.color.hsl.h", - type: "range" - }, { - element: ".control-theme-color-hsl-h-number", - path: "theme.color.hsl.h", - type: "number" - }, { - element: ".control-theme-color-hsl-s-range", - path: "theme.color.hsl.s", - type: "range" - }, { - element: ".control-theme-color-hsl-s-number", - path: "theme.color.hsl.s", - type: "number" - }, { - element: ".control-theme-color-hsl-l-range", - path: "theme.color.hsl.l", - type: "range" - }, { - element: ".control-theme-color-hsl-l-number", - path: "theme.color.hsl.l", - type: "number" - }], - func: function() { - theme.mod.color.hsl(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-rgb-r-number", - path: "theme.color.rgb.r", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-rgb-r-range", - path: "theme.color.rgb.r", - type: "range" - }, { - element: ".control-theme-color-hsl-h-range", - path: "theme.color.hsl.h", - type: "range" - }, { - element: ".control-theme-color-hsl-h-number", - path: "theme.color.hsl.h", - type: "number" - }, { - element: ".control-theme-color-hsl-s-range", - path: "theme.color.hsl.s", - type: "range" - }, { - element: ".control-theme-color-hsl-s-number", - path: "theme.color.hsl.s", - type: "number" - }, { - element: ".control-theme-color-hsl-l-range", - path: "theme.color.hsl.l", - type: "range" - }, { - element: ".control-theme-color-hsl-l-number", - path: "theme.color.hsl.l", - type: "number" - }], - func: function() { - theme.mod.color.hsl(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-rgb-g-range", - path: "theme.color.rgb.g", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-rgb-g-number", - path: "theme.color.rgb.g", - type: "number" - }, { - element: ".control-theme-color-hsl-h-range", - path: "theme.color.hsl.h", - type: "range" - }, { - element: ".control-theme-color-hsl-h-number", - path: "theme.color.hsl.h", - type: "number" - }, { - element: ".control-theme-color-hsl-s-range", - path: "theme.color.hsl.s", - type: "range" - }, { - element: ".control-theme-color-hsl-s-number", - path: "theme.color.hsl.s", - type: "number" - }, { - element: ".control-theme-color-hsl-l-range", - path: "theme.color.hsl.l", - type: "range" - }, { - element: ".control-theme-color-hsl-l-number", - path: "theme.color.hsl.l", - type: "number" - }], - func: function() { - theme.mod.color.hsl(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-rgb-g-number", - path: "theme.color.rgb.g", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-rgb-g-range", - path: "theme.color.rgb.g", - type: "range" - }, { - element: ".control-theme-color-hsl-h-range", - path: "theme.color.hsl.h", - type: "range" - }, { - element: ".control-theme-color-hsl-h-number", - path: "theme.color.hsl.h", - type: "number" - }, { - element: ".control-theme-color-hsl-s-range", - path: "theme.color.hsl.s", - type: "range" - }, { - element: ".control-theme-color-hsl-s-number", - path: "theme.color.hsl.s", - type: "number" - }, { - element: ".control-theme-color-hsl-l-range", - path: "theme.color.hsl.l", - type: "range" - }, { - element: ".control-theme-color-hsl-l-number", - path: "theme.color.hsl.l", - type: "number" - }], - func: function() { - theme.mod.color.hsl(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-rgb-b-range", - path: "theme.color.rgb.b", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-rgb-b-number", - path: "theme.color.rgb.b", - type: "number" - }, { - element: ".control-theme-color-hsl-h-range", - path: "theme.color.hsl.h", - type: "range" - }, { - element: ".control-theme-color-hsl-h-number", - path: "theme.color.hsl.h", - type: "number" - }, { - element: ".control-theme-color-hsl-s-range", - path: "theme.color.hsl.s", - type: "range" - }, { - element: ".control-theme-color-hsl-s-number", - path: "theme.color.hsl.s", - type: "number" - }, { - element: ".control-theme-color-hsl-l-range", - path: "theme.color.hsl.l", - type: "range" - }, { - element: ".control-theme-color-hsl-l-number", - path: "theme.color.hsl.l", - type: "number" - }], - func: function() { - theme.mod.color.hsl(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-rgb-b-number", - path: "theme.color.rgb.b", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-color-rgb-color-quick", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-color", - path: "theme.color.rgb", - type: "color" - }, { - element: ".control-theme-color-rgb-text", - path: "theme.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-color-rgb-b-range", - path: "theme.color.rgb.b", - type: "range" - }, { - element: ".control-theme-color-hsl-h-range", - path: "theme.color.hsl.h", - type: "range" - }, { - element: ".control-theme-color-hsl-h-number", - path: "theme.color.hsl.h", - type: "number" - }, { - element: ".control-theme-color-hsl-s-range", - path: "theme.color.hsl.s", - type: "range" - }, { - element: ".control-theme-color-hsl-s-number", - path: "theme.color.hsl.s", - type: "number" - }, { - element: ".control-theme-color-hsl-l-range", - path: "theme.color.hsl.l", - type: "range" - }, { - element: ".control-theme-color-hsl-l-number", - path: "theme.color.hsl.l", - type: "number" - }], - func: function() { - theme.mod.color.hsl(); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-contrast-light-range", - path: "theme.color.contrast.light", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 100, - max: 800, - step: 10 - }, - mirrorElement: [{ - element: ".control-theme-color-contrast-light-number", - path: "theme.color.contrast.light", - type: "number", - valueConvert: ["float"] - }], - func: function() { - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-contrast-light-number", - path: "theme.color.contrast.light", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 100, - max: 800, - step: 10 - }, - mirrorElement: [{ - element: ".control-theme-color-contrast-light-range", - path: "theme.color.contrast.light", - type: "range", - valueConvert: ["float"] - }], - func: function() { - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-contrast-light-default", - type: "button", - func: function() { - mod.default("theme.color.contrast.light"); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - render.update.control.menu(); - } - }, { - element: ".control-theme-color-contrast-dark-range", - path: "theme.color.contrast.dark", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 100, - max: 800, - step: 10 - }, - mirrorElement: [{ - element: ".control-theme-color-contrast-dark-number", - path: "theme.color.contrast.dark", - type: "number", - valueConvert: ["float"] - }], - func: function() { - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-contrast-dark-number", - path: "theme.color.contrast.dark", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 100, - max: 800, - step: 10 - }, - mirrorElement: [{ - element: ".control-theme-color-contrast-dark-range", - path: "theme.color.contrast.dark", - type: "range", - valueConvert: ["float"] - }], - func: function() { - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - } - }, { - element: ".control-theme-color-contrast-dark-default", - type: "button", - func: function() { - mod.default("theme.color.contrast.dark"); - theme.mod.color.generated(); - theme.render.color.shade(); - theme.render.themeMetaTag(); - render.update.control.menu(); - } - }], - accent: [{ - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color", - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-hsl-h-range", - path: "theme.accent.hsl.h", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-number", - path: "theme.accent.hsl.h", - type: "number" - }, { - element: ".control-theme-accent-hsl-s-range", - path: "theme.accent.hsl.s", - type: "range" - }, { - element: ".control-theme-accent-hsl-s-number", - path: "theme.accent.hsl.s", - type: "number" - }, { - element: ".control-theme-accent-hsl-l-range", - path: "theme.accent.hsl.l", - type: "range" - }, { - element: ".control-theme-accent-hsl-l-number", - path: "theme.accent.hsl.l", - type: "number" - }, { - element: ".control-theme-accent-rgb-r-range", - path: "theme.accent.rgb.r", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-number", - path: "theme.accent.rgb.r", - type: "number" - }, { - element: ".control-theme-accent-rgb-g-range", - path: "theme.accent.rgb.g", - type: "range" - }, { - element: ".control-theme-accent-rgb-g-number", - path: "theme.accent.rgb.g", - type: "number" - }, { - element: ".control-theme-accent-rgb-b-range", - path: "theme.accent.rgb.b", - type: "range" - }, { - element: ".control-theme-accent-rgb-b-number", - path: "theme.accent.rgb.b", - type: "number" - }], - func: function() { - theme.mod.accent.hsl(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"], - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-hsl-h-range", - path: "theme.accent.hsl.h", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-number", - path: "theme.accent.hsl.h", - type: "number" - }, { - element: ".control-theme-accent-hsl-s-range", - path: "theme.accent.hsl.s", - type: "range" - }, { - element: ".control-theme-accent-hsl-s-number", - path: "theme.accent.hsl.s", - type: "number" - }, { - element: ".control-theme-accent-hsl-l-range", - path: "theme.accent.hsl.l", - type: "range" - }, { - element: ".control-theme-accent-hsl-l-number", - path: "theme.accent.hsl.l", - type: "number" - }, { - element: ".control-theme-accent-rgb-r-range", - path: "theme.accent.rgb.r", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-number", - path: "theme.accent.rgb.r", - type: "number" - }, { - element: ".control-theme-accent-rgb-g-range", - path: "theme.accent.rgb.g", - type: "range" - }, { - element: ".control-theme-accent-rgb-g-number", - path: "theme.accent.rgb.g", - type: "number" - }, { - element: ".control-theme-accent-rgb-b-range", - path: "theme.accent.rgb.b", - type: "range" - }, { - element: ".control-theme-accent-rgb-b-number", - path: "theme.accent.rgb.b", - type: "number" - }], - func: function() { - theme.mod.accent.hsl(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-rgb-default", - type: "button", - func: function() { - mod.default("theme.accent.rgb"); - theme.mod.accent.hsl(); - theme.render.accent.color(); - render.update.control.header(); - render.update.control.menu(); - } - }, { - element: ".control-theme-accent-hsl-h-range", - path: "theme.accent.hsl.h", - type: "range", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-hsl-h-number", - path: "theme.accent.hsl.h", - type: "number" - }, { - element: ".control-theme-accent-rgb-r-range", - path: "theme.accent.rgb.r", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-number", - path: "theme.accent.rgb.r", - type: "number" - }, { - element: ".control-theme-accent-rgb-g-range", - path: "theme.accent.rgb.g", - type: "range" - }, { - element: ".control-theme-accent-rgb-g-number", - path: "theme.accent.rgb.g", - type: "number" - }, { - element: ".control-theme-accent-rgb-b-range", - path: "theme.accent.rgb.b", - type: "range" - }, { - element: ".control-theme-accent-rgb-b-number", - path: "theme.accent.rgb.b", - type: "number" - }], - func: function() { - theme.mod.accent.rgb(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-hsl-h-number", - path: "theme.accent.hsl.h", - type: "number", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-hsl-h-range", - path: "theme.accent.hsl.h", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-range", - path: "theme.accent.rgb.r", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-number", - path: "theme.accent.rgb.r", - type: "number" - }, { - element: ".control-theme-accent-rgb-g-range", - path: "theme.accent.rgb.g", - type: "range" - }, { - element: ".control-theme-accent-rgb-g-number", - path: "theme.accent.rgb.g", - type: "number" - }, { - element: ".control-theme-accent-rgb-b-range", - path: "theme.accent.rgb.b", - type: "range" - }, { - element: ".control-theme-accent-rgb-b-number", - path: "theme.accent.rgb.b", - type: "number" - }], - func: function() { - theme.mod.accent.rgb(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-hsl-s-range", - path: "theme.accent.hsl.s", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-hsl-s-number", - path: "theme.accent.hsl.s", - type: "number" - }, { - element: ".control-theme-accent-rgb-r-range", - path: "theme.accent.rgb.r", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-number", - path: "theme.accent.rgb.r", - type: "number" - }, { - element: ".control-theme-accent-rgb-g-range", - path: "theme.accent.rgb.g", - type: "range" - }, { - element: ".control-theme-accent-rgb-g-number", - path: "theme.accent.rgb.g", - type: "number" - }, { - element: ".control-theme-accent-rgb-b-range", - path: "theme.accent.rgb.b", - type: "range" - }, { - element: ".control-theme-accent-rgb-b-number", - path: "theme.accent.rgb.b", - type: "number" - }], - func: function() { - theme.mod.accent.rgb(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-hsl-s-number", - path: "theme.accent.hsl.s", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-hsl-s-range", - path: "theme.accent.hsl.s", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-range", - path: "theme.accent.rgb.r", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-number", - path: "theme.accent.rgb.r", - type: "number" - }, { - element: ".control-theme-accent-rgb-g-range", - path: "theme.accent.rgb.g", - type: "range" - }, { - element: ".control-theme-accent-rgb-g-number", - path: "theme.accent.rgb.g", - type: "number" - }, { - element: ".control-theme-accent-rgb-b-range", - path: "theme.accent.rgb.b", - type: "range" - }, { - element: ".control-theme-accent-rgb-b-number", - path: "theme.accent.rgb.b", - type: "number" - }], - func: function() { - theme.mod.accent.rgb(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-hsl-l-range", - path: "theme.accent.hsl.l", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-hsl-l-number", - path: "theme.accent.hsl.l", - type: "number" - }, { - element: ".control-theme-accent-rgb-r-range", - path: "theme.accent.rgb.r", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-number", - path: "theme.accent.rgb.r", - type: "number" - }, { - element: ".control-theme-accent-rgb-g-range", - path: "theme.accent.rgb.g", - type: "range" - }, { - element: ".control-theme-accent-rgb-g-number", - path: "theme.accent.rgb.g", - type: "number" - }, { - element: ".control-theme-accent-rgb-b-range", - path: "theme.accent.rgb.b", - type: "range" - }, { - element: ".control-theme-accent-rgb-b-number", - path: "theme.accent.rgb.b", - type: "number" - }], - func: function() { - theme.mod.accent.rgb(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-hsl-l-number", - path: "theme.accent.hsl.l", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-hsl-l-range", - path: "theme.accent.hsl.l", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-range", - path: "theme.accent.rgb.r", - type: "range" - }, { - element: ".control-theme-accent-rgb-r-number", - path: "theme.accent.rgb.r", - type: "number" - }, { - element: ".control-theme-accent-rgb-g-range", - path: "theme.accent.rgb.g", - type: "range" - }, { - element: ".control-theme-accent-rgb-g-number", - path: "theme.accent.rgb.g", - type: "number" - }, { - element: ".control-theme-accent-rgb-b-range", - path: "theme.accent.rgb.b", - type: "range" - }, { - element: ".control-theme-accent-rgb-b-number", - path: "theme.accent.rgb.b", - type: "number" - }], - func: function() { - theme.mod.accent.rgb(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-rgb-r-range", - path: "theme.accent.rgb.r", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-rgb-r-number", - path: "theme.accent.rgb.r", - type: "number" - }, { - element: ".control-theme-accent-hsl-h-range", - path: "theme.accent.hsl.h", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-number", - path: "theme.accent.hsl.h", - type: "number" - }, { - element: ".control-theme-accent-hsl-s-range", - path: "theme.accent.hsl.s", - type: "range" - }, { - element: ".control-theme-accent-hsl-s-number", - path: "theme.accent.hsl.s", - type: "number" - }, { - element: ".control-theme-accent-hsl-l-range", - path: "theme.accent.hsl.l", - type: "range" - }, { - element: ".control-theme-accent-hsl-l-number", - path: "theme.accent.hsl.l", - type: "number" - }], - func: function() { - theme.mod.accent.hsl(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-rgb-r-number", - path: "theme.accent.rgb.r", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-rgb-r-range", - path: "theme.accent.rgb.r", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-range", - path: "theme.accent.hsl.h", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-number", - path: "theme.accent.hsl.h", - type: "number" - }, { - element: ".control-theme-accent-hsl-s-range", - path: "theme.accent.hsl.s", - type: "range" - }, { - element: ".control-theme-accent-hsl-s-number", - path: "theme.accent.hsl.s", - type: "number" - }, { - element: ".control-theme-accent-hsl-l-range", - path: "theme.accent.hsl.l", - type: "range" - }, { - element: ".control-theme-accent-hsl-l-number", - path: "theme.accent.hsl.l", - type: "number" - }], - func: function() { - theme.mod.accent.hsl(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-rgb-g-range", - path: "theme.accent.rgb.g", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-rgb-g-number", - path: "theme.accent.rgb.g", - type: "number" - }, { - element: ".control-theme-accent-hsl-h-range", - path: "theme.accent.hsl.h", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-number", - path: "theme.accent.hsl.h", - type: "number" - }, { - element: ".control-theme-accent-hsl-s-range", - path: "theme.accent.hsl.s", - type: "range" - }, { - element: ".control-theme-accent-hsl-s-number", - path: "theme.accent.hsl.s", - type: "number" - }, { - element: ".control-theme-accent-hsl-l-range", - path: "theme.accent.hsl.l", - type: "range" - }, { - element: ".control-theme-accent-hsl-l-number", - path: "theme.accent.hsl.l", - type: "number" - }], - func: function() { - theme.mod.accent.hsl(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-rgb-g-number", - path: "theme.accent.rgb.g", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-rgb-g-range", - path: "theme.accent.rgb.g", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-range", - path: "theme.accent.hsl.h", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-number", - path: "theme.accent.hsl.h", - type: "number" - }, { - element: ".control-theme-accent-hsl-s-range", - path: "theme.accent.hsl.s", - type: "range" - }, { - element: ".control-theme-accent-hsl-s-number", - path: "theme.accent.hsl.s", - type: "number" - }, { - element: ".control-theme-accent-hsl-l-range", - path: "theme.accent.hsl.l", - type: "range" - }, { - element: ".control-theme-accent-hsl-l-number", - path: "theme.accent.hsl.l", - type: "number" - }], - func: function() { - theme.mod.accent.hsl(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-rgb-b-range", - path: "theme.accent.rgb.b", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-rgb-b-number", - path: "theme.accent.rgb.b", - type: "number" - }, { - element: ".control-theme-accent-hsl-h-range", - path: "theme.accent.hsl.h", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-number", - path: "theme.accent.hsl.h", - type: "number" - }, { - element: ".control-theme-accent-hsl-s-range", - path: "theme.accent.hsl.s", - type: "range" - }, { - element: ".control-theme-accent-hsl-s-number", - path: "theme.accent.hsl.s", - type: "number" - }, { - element: ".control-theme-accent-hsl-l-range", - path: "theme.accent.hsl.l", - type: "range" - }, { - element: ".control-theme-accent-hsl-l-number", - path: "theme.accent.hsl.l", - type: "number" - }], - func: function() { - theme.mod.accent.hsl(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-rgb-b-number", - path: "theme.accent.rgb.b", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-theme-accent-rgb-color-quick", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-color", - path: "theme.accent.rgb", - type: "color" - }, { - element: ".control-theme-accent-rgb-text", - path: "theme.accent.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-theme-accent-rgb-b-range", - path: "theme.accent.rgb.b", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-range", - path: "theme.accent.hsl.h", - type: "range" - }, { - element: ".control-theme-accent-hsl-h-number", - path: "theme.accent.hsl.h", - type: "number" - }, { - element: ".control-theme-accent-hsl-s-range", - path: "theme.accent.hsl.s", - type: "range" - }, { - element: ".control-theme-accent-hsl-s-number", - path: "theme.accent.hsl.s", - type: "number" - }, { - element: ".control-theme-accent-hsl-l-range", - path: "theme.accent.hsl.l", - type: "range" - }, { - element: ".control-theme-accent-hsl-l-number", - path: "theme.accent.hsl.l", - type: "number" - }], - func: function() { - theme.mod.accent.hsl(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-random-active", - path: "theme.accent.random.active", - type: "checkbox", - func: function() { - render.dependents(); - theme.render.accent.color(); - } - }, { - element: ".control-theme-accent-random-style-any", - path: "theme.accent.random.style", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-theme-accent-random-style-light", - path: "theme.accent.random.style", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-theme-accent-random-style-dark", - path: "theme.accent.random.style", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-theme-accent-random-style-pastel", - path: "theme.accent.random.style", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-theme-accent-random-style-saturated", - path: "theme.accent.random.style", - type: "radio", - func: function() { - render.class(); - } - }, { - element: ".control-theme-accent-randomise", - type: "button", - func: function() { - theme.accent.random(); - render.update.control.header(); - render.update.control.menu(); - } - }, { - element: ".control-theme-accent-cycle-active", - path: "theme.accent.cycle.active", - type: "checkbox", - func: function() { - render.class(); - render.dependents(); - theme.bind.accent.cycle.toggle(); - } - }, { - element: ".control-theme-accent-cycle-speed-range", - path: "theme.accent.cycle.speed", - type: "range", - valueModify: { - min: 100, - max: 1000, - step: 10 - }, - mirrorElement: [{ - element: ".control-theme-accent-cycle-speed-number", - path: "theme.accent.cycle.speed", - type: "number" - }], - func: function() { - theme.bind.accent.cycle.remove(); - theme.bind.accent.cycle.add(); - } - }, { - element: ".control-theme-accent-cycle-speed-number", - path: "theme.accent.cycle.speed", - type: "number", - valueModify: { - min: 100, - max: 1000, - step: 10 - }, - mirrorElement: [{ - element: ".control-theme-accent-cycle-speed-range", - path: "theme.accent.cycle.speed", - type: "number" - }], - func: function() { - theme.bind.accent.cycle.remove(); - theme.bind.accent.cycle.add(); - } - }, { - element: ".control-theme-accent-cycle-speed-default", - type: "button", - func: function() { - mod.default("theme.accent.cycle.speed"); - theme.bind.accent.cycle.remove(); - theme.bind.accent.cycle.add(); - render.update.control.menu(); - } - }, { - element: ".control-theme-accent-cycle-step-range", - path: "theme.accent.cycle.step", - type: "range", - valueModify: { - min: 1, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-accent-cycle-step-number", - path: "theme.accent.cycle.step", - type: "number" - }], - func: function() { - theme.bind.accent.cycle.remove(); - theme.bind.accent.cycle.add(); - } - }, { - element: ".control-theme-accent-cycle-step-number", - path: "theme.accent.cycle.step", - type: "number", - valueModify: { - min: 1, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-accent-cycle-step-range", - path: "theme.accent.cycle.step", - type: "number" - }], - func: function() { - theme.bind.accent.cycle.remove(); - theme.bind.accent.cycle.add(); - } - }, { - element: ".control-theme-accent-cycle-step-default", - type: "button", - func: function() { - mod.default("theme.accent.cycle.step"); - theme.bind.accent.cycle.remove(); - theme.bind.accent.cycle.add(); - render.update.control.menu(); - } - }], - radius: [{ - element: ".control-theme-radius-range", - path: "theme.radius", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 400, - step: 5 - }, - mirrorElement: [{ - element: ".control-theme-radius-number", - path: "theme.radius", - type: "number", - valueConvert: ["float"] - }], - func: function() { - theme.render.radius(); - render.class(); - } - }, { - element: ".control-theme-radius-number", - path: "theme.radius", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 400, - step: 5 - }, - mirrorElement: [{ - element: ".control-theme-radius-range", - path: "theme.radius", - type: "range", - valueConvert: ["float"] - }], - func: function() { - theme.render.radius(); - render.class(); - } - }, { - element: ".control-theme-radius-default", - type: "button", - func: function() { - mod.default("theme.radius"); - theme.render.radius(); - render.update.control.menu(); - } - }], - shadow: [{ - element: ".control-theme-shadow-range", - path: "theme.shadow", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 300, - step: 25 - }, - mirrorElement: [{ - element: ".control-theme-shadow-number", - path: "theme.shadow", - type: "number", - valueConvert: ["float"] - }], - func: function() { - theme.render.shadow(); - } - }, { - element: ".control-theme-shadow-number", - path: "theme.shadow", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 300, - step: 25 - }, - mirrorElement: [{ - element: ".control-theme-shadow-range", - path: "theme.shadow", - type: "range", - valueConvert: ["float"] - }], - func: function() { - theme.render.shadow(); - } - }, { - element: ".control-theme-shadow-default", - type: "button", - func: function() { - mod.default("theme.shadow"); - theme.render.shadow(); - render.update.control.menu(); - } - }], - shade: [{ - element: ".control-theme-shade-opacity-range", - path: "theme.shade.opacity", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-shade-opacity-number", - path: "theme.shade.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - theme.render.shade.opacity(); - render.class(); - } - }, { - element: ".control-theme-shade-opacity-number", - path: "theme.shade.opacity", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-theme-shade-opacity-range", - path: "theme.shade.opacity", - type: "range", - valueConvert: ["float"] - }], - func: function() { - theme.render.shade.opacity(); - render.class(); - } - }, { - element: ".control-theme-shade-opacity-default", - type: "button", - func: function() { - mod.default("theme.shade.opacity"); - theme.render.shade.opacity(); - render.update.control.menu(); - } - }] - }, - data: { - restore: [{ - element: ".control-data-import", - type: "file", - func: function() { - data.mod.import(); - } - }], - backup: [{ - element: ".control-data-export", - type: "a", - func: function() { - data.mod.export(); - } - }], - clear: [{ - element: ".control-data-clear", - type: "a", - func: function() { - menu.close(); - data.render.clear(); - } - }] - }, - background: { - color: [{ - element: ".control-background-color-by-theme", - path: "background.color.by", - type: "radio", - func: function() { - render.dependents(); - render.class(); - } - }, { - element: ".control-background-color-by-custom", - path: "background.color.by", - type: "radio", - func: function() { - render.dependents(); - render.class(); - } - }, { - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color", - mirrorElement: [{ - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-hsl-h-range", - path: "background.color.hsl.h", - type: "range" - }, { - element: ".control-background-color-hsl-h-number", - path: "background.color.hsl.h", - type: "number" - }, { - element: ".control-background-color-hsl-s-range", - path: "background.color.hsl.s", - type: "range" - }, { - element: ".control-background-color-hsl-s-number", - path: "background.color.hsl.s", - type: "number" - }, { - element: ".control-background-color-hsl-l-range", - path: "background.color.hsl.l", - type: "range" - }, { - element: ".control-background-color-hsl-l-number", - path: "background.color.hsl.l", - type: "number" - }, { - element: ".control-background-color-rgb-r-range", - path: "background.color.rgb.r", - type: "range" - }, { - element: ".control-background-color-rgb-r-number", - path: "background.color.rgb.r", - type: "number" - }, { - element: ".control-background-color-rgb-g-range", - path: "background.color.rgb.g", - type: "range" - }, { - element: ".control-background-color-rgb-g-number", - path: "background.color.rgb.g", - type: "number" - }, { - element: ".control-background-color-rgb-b-range", - path: "background.color.rgb.b", - type: "range" - }, { - element: ".control-background-color-rgb-b-number", - path: "background.color.rgb.b", - type: "number" - }], - func: function() { - background.mod.color.hsl(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"], - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-hsl-h-range", - path: "background.color.hsl.h", - type: "range" - }, { - element: ".control-background-color-hsl-h-number", - path: "background.color.hsl.h", - type: "number" - }, { - element: ".control-background-color-hsl-s-range", - path: "background.color.hsl.s", - type: "range" - }, { - element: ".control-background-color-hsl-s-number", - path: "background.color.hsl.s", - type: "number" - }, { - element: ".control-background-color-hsl-l-range", - path: "background.color.hsl.l", - type: "range" - }, { - element: ".control-background-color-hsl-l-number", - path: "background.color.hsl.l", - type: "number" - }, { - element: ".control-background-color-rgb-r-range", - path: "background.color.rgb.r", - type: "range" - }, { - element: ".control-background-color-rgb-r-number", - path: "background.color.rgb.r", - type: "number" - }, { - element: ".control-background-color-rgb-g-range", - path: "background.color.rgb.g", - type: "range" - }, { - element: ".control-background-color-rgb-g-number", - path: "background.color.rgb.g", - type: "number" - }, { - element: ".control-background-color-rgb-b-range", - path: "background.color.rgb.b", - type: "range" - }, { - element: ".control-background-color-rgb-b-number", - path: "background.color.rgb.b", - type: "number" - }], - func: function() { - background.mod.color.hsl(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-hsl-h-range", - path: "background.color.hsl.h", - type: "range", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-hsl-h-number", - path: "background.color.hsl.h", - type: "number" - }, { - element: ".control-background-color-rgb-r-range", - path: "background.color.rgb.r", - type: "range" - }, { - element: ".control-background-color-rgb-r-number", - path: "background.color.rgb.r", - type: "number" - }, { - element: ".control-background-color-rgb-g-range", - path: "background.color.rgb.g", - type: "range" - }, { - element: ".control-background-color-rgb-g-number", - path: "background.color.rgb.g", - type: "number" - }, { - element: ".control-background-color-rgb-b-range", - path: "background.color.rgb.b", - type: "range" - }, { - element: ".control-background-color-rgb-b-number", - path: "background.color.rgb.b", - type: "number" - }], - func: function() { - background.mod.color.rgb(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-hsl-h-number", - path: "background.color.hsl.h", - type: "number", - valueModify: { - min: 0, - max: 359 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-hsl-h-range", - path: "background.color.hsl.h", - type: "range" - }, { - element: ".control-background-color-rgb-r-range", - path: "background.color.rgb.r", - type: "range" - }, { - element: ".control-background-color-rgb-r-number", - path: "background.color.rgb.r", - type: "number" - }, { - element: ".control-background-color-rgb-g-range", - path: "background.color.rgb.g", - type: "range" - }, { - element: ".control-background-color-rgb-g-number", - path: "background.color.rgb.g", - type: "number" - }, { - element: ".control-background-color-rgb-b-range", - path: "background.color.rgb.b", - type: "range" - }, { - element: ".control-background-color-rgb-b-number", - path: "background.color.rgb.b", - type: "number" - }], - func: function() { - background.mod.color.rgb(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-hsl-s-range", - path: "background.color.hsl.s", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-hsl-s-number", - path: "background.color.hsl.s", - type: "number" - }, { - element: ".control-background-color-rgb-r-range", - path: "background.color.rgb.r", - type: "range" - }, { - element: ".control-background-color-rgb-r-number", - path: "background.color.rgb.r", - type: "number" - }, { - element: ".control-background-color-rgb-g-range", - path: "background.color.rgb.g", - type: "range" - }, { - element: ".control-background-color-rgb-g-number", - path: "background.color.rgb.g", - type: "number" - }, { - element: ".control-background-color-rgb-b-range", - path: "background.color.rgb.b", - type: "range" - }, { - element: ".control-background-color-rgb-b-number", - path: "background.color.rgb.b", - type: "number" - }], - func: function() { - background.mod.color.rgb(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-hsl-s-number", - path: "background.color.hsl.s", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-hsl-s-range", - path: "background.color.hsl.s", - type: "range" - }, { - element: ".control-background-color-rgb-r-range", - path: "background.color.rgb.r", - type: "range" - }, { - element: ".control-background-color-rgb-r-number", - path: "background.color.rgb.r", - type: "number" - }, { - element: ".control-background-color-rgb-g-range", - path: "background.color.rgb.g", - type: "range" - }, { - element: ".control-background-color-rgb-g-number", - path: "background.color.rgb.g", - type: "number" - }, { - element: ".control-background-color-rgb-b-range", - path: "background.color.rgb.b", - type: "range" - }, { - element: ".control-background-color-rgb-b-number", - path: "background.color.rgb.b", - type: "number" - }], - func: function() { - background.mod.color.rgb(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-hsl-l-range", - path: "background.color.hsl.l", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-hsl-l-number", - path: "background.color.hsl.l", - type: "number" - }, { - element: ".control-background-color-rgb-r-range", - path: "background.color.rgb.r", - type: "range" - }, { - element: ".control-background-color-rgb-r-number", - path: "background.color.rgb.r", - type: "number" - }, { - element: ".control-background-color-rgb-g-range", - path: "background.color.rgb.g", - type: "range" - }, { - element: ".control-background-color-rgb-g-number", - path: "background.color.rgb.g", - type: "number" - }, { - element: ".control-background-color-rgb-b-range", - path: "background.color.rgb.b", - type: "range" - }, { - element: ".control-background-color-rgb-b-number", - path: "background.color.rgb.b", - type: "number" - }], - func: function() { - background.mod.color.rgb(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-hsl-l-number", - path: "background.color.hsl.l", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-hsl-l-range", - path: "background.color.hsl.l", - type: "range" - }, { - element: ".control-background-color-rgb-r-range", - path: "background.color.rgb.r", - type: "range" - }, { - element: ".control-background-color-rgb-r-number", - path: "background.color.rgb.r", - type: "number" - }, { - element: ".control-background-color-rgb-g-range", - path: "background.color.rgb.g", - type: "range" - }, { - element: ".control-background-color-rgb-g-number", - path: "background.color.rgb.g", - type: "number" - }, { - element: ".control-background-color-rgb-b-range", - path: "background.color.rgb.b", - type: "range" - }, { - element: ".control-background-color-rgb-b-number", - path: "background.color.rgb.b", - type: "number" - }], - func: function() { - background.mod.color.rgb(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-rgb-r-range", - path: "background.color.rgb.r", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-rgb-r-number", - path: "background.color.rgb.r", - type: "number" - }, { - element: ".control-background-color-hsl-h-range", - path: "background.color.hsl.h", - type: "range" - }, { - element: ".control-background-color-hsl-h-number", - path: "background.color.hsl.h", - type: "number" - }, { - element: ".control-background-color-hsl-s-range", - path: "background.color.hsl.s", - type: "range" - }, { - element: ".control-background-color-hsl-s-number", - path: "background.color.hsl.s", - type: "number" - }, { - element: ".control-background-color-hsl-l-range", - path: "background.color.hsl.l", - type: "range" - }, { - element: ".control-background-color-hsl-l-number", - path: "background.color.hsl.l", - type: "number" - }], - func: function() { - background.mod.color.hsl(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-rgb-r-number", - path: "background.color.rgb.r", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-rgb-r-range", - path: "background.color.rgb.r", - type: "range" - }, { - element: ".control-background-color-hsl-h-range", - path: "background.color.hsl.h", - type: "range" - }, { - element: ".control-background-color-hsl-h-number", - path: "background.color.hsl.h", - type: "number" - }, { - element: ".control-background-color-hsl-s-range", - path: "background.color.hsl.s", - type: "range" - }, { - element: ".control-background-color-hsl-s-number", - path: "background.color.hsl.s", - type: "number" - }, { - element: ".control-background-color-hsl-l-range", - path: "background.color.hsl.l", - type: "range" - }, { - element: ".control-background-color-hsl-l-number", - path: "background.color.hsl.l", - type: "number" - }], - func: function() { - background.mod.color.hsl(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-rgb-g-range", - path: "background.color.rgb.g", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-rgb-g-number", - path: "background.color.rgb.g", - type: "number" - }, { - element: ".control-background-color-hsl-h-range", - path: "background.color.hsl.h", - type: "range" - }, { - element: ".control-background-color-hsl-h-number", - path: "background.color.hsl.h", - type: "number" - }, { - element: ".control-background-color-hsl-s-range", - path: "background.color.hsl.s", - type: "range" - }, { - element: ".control-background-color-hsl-s-number", - path: "background.color.hsl.s", - type: "number" - }, { - element: ".control-background-color-hsl-l-range", - path: "background.color.hsl.l", - type: "range" - }, { - element: ".control-background-color-hsl-l-number", - path: "background.color.hsl.l", - type: "number" - }], - func: function() { - background.mod.color.hsl(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-rgb-g-number", - path: "background.color.rgb.g", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-rgb-g-range", - path: "background.color.rgb.g", - type: "range" - }, { - element: ".control-background-color-hsl-h-range", - path: "background.color.hsl.h", - type: "range" - }, { - element: ".control-background-color-hsl-h-number", - path: "background.color.hsl.h", - type: "number" - }, { - element: ".control-background-color-hsl-s-range", - path: "background.color.hsl.s", - type: "range" - }, { - element: ".control-background-color-hsl-s-number", - path: "background.color.hsl.s", - type: "number" - }, { - element: ".control-background-color-hsl-l-range", - path: "background.color.hsl.l", - type: "range" - }, { - element: ".control-background-color-hsl-l-number", - path: "background.color.hsl.l", - type: "number" - }], - func: function() { - background.mod.color.hsl(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-rgb-b-range", - path: "background.color.rgb.b", - type: "range", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-rgb-b-number", - path: "background.color.rgb.b", - type: "number" - }, { - element: ".control-background-color-hsl-h-range", - path: "background.color.hsl.h", - type: "range" - }, { - element: ".control-background-color-hsl-h-number", - path: "background.color.hsl.h", - type: "number" - }, { - element: ".control-background-color-hsl-s-range", - path: "background.color.hsl.s", - type: "range" - }, { - element: ".control-background-color-hsl-s-number", - path: "background.color.hsl.s", - type: "number" - }, { - element: ".control-background-color-hsl-l-range", - path: "background.color.hsl.l", - type: "range" - }, { - element: ".control-background-color-hsl-l-number", - path: "background.color.hsl.l", - type: "number" - }], - func: function() { - background.mod.color.hsl(); - background.render.color.custom(); - } - }, { - element: ".control-background-color-rgb-b-number", - path: "background.color.rgb.b", - type: "number", - valueModify: { - min: 0, - max: 255 - }, - mirrorElement: [{ - element: ".control-background-color-rgb-color", - path: "background.color.rgb", - type: "color" - }, { - element: ".control-background-color-rgb-text", - path: "background.color.rgb", - type: "text", - valueConvert: ["hexTextString"] - }, { - element: ".control-background-color-rgb-b-range", - path: "background.color.rgb.b", - type: "range" - }, { - element: ".control-background-color-hsl-h-range", - path: "background.color.hsl.h", - type: "range" - }, { - element: ".control-background-color-hsl-h-number", - path: "background.color.hsl.h", - type: "number" - }, { - element: ".control-background-color-hsl-s-range", - path: "background.color.hsl.s", - type: "range" - }, { - element: ".control-background-color-hsl-s-number", - path: "background.color.hsl.s", - type: "number" - }, { - element: ".control-background-color-hsl-l-range", - path: "background.color.hsl.l", - type: "range" - }, { - element: ".control-background-color-hsl-l-number", - path: "background.color.hsl.l", - type: "number" - }], - func: function() { - background.mod.color.hsl(); - background.render.color.custom(); - } - }], - visual: [{ - element: ".control-background-visual-show", - path: "background.visual.show", - type: "checkbox", - func: function() { - render.class(); - render.dependents(); - background.render.visual.video.set(); - background.render.visual.image.set(); - } - }, { - element: ".control-background-visual-type-video", - path: "background.visual.type", - type: "radio", - func: function() { - render.dependents(); - background.render.visual.video.set(); - background.render.visual.image.clear(); - } - }, { - element: ".control-background-visual-type-image", - path: "background.visual.type", - type: "radio", - func: function() { - render.dependents(); - background.render.visual.video.clear(); - background.render.visual.image.set(); - } - }, { - element: ".control-background-visual-image-type-file", - path: "background.visual.image.type", - type: "radio", - func: function() { - render.dependents(); - background.render.visual.image.set(); - } - }, { - element: ".control-background-visual-image-type-url", - path: "background.visual.image.type", - type: "radio", - func: function() { - render.dependents(); - background.render.visual.image.set(); - } - }, { - element: ".control-background-visual-image-file", - type: "file", - func: function() { - background.mod.import(); - background.render.visual.image.set(); - } - }, { - element: ".control-background-visual-image-clear", - type: "button", - func: function() { - background.mod.visual.image.clear(); - background.render.visual.image.clear(); - background.render.feedback.clear({ - animate: true - }); - background.render.feedback.empty(); - } - }, { - element: ".control-background-visual-image-url", - path: "background.visual.image.url", - type: "textarea", - func: function() { - background.render.visual.image.clear(); - background.render.visual.image.set(); - } - }, { - element: ".control-background-visual-video-url", - path: "background.visual.video.url", - type: "textarea", - func: function() { - background.render.visual.video.clear(); - background.render.visual.video.set(); - } - }, { - element: ".control-background-visual-opacity-range", - path: "background.visual.opacity", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-visual-opacity-number", - path: "background.visual.opacity", - type: "number", - valueConvert: ["float"] - }], - func: function() { - background.render.visual.opacity(); - } - }, { - element: ".control-background-visual-opacity-number", - path: "background.visual.opacity", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-visual-opacity-range", - path: "background.visual.opacity", - type: "range", - valueConvert: ["float"] - }], - func: function() { - background.render.visual.opacity(); - } - }, { - element: ".control-background-visual-opacity-default", - type: "button", - func: function() { - mod.default("background.visual.opacity"); - background.render.visual.opacity(); - render.update.control.menu(); - } - }, { - element: ".control-background-visual-grayscale-range", - path: "background.visual.grayscale", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-visual-grayscale-number", - path: "background.visual.grayscale", - type: "number", - valueConvert: ["float"] - }], - func: function() { - background.render.visual.grayscale(); - } - }, { - element: ".control-background-visual-grayscale-number", - path: "background.visual.grayscale", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-visual-grayscale-range", - path: "background.visual.grayscale", - type: "range", - valueConvert: ["float"] - }], - func: function() { - background.render.visual.grayscale(); - } - }, { - element: ".control-background-visual-grayscale-default", - type: "button", - func: function() { - mod.default("background.visual.grayscale"); - background.render.visual.grayscale(); - render.update.control.menu(); - } - }, { - element: ".control-background-visual-blur-range", - path: "background.visual.blur", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-visual-blur-number", - path: "background.visual.blur", - type: "number" - }], - func: function() { - background.render.visual.blur(); - } - }, { - element: ".control-background-visual-blur-number", - path: "background.visual.blur", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-visual-blur-range", - path: "background.visual.blur", - type: "range" - }], - func: function() { - background.render.visual.blur(); - } - }, { - element: ".control-background-visual-blur-default", - type: "button", - func: function() { - mod.default("background.visual.blur"); - background.render.visual.blur(); - render.update.control.menu(); - } - }, { - element: ".control-background-visual-accent-range", - path: "background.visual.accent", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-visual-accent-number", - path: "background.visual.accent", - type: "number", - valueConvert: ["float"] - }], - func: function() { - background.render.visual.accent(); - } - }, { - element: ".control-background-visual-accent-number", - path: "background.visual.accent", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-visual-accent-range", - path: "background.visual.accent", - type: "range", - valueConvert: ["float"] - }], - func: function() { - background.render.visual.accent(); - } - }, { - element: ".control-background-visual-accent-default", - type: "button", - func: function() { - mod.default("background.visual.accent"); - background.render.visual.accent(); - render.update.control.menu(); - } - }, { - element: ".control-background-visual-scale-range", - path: "background.visual.scale", - type: "range", - valueConvert: ["float"], - valueModify: { - min: 100, - max: 1000 - }, - mirrorElement: [{ - element: ".control-background-visual-scale-number", - path: "background.visual.scale", - type: "number", - valueConvert: ["float"] - }], - func: function() { - background.render.visual.scale(); - } - }, { - element: ".control-background-visual-scale-number", - path: "background.visual.scale", - type: "number", - valueConvert: ["float"], - valueModify: { - min: 100, - max: 1000 - }, - mirrorElement: [{ - element: ".control-background-visual-scale-range", - path: "background.visual.scale", - type: "range", - valueConvert: ["float"] - }], - func: function() { - background.render.visual.scale(); - } - }, { - element: ".control-background-visual-scale-default", - type: "button", - func: function() { - mod.default("background.visual.scale"); - background.render.visual.scale(); - render.update.control.menu(); - } - }, { - element: ".control-background-vignette-opacity-range", - path: "background.visual.vignette.opacity", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-vignette-opacity-number", - path: "background.visual.vignette.opacity", - type: "number" - }], - func: function() { - background.render.visual.vignette.opacity(); - background.render.visual.vignette.start(); - background.render.visual.vignette.end(); - } - }, { - element: ".control-background-vignette-opacity-number", - path: "background.visual.vignette.opacity", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-vignette-opacity-range", - path: "background.visual.vignette.opacity", - type: "range" - }], - func: function() { - background.render.visual.vignette.opacity(); - background.render.visual.vignette.start(); - background.render.visual.vignette.end(); - } - }, { - element: ".control-background-vignette-opacity-default", - type: "button", - func: function() { - mod.default("background.visual.vignette.opacity"); - background.render.visual.vignette.opacity(); - background.render.visual.vignette.start(); - background.render.visual.vignette.end(); - render.update.control.menu(); - } - }, { - element: ".control-background-vignette-start-range", - path: "background.visual.vignette.start", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-vignette-start-number", - path: "background.visual.vignette.start", - type: "number" - }], - limitElement: [{ - element: ".control-background-vignette-end-range", - path: "background.visual.vignette.end", - type: "range", - limit: "max" - }, { - element: ".control-background-vignette-end-number", - path: "background.visual.vignette.end", - type: "number", - limit: "max" - }], - func: function() { - background.render.visual.vignette.opacity(); - background.render.visual.vignette.start(); - background.render.visual.vignette.end(); - } - }, { - element: ".control-background-vignette-start-number", - path: "background.visual.vignette.start", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-vignette-start-range", - path: "background.visual.vignette.start", - type: "range" - }], - func: function() { - background.render.visual.vignette.opacity(); - background.render.visual.vignette.start(); - background.render.visual.vignette.end(); - } - }, { - element: ".control-background-vignette-start-default", - type: "button", - func: function() { - mod.default("background.visual.vignette.start"); - background.render.visual.vignette.opacity(); - background.render.visual.vignette.start(); - background.render.visual.vignette.end(); - render.update.control.menu(); - } - }, { - element: ".control-background-vignette-end-range", - path: "background.visual.vignette.end", - type: "range", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-vignette-end-number", - path: "background.visual.vignette.end", - type: "number" - }], - limitElement: [{ - element: ".control-background-vignette-start-range", - path: "background.visual.vignette.start", - type: "range", - limit: "min" - }, { - element: ".control-background-vignette-start-number", - path: "background.visual.vignette.start", - type: "number", - limit: "min" - }], - func: function() { - background.render.visual.vignette.opacity(); - background.render.visual.vignette.start(); - background.render.visual.vignette.end(); - } - }, { - element: ".control-background-vignette-end-number", - path: "background.visual.vignette.end", - type: "number", - valueModify: { - min: 0, - max: 100 - }, - mirrorElement: [{ - element: ".control-background-vignette-end-range", - path: "background.visual.vignette.end", - type: "range" - }], - func: function() { - background.render.visual.vignette.opacity(); - background.render.visual.vignette.start(); - background.render.visual.vignette.end(); - } - }, { - element: ".control-background-vignette-end-default", - type: "button", - func: function() { - mod.default("background.visual.vignette.end"); - background.render.visual.vignette.opacity(); - background.render.visual.vignette.start(); - background.render.visual.vignette.end(); - render.update.control.menu(); - } - }] - } - }, - all: function() { - var allMenuControls = []; - for (key1 in mod.menu.controls) { - for (key2 in mod.menu.controls[key1]) { - mod.menu.controls[key1][key2].forEach(function(arrayItem, index) { - allMenuControls.push(arrayItem); - }); - }; - }; - return allMenuControls; - } - }; - - mod.default = function(path) { - helper.setObject({ - object: state.get.current(), - path: path, - newValue: helper.getObject({ - object: state.get.default(), - path: path - }) - }); - }; - - mod.match = function(origin, target) { - helper.setObject({ - object: state.get.current(), - path: origin, - newValue: helper.getObject({ - object: state.get.current(), - path: target - }) - }); - }; - - var bind = {}; - - bind.control = { - supportedElement: ["checkbox", "radio", "text", "number", "range", "color", "textarea"], - timer: { - inputUpdate: null - }, - value: { - set: function(object) { - if (object.path) { - var newValue = bind.control.value.get[object.type](object); - if (object.valueModify) { - for (var key in object.valueModify) { - newValue = bind.control.value.modify[key](newValue, object); - }; - }; - if (object.valueConvert) { - object.valueConvert.forEach(function(arrayItem, index) { - newValue = bind.control.value.convert[arrayItem](newValue, object); - }); - }; - helper.setObject({ - object: state.get.current(), - path: object.path, - newValue: newValue - }); - if (mod.debug.active) { - console.log("state set", object.path, helper.getObject({ - object: state.get.current(), - path: object.path - })); - }; - }; - }, - get: { - checkbox: function(object) { - return helper.e(object.element).checked; - }, - radio: function(object) { - return helper.e(object.element).value; - }, - text: function(object) { - return helper.e(object.element).value; - }, - textarea: function(object) { - return helper.e(object.element).value; - }, - number: function(object) { - return parseInt(helper.e(object.element).value, 10); - }, - range: function(object) { - return parseInt(helper.e(object.element).value, 10); - }, - color: function(object) { - return helper.convertColor.hex.rgb(helper.e(object.element).value); - } - }, - convert: { - reverse: function(value, object) { - return parseInt(object.valueModify.max, 10) - value; - }, - float: function(value, object) { - return value / 100; - }, - hexTextString: function(value, object) { - return helper.convertColor.hex.rgb(value); - } - }, - modify: { - min: function(value, object) { - if (isNaN(value) || value < object.valueModify.min) { - value = object.valueModify.min; - }; - return value; - }, - max: function(value, object) { - if (value > object.valueModify.max) { - value = object.valueModify.max; - }; - return value; - }, - step: function(value, object) { - value = Math.round(value / object.valueModify.step) * object.valueModify.step; - return value; - } - } - }, - eventType: { - a: "click", - button: "click", - checkbox: "change", - radio: "change", - text: "input", - textarea: "input", - number: "input", - range: "input", - color: "change", - file: "change" - }, - limit: function(sourceObject, targetObject) { - var sourceValue = helper.getObject({ - object: state.get.current(), - path: sourceObject.path - }); - var targetValue = helper.getObject({ - object: state.get.current(), - path: targetObject.path - }); - var _set = function() { - helper.setObject({ - object: state.get.current(), - path: targetObject.path, - newValue: helper.getObject({ - object: state.get.current(), - path: sourceObject.path - }) - }); - }; - if (targetObject.limit == "max" && targetValue >= sourceValue) { - _set(); - } else if (targetObject.limit == "min" && targetValue <= sourceValue) { - _set(); - }; - render.update.control.menu(targetObject); - }, - action: function(object) { - if (object.element) { - helper.e(object.element).addEventListener(bind.control.eventType[object.type], function(event) { - if (bind.control.supportedElement.includes(object.type)) { - bind.control.value.set(object); - }; - if (object.func) { - object.func(); - }; - data.save(); - }, false); - }; - if (object.additionalEvents) { - object.additionalEvents.forEach(function(arrayItem, index) { - helper.e(object.element).addEventListener(arrayItem.event, function(event) { - arrayItem.func(event); - data.save(); - }, false); - }); - }; - if (object.mirrorElement) { - object.mirrorElement.forEach(function(arrayItem, index) { - helper.e(object.element).addEventListener(bind.control.eventType[object.type], function(event) { - render.update.control.menu(arrayItem); - }, false); - }); - }; - if (object.limitElement) { - object.limitElement.forEach(function(arrayItem, index) { - helper.e(object.element).addEventListener(bind.control.eventType[object.type], function(event) { - bind.control.limit(object, arrayItem); - }, false); - }); - }; - if (object.valueModify) { - for (var key in object.valueModify) { - helper.e(object.element).addEventListener(bind.control.eventType[object.type], function(event) { - var _update = function() { - render.update.control.menu(object); - }; - clearTimeout(bind.control.timer.inputUpdate); - bind.control.timer.inputUpdate = setTimeout(_update, 1000); - }, false); - }; - }; - }, - header: function(object) { - if (object) { - if (helper.e(object.element)) { - bind.control.action(object); - }; - } else { - mod.header.forEach(function(arrayItem, index) { - if (helper.e(arrayItem.element)) { - bind.control.action(arrayItem); - }; - }); - }; - }, - menu: function(object) { - if (object) { - if (helper.e(object.element)) { - bind.control.action(object); - }; - } else { - mod.menu.all().forEach(function(arrayItem, index) { - if (helper.e(arrayItem.element)) { - bind.control.action(arrayItem); - }; - }); - }; - } - }; - - var render = {}; - - render.class = function() { - var html = helper.e("html"); - var all = { - edit: [{ - remove: [ - "is-edit" - ], - condition: function() { - return state.get.current().edit; - }, - name: "is-edit" - }], - layout: [{ - remove: [ - "is-layout-scrollpastend" - ], - condition: function() { - return state.get.current().layout.scrollPastEnd; - }, - name: "is-layout-scrollpastend" - }, { - remove: [ - "is-layout-alignment-topleft", - "is-layout-alignment-topcenter", - "is-layout-alignment-topright", - "is-layout-alignment-centerleft", - "is-layout-alignment-centercenter", - "is-layout-alignment-centerright", - "is-layout-alignment-bottomleft", - "is-layout-alignment-bottomcenter", - "is-layout-alignment-bottomright" - ], - name: "is-layout-alignment-" + state.get.current().layout.alignment - }, { - remove: [ - "is-layout-direction-vertical", - "is-layout-direction-horizontal" - ], - name: "is-layout-direction-" + state.get.current().layout.direction - }, { - remove: [ - "is-layout-order-headerlink", - "is-layout-order-linkheader" - ], - name: "is-layout-order-" + state.get.current().layout.order - }, { - remove: [ - "is-layout-scrollbars-auto", - "is-layout-scrollbars-thin", - "is-layout-scrollbars-none" - ], - name: "is-layout-scrollbars-" + state.get.current().layout.scrollbars - }], - header: { - area: [{ - remove: [ - "is-header-area-justify-left", - "is-header-area-justify-center", - "is-header-area-justify-right" - ], - name: "is-header-area-justify-" + state.get.current().header.area.justify - }, { - remove: [ - "is-header-area-align-center", - "is-header-area-align-baseline" - ], - name: "is-header-area-align-" + state.get.current().header.area.align - }], - item: [{ - remove: [ - "is-header-item-justify-left", - "is-header-item-justify-center", - "is-header-item-justify-right" - ], - name: "is-header-item-justify-" + state.get.current().header.item.justify - }], - greeting: [{ - remove: [ - "is-header-item-newline-greeting" - ], - condition: function() { - return state.get.current().header.greeting.newLine; - }, - name: "is-header-item-newline-greeting" - }], - clock: [{ - remove: [ - "is-header-item-newline-clock" - ], - condition: function() { - return state.get.current().header.clock.newLine; - }, - name: "is-header-item-newline-clock" - }], - transitional: [{ - remove: [ - "is-header-item-newline-transitional" - ], - condition: function() { - return state.get.current().header.transitional.newLine; - }, - name: "is-header-item-newline-transitional" - }], - date: [{ - remove: [ - "is-header-item-newline-date" - ], - condition: function() { - return state.get.current().header.date.newLine; - }, - name: "is-header-item-newline-date" - }], - search: [{ - remove: [ - "is-header-search-text-justify-left", - "is-header-search-text-justify-center", - "is-header-search-text-justify-right" - ], - condition: function() { - return state.get.current().header.search.show; - }, - name: "is-header-search-text-justify-" + state.get.current().header.search.text.justify - }, { - remove: [ - "is-header-search-width-by-custom", - "is-header-search-width-by-auto" - ], - condition: function() { - return state.get.current().header.search.show; - }, - name: "is-header-search-width-by-" + state.get.current().header.search.width.by - }, { - condition: function() { - return state.get.current().header.search.show; - }, - name: "is-header-search-text-justify-" + state.get.current().header.search.text.justify - }, { - remove: [ - "is-header-item-newline-search" - ], - condition: function() { - return state.get.current().header.search.newLine; - }, - name: "is-header-item-newline-search" - }], - editadd: [{ - remove: [ - "is-header-item-newline-editadd" - ], - condition: function() { - return state.get.current().header.editAdd.newLine; - }, - name: "is-header-item-newline-editadd" - }, { - remove: [ - "is-header-editadd-opacity" - ], - condition: function() { - return (state.get.current().header.editAdd.opacity == 0); - }, - name: "is-header-editadd-opacity" - }], - coloraccent: [{ - remove: [ - "is-header-item-newline-coloraccent" - ], - condition: function() { - return state.get.current().header.colorAccent.newLine; - }, - name: "is-header-item-newline-coloraccent" - }, { - remove: [ - "is-header-coloraccent-opacity" - ], - condition: function() { - return (state.get.current().header.colorAccent.opacity == 0); - }, - name: "is-header-coloraccent-opacity" - }], - menu: [{ - remove: [ - "is-header-item-newline-menu" - ], - condition: function() { - return state.get.current().header.menu.newLine; - }, - name: "is-header-item-newline-menu" - }, { - remove: [ - "is-header-menu-opacity" - ], - condition: function() { - return (state.get.current().header.menu.opacity == 0); - }, - name: "is-header-menu-opacity" - }], - color: [{ - remove: [ - "is-header-color-show" - ], - condition: function() { - return state.get.current().header.color.show; - }, - name: "is-header-color-show" - }, { - remove: [ - "is-header-color-style-scroll", - "is-header-color-style-always" - ], - condition: function() { - return state.get.current().header.color.show; - }, - name: "is-header-color-style-" + state.get.current().header.color.style - }, { - remove: [ - "is-header-color-by-theme", - "is-header-color-by-custom" - ], - condition: function() { - return state.get.current().header.color.show; - }, - name: "is-header-color-by-" + state.get.current().header.color.by - }], - radius: [{ - remove: [ - "is-header-radius" - ], - condition: function() { - return (state.get.current().header.radius > 0); - }, - name: "is-header-radius" - }], - border: [{ - remove: [ - "is-header-border-top" - ], - condition: function() { - return (state.get.current().header.border.top > 0); - }, - name: "is-header-border-top" - }, { - remove: [ - "is-header-border-bottom" - ], - condition: function() { - return (state.get.current().header.border.bottom > 0); - }, - name: "is-header-border-bottom" - }], - position: [{ - remove: [ - "is-header-position-sticky", - "is-header-position-inline" - ], - name: "is-header-position-" + state.get.current().header.position - }] - }, - group: { - area: [{ - remove: [ - "is-group-area-justify-left", - "is-group-area-justify-center", - "is-group-area-justify-right" - ], - name: "is-group-area-justify-" + state.get.current().group.area.justify - }], - order: [{ - remove: [ - "is-group-order-headerbody", - "is-group-order-bodyheader" - ], - name: "is-group-order-" + state.get.current().group.order - }], - openall: [{ - remove: [ - "is-group-openall-opacity" - ], - condition: function() { - return (state.get.current().group.openAll.opacity == 0); - }, - name: "is-group-openall-opacity" - }], - border: [{ - remove: [ - "is-group-border" - ], - condition: function() { - return (state.get.current().group.border > 0); - }, - name: "is-group-border" - }] - }, - link: [{ - remove: [ - "is-link-show" - ], - condition: function() { - return state.get.current().link.show; - }, - name: "is-link-show" - }, { - remove: [ - "is-link-area-justify-left", - "is-link-area-justify-center", - "is-link-area-justify-right" - ], - condition: function() { - return state.get.current().link.show; - }, - name: "is-link-area-justify-" + state.get.current().link.area.justify - }, { - remove: [ - "is-link-area-direction-ltr", - "is-link-area-direction-rtl" - ], - condition: function() { - return state.get.current().link.show; - }, - name: "is-link-area-direction-" + state.get.current().link.area.direction - }, { - remove: [ - "is-link-style-list", - "is-link-style-block" - ], - condition: function() { - return (state.get.current().link.show && state.get.current().link.show); - }, - name: "is-link-style-" + state.get.current().link.style - }, { - remove: [ - "is-link-orientation-top", - "is-link-orientation-bottom" - ], - condition: function() { - return (state.get.current().link.show && state.get.current().link.show); - }, - name: "is-link-orientation-" + state.get.current().link.orientation - }, { - remove: [ - "is-link-item-url-show" - ], - condition: function() { - return (state.get.current().link.show && state.get.current().link.item.url.show); - }, - name: "is-link-item-url-show" - }, { - remove: [ - "is-link-item-line-show" - ], - condition: function() { - return (state.get.current().link.show && state.get.current().link.item.line.show); - }, - name: "is-link-item-line-show" - }, { - remove: [ - "is-link-item-shadow-show" - ], - condition: function() { - return (state.get.current().link.show && state.get.current().link.item.shadow.show); - }, - name: "is-link-item-shadow-show" - }, { - remove: [ - "is-link-item-hoverscale-show" - ], - condition: function() { - return (state.get.current().link.show && state.get.current().link.item.hoverScale.show); - }, - name: "is-link-item-hoverscale-show" - }, { - remove: [ - "is-link-item-border" - ], - condition: function() { - return (state.get.current().link.show && (state.get.current().link.item.border > 0)); - }, - name: "is-link-item-border" - }], - theme: [{ - remove: [ - "is-theme-style-dark", - "is-theme-style-light", - ], - name: "is-theme-style-" + state.get.current().theme.style - }, { - remove: [ - "is-theme-custom-edit" - ], - condition: function() { - return state.get.current().theme.custom.edit; - }, - name: "is-theme-custom-edit" - }, { - remove: [ - "is-theme-accent-cycle" - ], - condition: function() { - return state.get.current().theme.accent.cycle.active; - }, - name: "is-theme-accent-cycle" - }, { - remove: [ - "is-theme-radius" - ], - condition: function() { - return (state.get.current().theme.radius > 0); - }, - name: "is-theme-radius" - }], - background: [{ - remove: [ - "is-background-visual-show" - ], - condition: function() { - return state.get.current().background.visual.show; - }, - name: "is-background-visual-show" - }, { - remove: [ - "is-background-color-by-theme", - "is-background-color-by-custom" - ], - name: "is-background-color-by-" + state.get.current().background.color.by - }] - }; - - var classCheck = function(array, debug) { - array.forEach(function(arrayItem, index) { - if ("remove" in arrayItem) { - arrayItem.remove.forEach(function(arrayItem, index) { - helper.removeClass(html, arrayItem); - }); - }; - if ("condition" in arrayItem) { - if (arrayItem.condition()) { - helper.addClass(html, arrayItem.name); - }; - } else { - helper.addClass(html, arrayItem.name); - }; - }); - }; - - classCheck(all.edit, true); - classCheck(all.layout); - classCheck(all.header.area); - classCheck(all.header.item); - classCheck(all.header.greeting); - classCheck(all.header.clock); - classCheck(all.header.transitional); - classCheck(all.header.date); - classCheck(all.header.search); - classCheck(all.header.editadd); - classCheck(all.header.coloraccent); - classCheck(all.header.menu); - classCheck(all.header.color); - classCheck(all.header.radius); - classCheck(all.header.border); - classCheck(all.header.position); - classCheck(all.group.area); - classCheck(all.group.order); - classCheck(all.group.openall); - classCheck(all.group.border); - classCheck(all.link); - classCheck(all.theme); - classCheck(all.background); - }; - - render.dependents = function() { - var type = { - control: ["input", "button", "textarea"], - element: ["label", "p", "div"] - }; - var disable = { - control: function(control, state) { - if (control) { - if (state) { - control.disabled = false; - } else { - control.disabled = true; - }; - }; - }, - element: function(element, state) { - if (element) { - if (state) { - helper.removeClass(element, "disabled"); - } else { - helper.addClass(element, "disabled"); - }; - }; - } - }; - var all = { - edit: [{ - condition: function() { - return (bookmarks.get().length > 0); - }, - dependents: function() { - return [ - "control-edit" - ] - } - }], - header: { - alignment: [{ - condition: function() { - return (state.get.current().layout.direction == "vertical") - }, - dependents: function() { - return [ - ".control-header-area-justify-grid", - ".control-header-area-justify-label", - ".control-header-area-justify-left", - ".control-header-area-justify-center", - ".control-header-area-justify-right", - ".control-header-area-justify-helper", - ] - } - }], - greeting: [{ - condition: function() { - return state.get.current().header.greeting.show; - }, - dependents: function() { - return [ - "[for=control-header-greeting-name]", - ".control-header-greeting-name", - ".control-header-greeting-type-label", - ".control-header-greeting-type-good", - ".control-header-greeting-type-hello", - ".control-header-greeting-type-hi", - ".control-header-greeting-type-custom", - "[for=control-header-greeting-size-range]", - ".control-header-greeting-size-range", - ".control-header-greeting-size-number", - ".control-header-greeting-size-default", - ".control-header-greeting-newline" - ] - } - }, { - condition: function() { - return (state.get.current().header.greeting.show && state.get.current().header.greeting.type === "custom"); - }, - dependents: function() { - return [ - ".control-header-greeting-custom" - ] - } - }], - clock: [{ - condition: function() { - var activeCount = 0; - var toCheck = [state.get.current().header.clock.seconds.show, state.get.current().header.clock.minutes.show, state.get.current().header.clock.hours.show]; - toCheck.forEach(function(arrayItem, index) { - if (arrayItem == true) { - activeCount++; - }; - }); - return (activeCount >= 2 && (state.get.current().header.clock.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.show)); - }, - dependents: function() { - return [ - ".control-header-clock-separator-show", - ".control-header-clock-separator-text", - ".control-header-clock-separator-text-default" - ]; - } - }, { - condition: function() { - var activeCount = 0; - var toCheck = [state.get.current().header.clock.seconds.show, state.get.current().header.clock.minutes.show, state.get.current().header.clock.hours.show]; - toCheck.forEach(function(arrayItem, index) { - if (arrayItem == true) { - activeCount++; - }; - }); - return (state.get.current().header.clock.separator.show && activeCount >= 2 && (state.get.current().header.clock.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.show)); - }, - dependents: function() { - return [ - ".control-header-clock-separator-text", - ".control-header-clock-separator-text-default" - ]; - } - }, { - condition: function() { - return (state.get.current().header.clock.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.show); - }, - dependents: function() { - return [ - ".control-header-clock-hour24-show", - ".control-header-clock-meridiem-show" - ]; - } - }, { - condition: function() { - return ((state.get.current().header.clock.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.show) && !state.get.current().header.clock.hour24.show); - }, - dependents: function() { - return [ - ".control-header-clock-meridiem-show" - ]; - } - }, { - condition: function() { - return state.get.current().header.clock.hours.show; - }, - dependents: function() { - return [ - ".control-header-clock-hours-display-number", - ".control-header-clock-hours-display-word" - ]; - } - }, { - condition: function() { - return state.get.current().header.clock.minutes.show; - }, - dependents: function() { - return [ - ".control-header-clock-minutes-display-number", - ".control-header-clock-minutes-display-word" - ]; - } - }, { - condition: function() { - return state.get.current().header.clock.seconds.show; - }, - dependents: function() { - return [ - ".control-header-clock-seconds-display-number", - ".control-header-clock-seconds-display-word" - ]; - } - }, { - condition: function() { - return (state.get.current().header.clock.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.show); - }, - dependents: function() { - return [ - "[for=control-header-clock-size-range]", - ".control-header-clock-size-range", - ".control-header-clock-size-number", - ".control-header-clock-size-default", - ".control-header-clock-newline" - ]; - } - }], - transitional: [{ - condition: function() { - return (state.get.current().header.date.date.show || state.get.current().header.date.day.show || state.get.current().header.date.month.show || state.get.current().header.date.year.show || state.get.current().header.clock.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.show); - }, - dependents: function() { - return [ - ".control-header-transitional-show", - ".control-header-transitional-show-helper" - ]; - } - }, { - condition: function() { - return (state.get.current().header.transitional.show && ((state.get.current().header.date.date.show || state.get.current().header.date.day.show || state.get.current().header.date.month.show || state.get.current().header.date.year.show || state.get.current().header.clock.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.show))); - }, - dependents: function() { - return [ - ".control-header-transitional-type-label", - ".control-header-transitional-type-timeanddate", - ".control-header-transitional-type-its", - "[for=control-header-transitional-size-range]", - ".control-header-transitional-size-range", - ".control-header-transitional-size-number", - ".control-header-transitional-size-default", - '.control-header-transitional-newline' - ]; - } - }], - date: [{ - condition: function() { - var activeCount = 0; - var toCheck = [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]; - toCheck.forEach(function(arrayItem, index) { - if (arrayItem == true) { - activeCount++; - }; - }); - return (activeCount >= 2 && (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)); - }, - dependents: function() { - return [ - ".control-header-date-separator-show", - ".control-header-date-separator-text", - ".control-header-date-separator-text-default" - ]; - } - }, { - condition: function() { - var activeCount = 0; - var toCheck = [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]; - toCheck.forEach(function(arrayItem, index) { - if (arrayItem == true) { - activeCount++; - }; - }); - return (state.get.current().header.date.separator.show && activeCount >= 2 && (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)); - }, - dependents: function() { - return [ - ".control-header-date-separator-text", - ".control-header-date-separator-text-default" - ]; - } - }, { - condition: function() { - return (state.get.current().header.date.date.show && state.get.current().header.date.month.show); - }, - dependents: function() { - return [ - ".control-header-date-format-label", - ".control-header-date-format-datemonth", - ".control-header-date-format-monthdate" - ]; - } - }, { - condition: function() { - return state.get.current().header.date.day.show; - }, - dependents: function() { - return [ - ".control-header-date-day-display-number", - ".control-header-date-day-display-word" - ]; - } - }, { - condition: function() { - return state.get.current().header.date.date.show; - }, - dependents: function() { - return [ - ".control-header-date-date-display-number", - ".control-header-date-date-display-word", - ".control-header-date-date-ordinal" - ]; - } - }, { - condition: function() { - return state.get.current().header.date.month.show; - }, - dependents: function() { - return [ - ".control-header-date-month-display-number", - ".control-header-date-month-display-word" - ]; - } - }, { - condition: function() { - return state.get.current().header.date.year.show; - }, - dependents: function() { - return [".control-header-date-year-display-number", - ".control-header-date-year-display-word" - ]; - } - }, { - condition: function() { - return (state.get.current().header.date.day.show && state.get.current().header.date.day.display == "number"); - }, - dependents: function() { - return [ - ".control-header-date-day-week-start-label", - ".control-header-date-day-week-start-monday", - ".control-header-date-day-week-start-sunday", - ".control-header-date-day-week-start-helper" - ]; - } - }, { - condition: function() { - return (state.get.current().header.date.day.show && state.get.current().header.date.day.display == "word"); - }, - dependents: function() { - return [ - ".control-header-date-day-length-label", - ".control-header-date-day-length-long", - ".control-header-date-day-length-short" - ]; - } - }, { - condition: function() { - return (state.get.current().header.date.month.show && state.get.current().header.date.month.display == "word"); - }, - dependents: function() { - return [ - ".control-header-date-month-length-label", - ".control-header-date-month-length-long", - ".control-header-date-month-length-short" - ]; - } - }, { - condition: function() { - return (state.get.current().header.date.month.show && state.get.current().header.date.month.display == "number"); - }, - dependents: function() { - return [ - ".control-header-date-month-ordinal" - ]; - } - }, { - condition: function() { - return (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); - }, - dependents: function() { - return [ - "[for=control-header-date-size-range]", - ".control-header-date-size-range", - ".control-header-date-size-number", - ".control-header-date-size-default", - ".control-header-date-newline" - ]; - } - }], - search: [{ - condition: function() { - return state.get.current().header.search.show; - }, - dependents: function() { - return [ - ".control-header-search-width-by-label", - ".control-header-search-width-by-auto", - ".control-header-search-width-by-custom", - ".control-header-search-width-size-range", - ".control-header-search-width-size-number", - ".control-header-search-width-size-default", - "[for=control-header-search-opacity-range]", - ".control-header-search-opacity-range", - ".control-header-search-opacity-number", - ".control-header-search-opacity-default", - ".control-header-search-focus", - ".control-header-search-focus-helper", - ".control-header-search-engine-label", - ".control-header-search-engine-google", - ".control-header-search-engine-duckduckgo", - ".control-header-search-engine-youtube", - ".control-header-search-engine-giphy", - ".control-header-search-engine-bing", - ".control-header-search-engine-custom", - ".control-header-search-text-justify-grid", - ".control-header-search-text-justify-label", - ".control-header-search-text-justify-left", - ".control-header-search-text-justify-center", - ".control-header-search-text-justify-right", - "[for=control-header-search-size-range]", - ".control-header-search-size-range", - ".control-header-search-size-number", - ".control-header-search-size-default", - ".control-header-search-size-helper", - ".control-header-search-newtab", - ".control-header-search-newline" - ]; - } - }, { - condition: function() { - return (state.get.current().header.search.show && state.get.current().header.search.engine.selected === "custom"); - }, - dependents: function() { - return [ - "[for=control-header-search-engine-custom-name]", - ".control-header-search-engine-custom-name", - "[for=control-header-search-engine-custom-url]", - ".control-header-search-engine-custom-url", - "[for=control-header-search-engine-custom-queryname]", - ".control-header-search-engine-custom-queryname", - ".control-header-search-engine-custom-helper" - ]; - } - }, { - condition: function() { - return (state.get.current().header.search.show && state.get.current().header.search.width.by === "custom"); - }, - dependents: function() { - return [ - ".control-header-search-width-size-range", - ".control-header-search-width-size-number", - ".control-header-search-width-size-default" - ]; - } - }], - editAdd: [{ - condition: function() { - return state.get.current().header.editAdd.show; - }, - dependents: function() { - return [ - ".control-header-editadd-show-helper", - "[for=control-header-editadd-opacity-range]", - ".control-header-editadd-opacity-range", - ".control-header-editadd-opacity-number", - ".control-header-editadd-opacity-default", - "[for=control-header-editadd-size-range]", - ".control-header-editadd-size-range", - ".control-header-editadd-size-number", - ".control-header-editadd-size-default", - ".control-header-editadd-newline" - ]; - } - }], - colorAccent: [{ - condition: function() { - return state.get.current().header.colorAccent.show; - }, - dependents: function() { - return [ - ".control-header-coloraccent-show-helper", - ".control-header-coloraccent-dot-show", - "[for=control-header-coloraccent-opacity-range]", - ".control-header-coloraccent-opacity-range", - ".control-header-coloraccent-opacity-number", - ".control-header-coloraccent-opacity-default", - "[for=control-header-coloraccent-size-range]", - ".control-header-coloraccent-size-range", - ".control-header-coloraccent-size-number", - ".control-header-coloraccent-size-default", - ".control-header-coloraccent-newline" - ]; - } - }], - menu: [{ - condition: function() { - return state.get.current().header.menu.show; - }, - dependents: function() { - return [ - "[for=control-header-menu-opacity-range]", - ".control-header-menu-opacity-range", - ".control-header-menu-opacity-number", - ".control-header-menu-opacity-default", - "[for=control-header-menu-size-range]", - ".control-header-menu-size-range", - ".control-header-menu-size-number", - ".control-header-menu-size-default", - ".control-header-menu-newline" - ]; - } - }], - color: [{ - condition: function() { - return state.get.current().header.color.show; - }, - dependents: function() { - return [ - ".control-header-color-style-always", - ".control-header-color-style-scroll", - ".control-header-color-style-helper", - ".control-header-color-by-theme", - ".control-header-color-by-theme-helper", - ".control-header-color-by-custom", - ".control-header-color-by-custom-helper", - "[for=control-header-color-opacity-range]", - ".control-header-color-opacity-range", - ".control-header-color-opacity-number", - ".control-header-color-opacity-default", - ".control-header-radius", - ".control-header-radius-helper" - ]; - } - }, { - condition: function() { - return (state.get.current().header.color.show && state.get.current().header.color.by == "custom"); - }, - dependents: function() { - return [ - ".control-header-color-rgb-color", - ".control-header-color-rgb-text", - "[for=control-header-color-hsl-h-range]", - ".control-header-color-hsl-h-range", - ".control-header-color-hsl-h-number", - "[for=control-header-color-hsl-s-range]", - ".control-header-color-hsl-s-range", - ".control-header-color-hsl-s-number", - "[for=control-header-color-hsl-l-range]", - ".control-header-color-hsl-l-range", - ".control-header-color-hsl-l-number", - "[for=control-header-color-rgb-r-range]", - ".control-header-color-rgb-r-range", - ".control-header-color-rgb-r-number", - "[for=control-header-color-rgb-g-range]", - ".control-header-color-rgb-g-range", - ".control-header-color-rgb-g-number", - "[for=control-header-color-rgb-b-range]", - ".control-header-color-rgb-b-range", - ".control-header-color-rgb-b-number" - ]; - } - }], - position: [{ - condition: function() { - return (state.get.current().layout.direction == "vertical"); - }, - dependents: function() { - return [ - ".control-header-position-sticky", - ".control-header-position-inline" - ]; - } - }] - }, - link: [{ - condition: function() { - return state.get.current().link.show; - }, - dependents: function() { - return [ - ".control-layout-order-headerlink", - ".control-layout-order-linkheader", - "[for=control-link-area-width-range]", - ".control-link-area-width-range", - ".control-link-area-width-number", - ".control-link-area-width-default", - ".control-link-area-width-match", - ".control-link-area-width-helper", - ".control-link-area-helper", - ".control-link-area-direction-label", - ".control-link-area-direction-ltr", - ".control-link-area-direction-rtl", - ".control-link-area-direction-helper", - "[for=control-link-item-size-range]", - ".control-link-item-size-range", - ".control-link-item-size-number", - ".control-link-item-size-default", - ".control-link-item-url-show", - ".control-link-item-line-show", - ".control-link-item-shadow-show", - ".control-link-item-shadow-show-helper", - ".control-link-item-hoverscale", - ".control-link-newtab", - ".control-link-item-display-visual-show", - ".control-link-item-display-visual-hide", - ".control-link-item-display-visual-helper", - "[for=control-link-item-display-visual-letter-size-range]", - ".control-link-item-display-visual-letter-size-range", - ".control-link-item-display-visual-letter-size-number", - ".control-link-item-display-visual-letter-size-default", - ".control-link-item-display-visual-letter-size-apply", - "[for=control-link-item-display-visual-icon-size-range]", - ".control-link-item-display-visual-icon-size-range", - ".control-link-item-display-visual-icon-size-number", - ".control-link-item-display-visual-icon-size-default", - ".control-link-item-display-visual-icon-size-apply", - "[for=control-link-item-display-visual-image-size-range]", - ".control-link-item-display-visual-image-size-range", - ".control-link-item-display-visual-image-size-number", - ".control-link-item-display-visual-image-size-default", - ".control-link-item-display-visual-image-size-apply", - "[for=control-link-item-display-visual-shadow-size-range]", - ".control-link-item-display-visual-shadow-size-range", - ".control-link-item-display-visual-shadow-size-number", - ".control-link-item-display-visual-shadow-size-default", - ".control-link-item-display-visual-shadow-size-apply", - ".control-link-item-display-visual-shadow-size-helper", - ".control-link-item-display-name-show", - ".control-link-item-display-name-hide", - ".control-link-item-display-name-helper", - "[for=control-link-item-display-name-size-range]", - ".control-link-item-display-name-size-range", - ".control-link-item-display-name-size-number", - ".control-link-item-display-name-size-default", - ".control-link-item-display-name-size-apply", - ".control-link-item-display-alignment-grid", - ".control-link-item-display-alignment-label", - ".control-link-item-display-alignment-topleft", - ".control-link-item-display-alignment-topcenter", - ".control-link-item-display-alignment-topright", - ".control-link-item-display-alignment-centerleft", - ".control-link-item-display-alignment-centercenter", - ".control-link-item-display-alignment-centerright", - ".control-link-item-display-alignment-bottomleft", - ".control-link-item-display-alignment-bottomcenter", - ".control-link-item-display-alignment-bottomright", - ".control-link-item-display-alignment-helper", - ".control-link-item-display-alignment-apply", - "[for=control-link-item-display-rotate-range]", - ".control-link-item-display-rotate-range", - ".control-link-item-display-rotate-number", - ".control-link-item-display-rotate-default", - ".control-link-item-display-rotate-apply", - "[for=control-link-item-display-translate-x-range]", - ".control-link-item-display-translate-x-range", - ".control-link-item-display-translate-x-number", - ".control-link-item-display-translate-x-default", - ".control-link-item-display-translate-x-apply", - "[for=control-link-item-display-translate-y-range]", - ".control-link-item-display-translate-y-range", - ".control-link-item-display-translate-y-number", - ".control-link-item-display-translate-y-default", - ".control-link-item-display-translate-y-apply", - "[for=control-link-item-display-gutter-range]", - ".control-link-item-display-gutter-range", - ".control-link-item-display-gutter-number", - ".control-link-item-display-gutter-default", - ".control-link-item-display-gutter-apply", - ".control-link-item-display-direction-horizontal", - ".control-link-item-display-direction-vertical", - ".control-link-item-display-direction-apply", - ".control-link-item-display-order-visualname", - ".control-link-item-display-order-namevisual", - ".control-link-item-display-order-apply", - ".control-link-item-color-by-theme", - ".control-link-item-color-by-custom", - ".control-link-item-color-apply", - ".control-link-item-color-rainbow", - "[for=control-link-item-color-opacity-range]", - ".control-link-item-color-opacity-range", - ".control-link-item-color-opacity-number", - ".control-link-item-color-opacity-default", - ".control-link-item-color-opacity-apply", - ".control-link-item-accent-by-theme", - ".control-link-item-accent-by-custom", - ".control-link-item-accent-apply", - ".control-link-item-accent-rainbow", - ".control-link-item-background-show", - ".control-link-item-background-hide", - ".control-link-item-background-helper", - "[for=control-link-item-background-opacity-range]", - ".control-link-item-background-opacity-range", - ".control-link-item-background-opacity-number", - ".control-link-item-background-opacity-default", - ".control-link-item-background-opacity-apply", - "[for=control-link-item-border-range]", - ".control-link-item-border-range", - ".control-link-item-border-number", - ".control-link-item-border-default", - ".control-link-style-block", - ".control-link-style-list", - "[for=control-link-item-image-opacity-range]", - ".control-link-item-image-opacity-range", - ".control-link-item-image-opacity-number", - ".control-link-item-image-opacity-default", - ".control-link-item-image-opacity-apply", - ".control-link-orientation-top", - ".control-link-orientation-bottom", - ".control-link-orientation-helper", - ".control-link-sort-name", - ".control-link-sort-letter", - ".control-link-sort-icon" - ]; - } - }, { - condition: function() { - return state.get.current().link.show && (state.get.current().link.item.color.by == "custom") - }, - dependents: function() { - return [ - ".control-link-item-color-rgb-color", - ".control-link-item-color-rgb-text", - "[for=control-link-item-color-hsl-h-range]", - ".control-link-item-color-hsl-h-range", - ".control-link-item-color-hsl-h-number", - "[for=control-link-item-color-hsl-s-range]", - ".control-link-item-color-hsl-s-range", - ".control-link-item-color-hsl-s-number", - "[for=control-link-item-color-hsl-l-range]", - ".control-link-item-color-hsl-l-range", - ".control-link-item-color-hsl-l-number", - "[for=control-link-item-color-rgb-r-range]", - ".control-link-item-color-rgb-r-range", - ".control-link-item-color-rgb-r-number", - "[for=control-link-item-color-rgb-g-range]", - ".control-link-item-color-rgb-g-range", - ".control-link-item-color-rgb-g-number", - "[for=control-link-item-color-rgb-b-range]", - ".control-link-item-color-rgb-b-range", - ".control-link-item-color-rgb-b-number" - ] - } - }, { - condition: function() { - return state.get.current().link.show && (state.get.current().link.item.accent.by == "custom") - }, - dependents: function() { - return [ - ".control-link-item-accent-rgb-color", - ".control-link-item-accent-rgb-text", - "[for=control-link-item-accent-hsl-h-range]", - ".control-link-item-accent-hsl-h-range", - ".control-link-item-accent-hsl-h-number", - "[for=control-link-item-accent-hsl-s-range]", - ".control-link-item-accent-hsl-s-range", - ".control-link-item-accent-hsl-s-number", - "[for=control-link-item-accent-hsl-l-range]", - ".control-link-item-accent-hsl-l-range", - ".control-link-item-accent-hsl-l-number", - "[for=control-link-item-accent-rgb-r-range]", - ".control-link-item-accent-rgb-r-range", - ".control-link-item-accent-rgb-r-number", - "[for=control-link-item-accent-rgb-g-range]", - ".control-link-item-accent-rgb-g-range", - ".control-link-item-accent-rgb-g-number", - "[for=control-link-item-accent-rgb-b-range]", - ".control-link-item-accent-rgb-b-range", - ".control-link-item-accent-rgb-b-number" - ] - } - }, { - condition: function() { - return (state.get.current().layout.direction == "vertical") && state.get.current().link.show - }, - dependents: function() { - return [ - ".control-link-area-justify-grid", - ".control-link-area-justify-label", - ".control-link-area-justify-left", - ".control-link-area-justify-center", - ".control-link-area-justify-right", - ".control-link-area-justify-helper", - ] - } - }], - theme: [{ - condition: function() { - return (state.get.current().theme.custom.all.length > 0); - }, - dependents: function() { - return [ - ".control-theme-custom-edit" - ]; - } - }, { - condition: function() { - return state.get.current().theme.accent.cycle.active; - }, - dependents: function() { - return [ - "[for=control-theme-accent-cycle-speed-range]", - ".control-theme-accent-cycle-speed-range", - ".control-theme-accent-cycle-speed-range", - ".control-theme-accent-cycle-speed-number", - ".control-theme-accent-cycle-speed-default", - "[for=control-theme-accent-cycle-step-range]", - ".control-theme-accent-cycle-step-range", - ".control-theme-accent-cycle-step-range", - ".control-theme-accent-cycle-step-number", - ".control-theme-accent-cycle-step-default", - ".control-theme-accent-cycle-helper" - ]; - } - }, { - condition: function() { - return (!state.get.current().theme.accent.cycle.active); - }, - dependents: function() { - return [ - ".control-theme-accent-random-active" - ]; - } - }, { - condition: function() { - return (state.get.current().theme.accent.random.active && !state.get.current().theme.accent.cycle.active); - }, - dependents: function() { - return [ - ".control-theme-accent-random-style-any", - ".control-theme-accent-random-style-light", - ".control-theme-accent-random-style-dark", - ".control-theme-accent-random-style-pastel", - ".control-theme-accent-random-style-saturated", - ".control-theme-accent-randomise" - ]; - } - }], - background: [{ - condition: function() { - return (state.get.current().background.color.by == "custom"); - }, - dependents: function() { - return [ - ".control-background-color-rgb-color", - ".control-background-color-rgb-text", - ".control-background-color-by-custom-helper", - "[for=control-background-color-hsl-h-range]", - ".control-background-color-hsl-h-range", - ".control-background-color-hsl-h-number", - "[for=control-background-color-hsl-s-range]", - ".control-background-color-hsl-s-range", - ".control-background-color-hsl-s-number", - "[for=control-background-color-hsl-l-range]", - ".control-background-color-hsl-l-range", - ".control-background-color-hsl-l-number", - "[for=control-background-color-rgb-r-range]", - ".control-background-color-rgb-r-range", - ".control-background-color-rgb-r-number", - "[for=control-background-color-rgb-g-range]", - ".control-background-color-rgb-g-range", - ".control-background-color-rgb-g-number", - "[for=control-background-color-rgb-b-range]", - ".control-background-color-rgb-b-range", - ".control-background-color-rgb-b-number" - ]; - } - }, { - condition: function() { - return (state.get.current().background.visual.show); - }, - dependents: function() { - return [ - ".control-background-visual-type-video", - ".control-background-visual-type-image", - "[for=control-background-visual-opacity-range]", - ".control-background-visual-opacity-range", - ".control-background-visual-opacity-number", - ".control-background-visual-opacity-default", - "[for=control-background-visual-blur-range]", - ".control-background-visual-blur-range", - ".control-background-visual-blur-number", - ".control-background-visual-blur-default", - "[for=control-background-visual-grayscale-range]", - ".control-background-visual-grayscale-range", - ".control-background-visual-grayscale-number", - ".control-background-visual-grayscale-default", - "[for=control-background-visual-accent-range]", - ".control-background-visual-accent-range", - ".control-background-visual-accent-number", - ".control-background-visual-accent-default", - "[for=control-background-visual-scale-range]", - ".control-background-visual-scale-range", - ".control-background-visual-scale-number", - ".control-background-visual-scale-default", - "[for=control-background-vignette-opacity-range]", - ".control-background-vignette-opacity-range", - ".control-background-vignette-opacity-number", - ".control-background-vignette-opacity-default", - "[for=control-background-vignette-start-range]", - ".control-background-vignette-start-range", - ".control-background-vignette-start-number", - ".control-background-vignette-start-default", - "[for=control-background-vignette-end-range]", - ".control-background-vignette-end-range", - ".control-background-vignette-end-number", - ".control-background-vignette-end-default" - ]; - } - }, { - condition: function() { - return (state.get.current().background.visual.show && state.get.current().background.visual.type == "video"); - }, - dependents: function() { - return [ - "[for=control-background-visual-video-url]", - ".control-background-visual-video-url", - ".control-background-visual-video-url-helper" - ]; - } - }, { - condition: function() { - return (state.get.current().background.visual.show && state.get.current().background.visual.type == "image"); - }, - dependents: function() { - return [ - ".control-background-visual-image-type-file", - ".control-background-visual-image-type-url" - ]; - } - }, { - condition: function() { - return (state.get.current().background.visual.show && state.get.current().background.visual.type == "image" && state.get.current().background.visual.image.type == "file"); - }, - dependents: function() { - return [ - ".control-background-visual-image-file", - ".control-background-visual-image-clear", - ".control-background-visual-image-file-helper", - ".control-background-visual-image-file-feedback" - ]; - } - }, { - condition: function() { - return (state.get.current().background.visual.show && state.get.current().background.visual.type == "image" && state.get.current().background.visual.image.type == "url"); - }, - dependents: function() { - return [ - ".control-background-visual-image-url", - ".control-background-visual-image-url-helper" - ]; - } - }] - }; - - var disableCheck = function(array) { - array.forEach(function(arrayItem, index) { - var condition = arrayItem.condition(); - arrayItem.dependents().forEach(function(arrayItem, index) { - var element = helper.eA(arrayItem); - element.forEach(function(arrayItem, index) { - var elementType = arrayItem.tagName.toLowerCase(); - if (type.control.includes(elementType)) { - disable.control(arrayItem, condition); - } else if (type.element.includes(elementType)) { - disable.element(arrayItem, condition); - }; - }); - - }); - }); - }; - - disableCheck(all.edit); - disableCheck(all.header.alignment); - disableCheck(all.header.greeting); - disableCheck(all.header.clock); - disableCheck(all.header.transitional); - disableCheck(all.header.date); - disableCheck(all.header.search); - disableCheck(all.header.editAdd); - disableCheck(all.header.colorAccent); - disableCheck(all.header.menu); - disableCheck(all.header.position); - disableCheck(all.header.color); - disableCheck(all.link); - disableCheck(all.theme); - disableCheck(all.background); - }; - - render.update = { - value: { - set: { - checkbox: function(object) { - helper.e(object.element).checked = helper.getObject({ - object: state.get.current(), - path: object.path - }); - }, - radio: function(object) { - helper.e(object.element.substring(0, object.element.lastIndexOf("-") + 1) + helper.getObject({ - object: state.get.current(), - path: object.path - })).checked = true; - }, - text: function(object) { - var newValue = helper.getObject({ - object: state.get.current(), - path: object.path - }); - if (object.valueConvert) { - object.valueConvert.slice().reverse().forEach(function(arrayItem, index) { - newValue = render.update.value.convert[arrayItem](newValue, object); - }); - }; - helper.e(object.element).value = newValue; - }, - textarea: function(object) { - var newValue = helper.getObject({ - object: state.get.current(), - path: object.path - }); - if (object.valueConvert) { - object.valueConvert.slice().reverse().forEach(function(arrayItem, index) { - newValue = render.update.value.convert[arrayItem](newValue, object); - }); - }; - helper.e(object.element).value = newValue; - }, - number: function(object) { - var newValue = helper.getObject({ - object: state.get.current(), - path: object.path - }); - if (object.valueConvert) { - object.valueConvert.slice().reverse().forEach(function(arrayItem, index) { - newValue = render.update.value.convert[arrayItem](newValue, object); - }); - }; - helper.e(object.element).value = Math.round(newValue); - }, - range: function(object) { - var newValue = helper.getObject({ - object: state.get.current(), - path: object.path - }); - if (object.valueConvert) { - object.valueConvert.slice().reverse().forEach(function(arrayItem, index) { - newValue = render.update.value.convert[arrayItem](newValue, object); - }); - }; - helper.e(object.element).value = newValue; - }, - color: function(object) { - helper.e(object.element).value = helper.convertColor.rgb.hex(helper.getObject({ - object: state.get.current(), - path: object.path - })); - } - }, - convert: { - reverse: function(value, object) { - return object.valueModify.max - value; - }, - float: function(value, object) { - return value * 100; - }, - hexTextString: function(value, object) { - return helper.convertColor.rgb.hex(value); - } - } - }, - control: { - header: function(object) { - if (object) { - if (bind.control.supportedElement.includes(object.type) && helper.e(object.element)) { - render.update.value.set[object.type](object); - }; - } else { - mod.header.forEach(function(arrayItem, index) { - if (bind.control.supportedElement.includes(arrayItem.type) && helper.e(arrayItem.element)) { - render.update.value.set[arrayItem.type](arrayItem); - }; - }); - }; - }, - menu: function(object) { - if (object) { - if (bind.control.supportedElement.includes(object.type) && helper.e(object.element)) { - render.update.value.set[object.type](object); - }; - } else { - mod.menu.all().forEach(function(arrayItem, index) { - if (bind.control.supportedElement.includes(arrayItem.type) && helper.e(arrayItem.element)) { - render.update.value.set[arrayItem.type](arrayItem); - }; - }); - }; - } - } - }; - - render.input = { - header: function() { - mod.header.forEach(function(arrayItem, index) { - if (arrayItem.valueModify) { - for (var key in arrayItem.valueModify) { - helper.e(arrayItem.element)[key] = arrayItem.valueModify[key]; - }; - }; - }); - }, - menu: function() { - mod.menu.all().forEach(function(arrayItem, index) { - if (arrayItem.valueModify) { - for (var key in arrayItem.valueModify) { - helper.e(arrayItem.element)[key] = arrayItem.valueModify[key]; - }; - }; - }); - } - }; - - var debug = function() { - mod.debug.toggle(); - }; - - var init = function() { - bind.control.header(); - bind.control.menu(); - render.input.header(); - render.input.menu(); - render.update.control.header(); - render.update.control.menu(); - render.dependents(); - render.class(); - }; - - // exposed methods - return { - init: init, - mod: mod, - bind: bind, - render: render, - debug: debug - }; - -})(); diff --git a/src/js/data.js b/src/js/data.js deleted file mode 100644 index 3403144c..00000000 --- a/src/js/data.js +++ /dev/null @@ -1,292 +0,0 @@ -var data = (function() { - - var _saveName = "nightTab"; - - var _backupName = "nightTab-backup"; - - var mod = {}; - - mod.import = function() { - var fileList = helper.e(".control-data-import").files; - if (fileList.length > 0) { - _validateJsonFile(fileList); - }; - }; - - mod.export = function() { - var timeStamp = helper.getDateTime(); - var _timeStampPrefix = function(value) { - if (value < 10) { - value = "0" + value; - }; - return value; - }; - timeStamp.hours = _timeStampPrefix(timeStamp.hours); - timeStamp.minutes = _timeStampPrefix(timeStamp.minutes); - timeStamp.seconds = _timeStampPrefix(timeStamp.seconds); - timeStamp.date = _timeStampPrefix(timeStamp.date); - timeStamp.month = _timeStampPrefix(timeStamp.month + 1); - timeStamp.year = _timeStampPrefix(timeStamp.year); - timeStamp = timeStamp.year + "." + timeStamp.month + "." + timeStamp.date + " - " + timeStamp.hours + " " + timeStamp.minutes + " " + timeStamp.seconds; - var fileName = _saveName + " backup - " + timeStamp + ".json"; - var data = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(load())); - var link = document.createElement("a"); - link.setAttribute("href", data); - link.setAttribute("download", fileName); - link.addEventListener("click", function(event) { - this.remove(); - }, false); - helper.e("body").appendChild(link); - link.click(); - }; - - mod.restore = function(data) { - if (data) { - if (!("version" in data) || data.version != version.get().number) { - console.log("data version " + data.version + " found less than current"); - mod.backup(data); - data = update.run(data); - mod.set(_saveName, JSON.stringify(data)); - } else { - console.log("data version " + version.get().number + " no need to run update"); - mod.set(_saveName, JSON.stringify(data)); - }; - } else { - console.log("no data found to load"); - }; - }; - - mod.backup = function(data) { - if (data) { - var dataBackup = JSON.parse(JSON.stringify(data)); - if (dataBackup.state.background.image) { - if (dataBackup.state.background.image.file) { - if (helper.checkIfValidString(dataBackup.state.background.image.file.data)) { - dataBackup.state.background.image.file.name = ""; - dataBackup.state.background.image.file.data = ""; - }; - }; - }; - if (dataBackup.state.background.visual) { - if (dataBackup.state.background.visual.image.file) { - if (helper.checkIfValidString(dataBackup.state.background.visual.image.file.data)) { - dataBackup.state.background.visual.image.file.name = ""; - dataBackup.state.background.visual.image.file.data = ""; - }; - }; - }; - console.log("data version " + dataBackup.version + " backed up"); - mod.set(_backupName, JSON.stringify(dataBackup)); - }; - }; - - mod.set = function(key, data) { - localStorage.setItem(key, data); - }; - - mod.get = function(key) { - return localStorage.getItem(key); - }; - - mod.remove = function(key) { - localStorage.removeItem(key); - }; - - mod.nameFix = function() { - var data = localStorage.getItem("nitghTab"); - if (data) { - localStorage.setItem(_saveName, data); - localStorage.removeItem("nitghTab"); - }; - }; - - var bind = {}; - - bind.feedback = { - animation: { - set: function(animationClass, action) { - var controlDataImportFeedback = helper.e(".control-data-import-feedback"); - helper.addClass(controlDataImportFeedback, animationClass); - var animationEndAction = function() { - if (action) { - action(); - }; - bind.feedback.animation.reset(); - }; - controlDataImportFeedback.addEventListener("animationend", animationEndAction, false); - }, - reset: function() { - var controlDataImportFeedback = helper.e(".control-data-import-feedback"); - helper.removeClass(controlDataImportFeedback, "is-shake"); - helper.removeClass(controlDataImportFeedback, "is-pop"); - helper.removeClass(controlDataImportFeedback, "is-jello"); - controlDataImportFeedback.removeEventListener("animationend", bind.feedback.animation.reset, false); - } - } - }; - - var render = {}; - - render.clear = function() { - var clearContent = helper.node("div"); - var para1 = helper.node("p:Are you sure you want to clear all nightTab Bookmarks and Settings? nightTab will be restore to the default state."); - var para2 = helper.node("p:This can not be undone."); - clearContent.appendChild(para1); - clearContent.appendChild(para2); - modal.open({ - heading: "Clear all nightTab data?", - content: clearContent, - successAction: function() { - wipe(); - render.reload(); - shade.close(); - pagelock.unlock(); - }, - cancelAction: function() { - shade.close(); - pagelock.unlock(); - }, - actionText: "Clear all data", - size: "small" - }); - shade.open({ - action: function() { - modal.close(); - pagelock.unlock(); - } - }); - pagelock.lock(); - }; - - render.reload = function() { - location.reload(); - }; - - render.input = { - clear: function() { - var input = helper.e(".control-data-import"); - input.value = ""; - } - }; - - render.feedback = { - empty: function() { - var controlDataImportFeedback = helper.e(".control-data-import-feedback"); - var para1 = helper.node("p:No JSON file selected.|class:muted small"); - controlDataImportFeedback.appendChild(para1); - }, - success: function(name, action) { - var controlDataImportFeedback = helper.e(".control-data-import-feedback"); - var para1 = helper.node("p:Success! Restoring nightTab Bookmarks and Settings.|class:muted small"); - var para2 = helper.node("p:" + name); - controlDataImportFeedback.appendChild(para1); - controlDataImportFeedback.appendChild(para2); - if (action) { - bind.feedback.animation.set("is-pop", action); - }; - }, - clear: function(override) { - var options = { - animate: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - var controlDataImportFeedback = helper.e(".control-data-import-feedback"); - while (controlDataImportFeedback.lastChild) { - controlDataImportFeedback.removeChild(controlDataImportFeedback.lastChild); - }; - if (options.animate) { - bind.feedback.animation.set("is-jello"); - }; - }, - fail: { - notJson: function(name) { - var controlDataImportFeedback = helper.e(".control-data-import-feedback"); - var para1 = helper.node("p:Not a JSON file. Make sure the selected file came from nightTab.|class:small muted"); - var para2 = helper.node("p:" + name); - controlDataImportFeedback.appendChild(para1); - controlDataImportFeedback.appendChild(para2); - bind.feedback.animation.set("is-shake"); - }, - notNightTabJson: function(name) { - var controlDataImportFeedback = helper.e(".control-data-import-feedback"); - var para1 = helper.node("p:Not the right kind of JSON file. Make sure the selected file came from nightTab.|class:small muted"); - var para2 = helper.node("p:" + name); - controlDataImportFeedback.appendChild(para1); - controlDataImportFeedback.appendChild(para2); - bind.feedback.animation.set("is-shake"); - } - } - }; - - var _validateJsonFile = function(fileList) { - // make new file reader - var reader = new FileReader(); - // define the on load event for the reader - reader.onload = function(event) { - // is this a JSON file - if (helper.isJsonString(event.target.result)) { - // is this a nightTab JSON - if (JSON.parse(event.target.result).nighttab) { - render.feedback.clear(); - render.feedback.success(fileList[0].name, function() { - mod.restore(JSON.parse(event.target.result)); - render.reload(); - }); - render.input.clear(); - } else { - // not a nightTab JSON file - render.feedback.clear(); - render.feedback.fail.notNightTabJson(fileList[0].name); - render.input.clear(); - }; - } else { - // not a JSON file - render.feedback.clear(); - render.feedback.fail.notJson(fileList[0].name); - render.input.clear(); - }; - }; - // invoke the reader - reader.readAsText(fileList.item(0)); - }; - - var save = function() { - mod.set(_saveName, JSON.stringify({ - nighttab: true, - version: version.get().number, - state: state.get.current(), - bookmarks: bookmarks.get() - })); - }; - - var load = function() { - if (mod.get(_saveName) != null && mod.get(_saveName) != undefined) { - return JSON.parse(mod.get(_saveName)); - } else { - return false; - }; - }; - - var wipe = function() { - mod.remove(_saveName); - render.reload(); - }; - - var init = function() { - mod.nameFix(); - mod.restore(load()); - render.feedback.empty(); - }; - - return { - init: init, - mod: mod, - render: render, - save: save, - load: load, - wipe: wipe - }; - -})(); diff --git a/src/js/date.js b/src/js/date.js deleted file mode 100644 index 553115c6..00000000 --- a/src/js/date.js +++ /dev/null @@ -1,169 +0,0 @@ -var date = (function() { - - var bind = {}; - - bind.tick = function() { - window.setInterval(function() { - render.clear(); - render.all(); - }, 1000); - }; - - var render = {}; - - render.clear = function() { - if (state.get.current().header.date.date.show || state.get.current().header.date.day.show || state.get.current().header.date.month.show || state.get.current().header.date.year.show) { - var date = helper.e(".date"); - while (date.lastChild) { - date.removeChild(date.lastChild); - }; - }; - }; - - render.all = function() { - if (state.get.current().header.date.date.show || state.get.current().header.date.day.show || state.get.current().header.date.month.show || state.get.current().header.date.year.show) { - var timeDateNow = moment(); - var dateStrings = { - day: null, - date: null, - month: null, - year: null - }; - var wordOrNumber = { - day: { - word: function() { - dateStrings.day = timeDateNow.format("dddd"); - if (state.get.current().header.date.day.length == "short") { - dateStrings.day = dateStrings.day.substring(0, 3); - }; - }, - number: function() { - dateStrings.day = timeDateNow.day(); - if (state.get.current().header.date.day.weekStart == "monday") { - if (dateStrings.day == 0) { - dateStrings.day = 7; - }; - } else if (state.get.current().header.date.day.weekStart == "sunday") { - dateStrings.day = dateStrings.day + 1; - }; - } - }, - date: { - word: function() { - if (state.get.current().header.date.date.ordinal) { - dateStrings.date = helper.ordinalWords(helper.toWords(timeDateNow.date())); - } else { - dateStrings.date = helper.toWords(timeDateNow.date()); - }; - }, - number: function() { - if (state.get.current().header.date.date.ordinal) { - dateStrings.date = timeDateNow.format("Do"); - } else { - dateStrings.date = timeDateNow.format("DD"); - }; - } - }, - month: { - word: function() { - dateStrings.month = timeDateNow.format("MMMM"); - if (state.get.current().header.date.month.length == "short") { - dateStrings.month = dateStrings.month.substring(0, 3); - }; - }, - number: function() { - if (state.get.current().header.date.month.ordinal) { - dateStrings.month = helper.ordinalNumber(timeDateNow.month() + 1); - } else { - dateStrings.month = timeDateNow.month() + 1; - }; - } - }, - year: { - word: function() { - dateStrings.year = helper.toWords(timeDateNow.format("YYYY")); - }, - number: function() { - dateStrings.year = timeDateNow.format("YYYY"); - } - } - }; - wordOrNumber.day[state.get.current().header.date.day.display](); - wordOrNumber.date[state.get.current().header.date.date.display](); - wordOrNumber.month[state.get.current().header.date.month.display](); - wordOrNumber.year[state.get.current().header.date.year.display](); - var elementDay = helper.node("span:" + dateStrings.day + "|class:date-item date-day"); - var elementDate = helper.node("span:" + dateStrings.date + "|class:date-item date-date"); - var elementMonth = helper.node("span:" + dateStrings.month + "|class:date-item date-month"); - var elementYear = helper.node("span:" + dateStrings.year + "|class:date-item date-year"); - var date = helper.e(".date"); - if (state.get.current().header.date.day.show) { - date.appendChild(elementDay); - }; - if (state.get.current().header.date.date.show && state.get.current().header.date.month.show) { - if (state.get.current().header.date.format == "datemonth") { - if (state.get.current().header.date.date.show) { - date.appendChild(elementDate); - }; - if (state.get.current().header.date.month.show) { - date.appendChild(elementMonth); - }; - } else if (state.get.current().header.date.format == "monthdate") { - if (state.get.current().header.date.month.show) { - date.appendChild(elementMonth); - }; - if (state.get.current().header.date.date.show) { - date.appendChild(elementDate); - }; - }; - } else { - if (state.get.current().header.date.date.show) { - date.appendChild(elementDate); - }; - if (state.get.current().header.date.month.show) { - date.appendChild(elementMonth); - }; - }; - if (state.get.current().header.date.year.show) { - date.appendChild(elementYear); - }; - if (state.get.current().header.date.separator.show) { - var separatorCharacter; - if (helper.checkIfValidString(state.get.current().header.date.separator.text)) { - separatorCharacter = helper.trimString(state.get.current().header.date.separator.text); - } else { - separatorCharacter = "/"; - }; - var parts = date.querySelectorAll("span"); - if (parts.length > 1) { - parts.forEach(function(arrayItem, index) { - if (index > 0) { - var separator = helper.makeNode({ - tag: "span", - text: separatorCharacter, - attr: [{ - key: "class", - value: "date-item date-separator" - }] - }); - date.insertBefore(separator, arrayItem); - }; - }); - }; - }; - }; - }; - - var init = function() { - render.all(); - bind.tick(); - }; - - // exposed methods - return { - init: init, - bind: bind, - render: render - }; - -})(); diff --git a/src/js/dropdown.js b/src/js/dropdown.js deleted file mode 100644 index 88258f02..00000000 --- a/src/js/dropdown.js +++ /dev/null @@ -1,156 +0,0 @@ -var dropdown = (function() { - - var _currentFormDropdown = null; - - var mod = {}; - - mod.open = function() { - helper.setObject({ - object: state.get.current(), - path: "dropdown", - newValue: true - }); - }; - - mod.close = function() { - helper.setObject({ - object: state.get.current(), - path: "dropdown", - newValue: false - }); - }; - - mod.toggle = function() { - if (state.get.current().dropdown) { - helper.setObject({ - object: state.get.current(), - path: "dropdown", - newValue: false - }); - } else { - helper.setObject({ - object: state.get.current(), - path: "dropdown", - newValue: true - }); - }; - }; - - var bind = {}; - - bind.documentEvent = { - add: function() { - document.addEventListener("click", bind.documentEvent.clickOut, false); - }, - remove: function() { - document.removeEventListener("click", bind.documentEvent.clickOut, false); - }, - clickOut: function() { - var path = event.composedPath(); - if (!path.includes(_currentFormDropdown)) { - close(); - }; - } - }; - - - bind.formDropdown = function(formDropdown) { - var bindDropdown = function(formDropdown) { - var formDropdownToggle = formDropdown.querySelector(".form-dropdown-toggle"); - var allFormDropdownMenuItem = formDropdown.querySelectorAll(".form-dropdown-menu-item"); - formDropdownToggle.addEventListener("click", function() { - _currentFormDropdown = formDropdown; - mod.toggle(); - render.toggle(); - }, false); - allFormDropdownMenuItem.forEach(function(arrayItem, index) { - arrayItem.addEventListener("click", function() { - mod.close(); - render.close(); - }, false); - }); - }; - if (formDropdown) { - bindDropdown(formDropdown); - } else { - var allFormDropdown = helper.eA(".form-dropdown"); - allFormDropdown.forEach(function(arrayItem, index) { - bindDropdown(arrayItem); - }); - }; - }; - - bind.editAdd = function() { - if (state.get.current().header.editAdd.show) { - bind.formDropdown(helper.e(".header-item-body-editadd").querySelector(".form-dropdown")); - }; - }; - - var render = {}; - - render.offset = function() { - var formDropdownMenu = _currentFormDropdown.querySelector(".form-dropdown-menu"); - if (state.get.current().dropdown) { - var box = formDropdownMenu.getBoundingClientRect(); - if (box.right > window.innerWidth) { - helper.addClass(formDropdownMenu, "form-dropdown-menu-left"); - } else { - helper.addClass(formDropdownMenu, "form-dropdown-menu-right"); - }; - if (box.bottom > window.innerHeight) { - helper.addClass(formDropdownMenu, "form-dropdown-menu-top"); - } else { - helper.addClass(formDropdownMenu, "form-dropdown-menu-bottom"); - }; - } else { - helper.removeClass(formDropdownMenu, "form-dropdown-menu-left"); - helper.removeClass(formDropdownMenu, "form-dropdown-menu-right"); - helper.removeClass(formDropdownMenu, "form-dropdown-menu-top"); - helper.removeClass(formDropdownMenu, "form-dropdown-menu-bottom"); - }; - }; - - render.toggle = function() { - if (state.get.current().dropdown) { - render.open(); - } else { - render.close(); - }; - }; - - render.close = function() { - helper.removeClass(_currentFormDropdown, "form-dropdown-open"); - render.offset(); - bind.documentEvent.remove(); - _currentFormDropdown = null; - }; - - render.open = function() { - helper.addClass(_currentFormDropdown, "form-dropdown-open"); - render.offset(); - bind.documentEvent.add(); - }; - - var close = function() { - mod.close(); - render.close(); - var allFormDropdown = helper.eA(".form-dropdown"); - allFormDropdown.forEach(function(arrayItem, index) { - helper.removeClass(arrayItem, "form-dropdown-open"); - }); - }; - - var init = function() { - mod.close(); - bind.formDropdown(); - }; - - // exposed methods - return { - init: init, - bind: bind, - render: render, - close: close - }; - -})(); diff --git a/src/js/edge.js b/src/js/edge.js deleted file mode 100644 index 7ae4ccd6..00000000 --- a/src/js/edge.js +++ /dev/null @@ -1,149 +0,0 @@ -var edge = (function() { - - var _timer = null; - var _tick = null; - var _currentElement = null; - var _currentEdge = null; - - var bind = {}; - - bind.tick = { - set: function() { - _tick = window.setTimeout(function() { - render.update(); - bind.tick.set(); - }, 100); - }, - remove: function() { - clearTimeout(_tick); - _tick = null; - } - }; - - var mod = {}; - - mod.open = function() { - helper.setObject({ - object: state.get.current(), - path: "edge", - newValue: true - }); - }; - - mod.close = function() { - helper.setObject({ - object: state.get.current(), - path: "edge", - newValue: false - }); - }; - - var render = {}; - - render.close = function() { - var allEdge = helper.eA(".edge"); - if (allEdge[0]) { - for (var i = 0; i < allEdge.length; i++) { - allEdge[i].destroy(); - }; - }; - }; - - render.open = function(override) { - var options = { - element: null, - delay: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - _currentElement = options.element; - var _resize = function() { - var scrollTop = document.documentElement.scrollTop; - var scrollLeft = document.documentElement.scrollLeft; - var rect = options.element.getBoundingClientRect(); - _currentEdge.style.width = rect.width + "px"; - _currentEdge.style.height = rect.height + "px"; - _currentEdge.style.top = rect.top + scrollTop + "px"; - _currentEdge.style.left = rect.left + scrollLeft + "px"; - }; - var _makeEdge = function() { - var html = helper.e("html"); - var body = helper.e("body"); - var edgeElement = helper.node("div|class:edge is-transparent"); - edgeElement.destroy = function() { - if (edgeElement.classList.contains("is-opaque")) { - helper.removeClass(edgeElement, "is-opaque"); - helper.addClass(edgeElement, "is-transparent"); - } else { - edgeElement.remove(); - }; - bind.tick.remove(); - _currentEdge = null; - _currentElement = null; - }; - edgeElement.addEventListener("transitionend", function(event, elapsed) { - if (event.propertyName === "opacity" && getComputedStyle(this).opacity == 0) { - this.parentElement.removeChild(this); - helper.removeClass(html, "is-edge"); - }; - }, false); - if (options.delay) { - clearTimeout(_timer); - _timer = setTimeout(edgeElement.destroy, options.delay); - }; - helper.addClass(html, "is-edge"); - body.appendChild(edgeElement); - getComputedStyle(edgeElement).opacity; - helper.removeClass(edgeElement, "is-transparent"); - helper.addClass(edgeElement, "is-opaque"); - _currentEdge = edgeElement; - }; - if (options.element != null) { - if (_currentEdge == null) { - _makeEdge(); - render.update(); - bind.tick.set(); - } else { - render.update(); - }; - }; - }; - - render.update = function() { - if (_currentEdge != null) { - var scrollTop = document.documentElement.scrollTop; - var scrollLeft = document.documentElement.scrollLeft; - var rect = _currentElement.getBoundingClientRect(); - _currentEdge.style.width = rect.width + "px"; - _currentEdge.style.height = rect.height + "px"; - _currentEdge.style.top = rect.top + scrollTop + "px"; - _currentEdge.style.left = rect.left + scrollLeft + "px"; - }; - }; - - var box = { - open: function(override) { - mod.open(); - render.open(override); - }, - close: function() { - mod.close(); - render.close(); - } - }; - - var init = function() { - box.close(); - }; - - // exposed methods - return { - mod: mod, - bind: bind, - render: render, - box: box, - init: init - }; - -})(); diff --git a/src/js/fontawesome.js b/src/js/fontawesome.js deleted file mode 100644 index c777585f..00000000 --- a/src/js/fontawesome.js +++ /dev/null @@ -1,7195 +0,0 @@ -var fontawesome = (function() { - - var icons = [{ - 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" - }]; - - // exposed methods - return { - icons: icons - }; - -})(); diff --git a/src/js/greeting.js b/src/js/greeting.js deleted file mode 100644 index a7ac3178..00000000 --- a/src/js/greeting.js +++ /dev/null @@ -1,77 +0,0 @@ -var greeting = (function() { - - var bind = {}; - - bind.tick = function() { - window.setInterval(function() { - render.clear(); - render.all(); - }, 1000); - }; - - var render = {}; - - render.clear = function() { - if (state.get.current().header.greeting.show) { - var greeting = helper.e(".greeting"); - while (greeting.lastChild) { - greeting.removeChild(greeting.lastChild); - }; - }; - }; - - render.all = function() { - if (state.get.current().header.greeting.show) { - var greeting = helper.e(".greeting"); - var message = function() { - switch (state.get.current().header.greeting.type) { - case "good": - var time = helper.getDateTime(); - var message = ["Good night", "Good morning", "Good afternoon", "Good evening"]; - return message[Math.floor(time.hours / 6)]; - break; - - case "hello": - return "Hello"; - - case "hi": - return "Hi"; - - case "custom": - return helper.trimString(state.get.current().header.greeting.custom); - }; - }; - - var string = message(); - - if (helper.checkIfValidString(state.get.current().header.greeting.name)) { - if (state.get.current().header.greeting.type === "custom") { - if (helper.checkIfValidString(state.get.current().header.greeting.custom)) { - string = string + ", " + helper.trimString(state.get.current().header.greeting.name) - } else { - string = string + helper.trimString(state.get.current().header.greeting.name) - }; - } else { - string = string + ", " + helper.trimString(state.get.current().header.greeting.name) - }; - }; - - var greetingItem = helper.node("span|class:greeting-item"); - var greetingItemText = helper.node("span:" + string + "|class:greeting-item-text"); - greetingItem.appendChild(greetingItemText); - greeting.appendChild(greetingItem); - }; - }; - - var init = function() { - bind.tick(); - render.all(); - }; - - // exposed methods - return { - init: init, - render: render - }; - -})(); diff --git a/src/js/header.js b/src/js/header.js deleted file mode 100644 index c2455688..00000000 --- a/src/js/header.js +++ /dev/null @@ -1,607 +0,0 @@ -var header = (function() { - - var mod = {}; - - mod.item = { - move: function(data) { - var item = JSON.parse(JSON.stringify(state.get.current().header.order[data.origin])); - state.get.current().header.order.splice(data.origin, 1); - state.get.current().header.order.splice(data.destination, 0, item); - } - }; - - mod.color = { - hsl: function() { - var hsl = helper.convertColor.rgb.hsl(state.get.current().header.color.rgb); - helper.setObject({ - object: state.get.current(), - path: "header.color.hsl", - newValue: { - h: Math.round(hsl.h), - s: Math.round(hsl.s), - l: Math.round(hsl.l) - } - }); - }, - rgb: function() { - var rgb = helper.convertColor.hsl.rgb(state.get.current().header.color.hsl); - helper.setObject({ - object: state.get.current(), - path: "header.color.rgb", - newValue: { - r: Math.round(rgb.r), - g: Math.round(rgb.g), - b: Math.round(rgb.b) - } - }); - } - }; - - var bind = {}; - - bind.resize = function() { - window.addEventListener("resize", function() { - render.color.scrolling(); - }, false); - }; - - bind.scroll = function() { - window.addEventListener("scroll", function() { - render.color.scrolling(); - }, false); - helper.eA(".container").forEach(function(arrayItem, index) { - arrayItem.addEventListener("transitionend", function() { - render.color.scrolling(); - }, false); - }); - }; - - bind.fonts = function() { - document.fonts.ready.then(function() { - render.color.scrolling(); - }); - }; - - bind.sort = { - update: { - func: function(event) { - var positionData = { - origin: event.detail.origin.index, - destination: event.detail.destination.index - }; - mod.item.move(positionData); - data.save(); - render.control.clear(); - render.control.all(); - bind.sort.item(); - render.item.clear(); - render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - control.render.dependents(); - control.render.update.control.header(); - control.bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - dropdown.bind.editAdd(); - }, - remove: function() { - sortable(".header-order")[0].removeEventListener("sortupdate", bind.sort.update.func, false); - } - }, - item: function() { - var placeholderFormWrap = helper.node("div|class:form-wrap"); - var placeholderFormInline = helper.node("div|class:form-inline"); - var placeholder = helper.node("div|class:header-item-sort-placeholder-edge") - placeholderFormInline.appendChild(placeholder); - placeholderFormWrap.appendChild(placeholderFormInline); - sortable('.header-order', { - orientation: "vertical", - handle: ".header-order-control-item-handle", - placeholder: placeholderFormWrap - }); - bind.sort.update.remove(); - sortable(".header-order")[0].addEventListener("sortupdate", bind.sort.update.func, false, event); - } - }; - - var render = {}; - - render.area = { - width: function() { - var html = helper.e("html"); - html.style.setProperty("--header-area-width", state.get.current().header.area.width + "%"); - } - }; - - render.color = { - custom: function() { - helper.e("html").style.setProperty("--header-color-custom", state.get.current().header.color.rgb.r + ", " + state.get.current().header.color.rgb.g + ", " + state.get.current().header.color.rgb.b); - }, - scrolling: function() { - var html = helper.e("html"); - var headerRect = helper.e(".header").getBoundingClientRect(); - var layoutRect = helper.e(".layout").getBoundingClientRect(); - var fontSize = parseInt(getComputedStyle(html).fontSize, 10); - var scrollTop = document.documentElement.scrollTop; - // var scrollHeight = document.documentElement.scrollHeight; - var innerHeight = window.innerHeight; - // if color show - if (state.get.current().header.color.show) { - // if layout is vertical - if (state.get.current().layout.direction == "vertical") { - // color on scroll or always - if (state.get.current().header.color.style == "scroll") { - // check header position - if (state.get.current().layout.order == "headerlink") { - // check scroll position - if (scrollTop > fontSize * 2 && headerRect.top == 0) { - helper.addClass(html, "is-header-color-style-scrolling"); - } else { - helper.removeClass(html, "is-header-color-style-scrolling"); - }; - } else if (state.get.current().layout.order == "linkheader") { - // check scroll position - if (headerRect.bottom == innerHeight && (scrollTop + innerHeight) < ((scrollTop + layoutRect.bottom) - (fontSize * 2))) { - helper.addClass(html, "is-header-color-style-scrolling"); - } else { - helper.removeClass(html, "is-header-color-style-scrolling"); - }; - }; - }; - } else { - helper.removeClass(html, "is-header-color-style-scrolling"); - }; - }; - } - }; - - render.opacity = function() { - var html = helper.e("html"); - if (state.get.current().header.color.show) { - html.style.setProperty("--header-opacity", state.get.current().header.color.opacity); - }; - }; - - render.border = function() { - var html = helper.e("html"); - html.style.setProperty("--header-border-top", state.get.current().header.border.top); - html.style.setProperty("--header-border-bottom", state.get.current().header.border.bottom); - }; - - render.control = { - all: function() { - var names = { - greeting: "Greeting", - clock: "Clock", - transitional: "Transitional", - date: "Date", - search: "Search bar", - editAdd: "Edit/Add", - colorAccent: "Colour/Accent", - menu: "Settings menu" - }; - var headerOrder = helper.e(".header-order"); - state.get.current().header.order.forEach(function(arrayItem, index) { - var formWrap = helper.node("div|class:form-wrap"); - var forminline = helper.node("div|class:form-inline"); - var formGroup = helper.node("div|class:form-group header-order-control"); - - var buttonUp = helper.node("button|class:button button-line form-group-item-shrink header-order-control-item header-order-control-item-up,tabindex:-1,title:Move this header item up"); - var buttonUpIcon = helper.node("span|class:button-icon icon-arrow-up"); - buttonUp.appendChild(buttonUpIcon); - - var linkHandle = helper.node("div|class:button button-line form-group-item-shrink header-order-control-item header-order-control-item-handle,tabindex:-1,title:Drag header item to reorder"); - var linkHandleIcon = helper.node("span|class:button-icon icon-reorder"); - linkHandle.appendChild(linkHandleIcon); - - var buttonDown = helper.node("button|class:button button-line form-group-item-shrink header-order-control-item header-order-control-item-down,tabindex:-1,title:Move this header item down"); - var buttonDownIcon = helper.node("span|class:button-icon icon-arrow-down"); - buttonDown.appendChild(buttonDownIcon); - - var name = helper.node("div:" + names[arrayItem]); - - formGroup.appendChild(buttonUp); - formGroup.appendChild(linkHandle); - formGroup.appendChild(buttonDown); - - forminline.appendChild(formGroup); - forminline.appendChild(name); - formWrap.appendChild(forminline); - - headerOrder.appendChild(formWrap); - - if (state.get.current().menu) { - headerOrder.querySelectorAll("[tabindex]").forEach(function(arrayItem, index) { - arrayItem.tabIndex = 1; - }); - }; - - buttonUp.addEventListener("click", function(event) { - var positionData = { - origin: index, - destination: index - 1 - }; - if (positionData.destination < 0) { - positionData.destination = 0 - }; - mod.item.move(positionData); - data.save(); - render.control.clear(); - render.control.all(); - bind.sort.item(); - render.item.clear(); - render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - control.render.dependents(); - control.render.update.control.header(); - control.bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - render.control.focus.up(positionData); - dropdown.bind.editAdd(); - }, false); - - buttonDown.addEventListener("click", function(event) { - var positionData = { - origin: index, - destination: index + 1 - }; - mod.item.move(positionData); - data.save(); - render.control.clear(); - render.control.all(); - bind.sort.item(); - render.item.clear(); - render.item.all(); - greeting.render.clear(); - greeting.render.all(); - clock.render.clear(); - clock.render.all(); - transitional.render.clear(); - transitional.render.all(); - date.render.clear(); - date.render.all(); - control.render.dependents(); - control.render.update.control.header(); - control.bind.control.header(); - search.render.engine(); - search.bind.input(); - search.bind.clear(); - render.control.focus.down(positionData); - dropdown.bind.editAdd(); - }, false); - }); - }, - clear: function() { - var headerOrder = helper.e(".header-order"); - while (headerOrder.lastChild) { - headerOrder.removeChild(headerOrder.lastChild); - }; - }, - focus: { - up: function(positionData) { - var allHeaderOrderControl = helper.eA(".header-order-control"); - var target = positionData.destination; - if (target < 0) { - target = 0; - }; - var button = allHeaderOrderControl[target].querySelector(".header-order-control-item-up"); - button.focus(); - }, - down: function(positionData) { - var allHeaderOrderControl = helper.eA(".header-order-control"); - var target = positionData.destination; - if (target >= allHeaderOrderControl.length) { - target = allHeaderOrderControl.length - 1; - }; - var button = allHeaderOrderControl[target].querySelector(".header-order-control-item-down"); - button.focus(); - } - }, - tabindex: function() { - var allHeaderItemControl = helper.eA(".header-item-control"); - if (state.get.current().edit) { - allHeaderItemControl.forEach(function(arrayItem, index) { - arrayItem.tabIndex = 1; - }); - } else { - allHeaderItemControl.forEach(function(arrayItem, index) { - arrayItem.tabIndex = -1; - }); - }; - } - }; - - render.item = { - all: function() { - var headerSection = helper.e(".header"); - var headerArea = helper.node("div|class:header-area"); - var headerItemGrid = helper.node("div|class:header-item-grid"); - state.get.current().header.order.forEach(function(arrayItem, index) { - if ((arrayItem == "clock" && (state.get.current().header.clock.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.show)) || - (arrayItem == "date" && (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[arrayItem].show) { - var name = arrayItem.toLowerCase(); - headerItemGrid.appendChild(render.item.wrapper(name, render.item[arrayItem](name), index)); - }; - }); - headerArea.appendChild(headerItemGrid); - headerSection.appendChild(headerArea); - }, - clear: function() { - var headerSection = helper.e(".header"); - while (headerSection.lastChild) { - headerSection.removeChild(headerSection.lastChild); - }; - }, - wrapper: function(name, item) { - var headerItem = helper.node("div|class:header-item header-item-" + name + ""); - var headerItemBody = helper.node("div|class:header-item-body header-item-body-" + name); - headerItemBody.appendChild(item); - headerItem.appendChild(headerItemBody); - return headerItem; - }, - greeting: function(name) { - return helper.node("p|class:" + name + ""); - }, - clock: function(name) { - return helper.node("p|class:" + name + ""); - }, - transitional: function(name) { - return helper.node("p|class:" + name + ""); - }, - date: function(name) { - return helper.node("p|class:" + name + ""); - }, - search: function() { - var headerSearchBody = helper.node("div|class:search-wrapper"); - var form = helper.node("form|class:search,action,method:get"); - var searchInput; - if (helper.checkIfValidString(state.get.current().header.search.engine.custom.queryName)) { - searchInput = helper.node("input|class:search-input,type:search,placeholder:Find or Search,name:" + helper.trimString(state.get.current().header.search.engine.custom.queryName) + ",autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false,tabindex:1"); - } else { - searchInput = helper.node("input|class:search-input,type:search,placeholder:Find or Search,name:q,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false,tabindex:1"); - }; - var hiddenInput = helper.node("input|type:submit,value:Search,class:is-hidden"); - var clearButton = helper.node("button|class:search-clear search-clear button button-link,tabindex:1,disabled"); - var clearButtonIcon = helper.node("span|class:icon-close"); - clearButton.appendChild(clearButtonIcon); - form.appendChild(searchInput); - form.appendChild(hiddenInput); - headerSearchBody.appendChild(form); - headerSearchBody.appendChild(clearButton); - - if (state.get.current().header.search.style == "clear") { - helper.addClass(searchInput, "input-clear"); - }; - - if (state.get.current().header.search.newTab) { - form.setAttribute("target", "_blank"); - }; - - return headerSearchBody; - }, - editAdd: function() { - var formGroup = helper.node("div|class:header-editadd form-group form-group-nested-button"); - var formInputButton = helper.node("div|class:form-input-button form-input-button-line form-input-hide"); - var controlEditInput = helper.node("input|id:control-edit,class:header-edit control-edit,type:checkbox,tabindex:1"); - var controlEditLabel = helper.node("label|for:control-edit"); - var controlEditLabelText = helper.node("span:Edit"); - var controlEditLabelIcon = helper.node("span|class:label-icon"); - controlEditLabel.appendChild(controlEditLabelText); - controlEditLabel.appendChild(controlEditLabelIcon); - formInputButton.appendChild(controlEditInput); - formInputButton.appendChild(controlEditLabel); - - var formDropdown = helper.node("div|class:form-dropdown"); - var controlAddToggle = helper.node("button|class:header-add control-add-toggle form-dropdown-toggle button button-line,tabindex:1"); - var controlAddToggleText = helper.node("span:Add"); - controlAddToggle.appendChild(controlAddToggleText); - var formDropdownMenu = helper.node("ul|class:list-unstyled form-dropdown-menu"); - var controlGroupAddLi = helper.node("li"); - var controlGroupAdd = helper.node("button|class:button button-block text-left form-dropdown-menu-item control-add-group,tabindex:1"); - var controlGroupAddText = helper.node("span:New Group|class:button-text"); - controlGroupAdd.appendChild(controlGroupAddText); - controlGroupAddLi.appendChild(controlGroupAdd); - var controlLinkAddLi = helper.node("li"); - var controlLinkAdd = helper.node("button|class:button button-block text-left form-dropdown-menu-item control-add-link,tabindex:1"); - var controlLinkAddText = helper.node("span:New Bookmark|class:button-text"); - controlLinkAdd.appendChild(controlLinkAddText); - controlLinkAddLi.appendChild(controlLinkAdd); - formDropdownMenu.appendChild(controlGroupAddLi); - formDropdownMenu.appendChild(controlLinkAddLi); - formDropdown.appendChild(controlAddToggle); - formDropdown.appendChild(formDropdownMenu); - - if (state.get.current().header.editAdd.style == "clear") { - helper.addClass(formInputButton, "form-input-button-link"); - helper.addClass(controlAddToggle, "button-link"); - }; - - formGroup.appendChild(formInputButton); - formGroup.appendChild(formDropdown); - - return formGroup; - }, - colorAccent: function() { - var formGroup = helper.node("div|class:header-coloraccent form-group form-group-nested-button"); - - var colorInputButton = helper.node("div|class:form-input-button form-input-button-line"); - var colorInput = helper.node("input|id:control-theme-color-rgb-color-quick,class:control-theme-color-rgb-color-quick header-color,type:color,value:#000000,tabindex:1,autocomplete:off"); - var colorInputLabel = helper.node("label|for:control-theme-color-rgb-color-quick"); - var colorInputLabelText = helper.node("span:Colour"); - colorInputLabel.appendChild(colorInputLabelText); - colorInputButton.appendChild(colorInput); - colorInputButton.appendChild(colorInputLabel); - - var accentInputButton = helper.node("div|class:form-input-button form-input-button-line"); - var accentInput = helper.node("input|id:control-theme-accent-rgb-color-quick,class:control-theme-accent-rgb-color-quick header-accent,type:color,value:#000000,tabindex:1,autocomplete:off"); - var accentInputLabel = helper.node("label|for:control-theme-accent-rgb-color-quick"); - var accentInputLabelText = helper.node("span:Accent"); - accentInputLabel.appendChild(accentInputLabelText); - accentInputButton.appendChild(accentInput); - accentInputButton.appendChild(accentInputLabel); - - if (state.get.current().header.colorAccent.dot.show) { - helper.addClass(colorInputButton, "input-color-dot"); - helper.addClass(colorInputButton, "input-color-dot-shade"); - helper.addClass(accentInputButton, "input-color-dot"); - helper.addClass(accentInputButton, "input-color-dot-accent"); - } else { - helper.addClass(colorInputButton, "form-input-hide"); - helper.addClass(accentInputButton, "form-input-hide"); - }; - - if (state.get.current().header.colorAccent.style == "clear") { - helper.addClass(colorInputButton, "form-input-button-link"); - helper.addClass(accentInputButton, "form-input-button-link"); - }; - - formGroup.appendChild(colorInputButton); - formGroup.appendChild(accentInputButton); - return formGroup; - }, - menu: function() { - var button = helper.node("button|class:control-menu-open header-menu button button-line,tabindex:1"); - var buttonText = helper.node("span:Open settings menu|class:button-text sr-only"); - var baselineAlignmentCharacter = helper.node("span:-|class:baseline-alignment-icon-character,aria-hidden:true"); - var buttonIcon = helper.node("span|class:icon-settings"); - if (state.get.current().header.menu.style == "clear") { - helper.addClass(button, "button-link"); - }; - button.appendChild(baselineAlignmentCharacter); - button.appendChild(buttonIcon); - button.appendChild(buttonText); - return button; - } - }; - - render.greeting = { - size: function() { - var html = helper.e("html"); - html.style.setProperty("--header-greeting-size", state.get.current().header.greeting.size + "em"); - } - }; - - render.transitional = { - size: function() { - var html = helper.e("html"); - html.style.setProperty("--header-transitional-size", state.get.current().header.transitional.size + "em"); - } - }; - - render.clock = { - size: function() { - var html = helper.e("html"); - html.style.setProperty("--header-clock-size", state.get.current().header.clock.size + "em"); - } - }; - - render.date = { - size: function() { - var html = helper.e("html"); - html.style.setProperty("--header-date-size", state.get.current().header.date.size + "em"); - } - }; - - render.search = { - width: { - size: function() { - var html = helper.e("html"); - html.style.setProperty("--header-search-width-size", state.get.current().header.search.width.size + "%"); - } - }, - size: function() { - var html = helper.e("html"); - html.style.setProperty("--header-search-size", state.get.current().header.search.size + "em"); - }, - opacity: function() { - var html = helper.e("html"); - html.style.setProperty("--header-search-opacity", state.get.current().header.search.opacity); - } - }; - - render.editadd = { - size: function() { - var html = helper.e("html"); - html.style.setProperty("--header-editadd-size", state.get.current().header.editAdd.size + "em"); - }, - opacity: function() { - var html = helper.e("html"); - html.style.setProperty("--header-editadd-opacity", state.get.current().header.editAdd.opacity); - } - }; - - render.coloraccent = { - size: function() { - var html = helper.e("html"); - html.style.setProperty("--header-coloraccent-size", state.get.current().header.colorAccent.size + "em"); - }, - opacity: function() { - var html = helper.e("html"); - html.style.setProperty("--header-coloraccent-opacity", state.get.current().header.colorAccent.opacity); - } - }; - - render.menu = { - size: function() { - var html = helper.e("html"); - html.style.setProperty("--header-menu-size", state.get.current().header.menu.size + "em"); - }, - opacity: function() { - var html = helper.e("html"); - html.style.setProperty("--header-menu-opacity", state.get.current().header.menu.opacity); - } - }; - - var init = function() { - bind.resize(); - bind.scroll(); - bind.fonts(); - render.item.all(); - render.area.width(); - render.color.scrolling(); - render.color.custom(); - render.opacity(); - render.border(); - render.greeting.size(); - render.transitional.size(); - render.clock.size(); - render.date.size(); - render.search.width.size(); - render.search.size(); - render.search.opacity(); - render.editadd.size(); - render.editadd.opacity(); - render.coloraccent.size(); - render.coloraccent.opacity(); - render.menu.size(); - render.menu.opacity(); - render.control.all(); - bind.sort.item(); - }; - - // exposed methods - return { - mod: mod, - render: render, - init: init - }; - -})(); diff --git a/src/js/helper.js b/src/js/helper.js deleted file mode 100644 index ce730865..00000000 --- a/src/js/helper.js +++ /dev/null @@ -1,840 +0,0 @@ -var helper = (function() { - - var e = function(selector) { - return document.querySelector(selector); - }; - - var eA = function(selector) { - return document.querySelectorAll(selector); - }; - - var toggleClass = function(element, theClassName) { - element.classList.toggle(theClassName); - }; - - var addClass = function(element, theClassName) { - element.classList.add(theClassName); - }; - - var removeClass = function(element, theClassName) { - element.classList.remove(theClassName); - }; - - var randomString = function(override) { - var options = { - letter: null, - adjectivesCount: null - }; - if (override) { - options = applyOptions(options, override); - }; - var alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]; - var adjectives = { - a: ["Aback", "Abaft", "Abandoned", "Abashed", "Aberrant", "Abhorrent", "Abiding", "Abject", "Ablaze", "Able", "Abnormal", "Aboriginal", "Abortive", "Abounding", "Abrasive", "Abrupt", "Absent", "Absorbed", "Absorbing", "Abstracted", "Absurd", "Abundant", "Abusive", "Acceptable", "Accessible", "Accidental", "Accurate", "Acid", "Acidic", "Acoustic", "Acrid", "Adamant", "Adaptable", "Addicted", "Adhesive", "Adjoining", "Adorable", "Adventurous", "Afraid", "Aggressive", "Agonizing", "Agreeable", "Ahead", "Ajar", "Alert", "Alike", "Alive", "Alleged", "Alluring", "Aloof", "Amazing", "Ambiguous", "Ambitious", "Amuck", "Amused", "Amusing", "Ancient", "Angry", "Animated", "Annoyed", "Annoying", "Anxious", "Apathetic", "Aquatic", "Aromatic", "Arrogant", "Ashamed", "Aspiring", "Assorted", "Astonishing", "Attractive", "Auspicious", "Automatic", "Available", "Average", "Aware", "Awesome", "Axiomatic"], - b: ["Bad", "Barbarous", "Bashful", "Bawdy", "Beautiful", "Befitting", "Belligerent", "Beneficial", "Bent", "Berserk", "Bewildered", "Big", "Billowy", "Bitter", "Bizarre", "Black", "Bloody", "Blue", "Blushing", "Boiling", "Boorish", "Bored", "Boring", "Bouncy", "Boundless", "Brainy", "Brash", "Brave", "Brawny", "Breakable", "Breezy", "Brief", "Bright", "Broad", "Broken", "Brown", "Bumpy", "Burly", "Bustling", "Busy"], - c: ["Cagey", "Calculating", "Callous", "Calm", "Capable", "Capricious", "Careful", "Careless", "Caring", "Cautious", "Ceaseless", "Certain", "Changeable", "Charming", "Cheap", "Cheerful", "Chemical", "Chief", "Childlike", "Chilly", "Chivalrous", "Chubby", "Chunky", "Clammy", "Classy", "Clean", "Clear", "Clever", "Cloistered", "Cloudy", "Closed", "Clumsy", "Cluttered", "Coherent", "Cold", "Colorful", "Colossal", "Combative", "Comfortable", "Common", "Complete", "Complex", "Concerned", "Condemned", "Confused", "Conscious", "Cooing", "Cool", "Cooperative", "Coordinated", "Courageous", "Cowardly", "Crabby", "Craven", "Crazy", "Creepy", "Crooked", "Crowded", "Cruel", "Cuddly", "Cultured", "Cumbersome", "Curious", "Curly", "Curved", "Curvy", "Cut", "Cute", "Cynical"], - d: ["Daffy", "Daily", "Damaged", "Damaging", "Damp", "Dangerous", "Dapper", "Dark", "Dashing", "Dazzling", "Dead", "Deadpan", "Deafening", "Dear", "Debonair", "Decisive", "Decorous", "Deep", "Deeply", "Defeated", "Defective", "Defiant", "Delicate", "Delicious", "Delightful", "Demonic", "Delirious", "Dependent", "Depressed", "Deranged", "Descriptive", "Deserted", "Detailed", "Determined", "Devilish", "Didactic", "Different", "Difficult", "Diligent", "Direful", "Dirty", "Disagreeable", "Disastrous", "Discreet", "Disgusted", "Disgusting", "Disillusioned", "Dispensable", "Distinct", "Disturbed", "Divergent", "Dizzy", "Domineering", "Doubtful", "Drab", "Draconian", "Dramatic", "Dreary", "Drunk", "Dry", "Dull", "Dusty", "Dynamic", "Dysfunctional"], - e: ["Eager", "Early", "Earsplitting", "Earthy", "Easy", "Eatable", "Economic", "Educated", "Efficacious", "Efficient", "Elastic", "Elated", "Elderly", "Electric", "Elegant", "Elfin", "Elite", "Embarrassed", "Eminent", "Empty", "Enchanted", "Enchanting", "Encouraging", "Endurable", "Energetic", "Enormous", "Entertaining", "Enthusiastic", "Envious", "Equable", "Equal", "Erect", "Erratic", "Ethereal", "Evanescent", "Evasive", "Even", "Excellent", "Excited", "Exciting", "Exclusive", "Exotic", "Expensive", "Exuberant", "Exultant"], - f: ["Fabulous", "Faded", "Faint", "Fair", "Faithful", "Fallacious", "False", "Familiar", "Famous", "Fanatical", "Fancy", "Fantastic", "Far", "Fascinated", "Fast", "Fat", "Faulty", "Fearful", "Fearless", "Feeble", "Feigned", "Female", "Fertile", "Festive", "Few", "Fierce", "Filthy", "Fine", "Finicky", "First", "Fixed", "Flagrant", "Flaky", "Flashy", "Flat", "Flawless", "Flimsy", "Flippant", "Flowery", "Fluffy", "Fluttering", "Foamy", "Foolish", "Foregoing", "Forgetful", "Fortunate", "Frail", "Fragile", "Frantic", "Free", "Freezing", "Frequent", "Fresh", "Fretful", "Friendly", "Frightened", "Frightening", "Full", "Fumbling", "Functional", "Funny", "Furry", "Furtive", "Future", "Futuristic", "Fuzzy"], - g: ["Gabby", "Gainful", "Gamy", "Gaping", "Garrulous", "Gaudy", "General", "Gentle", "Giant", "Giddy", "Gifted", "Gigantic", "Glamorous", "Gleaming", "Glib", "Glistening", "Glorious", "Glossy", "Godly", "Good", "Goofy", "Gorgeous", "Graceful", "Grandiose", "Grateful", "Gratis", "Gray", "Greasy", "Great", "Greedy", "Green", "Grey", "Grieving", "Groovy", "Grotesque", "Grouchy", "Grubby", "Gruesome", "Grumpy", "Guarded", "Guiltless", "Gullible", "Gusty", "Guttural"], - h: ["Habitual", "Half", "Hallowed", "Halting", "Handsome", "Handy", "Hanging", "Hapless", "Happy", "Hard", "Harmonious", "Harsh", "Hateful", "Heady", "Healthy", "Heartbreaking", "Heavenly", "Heavy", "Hellish", "Helpful", "Helpless", "Hesitant", "Hideous", "High", "Highfalutin", "Hilarious", "Hissing", "Historical", "Holistic", "Hollow", "Homeless", "Homely", "Honorable", "Horrible", "Hospitable", "Hot", "Huge", "Hulking", "Humdrum", "Humorous", "Hungry", "Hurried", "Hurt", "Hushed", "Husky", "Hypnotic", "Hysterical"], - i: ["Icky", "Icy", "Idiotic", "Ignorant", "Ill", "Illegal", "Illustrious", "Imaginary", "Immense", "Imminent", "Impartial", "Imperfect", "Impolite", "Important", "Imported", "Impossible", "Incandescent", "Incompetent", "Inconclusive", "Industrious", "Incredible", "Inexpensive", "Infamous", "Innate", "Innocent", "Inquisitive", "Insidious", "Instinctive", "Intelligent", "Interesting", "Internal", "Invincible", "Irate", "Irritating", "Itchy"], - j: ["Jaded", "Jagged", "Jazzy", "Jealous", "Jittery", "Jobless", "Jolly", "Joyous", "Judicious", "Juicy", "Jumbled", "Jumpy", "Juvenile"], - k: ["Keen", "Kind", "Kindhearted", "Kindly", "Knotty", "Knowing", "Knowledgeable", "Known"], - l: ["Labored", "Lackadaisical", "Lacking", "Lame", "Lamentable", "Languid", "Large", "Last", "Late", "Laughable", "Lavish", "Lazy", "Lean", "Learned", "Left", "Legal", "Lethal", "Level", "Lewd", "Light", "Like", "Likeable", "Limping", "Literate", "Little", "Lively", "Living", "Lonely", "Long", "Longing", "Loose", "Lopsided", "Loud", "Loutish", "Lovely", "Loving", "Low", "Lowly", "Lucky", "Ludicrous", "Lumpy", "Lush", "Luxuriant", "Lying", "Lyrical"], - m: ["Macabre", "Macho", "Maddening", "Madly", "Magenta", "Magical", "Magnificent", "Majestic", "Makeshift", "Male", "Malicious", "Mammoth", "Maniacal", "Many", "Marked", "Massive", "Married", "Marvelous", "Material", "Materialistic", "Mature", "Mean", "Measly", "Meaty", "Medical", "Meek", "Mellow", "Melodic", "Melted", "Merciful", "Mere", "Messy", "Mighty", "Military", "Milky", "Mindless", "Miniature", "Minor", "Miscreant", "Misty", "Mixed", "Moaning", "Modern", "Moldy", "Momentous", "Motionless", "Mountainous", "Muddled", "Mundane", "Murky", "Mushy", "Mute", "Mysterious"], - n: ["Naive", "Nappy", "Narrow", "Nasty", "Natural", "Naughty", "Nauseating", "Near", "Neat", "Nebulous", "Necessary", "Needless", "Needy", "Neighborly", "Nervous", "New", "Next", "Nice", "Nifty", "Nimble", "Nippy", "Noiseless", "Noisy", "Nonchalant", "Nondescript", "Nonstop", "Normal", "Nostalgic", "Nosy", "Noxious", "Numberless", "Numerous", "Nutritious", "Nutty"], - o: ["Oafish", "Obedient", "Obeisant", "Obese", "Obnoxious", "Obscene", "Obsequious", "Observant", "Obsolete", "Obtainable", "Oceanic", "Odd", "Offbeat", "Old", "Omniscient", "Onerous", "Open", "Opposite", "Optimal", "Orange", "Ordinary", "Organic", "Ossified", "Outgoing", "Outrageous", "Outstanding", "Oval", "Overconfident", "Overjoyed", "Overrated", "Overt", "Overwrought"], - p: ["Painful", "Painstaking", "Pale", "Paltry", "Panicky", "Panoramic", "Parallel", "Parched", "Parsimonious", "Past", "Pastoral", "Pathetic", "Peaceful", "Penitent", "Perfect", "Periodic", "Permissible", "Perpetual", "Petite", "Phobic", "Physical", "Picayune", "Pink", "Piquant", "Placid", "Plain", "Plant", "Plastic", "Plausible", "Pleasant", "Plucky", "Pointless", "Poised", "Polite", "Political", "Poor", "Possessive", "Possible", "Powerful", "Precious", "Premium", "Present", "Pretty", "Previous", "Pricey", "Prickly", "Private", "Probable", "Productive", "Profuse", "Protective", "Proud", "Psychedelic", "Psychotic", "Public", "Puffy", "Pumped", "Puny", "Purple", "Purring", "Pushy", "Puzzled", "Puzzling"], - q: ["Quaint", "Quarrelsome", "Questionable", "Quick", "Quiet", "Quirky", "Quixotic", "Quizzical"], - r: ["Rabid", "Racial", "Ragged", "Rainy", "Rambunctious", "Rampant", "Rapid", "Rare", "Raspy", "Ratty", "Ready", "Real", "Rebel", "Receptive", "Recondite", "Red", "Redundant", "Reflective", "Regular", "Relieved", "Remarkable", "Reminiscent", "Repulsive", "Resolute", "Resonant", "Responsible", "Rhetorical", "Rich", "Right", "Righteous", "Rightful", "Rigid", "Ripe", "Ritzy", "Roasted", "Robust", "Romantic", "Roomy", "Rotten", "Rough", "Round", "Royal", "Ruddy", "Rude", "Rural", "Rustic", "Ruthless"], - s: ["Sable", "Sad", "Safe", "Salty", "Same", "Sassy", "Satisfying", "Savory", "Scandalous", "Scarce", "Scared", "Scary", "Scattered", "Scientific", "Scintillating", "Scrawny", "Screeching", "Second", "Secret", "Secretive", "Sedate", "Seemly", "Selective", "Selfish", "Separate", "Serious", "Shaggy", "Shaky", "Shallow", "Sharp", "Shiny", "Shivering", "Shocking", "Short", "Shrill", "Shut", "Shy", "Sick", "Silent", "Silky", "Silly", "Simple", "Simplistic", "Sincere", "Skillful", "Skinny", "Sleepy", "Slim", "Slimy", "Slippery", "Sloppy", "Slow", "Small", "Smart", "Smelly", "Smiling", "Smoggy", "Smooth", "Sneaky", "Snobbish", "Snotty", "Soft", "Soggy", "Solid", "Somber", "Sophisticated", "Sordid", "Sore", "Sour", "Sparkling", "Special", "Spectacular", "Spicy", "Spiffy", "Spiky", "Spiritual", "Spiteful", "Splendid", "Spooky", "Spotless", "Spotted", "Spotty", "Spurious", "Squalid", "Square", "Squealing", "Squeamish", "Staking", "Stale", "Standing", "Statuesque", "Steadfast", "Steady", "Steep", "Stereotyped", "Sticky", "Stiff", "Stimulating", "Stingy", "Stormy", "Straight", "Strange", "Striped", "Strong", "Stupendous", "Sturdy", "Subdued", "Subsequent", "Substantial", "Successful", "Succinct", "Sudden", "Sulky", "Super", "Superb", "Superficial", "Supreme", "Swanky", "Sweet", "Sweltering", "Swift", "Symptomatic", "Synonymous"], - t: ["Taboo", "Tacit", "Tacky", "Talented", "Tall", "Tame", "Tan", "Tangible", "Tangy", "Tart", "Tasteful", "Tasteless", "Tasty", "Tawdry", "Tearful", "Tedious", "Teeny", "Telling", "Temporary", "Ten", "Tender", "Tense", "Tenuous", "Terrific", "Tested", "Testy", "Thankful", "Therapeutic", "Thick", "Thin", "Thinkable", "Third", "Thirsty", "Thoughtful", "Thoughtless", "Threatening", "Thundering", "Tidy", "Tight", "Tightfisted", "Tiny", "Tired", "Tiresome", "Toothsome", "Torpid", "Tough", "Towering", "Tranquil", "Trashy", "Tremendous", "Tricky", "Trite", "Troubled", "Truculent", "True", "Truthful", "Typical"], - u: ["Ubiquitous", "Ultra", "Unable", "Unaccountable", "Unadvised", "Unarmed", "Unbecoming", "Unbiased", "Uncovered", "Understood", "Undesirable", "Unequal", "Unequaled", "Uneven", "Unhealthy", "Uninterested", "Unique", "Unkempt", "Unknown", "Unnatural", "Unruly", "Unsightly", "Unsuitable", "Untidy", "Unused", "Unusual", "Unwieldy", "Unwritten", "Upbeat", "Uppity", "Upset", "Uptight", "Used", "Useful", "Useless", "Utopian"], - v: ["Vacuous", "Vagabond", "Vague", "Valuable", "Various", "Vast", "Vengeful", "Venomous", "Verdant", "Versed", "Victorious", "Vigorous", "Violent", "Violet", "Vivacious", "Voiceless", "Volatile", "Voracious", "Vulgar"], - w: ["Wacky", "Waggish", "Waiting", "Wakeful", "Wandering", "Wanting", "Warlike", "Warm", "Wary", "Wasteful", "Watery", "Weak", "Wealthy", "Weary", "Wet", "Whimsical", "Whispering", "White", "Whole", "Wholesale", "Wicked", "Wide", "Wiggly", "Wild", "Willing", "Windy", "Wiry", "Wise", "Wistful", "Witty", "Woebegone", "Womanly", "Wonderful", "Wooden", "Woozy", "Workable", "Worried", "Worthless", "Wrathful", "Wretched", "Wrong", "Wry"], - x: ["Xenial", "Xenodochial", "Xenophobic"], - y: ["Yellow", "Yielding", "Young", "Youthful", "Yummy"], - z: ["Zany", "Zealous", "Zesty", "Zippy", "Zombiesque", "Zonked"] - }; - var animals = { - a: ["Aardvark", "Albatross", "Alligator", "Alpaca", "Ant", "Anteater", "Antelope", "Ape", "Armadillo"], - b: ["Baboon", "Badger", "Barracuda", "Bat", "Bear", "Beaver", "Bee", "Bison", "Boar", "Buffalo", "Butterfly"], - c: ["Camel", "Capybara", "Caribou", "Cassowary", "Cat", "Caterpillar", "Cattle", "Chamois", "Cheetah", "Chicken", "Chimpanzee", "Chinchilla", "Chough", "Clam", "Cobra", "Cockroach", "Cod", "Cormorant", "Coyote", "Crab", "Crane", "Crocodile", "Crow", "Curlew"], - d: ["Deer", "Dinosaur", "Dog", "Dogfish", "Dolphin", "Donkey", "Dotterel", "Dove", "Dragonfly", "Duck", "Dugong", "Dunlin"], - e: ["Eagle", "Echidna", "Eel", "Eland", "Elephant", "Elephant Seal", "Elk", "Emu"], - f: ["Falcon", "Ferret", "Finch", "Fish", "Flamingo", "Fly", "Fox", "Frog"], - g: ["Gaur", "Gazelle", "Gerbil", "Giant Panda", "Giraffe", "Gnat", "Gnu", "Goat", "Goose", "Goldfinch", "Goldfish", "Gorilla", "Goshawk", "Grasshopper", "Grouse", "Guanaco", "Guinea Fowl", "Guinea Pig", "Gull"], - h: ["Hamster", "Hare", "Hawk", "Hedgehog", "Heron", "Herring", "Hippopotamus", "Hornet", "Horse", "Human", "Hummingbird", "Hyena"], - i: ["Ibex", "Ibis", "Iguana", "Impala", "Isopod"], - j: ["Jackal", "Jaguar", "Jay", "Jellyfish"], - k: ["Kangaroo", "Kingfisher", "Koala", "Komodo Dragon", "Kookabura", "Kouprey", "Kudu"], - l: ["Lapwing", "Lark", "Lemur", "Leopard", "Lima", "Lion", "Llama", "Lobster", "Locust", "Loris", "Louse", "Lyrebird"], - m: ["Magpie", "Mallard", "Manatee", "Mandrill", "Mantis", "Marten", "Meerkat", "Mink", "Mole", "Mongoose", "Monkey", "Moose", "Mouse", "Mosquito", "Mule"], - n: ["Narwhal", "Newt", "Nightingale", "Nyala"], - o: ["Octopus", "Okapi", "Opossum", "Oryx", "Ostrich", "Otter", "Owl", "Ox", "Oyster"], - p: ["Panther", "Parrot", "Partridge", "Peafowl", "Pelican", "Penguin", "Pheasant", "Pig", "Pigeon", "Polar Bear", "Pony", "Porcupine", "Porpoise"], - q: ["Quail", "Quelea", "Quetzal"], - r: ["Rabbit", "Raccoon", "Rail", "Ram", "Rat", "Raven", "Red Deer", "Red Panda", "Reindeer", "Rhinoceros", "Rook"], - s: ["Salamander", "Salmon", "Sand Dollar", "Sandpiper", "Sardine", "Scorpion", "Sea Lion", "Sea Urchin", "Seahorse", "Seal", "Shark", "Sheep", "Shrew", "Skunk", "Snail", "Snake", "Sparrow", "Spider", "Spoonbill", "Squid", "Squirrel", "Starling", "Stingray", "Stinkbug", "Stork", "Swallow", "Swan"], - t: ["Tapir", "Tarsier", "Termite", "Tiger", "Toad", "Trout", "Turkey", "Turtle"], - u: ["Uakari", "Unau", "Urial", "Urchin", "Umbrellabird", "Unicornfish", "Uromastyx", "Uguisu"], - v: ["Vampire Bat", "Viper", "Vole", "Vulture"], - w: ["Wallaby", "Walrus", "Wasp", "Weasel", "Whale", "Wolf", "Wolverine", "Wombat", "Woodcock", "Woodpecker", "Worm", "Wren"], - x: ["Xaviers Greenbul", "Xeme", "Xingu Corydoras", "Xolo"], - y: ["Yabby", "Yak", "Yellowhammer", "Yellowjacket"], - z: ["Zebra", "Zebu", "Zokor", "Zorilla"] - }; - - var action = { - alliteration: { - short: function() { - var randomAdjective = adjectives[options.letter.toLowerCase()][Math.floor(Math.random() * adjectives[options.letter.toLowerCase()].length)]; - var randomAnimal = animals[options.letter.toLowerCase()][Math.floor(Math.random() * animals[options.letter.toLowerCase()].length)]; - return randomAdjective + " " + randomAnimal; - }, - long: function() { - var randomAdjective = ""; - for (var i = 1; i <= options.adjectivesCount; i++) { - if (adjectives[options.letter.toLowerCase()].length > 0) { - if (randomAdjective.length > 0) { - randomAdjective = randomAdjective + " "; - }; - randomAdjective = randomAdjective + adjectives[options.letter.toLowerCase()].splice(Math.floor(Math.random() * adjectives[options.letter.toLowerCase()].length), 1); - }; - }; - var randomAnimal = animals[options.letter.toLowerCase()][Math.floor(Math.random() * animals[options.letter.toLowerCase()].length)]; - return randomAdjective + " " + randomAnimal; - } - }, - mix: { - short: function() { - var adjectivesSeed = alphabet[Math.floor(Math.random() * (alphabet.length - 1))]; - var animalsSeed = alphabet[Math.floor(Math.random() * (alphabet.length - 1))]; - var randomAdjective = adjectives[adjectivesSeed][Math.floor(Math.random() * adjectives[adjectivesSeed].length)]; - var randomAnimal = animals[animalsSeed][Math.floor(Math.random() * animals[animalsSeed].length)]; - return randomAdjective + " " + randomAnimal; - }, - long: function() { - var randomAdjective = ""; - for (var i = 1; i <= options.adjectivesCount; i++) { - var adjectiveLetter = alphabet[Math.floor(Math.random() * (alphabet.length - 1))]; - if (adjectiveLetter in adjectives && adjectives[adjectiveLetter].length > 0) { - if (randomAdjective.length > 0) { - randomAdjective = randomAdjective + " "; - }; - randomAdjective = randomAdjective + adjectives[adjectiveLetter].splice(Math.floor(Math.random() * adjectives[adjectiveLetter].length), 1); - if (adjectives[adjectiveLetter].length == 0) { - delete adjectives[adjectiveLetter]; - }; - }; - }; - var randomAnimalArray = animals[alphabet[Math.floor(Math.random() * (alphabet.length - 1))]] - var randomAnimal = randomAnimalArray[Math.floor(Math.random() * (randomAnimalArray.length - 1))]; - return randomAdjective + " " + randomAnimal; - } - } - }; - - if (options.letter != null && alphabet.includes(options.letter.toLowerCase())) { - if (options.adjectivesCount != null && options.adjectivesCount > 0) { - return action.alliteration.long(); - } else { - return action.alliteration.short(); - }; - } else { - if (options.adjectivesCount != null && options.adjectivesCount > 0) { - return action.mix.long(); - } else { - return action.mix.short(); - }; - }; - }; - - var getClosest = function(element, selector) { - var firstChar = selector.charAt(0); - // Get closest match - for (; element && element !== document; element = element.parentNode) { - // If selector is a class - if (firstChar === ".") { - if (element.classList.contains(selector.substr(1))) { - return element; - }; - }; - // If selector is an ID - if (firstChar === "#") { - if (element.id === selector.substr(1)) { - return element; - }; - }; - // If selector is a data attribute - if (firstChar === "[") { - if (element.hasAttribute(selector.substr(1, selector.length - 2))) { - return element; - }; - }; - // If selector is a tag - if (element.tagName.toLowerCase() === selector) { - return element; - }; - }; - return false; - }; - - var getDateTime = function() { - var dateStamp = new Date(); - var object = { - // string: dateStamp.constructor(), - // time: dateStamp.getTime() - date: dateStamp.getDate(), - day: dateStamp.getDay(), - year: dateStamp.getFullYear(), - hours: dateStamp.getHours(), - milliseconds: dateStamp.getMilliseconds(), - minutes: dateStamp.getMinutes(), - month: dateStamp.getMonth(), - seconds: dateStamp.getSeconds() - } - return object; - }; - - var sortObject = function(object, key) { - object.sort(function(a, b) { - var textA = getObject({ - object: a, - path: key - }); - if (typeof textA == "string") { - textA = textA.toLowerCase(); - }; - var textB = getObject({ - object: b, - path: key - }); - if (typeof textB == "string") { - textB = textB.toLowerCase(); - }; - if (textA < textB) { - return -1; - } else if (textA > textB) { - return 1; - } else { - return 0; - }; - }); - return object; - }; - - var applyOptions = function(options, override) { - if (options && override) { - if (override) { - for (var key in override) { - if (key in options) { - options[key] = override[key]; - }; - }; - }; - return options; - } else { - return null; - }; - }; - - var makeNode = function(override) { - var options = { - tag: null, - text: null, - attr: null - }; - if (override) { - options = applyOptions(options, override); - }; - var element = document.createElement(options.tag); - if (options.text != null) { - element.textContent = options.text; - }; - if (options.attr != null) { - options.attr.forEach(function(arrayItem, index) { - if ("key" in arrayItem && "value" in arrayItem) { - element.setAttribute(arrayItem.key, arrayItem.value); - } else if ("key" in arrayItem) { - element.setAttribute(arrayItem.key, ""); - } - }); - }; - return element; - }; - - var node = function(string, node) { - // set element - var tag; - if (string.indexOf("|") > 0) { - tag = string.slice(0, string.indexOf("|")); - } else { - tag = string; - }; - var text = false; - if (tag.indexOf(":") > 0) { - var pair = tag.split(":"); - tag = pair[0]; - text = pair[1]; - }; - var element = document.createElement(tag); - if (text && text != "") { - element.textContent = text; - }; - var attributes = string.slice(string.indexOf("|") + 1, string.length).split(","); - // set attributes - if (string.indexOf("|") > 0 && string.indexOf("|") < string.length - 1) { - attributes.forEach(function(arrayItem, index) { - if (arrayItem.indexOf(":") > 0) { - // if key and value - var pair = arrayItem.substring(0, arrayItem.indexOf(":")) + "," + arrayItem.substring((arrayItem.indexOf(":") + 1), arrayItem.length); - pair = pair.split(","); - attributes[index] = { - key: pair[0], - value: pair[1] - }; - } else { - // if key only - attributes[index] = { - key: arrayItem, - value: undefined - }; - }; - }); - attributes.forEach(function(arrayItem, index) { - if (("key" in arrayItem && arrayItem.key != undefined) && ("value" in arrayItem && arrayItem.value != undefined)) { - element.setAttribute(arrayItem.key, arrayItem.value); - } else if ("key" in arrayItem && arrayItem.key != undefined) { - element.setAttribute(arrayItem.key, ""); - } - }); - }; - if (node) { - if (typeof node != "string") { - if (node.length > 0) { - node.forEach(function(arrayItem, index) { - if (arrayItem instanceof HTMLElement) { - element.appendChild(arrayItem); - }; - }); - } else { - if (node instanceof HTMLElement) { - element.appendChild(node); - }; - }; - }; - }; - return element; - }; - - var _makeAddress = function(path) { - var array; - if (path.indexOf("[") != -1 && path.indexOf("]") != -1) { - array = path.split(".").join(",").split("[").join(",").split("]").join(",").split(","); - for (var i = 0; i < array.length; i++) { - if (array[i] == "") { - array.splice(i, 1); - }; - if (!isNaN(parseInt(array[i], 10))) { - array[i] = parseInt(array[i], 10); - }; - }; - } else { - array = path.split("."); - }; - return array; - }; - - var setObject = function(override) { - var options = { - path: null, - object: null, - newValue: null - }; - if (override) { - var options = applyOptions(options, override); - }; - var address = _makeAddress(options.path); - var _setData = function() { - while (address.length > 1) { - // shift off and store the first key - var currentKey = address.shift(); - // if the key is not found make a new object - if (!(currentKey in options.object)) { - // make an empty object in the current object level - if (isNaN(currentKey)) { - options.object[currentKey] = {}; - } else { - options.object[currentKey] = []; - }; - }; - // drill down the object with the first key - options.object = options.object[currentKey]; - }; - var finalKey = address.shift(); - options.object[finalKey] = options.newValue; - }; - if (options.object != null && options.path != null && options.newValue != null) { - _setData(); - } else { - return false; - }; - }; - - var getObject = function(override) { - var options = { - object: null, - path: null - }; - if (override) { - var options = applyOptions(options, override); - }; - var address = _makeAddress(options.path); - var _getData = function() { - while (address.length > 1) { - // shift off and store the first key - var currentKey = address.shift(); - // if the key is not found make a new object - if (!(currentKey in options.object)) { - // make an empty object in the current object level - if (isNaN(currentKey)) { - options.object[currentKey] = {}; - } else { - options.object[currentKey] = []; - }; - }; - // drill down the object with the first key - options.object = options.object[currentKey]; - }; - var finalKey = address.shift(); - if (!(finalKey in options.object)) { - return ""; - } else { - return options.object[finalKey]; - }; - }; - if (options.object != null && options.path != null) { - return _getData(); - } else { - return false; - }; - }; - - var makeObject = function(string) { - var _stringOrBooleanOrNumber = function(stringToTest) { - if (stringToTest == "true") { - return true; - } else if (stringToTest == "false") { - return false; - } else if (stringToTest.indexOf("#") != -1) { - return stringToTest.substr(1, kevValuePair[1].length); - } else { - return "\"" + stringToTest + "\""; - }; - }; - // if argument is a string - if (typeof string == "string") { - // start building the object - var objectString = "{"; - // split the string on comma not followed by a space - // split on character if not followed by a space - var items = string.split(/,(?=\S)/); - // loop over each item - for (var i = 0; i < items.length; i++) { - // split each would be object key values pair - // split on character if not followed by a space - var kevValuePair = items[i].split(/:(?=\S)/); - // get the key - var key = "\"" + kevValuePair[0] + "\""; - var value; - // if the value has + with a space after it - if (/\+(?=\S)/.test(kevValuePair[1])) { - // remove first + symbol - kevValuePair[1] = kevValuePair[1].substr(1, kevValuePair[1].length); - // split the would be values - // split on character if not followed by a space - var all_value = kevValuePair[1].split(/\+(?=\S)/); - // if there are multiple values make an array - value = "[" - for (var q = 0; q < all_value.length; q++) { - value += _stringOrBooleanOrNumber(all_value[q]) + ","; - }; - // remove last comma - value = value.substr(0, value.length - 1); - // close array - value += "]" - } else { - value = _stringOrBooleanOrNumber(kevValuePair[1]); - }; - objectString += key + ":" + value + ","; - }; - // remove last comma - objectString = objectString.substr(0, objectString.length - 1); - // close object - objectString += "}"; - var object = JSON.parse(objectString); - return object; - } else { - return false; - }; - }; - - var moveArrayItem = function(array, oldIndex, newIndex) { - if (newIndex >= array.length) { - var k = newIndex - array.length + 1; - while (k--) { - array.push(undefined); - }; - }; - array.splice(newIndex, 0, array.splice(oldIndex, 1)[0]); - return array; - }; - - var allEqual = function(array) { - return array.every(function(arrayItem) { - return arrayItem === array[0]; - }); - }; - - var randomNumber = function(min, max) { - return Math.floor(Math.random() * (max - min + 1) + min); - }; - - var toWords = function(number) { - var ten = 10; - var oneHundred = 100; - var oneThousand = 1000; - var oneMillion = 1000000; - var oneBillion = 1000000000; // 1,000,000,000 (9) - var oneTrillion = 1000000000000; // 1,000,000,000,000 (12) - var oneQuadrillion = 1000000000000000; // 1,000,000,000,000,000 (15) - var max = 9007199254740992; // 9,007,199,254,740,992 (15) - var lessThanTwenty = ["Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"]; - var tenthsLessThanHundred = ["Zero", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]; - var _generateWords = function(number) { - var remainder, word, - words = arguments[1]; - // We’re done - if (number === 0) { - return !words ? "Zero" : words.join(" ").replace(/,$/, ""); - }; - // First run - if (!words) { - words = []; - }; - // If negative, prepend “minus” - if (number < 0) { - words.push("minus"); - number = Math.abs(number); - }; - if (number < 20) { - remainder = 0; - word = lessThanTwenty[number]; - } else if (number < oneHundred) { - remainder = number % ten; - word = tenthsLessThanHundred[Math.floor(number / ten)]; - // In case of remainder, we need to handle it here to be able to add the “-” - if (remainder) { - word += "-" + lessThanTwenty[remainder]; - remainder = 0; - }; - } else if (number < oneThousand) { - remainder = number % oneHundred; - word = _generateWords(Math.floor(number / oneHundred)) + " Hundred"; - } else if (number < oneMillion) { - remainder = number % oneThousand; - word = _generateWords(Math.floor(number / oneThousand)) + " Thousand,"; - } else if (number < oneBillion) { - remainder = number % oneMillion; - word = _generateWords(Math.floor(number / oneMillion)) + " Million,"; - } else if (number < oneTrillion) { - remainder = number % oneBillion; - word = _generateWords(Math.floor(number / oneBillion)) + " Billion,"; - } else if (number < oneQuadrillion) { - remainder = number % oneTrillion; - word = _generateWords(Math.floor(number / oneTrillion)) + " Trillion,"; - } else if (number <= max) { - remainder = number % oneQuadrillion; - word = _generateWords(Math.floor(number / oneQuadrillion)) + " Quadrillion,"; - }; - words.push(word); - return _generateWords(remainder, words); - }; - var num = parseInt(number, 10); - return _generateWords(num); - }; - - var ordinalWords = function(words) { - var endsWithDoubleZeroPattern = /(hundred|thousand|(m|b|tr|quadr)illion)$/; - var endsWithTeenPattern = /teen$/; - var endsWithYPattern = /y$/; - var endsWithZeroThroughTwelvePattern = /(Zero|One|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten|Eleven|Twelve)$/; - var ordinalLessThanThirteen = { - Zero: "Zeroth", - One: "First", - Two: "Second", - Three: "Third", - Four: "Fourth", - Five: "Fifth", - Six: "Sixth", - Seven: "Seventh", - Eight: "Eighth", - Nine: "Ninth", - Ten: "Tenth", - Eleven: "Eleventh", - Twelve: "Twelfth" - }; - var replaceWithOrdinalVariant = function(match, numberWord) { - return ordinalLessThanThirteen[numberWord]; - }; - // Ends with *00 (100, 1000, etc.) or *teen (13, 14, 15, 16, 17, 18, 19) - if (endsWithDoubleZeroPattern.test(words) || endsWithTeenPattern.test(words)) { - return words + "th"; - // Ends with *y (20, 30, 40, 50, 60, 70, 80, 90) - } else if (endsWithYPattern.test(words)) { - return words.replace(endsWithYPattern, "ieth"); - // Ends with one through twelve - } else if (endsWithZeroThroughTwelvePattern.test(words)) { - return words.replace(endsWithZeroThroughTwelvePattern, replaceWithOrdinalVariant); - }; - return words; - }; - - var ordinalNumber = function(number) { - var j = number % 10; - var k = number % 100; - if (j == 1 && k != 11) { - return number + "st"; - }; - if (j == 2 && k != 12) { - return number + "nd"; - }; - if (j == 3 && k != 13) { - return number + "rd"; - }; - return number + "th"; - }; - - var isJsonString = function(string) { - try { - JSON.parse(string); - } catch (error) { - return false; - }; - return true; - }; - - var isHexNumber = function(string) { - var regex = /[0-9A-Fa-f]{6}/g; - if (regex.test(string) && string.length == 7 && string.substring(0, 1) == "#") { - return true; - } else { - return false; - }; - }; - - var convertColor = { - rgb: {}, - hsl: {}, - hex: {} - }; - - convertColor.rgb.hsl = function(rgb) { - var r = rgb.r / 255; - var g = rgb.g / 255; - var b = rgb.b / 255; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - }; - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - }; - - var l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - }; - - return { - h: h, - s: s * 100, - l: l * 100 - }; - }; - - convertColor.rgb.hex = function(args) { - var integer = ((Math.round(args.r) & 0xFF) << 16) + - ((Math.round(args.g) & 0xFF) << 8) + - (Math.round(args.b) & 0xFF); - - var string = integer.toString(16); - return "#" + "000000".substring(string.length) + string; - }; - - convertColor.hsl.rgb = function(hsl) { - var h = hsl.h / 360; - var s = hsl.s / 100; - var l = hsl.l / 100; - var t2; - var t3; - var val; - - if (s === 0) { - val = l * 255; - return { - r: val, - g: val, - b: val - }; - }; - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - }; - - var t1 = 2 * l - t2; - - var rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - }; - - if (t3 > 1) { - t3--; - }; - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - }; - - rgb[i] = val * 255; - }; - - return { - r: rgb[0], - g: rgb[1], - b: rgb[2] - }; - }; - - convertColor.hex.rgb = function(args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return { - r: 0, - g: 0, - b: 0 - }; - }; - - var colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split("").map(function(char) { - return char + char; - }).join(""); - }; - - var integer = parseInt(colorString, 16); - var r = (integer >> 16) & 0xFF; - var g = (integer >> 8) & 0xFF; - var b = integer & 0xFF; - - return { - r: r, - g: g, - b: b - }; - }; - - var checkIfValidString = function(value) { - var result = false; - if (typeof value == "string") { - value = value.trim().replace(/\s/g, ""); - if (value != "") { - result = true; - }; - }; - return result; - }; - - var trimString = function(value) { - if (typeof value == "string") { - return value.trim().replace(/\s\s+/g, " "); - } else { - return value; - }; - }; - - var removeSpaces = function(value) { - if (typeof value == "string") { - return value.trim().replace(/\s/g, ""); - } else { - return value; - }; - }; - - // exposed methods - return { - e: e, - eA: eA, - toggleClass: toggleClass, - addClass: addClass, - removeClass: removeClass, - randomNumber: randomNumber, - randomString: randomString, - getClosest: getClosest, - allEqual: allEqual, - getDateTime: getDateTime, - sortObject: sortObject, - applyOptions: applyOptions, - makeNode: makeNode, - node: node, - setObject: setObject, - getObject: getObject, - makeObject: makeObject, - moveArrayItem: moveArrayItem, - toWords: toWords, - ordinalWords: ordinalWords, - ordinalNumber: ordinalNumber, - isJsonString: isJsonString, - isHexNumber: isHexNumber, - convertColor: convertColor, - checkIfValidString: checkIfValidString, - trimString: trimString, - removeSpaces: removeSpaces - }; - -})(); diff --git a/src/js/init.js b/src/js/init.js deleted file mode 100644 index d7a9fd4d..00000000 --- a/src/js/init.js +++ /dev/null @@ -1,24 +0,0 @@ -// log version -console.log("nightTab version", version.get().number, version.get().name); -data.init(); -state.init(); -header.init(); -bookmarks.init(); -theme.init(); -menu.init(); -search.init(); -link.init(); -control.init(); -greeting.init(); -transitional.init(); -date.init(); -clock.init(); -keyboard.init(); -layout.init(); -background.init(); -modal.init(); -shade.init(); -dropdown.init(); -edge.init(); -version.init(); -ready.init(); diff --git a/src/js/initial-background.js b/src/js/initial-background.js deleted file mode 100644 index d00546a5..00000000 --- a/src/js/initial-background.js +++ /dev/null @@ -1,15 +0,0 @@ -// inital check for systems which do not have light or dark mode -if (localStorage.getItem("nightTabStyle")) { - var style = document.createElement("style"); - style.type = "text/css"; - style.media = "screen"; - switch (localStorage.getItem("nightTabStyle")) { - case "light": - style.innerHTML = "html, body {background-color: rgb(255, 255, 255);}"; - break; - case "dark": - style.innerHTML = "html, body {background-color: rgb(0, 0, 0);}"; - break; - }; - document.querySelector("head").appendChild(style); -}; diff --git a/src/js/keyboard.js b/src/js/keyboard.js deleted file mode 100644 index 65c96eb8..00000000 --- a/src/js/keyboard.js +++ /dev/null @@ -1,199 +0,0 @@ -var keyboard = (function() { - - var bind = {}; - - bind.esc = function() { - window.addEventListener("keydown", function(event) { - // esc - if (event.keyCode == 27) { - if (state.get.current().edge) { - edge.box.close(); - } else if (state.get.current().menu) { - menu.close(); - } else if (state.get.current().dropdown) { - dropdown.close(); - } else if (state.get.current().autoSuggest) { - autoSuggest.close(); - } else if (state.get.current().link.edit) { - link.edit.item.close(); - modal.close(); - shade.close(); - data.save(); - } else if (state.get.current().link.add) { - link.add.item.close(); - modal.close(); - shade.close(); - data.save(); - } else if (state.get.current().group.edit) { - link.edit.group.close(); - modal.close(); - shade.close(); - data.save(); - } else if (state.get.current().group.add) { - link.add.group.close(); - modal.close(); - shade.close(); - data.save(); - } else if (state.get.current().modal) { - modal.close(); - shade.close(); - } else if (state.get.current().edit) { - link.edit.mode.close(); - data.save(); - }; - if (state.get.current().pagelock) { - pagelock.unlock(); - }; - data.save(); - }; - }, false); - }; - - bind.ctrAltA = function() { - window.addEventListener("keydown", function(event) { - // ctrl+alt+a - if (event.ctrlKey && event.altKey && event.keyCode == 65) { - if (state.get.current().menu) { - menu.close(); - }; - if (state.get.current().link.edit) { - link.edit.item.close(); - shade.close(); - data.save(); - }; - if (state.get.current().group.edit) { - link.edit.group.close(); - shade.close(); - data.save(); - }; - if (state.get.current().group.add) { - link.add.group.close(); - shade.close(); - data.save(); - }; - if (!state.get.current().link.add) { - link.add.item.open(); - }; - }; - }, false); - }; - - bind.ctrAltG = function() { - window.addEventListener("keydown", function(event) { - // ctrl+alt+g - if (event.ctrlKey && event.altKey && event.keyCode == 71) { - if (state.get.current().menu) { - menu.close(); - }; - if (state.get.current().link.edit) { - link.edit.item.close(); - shade.close(); - data.save(); - }; - if (state.get.current().link.add) { - link.add.item.close(); - shade.close(); - data.save(); - }; - if (state.get.current().group.edit) { - link.edit.group.close(); - shade.close(); - data.save(); - }; - if (!state.get.current().group.add) { - link.add.group.open(); - }; - }; - }, false); - }; - - bind.ctrAltD = function() { - window.addEventListener("keydown", function(event) { - // ctrl+alt+d - if (event.ctrlKey && event.altKey && event.keyCode == 68) { - theme.style.toggle(); - control.render.update.control.menu(); - data.save(); - }; - }, false); - }; - - bind.ctrAltM = function() { - window.addEventListener("keydown", function(event) { - // ctrl+alt+m - if (event.ctrlKey && event.altKey && event.keyCode == 77) { - if (state.get.current().link.edit) { - link.edit.item.close(); - modal.close(); - shade.close(); - data.save(); - }; - if (state.get.current().link.add) { - link.add.item.close(); - modal.close(); - shade.close(); - data.save(); - }; - if (state.get.current().group.edit) { - link.edit.group.close(); - modal.close(); - shade.close(); - data.save(); - }; - if (state.get.current().group.add) { - link.add.group.close(); - modal.close(); - shade.close(); - data.save(); - }; - if (state.get.current().modal) { - modal.close(); - shade.close(); - }; - menu.toggle(); - }; - }, false); - }; - - bind.ctrAltE = function() { - window.addEventListener("keydown", function(event) { - // ctrl+alt+e - if (event.ctrlKey && event.altKey && event.keyCode == 69) { - if (bookmarks.get().length > 0) { - link.edit.mode.toggle(); - } else { - link.edit.mode.close(); - }; - data.save(); - }; - }, false); - }; - - bind.ctrAltR = function() { - window.addEventListener("keydown", function(event) { - // ctrl+alt+r - if (state.get.current().theme.accent.random.active && event.ctrlKey && event.altKey && event.keyCode == 82) { - theme.accent.random(); - control.render.update.control.header(); - control.render.update.control.menu(); - data.save(); - }; - }, false); - }; - - var init = function() { - bind.esc(); - bind.ctrAltA(); - bind.ctrAltG(); - bind.ctrAltD(); - bind.ctrAltM(); - bind.ctrAltE(); - bind.ctrAltR(); - }; - - return { - init: init, - bind: bind - }; - -})(); diff --git a/src/js/layout.js b/src/js/layout.js deleted file mode 100644 index 94beb35d..00000000 --- a/src/js/layout.js +++ /dev/null @@ -1,48 +0,0 @@ -var layout = (function() { - - var render = {}; - - render.width = function() { - var html = helper.e("html"); - html.style.setProperty("--layout-width", state.get.current().layout.width + "%"); - }; - - render.padding = function() { - var html = helper.e("html"); - html.style.setProperty("--layout-padding", state.get.current().layout.padding); - }; - - render.gutter = function() { - var html = helper.e("html"); - html.style.setProperty("--layout-gutter", state.get.current().layout.gutter); - }; - - render.size = function() { - var html = helper.e("html"); - html.style.setProperty("--layout-size", state.get.current().layout.size); - }; - - render.title = function() { - var title = helper.e("title"); - if (helper.checkIfValidString(state.get.current().layout.title)) { - title.textContent = helper.trimString(state.get.current().layout.title); - } else { - title.textContent = "New Tab"; - }; - }; - - var init = function() { - render.width(); - render.padding(); - render.gutter(); - render.size(); - render.title(); - }; - - // exposed methods - return { - render: render, - init: init - }; - -})(); diff --git a/src/js/link.js b/src/js/link.js deleted file mode 100644 index 8ee56054..00000000 --- a/src/js/link.js +++ /dev/null @@ -1,5170 +0,0 @@ -var link = (function() { - - var _timerLinkItemPreview = null; - - var stagedGroup = { - position: { - origin: null, - destination: null - }, - group: { - name: { - text: null, - show: null - }, - openAll: { - show: null - }, - items: null - } - }; - - stagedGroup.init = function() { - stagedGroup.position.origin = 0; - stagedGroup.position.destination = 0; - stagedGroup.group.name.text = ""; - stagedGroup.group.name.show = true; - stagedGroup.group.openAll.show = true; - stagedGroup.group.items = []; - }; - - stagedGroup.reset = function() { - stagedGroup.position.origin = null; - stagedGroup.position.destination = null; - stagedGroup.group.name.text = null; - stagedGroup.group.name.show = null; - stagedGroup.group.openAll.show = null; - stagedGroup.group.items = null; - }; - - var stagedLink = { - position: { - origin: { - group: null, - item: null - }, - destination: { - group: null, - item: null - }, - group: { - new: null, - name: { - text: null, - show: null - }, - openAll: { - show: null - } - } - }, - link: { - display: { - direction: null, - order: null, - alignment: null, - gutter: null, - rotate: null, - translate: { - x: null, - y: null - }, - visual: { - show: null, - type: null, - letter: { - size: null, - text: null - }, - image: { - size: null, - url: null - }, - icon: { - size: null, - name: null, - prefix: null, - label: null - }, - shadow: { - size: null - } - }, - name: { - show: null, - text: null, - size: null - } - }, - url: null, - accent: { - by: null, - hsl: { - h: null, - s: null, - l: null - }, - rgb: { - r: null, - g: null, - b: null - } - }, - color: { - by: null, - hsl: { - h: null, - s: null, - l: null - }, - rgb: { - r: null, - g: null, - b: null - }, - opacity: null - }, - background: { - show: null, - type: null, - opacity: null, - image: { - url: null - }, - video: { - url: null - } - }, - wide: null, - tall: null, - searchMatch: null, - timeStamp: null - } - }; - - stagedLink.init = function() { - stagedLink.position.origin.group = 0; - stagedLink.position.origin.item = 0; - stagedLink.position.destination.group = 0; - stagedLink.position.destination.item = 0; - stagedLink.position.group.new = false; - stagedLink.position.group.name.show = true; - stagedLink.position.group.name.text = ""; - stagedLink.position.group.openAll.show = true; - stagedLink.link.display.direction = state.get.current().link.item.display.direction; - stagedLink.link.display.order = state.get.current().link.item.display.order; - stagedLink.link.display.alignment = state.get.current().link.item.display.alignment; - stagedLink.link.display.gutter = state.get.current().link.item.display.gutter; - stagedLink.link.display.rotate = state.get.current().link.item.display.rotate; - stagedLink.link.display.translate.x = state.get.current().link.item.display.translate.x; - stagedLink.link.display.translate.y = state.get.current().link.item.display.translate.y; - stagedLink.link.display.visual.show = true; - stagedLink.link.display.visual.type = "letter"; - stagedLink.link.display.visual.letter.size = state.get.current().link.item.display.visual.letter.size; - stagedLink.link.display.visual.letter.text = ""; - stagedLink.link.display.visual.image.size = state.get.current().link.item.display.visual.image.size; - stagedLink.link.display.visual.image.url = ""; - stagedLink.link.display.visual.icon.size = state.get.current().link.item.display.visual.icon.size; - stagedLink.link.display.visual.icon.name = ""; - stagedLink.link.display.visual.icon.prefix = ""; - stagedLink.link.display.visual.icon.label = ""; - stagedLink.link.display.visual.shadow.size = state.get.current().link.item.display.visual.shadow.size; - stagedLink.link.display.name.show = true; - stagedLink.link.display.name.text = ""; - stagedLink.link.display.name.size = state.get.current().link.item.display.name.size; - stagedLink.link.url = ""; - stagedLink.link.accent.by = "theme"; - stagedLink.link.accent.hsl.h = 0; - stagedLink.link.accent.hsl.s = 0; - stagedLink.link.accent.hsl.l = 0; - stagedLink.link.accent.rgb.r = 0; - stagedLink.link.accent.rgb.g = 0; - stagedLink.link.accent.rgb.b = 0; - stagedLink.link.color.by = "theme"; - stagedLink.link.color.hsl.h = 0; - stagedLink.link.color.hsl.s = 0; - stagedLink.link.color.hsl.l = 0; - stagedLink.link.color.rgb.r = 0; - stagedLink.link.color.rgb.g = 0; - stagedLink.link.color.rgb.b = 0; - stagedLink.link.color.opacity = state.get.current().link.item.color.opacity; - stagedLink.link.background.show = false; - stagedLink.link.background.type = "video"; - stagedLink.link.background.opacity = state.get.current().link.item.background.opacity; - stagedLink.link.background.image.url = ""; - stagedLink.link.background.video.url = ""; - stagedLink.link.wide = false; - stagedLink.link.tall = false; - stagedLink.link.searchMatch = false; - }; - - stagedLink.reset = function() { - stagedLink.position.origin.group = null; - stagedLink.position.origin.item = null; - stagedLink.position.destination.group = null; - stagedLink.position.destination.item = null; - stagedLink.position.group.new = null; - stagedLink.position.group.name.show = null; - stagedLink.position.group.name.text = null; - stagedLink.position.group.openAll.show = null; - stagedLink.link.display.direction = null; - stagedLink.link.display.order = null; - stagedLink.link.display.alignment = null; - stagedLink.link.display.gutter = null; - stagedLink.link.display.rotate = null; - stagedLink.link.display.translate.x = null; - stagedLink.link.display.translate.y = null; - stagedLink.link.display.visual.show = null; - stagedLink.link.display.visual.type = null; - stagedLink.link.display.visual.letter.size = null; - stagedLink.link.display.visual.letter.text = null; - stagedLink.link.display.visual.image.size = null; - stagedLink.link.display.visual.image.url = null; - stagedLink.link.display.visual.icon.size = null; - stagedLink.link.display.visual.icon.name = null; - stagedLink.link.display.visual.icon.prefix = null; - stagedLink.link.display.visual.icon.label = null; - stagedLink.link.display.visual.shadow.size = null; - stagedLink.link.display.name.show = null; - stagedLink.link.display.name.text = null; - stagedLink.link.display.name.size = null; - stagedLink.link.url = null; - stagedLink.link.accent.by = null; - stagedLink.link.accent.hsl.h = null; - stagedLink.link.accent.hsl.s = null; - stagedLink.link.accent.hsl.l = null; - stagedLink.link.accent.rgb.r = null; - stagedLink.link.accent.rgb.g = null; - stagedLink.link.accent.rgb.b = null; - stagedLink.link.color.by = null; - stagedLink.link.color.hsl.h = null; - stagedLink.link.color.hsl.s = null; - stagedLink.link.color.hsl.l = null; - stagedLink.link.color.rgb.r = null; - stagedLink.link.color.rgb.g = null; - stagedLink.link.color.rgb.b = null; - stagedLink.link.color.opacity = null; - stagedLink.link.background.show = null; - stagedLink.link.background.type = null; - stagedLink.link.background.opacity = null; - stagedLink.link.background.image.url = null; - stagedLink.link.background.video.url = null; - stagedLink.link.wide = null; - stagedLink.link.tall = null; - stagedLink.link.searchMatch = null; - stagedLink.link.timeStamp = null; - }; - - var mod = {}; - - mod.item = { - display: { - alignment: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.alignment = state.get.current().link.item.display.alignment; - }); - }); - }, - rotate: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.rotate = state.get.current().link.item.display.rotate; - }); - }); - }, - translate: { - x: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.translate.x = state.get.current().link.item.display.translate.x; - }); - }); - }, - y: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.translate.y = state.get.current().link.item.display.translate.y; - }); - }); - } - }, - gutter: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.gutter = state.get.current().link.item.display.gutter; - }); - }); - }, - direction: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.direction = state.get.current().link.item.display.direction; - }); - }); - }, - order: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.order = state.get.current().link.item.display.order; - }); - }); - }, - visual: { - show: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.visual.show = true; - }); - }); - }, - hide: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.visual.show = false; - }); - }); - }, - letter: { - size: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.visual.letter.size = state.get.current().link.item.display.visual.letter.size; - }); - }); - } - }, - icon: { - size: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.visual.icon.size = state.get.current().link.item.display.visual.icon.size; - }); - }); - } - }, - image: { - size: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.visual.image.size = state.get.current().link.item.display.visual.image.size; - }); - }); - } - }, - shadow: { - size: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.visual.shadow.size = state.get.current().link.item.display.visual.shadow.size; - }); - }); - } - } - }, - name: { - show: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.name.show = true; - }); - }); - }, - hide: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.name.show = false; - }); - }); - }, - size: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.display.name.size = state.get.current().link.item.display.name.size; - }); - }); - } - } - }, - background: { - show: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.background.show = true; - }); - }); - }, - hide: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.background.show = false; - }); - }); - }, - opacity: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.background.opacity = state.get.current().link.item.background.opacity; - }); - }); - } - }, - accent: { - hsl: function() { - var hsl = helper.convertColor.rgb.hsl(state.get.current().link.item.accent.rgb); - helper.setObject({ - object: state.get.current(), - path: "link.item.accent.hsl", - newValue: { - h: Math.round(hsl.h), - s: Math.round(hsl.s), - l: Math.round(hsl.l) - } - }); - }, - rgb: function() { - var rgb = helper.convertColor.hsl.rgb(state.get.current().link.item.accent.hsl); - helper.setObject({ - object: state.get.current(), - path: "link.item.accent.rgb", - newValue: { - r: Math.round(rgb.r), - g: Math.round(rgb.g), - b: Math.round(rgb.b) - } - }); - }, - clear: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.accent.by = "theme"; - arrayItem.accent.hsl.h = 0; - arrayItem.accent.hsl.s = 0; - arrayItem.accent.hsl.l = 0; - arrayItem.accent.rgb.r = 0; - arrayItem.accent.rgb.g = 0; - arrayItem.accent.rgb.b = 0; - }); - }); - }, - set: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.accent.by = state.get.current().link.item.accent.by; - arrayItem.accent.hsl = state.get.current().link.item.accent.hsl; - arrayItem.accent.rgb = state.get.current().link.item.accent.rgb; - }); - }); - }, - rainbow: function() { - var units = 360 / bookmarks.count(); - var degree = 0; - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.accent.by = "custom"; - var rgb = helper.convertColor.hsl.rgb({ - h: degree, - s: 100, - l: 50 - }); - arrayItem.accent.hsl = { - h: Math.round(degree), - s: 100, - l: 50 - }; - arrayItem.accent.rgb = { - r: Math.round(rgb.r), - g: Math.round(rgb.g), - b: Math.round(rgb.b) - }; - degree = degree + units; - }); - }); - } - }, - color: { - hsl: function() { - var hsl = helper.convertColor.rgb.hsl(state.get.current().link.item.color.rgb); - helper.setObject({ - object: state.get.current(), - path: "link.item.color.hsl", - newValue: { - h: Math.round(hsl.h), - s: Math.round(hsl.s), - l: Math.round(hsl.l) - } - }); - }, - rgb: function() { - var rgb = helper.convertColor.hsl.rgb(state.get.current().link.item.color.hsl); - helper.setObject({ - object: state.get.current(), - path: "link.item.color.rgb", - newValue: { - r: Math.round(rgb.r), - g: Math.round(rgb.g), - b: Math.round(rgb.b) - } - }); - }, - clear: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.color.by = "theme"; - arrayItem.color.hsl.h = 0; - arrayItem.color.hsl.s = 0; - arrayItem.color.hsl.l = 0; - arrayItem.color.rgb.r = 0; - arrayItem.color.rgb.g = 0; - arrayItem.color.rgb.b = 0; - }); - }); - }, - set: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.color.by = state.get.current().link.item.color.by; - arrayItem.color.hsl = state.get.current().link.item.color.hsl; - arrayItem.color.rgb = state.get.current().link.item.color.rgb; - }); - }); - }, - rainbow: function() { - var units = 360 / bookmarks.count(); - var degree = 0; - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.color.by = "custom"; - var rgb = helper.convertColor.hsl.rgb({ - h: degree, - s: 100, - l: 50 - }); - arrayItem.color.hsl = { - h: Math.round(degree), - s: 100, - l: 50 - }; - arrayItem.color.rgb = { - r: Math.round(rgb.r), - g: Math.round(rgb.g), - b: Math.round(rgb.b) - }; - degree = degree + units; - }); - }); - }, - opacity: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.color.opacity = state.get.current().link.item.color.opacity; - }); - }); - } - } - }; - - mod.collapse = { - form: { - item: { - advanced: false - } - }, - reset: function() { - mod.collapse.form.item.advanced = false; - } - }; - - mod.group = { - name: { - show: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.name.show = true; - }); - }, - hide: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.name.show = false; - }); - } - }, - openall: { - show: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.openAll.show = true; - }); - }, - hide: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.openAll.show = false; - }); - } - } - }; - - mod.edit = { - mode: { - open: function() { - helper.setObject({ - object: state.get.current(), - path: "edit", - newValue: true - }); - }, - close: function() { - helper.setObject({ - object: state.get.current(), - path: "edit", - newValue: false - }); - } - }, - item: { - open: function() { - helper.setObject({ - object: state.get.current(), - path: "link.edit", - newValue: true - }); - }, - close: function() { - helper.setObject({ - object: state.get.current(), - path: "link.edit", - newValue: false - }); - } - }, - group: { - open: function() { - helper.setObject({ - object: state.get.current(), - path: "group.edit", - newValue: true - }); - }, - close: function() { - helper.setObject({ - object: state.get.current(), - path: "group.edit", - newValue: false - }); - } - } - }; - - mod.add = { - item: { - open: function() { - helper.setObject({ - object: state.get.current(), - path: "link.add", - newValue: true - }); - }, - close: function() { - helper.setObject({ - object: state.get.current(), - path: "link.add", - newValue: false - }); - } - }, - group: { - open: function() { - helper.setObject({ - object: state.get.current(), - path: "group.add", - newValue: true - }); - }, - close: function() { - helper.setObject({ - object: state.get.current(), - path: "group.add", - newValue: false - }); - } - } - }; - - mod.value = { - convert: { - to: { - float: function(value, input) { - return value / 100; - } - }, - from: { - float: function(value, input) { - return Math.round(value * 100); - } - } - }, - modify: { - min: function(value, input) { - if (isNaN(value) || value < parseInt(input.min, 10)) { - value = parseInt(input.min, 10); - }; - return value; - }, - max: function(value, input) { - if (value > parseInt(input.max, 10)) { - value = parseInt(input.max, 10); - }; - return value; - }, - step: function(value, input) { - value = Math.round(value / parseInt(input.step, 10)) * parseInt(input.step, 10); - return value; - } - } - }; - - var bind = {}; - - bind.sort = { - update: { - func: { - group: function(event) { - stagedGroup.position.origin = event.detail.origin.index; - stagedGroup.position.destination = event.detail.destination.index; - bookmarks.mod.move.group(stagedGroup); - data.save(); - groupAndItems(); - }, - item: function(event) { - stagedLink.position.origin.group = Array.from(helper.getClosest(event.detail.origin.container, ".group").parentNode.children).indexOf(helper.getClosest(event.detail.origin.container, ".group")); - stagedLink.position.origin.item = event.detail.origin.index; - stagedLink.position.destination.group = Array.from(helper.getClosest(event.detail.destination.container, ".group").parentNode.children).indexOf(helper.getClosest(event.detail.destination.container, ".group")); - stagedLink.position.destination.item = event.detail.destination.index; - bookmarks.mod.move.link(stagedLink); - data.save(); - groupAndItems(); - } - }, - remove: { - group: function() { - helper.eA(".link-area").forEach(function(arrayItem, index) { - sortable(arrayItem)[0].removeEventListener("sortupdate", bind.sort.update.func.group, false); - }); - }, - item: function() { - helper.eA(".group-body").forEach(function(arrayItem, index) { - sortable(arrayItem)[0].removeEventListener("sortupdate", bind.sort.update.func.item, false); - }); - } - } - }, - group: function() { - sortable(".link-area", { - items: ".group", - handle: ".group-control-item-handle", - orientation: "vertical", - placeholder: helper.node("div|class:link-sort-placeholder"), - forcePlaceholderSize: true - }); - bind.sort.update.remove.group(); - helper.eA(".link-area").forEach(function(arrayItem, index) { - sortable(arrayItem)[0].addEventListener("sortupdate", bind.sort.update.func.group, false, event); - }); - }, - item: function() { - var placeholder = helper.node("div|class:link-sort-placeholder"); - sortable(".group-body", { - items: ".link-item", - handle: ".link-control-item-handle", - acceptFrom: ".group-body", - placeholder: placeholder - }); - bind.sort.update.remove.item(); - - helper.eA(".group-body").forEach(function(arrayItem, index) { - sortable(arrayItem)[0].addEventListener("sortupdate", bind.sort.update.func.item, false, event); - }); - - helper.eA(".group-body").forEach(function(arrayItem, index) { - sortable(arrayItem)[0].addEventListener("sortstart", function() { - var groupIndex = Array.from(helper.getClosest(event.detail.origin.container, ".group").parentNode.children).indexOf(helper.getClosest(event.detail.origin.container, ".group")); - var itemIndex = event.detail.origin.index; - var link = bookmarks.get()[groupIndex].items[itemIndex]; - if (link.wide) { - helper.addClass(placeholder, "link-sort-placeholder-wide"); - } else { - helper.removeClass(placeholder, "link-sort-placeholder-wide"); - }; - if (link.tall) { - helper.addClass(placeholder, "link-sort-placeholder-tall"); - } else { - helper.removeClass(placeholder, "link-sort-placeholder-tall"); - }; - }, false, event); - }); - - } - }; - - bind.resize = new ResizeObserver(function(elements) { - var linkArea = helper.e(".link-area"); - var groupBody = helper.e(".group-body"); - var linkItem = helper.e(".link-item"); - var size = { - sm: 550, - md: 700, - lg: 900, - xl: 1100, - xxl: 1600 - }; - if (linkArea) { - if (groupBody && linkItem) { - elements.forEach(function(entry) { - var breakpoint; - 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"; - }; - helper.setObject({ - object: state.get.current(), - path: "link.breakpoint", - newValue: breakpoint - }); - render.breakpoint.update(); - }); - }; - }; - }); - - var render = {}; - - render.move = { - group: { - up: function(copyStagedGroup) { - stagedGroup.group = JSON.parse(JSON.stringify(copyStagedGroup.group)); - stagedGroup.position = JSON.parse(JSON.stringify(copyStagedGroup.position)); - stagedGroup.position.destination = stagedGroup.position.destination - 1; - if (stagedGroup.position.destination < 0) { - stagedGroup.position.destination = 0; - }; - bookmarks.mod.move.group(stagedGroup); - data.save(); - groupAndItems(); - if (!state.get.current().search) { - render.focus.group.previous.up(copyStagedGroup); - }; - }, - down: function(copyStagedGroup) { - stagedGroup.group = JSON.parse(JSON.stringify(copyStagedGroup.group)); - stagedGroup.position = JSON.parse(JSON.stringify(copyStagedGroup.position)); - stagedGroup.position.destination = stagedGroup.position.destination + 1; - bookmarks.mod.move.group(stagedGroup); - data.save(); - groupAndItems(); - if (!state.get.current().search) { - render.focus.group.next.down(copyStagedGroup); - }; - } - }, - item: { - left: function(copyStagedLink) { - stagedLink.link = JSON.parse(JSON.stringify(copyStagedLink.link)); - stagedLink.position = JSON.parse(JSON.stringify(copyStagedLink.position)); - stagedLink.position.destination.item = stagedLink.position.destination.item - 1; - if (stagedLink.position.destination.item < 0) { - stagedLink.position.destination.item = 0; - }; - bookmarks.mod.move.link(JSON.parse(JSON.stringify(stagedLink))); - data.save(); - groupAndItems(); - if (!state.get.current().search) { - render.focus.item.previous.left(copyStagedLink); - }; - }, - right: function(copyStagedLink) { - stagedLink.link = JSON.parse(JSON.stringify(copyStagedLink.link)); - stagedLink.position = JSON.parse(JSON.stringify(copyStagedLink.position)); - stagedLink.position.destination.item = stagedLink.position.destination.item + 1; - bookmarks.mod.move.link(JSON.parse(JSON.stringify(stagedLink))); - data.save(); - groupAndItems(); - if (!state.get.current().search) { - render.focus.item.next.right(copyStagedLink); - }; - } - } - }; - - render.clear = { - group: function() { - var link = helper.e(".link"); - while (link.lastChild) { - link.removeChild(link.lastChild); - }; - }, - item: function() { - var groupBody = helper.eA(".group-body"); - groupBody.forEach(function(arrayItem, index) { - while (arrayItem.lastChild) { - arrayItem.removeChild(arrayItem.lastChild); - }; - }); - } - }; - - render.area = { - width: function() { - var html = helper.e("html"); - html.style.setProperty("--link-area-width", state.get.current().link.area.width + "%"); - } - }; - - render.form = { - className: function(element, className) { - if (className.length > 0 && typeof className != "string") { - className.forEach(function(arrayItem, index) { - if (helper.checkIfValidString(arrayItem)) { - helper.addClass(element, arrayItem); - }; - }); - } else if (typeof className == "string") { - render.form.className(element, className.split(" ")); - }; - return element; - }, - fieldset: function(node) { - return helper.node("fieldset", node); - }, - wrap: function(node) { - return helper.node("div|class:form-wrap", node); - }, - group: function(node) { - return helper.node("div|class:form-group form-group-block", node); - }, - indent: function(node) { - return helper.node("div|class:form-indent", node); - }, - formGrid3x3: function(node) { - return helper.node("div|class:form-grid form-grid-3x3 control-layout-alignment-grid", node); - }, - collapse: function(node) { - return helper.node("div|class:link-form-collapse", node); - }, - label: function(override) { - var options = { - name: null, - labelText: null, - labelDescription: null, - icon: null, - className: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - - var label; - if (options.name) { - label = helper.node("label|for:" + options.name); - } else { - label = helper.node("label"); - }; - if (options.labelText && options.labelDescription) { - label.appendChild(helper.node("span|class:label-block", [ - helper.node("span:" + options.labelText + "|class:label-block-item"), - helper.node("span:" + options.labelDescription + "|class:label-block-item small muted") - ])); - } else if (options.labelText) { - label.appendChild(helper.node("span:" + options.labelText)); - }; - if (options.icon) { - label.prepend(helper.node("span|class:label-icon")); - }; - if (options.className) { - label = render.form.className(label, options.className); - }; - return label; - }, - select: function(name) { - return helper.node("select|id:" + name + ",class:" + name + ",tabindex:1"); - }, - button: function(buttonText, className, iconClass, block) { - var button = helper.node("button|class:button button-line,type:button,tabindex:1"); - if (buttonText) { - button.appendChild(helper.node("span:" + buttonText + "|class:button-text")); - }; - if (className) { - button = render.form.className(button, className); - }; - if (iconClass) { - button.appendChild(helper.node("span|class:button-icon " + iconClass)); - }; - if (block) { - helper.addClass(button, "button-block"); - }; - return button; - }, - helper: function(name, text) { - return helper.makeNode({ - tag: "p", - text: text, - attr: [{ - key: "class", - value: name + " form-helper-item" - }] - }); - } - }; - - render.group = { - area: function() { - var copyStagedGroup = JSON.parse(JSON.stringify(stagedGroup)); - - var group = helper.node("div|class:group"); - - var groupHeader = helper.node("div|class:group-header"); - var groupHeaderItemControl = helper.node("div|class:group-header-item group-header-item-control"); - var groupHeaderItemName = helper.node("div|class:group-header-item group-header-item-name"); - var groupHeaderItemOpenall = helper.node("div|class:group-header-item group-header-item-openall"); - - var groupBody = helper.node("div|class:group-body"); - - var groupName = helper.node("div|class:group-name"); - var groupNameText = helper.makeNode({ - tag: "h1", - text: stagedGroup.group.name.text, - attr: [{ - key: "class", - value: "group-name-text" - }] - }); - groupName.appendChild(groupNameText); - groupHeaderItemName.appendChild(groupName); - - var groupOpenall = helper.node("div|class:group-openall form-group"); - var groupOpenallItem = helper.node("button|class:button button-line group-openall-item,tabindex:1,title:Open all Bookmarks in this Group"); - var groupOpenallItemText = helper.node("span:Open all|class:button-text"); - groupOpenallItem.appendChild(groupOpenallItemText); - groupOpenall.appendChild(groupOpenallItem); - - if (state.get.current().group.openAll.style == "clear") { - helper.removeClass(groupOpenallItem, "button-line"); - helper.addClass(groupOpenallItem, "button-link"); - }; - - groupHeaderItemOpenall.appendChild(groupOpenall); - - var groupControl = helper.node("div|class:group-control form-group"); - - var groupControlItemUp = helper.node("button|class:button button-line group-control-item group-control-item-up,tabindex:-1,title:Move this group up"); - var groupControlItemUpIcon = helper.node("span|class:icon-arrow-up"); - var groupControlItemUpBaselineAlignmentCharacter = helper.node("span:-|class:baseline-alignment-icon-character,aria-hidden:true"); - groupControlItemUp.appendChild(groupControlItemUpBaselineAlignmentCharacter); - groupControlItemUp.appendChild(groupControlItemUpIcon); - groupControl.appendChild(groupControlItemUp); - - var groupControlItemHandle = helper.node("div|class:button button-line group-control-item group-control-item-handle,tabindex:-1,title:Drag group to reorder"); - var groupControlItemHandleIcon = helper.node("span|class:icon-reorder"); - var groupControlItemHandleBaselineAlignmentCharacter = helper.node("span:-|class:baseline-alignment-icon-character,aria-hidden:true"); - groupControlItemHandle.appendChild(groupControlItemHandleBaselineAlignmentCharacter); - groupControlItemHandle.appendChild(groupControlItemHandleIcon); - groupControl.appendChild(groupControlItemHandle); - - var groupControlItemDown = helper.node("button|class:button button-line group-control-item group-control-item-down,tabindex:-1,title:Move this group down"); - var groupControlItemDownIcon = helper.node("span|class:icon-arrow-down"); - var groupControlItemDownBaselineAlignmentCharacter = helper.node("span:-|class:baseline-alignment-icon-character,aria-hidden:true"); - groupControlItemDown.appendChild(groupControlItemDownBaselineAlignmentCharacter); - groupControlItemDown.appendChild(groupControlItemDownIcon); - groupControl.appendChild(groupControlItemDown); - - var groupControlItemEdit = helper.node("button|class:button button-line group-control-item group-control-item-edit,tabindex:-1,title:Edit this group"); - var groupControlItemEditIcon = helper.node("span|class:icon-edit"); - var groupControlItemEditBaselineAlignmentCharacter = helper.node("span:-|class:baseline-alignment-icon-character,aria-hidden:true"); - groupControlItemEdit.appendChild(groupControlItemEditBaselineAlignmentCharacter); - groupControlItemEdit.appendChild(groupControlItemEditIcon); - groupControl.appendChild(groupControlItemEdit); - - var groupControlItemRemove = helper.node("button|class:button button-line group-control-item group-control-item-remove,tabindex:-1,title:Remove this group"); - var groupControlItemRemoveIcon = helper.node("span|class:icon-close"); - var groupControlItemRemoveBaselineAlignmentCharacter = helper.node("span:-|class:baseline-alignment-icon-character,aria-hidden:true"); - groupControlItemRemove.appendChild(groupControlItemRemoveBaselineAlignmentCharacter); - groupControlItemRemove.appendChild(groupControlItemRemoveIcon); - groupControl.appendChild(groupControlItemRemove); - - if (state.get.current().search) { - groupControlItemUp.disabled = true; - helper.addClass(groupControlItemHandle, "disabled"); - groupControlItemDown.disabled = true; - }; - - groupHeaderItemControl.appendChild(groupControl); - - groupControlItemUp.addEventListener("click", function(event) { - render.move.group.up(copyStagedGroup); - }, false); - - groupControlItemDown.addEventListener("click", function() { - render.move.group.down(copyStagedGroup); - }, false); - - groupControlItemEdit.addEventListener("click", function() { - edit.group.open(copyStagedGroup); - }, false); - - groupControlItemRemove.addEventListener("click", function() { - render.remove.group(copyStagedGroup); - }, false); - - groupOpenallItem.addEventListener("click", function() { - render.group.openall.all(copyStagedGroup); - }); - - groupHeader.appendChild(groupHeaderItemControl); - if (stagedGroup.group.name.show && helper.checkIfValidString(stagedGroup.group.name.text)) { - helper.addClass(groupHeader, "group-header-name"); - groupHeader.appendChild(groupHeaderItemName); - }; - if (stagedGroup.group.openAll.show && stagedGroup.group.items.length > 0) { - helper.addClass(groupHeader, "group-header-openall"); - groupHeader.appendChild(groupHeaderItemOpenall); - }; - group.appendChild(groupHeader); - group.appendChild(groupBody); - - return group; - }, - form: function(override) { - var options = { - new: null, - useStagedGroup: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - - var form = helper.node("form|class:group-form"); - - // name - var groupFormInputNameShowLabel = render.form.label({ - name: "group-form-input-name-show", - labelText: "Show Group name", - icon: true - }); - var groupFormInputNameShowInput = helper.node("input|type:checkbox,class:group-form-input-name-show,id:group-form-input-name-show,tabindex:1,checked"); - var groupFormInputNameLabel = render.form.label({ - name: "group-form-input-name", - labelText: "Name", - className: "sr-only" - }); - var groupFormInputNameInput = helper.node("input|type:text,class:group-form-input-name,id:group-form-input-name,placeholder:Example group,tabindex:1,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false"); - var groupFormRandomNameButton = helper.node("button:Random Group name|class:button button-line,type:button,tabindex:1"); - - form.appendChild( - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Name|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - groupFormInputNameShowInput, - groupFormInputNameShowLabel - ]), - render.form.indent([ - render.form.wrap([ - groupFormInputNameLabel, - groupFormInputNameInput - ]), - render.form.wrap([ - groupFormRandomNameButton - ]) - ]) - ]) - ]) - ]) - ); - - // open all - var groupFormInputOpenallLabel = render.form.label({ - name: "group-form-input-openall", - labelText: "Show Open all", - icon: true - }); - var groupFormOpenAllInput = helper.node("input|type:checkbox,class:group-form-input-openall,id:group-form-input-openall,tabindex:1,checked"); - var groupFormOpenAllInputHelperItem = render.form.helper("group-form-input-openall", "Open all button will appear if there is at least one Bookmark in this Group."); - - form.appendChild( - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Open all|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - groupFormOpenAllInput, - groupFormInputOpenallLabel - ]), - render.form.wrap([ - groupFormOpenAllInputHelperItem - ]) - ]) - ]) - ]) - ); - - // position - var groupFormPositionLabel = render.form.label({ - name: "group-form-position", - labelText: "Position", - icon: true - }); - var groupFormPositionSelect = helper.node("select|id:group-form-position,class:group-form-position,tabindex:1"); - - form.appendChild( - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Ordering|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - groupFormPositionLabel, - groupFormPositionSelect - ]) - ]) - ]) - ]) - ); - - var makeGroupOptions = function() { - var optionCount = bookmarks.get().length; - if (options.new) { - optionCount = optionCount + 1; - }; - for (var i = 1; i <= optionCount; i++) { - groupFormPositionSelect.appendChild(helper.node("option:" + helper.ordinalNumber(i))); - }; - }; - - var populateForm = function() { - groupFormInputNameShowInput.checked = stagedGroup.group.name.show; - groupFormPositionSelect.selectedIndex = stagedGroup.position.origin; - groupFormInputNameInput.value = stagedGroup.group.name.text; - groupFormOpenAllInput.checked = stagedGroup.group.openAll.show; - if (!stagedGroup.group.name.show) { - groupFormInputNameInput.setAttribute("disabled", ""); - groupFormRandomNameButton.setAttribute("disabled", ""); - }; - }; - - var setLastPosition = function() { - groupFormPositionSelect.selectedIndex = stagedGroup.position.destination; - }; - - makeGroupOptions(); - - populateForm(); - - if (options.new) { - setLastPosition(); - }; - - form.addEventListener("keydown", function(event) { - if (event.keyCode == 13) { - event.preventDefault(); - return false; - }; - }, false); - groupFormInputNameShowInput.addEventListener("change", function(event) { - stagedGroup.group.name.show = this.checked; - if (stagedGroup.group.name.show) { - groupFormInputNameInput.removeAttribute("disabled"); - groupFormRandomNameButton.removeAttribute("disabled"); - } else { - groupFormInputNameInput.setAttribute("disabled", ""); - groupFormRandomNameButton.setAttribute("disabled", ""); - }; - }, false); - groupFormPositionSelect.addEventListener("change", function(event) { - stagedGroup.position.destination = this.selectedIndex; - }, false); - groupFormInputNameInput.addEventListener("input", function(event) { - stagedGroup.group.name.text = this.value; - }, false); - groupFormRandomNameButton.addEventListener("click", function(event) { - var randomName = helper.randomString({ - adjectivesCount: helper.randomNumber(1, 3) - }); - stagedGroup.group.name.text = randomName; - groupFormInputNameInput.value = randomName; - }, false); - groupFormOpenAllInput.addEventListener("change", function(event) { - stagedGroup.group.openAll.show = this.checked; - }, false); - - return form; - }, - name: { - size: function() { - var html = helper.e("html"); - html.style.setProperty("--group-name-size", state.get.current().group.name.size + "em"); - } - }, - openall: { - all: function(copyStagedGroup) { - if (state.get.current().link.item.newTab) { - copyStagedGroup.group.items.forEach(function(arrayItem, index) { - chrome.tabs.create({ - url: arrayItem.url - }); - }); - } else { - var first = copyStagedGroup.group.items.shift(); - copyStagedGroup.group.items.forEach(function(arrayItem, index) { - chrome.tabs.create({ - url: arrayItem.url - }); - }); - window.location.href = first.url; - }; - }, - size: function() { - var html = helper.e("html"); - html.style.setProperty("--group-openall-size", state.get.current().group.openAll.size + "em"); - }, - opacity: function() { - var html = helper.e("html"); - html.style.setProperty("--group-openall-opacity", state.get.current().group.openAll.opacity); - } - }, - border: function() { - var html = helper.e("html"); - html.style.setProperty("--group-border", state.get.current().group.border); - }, - tabindex: function() { - var allGroupControlItem = helper.eA(".group-control-item"); - if (state.get.current().edit) { - allGroupControlItem.forEach(function(arrayItem, index) { - arrayItem.tabIndex = 1; - }); - } else { - allGroupControlItem.forEach(function(arrayItem, index) { - arrayItem.tabIndex = -1; - }); - }; - } - }; - - render.item = { - link: function(override) { - var options = { - preview: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - - var linkItemClass = ["link-item"]; - var linkItemStyle = []; - - if (options.preview) { - linkItemClass.push("link-item-preview"); - }; - if (stagedLink.link.display.visual.show) { - linkItemClass.push("link-item-visual"); - }; - if (stagedLink.link.display.name.show) { - linkItemClass.push("link-item-name"); - }; - linkItemClass.push("link-item-alignment-" + stagedLink.link.display.alignment); - linkItemClass.push("link-item-order-" + stagedLink.link.display.order); - linkItemClass.push("link-item-direction-" + stagedLink.link.display.direction); - if (stagedLink.link.wide) { - linkItemClass.push("link-item-wide"); - }; - if (stagedLink.link.tall) { - linkItemClass.push("link-item-tall"); - }; - if (stagedLink.link.color.opacity < 1) { - linkItemStyle.push("--link-item-clip-padding: 0em;"); - }; - if (stagedLink.link.display.visual.shadow.size > 0) { - linkItemClass.push("link-item-display-visual-shadow"); - linkItemStyle.push("--link-item-display-visual-shadow-size: " + stagedLink.link.display.visual.shadow.size + ";"); - linkItemStyle.push("--link-item-display-visual-shadow-offset: 0.02em;"); - linkItemStyle.push("--link-item-display-visual-shadow-blur: 0.02em;"); - linkItemStyle.push("--link-item-display-visual-shadow-opacity: 0.01;"); - linkItemStyle.push("--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)));"); - }; - - linkItemStyle.push("--link-item-color-opacity: " + stagedLink.link.color.opacity + ";"); - linkItemStyle.push("--link-item-background-opacity: " + stagedLink.link.background.opacity + ";"); - linkItemStyle.push("--link-item-display-rotate: " + stagedLink.link.display.rotate + "deg;"); - linkItemStyle.push("--link-item-display-gutter: " + stagedLink.link.display.gutter + ";"); - linkItemStyle.push("--link-item-display-translate-x: " + stagedLink.link.display.translate.x + "em;"); - linkItemStyle.push("--link-item-display-translate-y: " + stagedLink.link.display.translate.y + "em;"); - - if (stagedLink.link.display.visual.type == "letter") { - linkItemStyle.push("--link-item-display-visual-letter-size: " + stagedLink.link.display.visual.letter.size + "em;"); - } else if (stagedLink.link.display.visual.type == "icon") { - linkItemStyle.push("--link-item-display-visual-icon-size: " + stagedLink.link.display.visual.icon.size + "em;"); - } else if (stagedLink.link.display.visual.type == "image") { - linkItemStyle.push("--link-item-display-visual-image-size: " + stagedLink.link.display.visual.image.size + "em;"); - }; - if (stagedLink.link.display.name.show) { - linkItemStyle.push("--link-item-display-name-size: " + stagedLink.link.display.name.size + "em;"); - }; - if (stagedLink.link.accent.by == "custom" || stagedLink.link.color.by == "custom" || helper.checkIfValidString(stagedLink.link.background.image.url)) { - if (stagedLink.link.accent.by == "custom") { - linkItemStyle.push("--theme-accent-r: " + stagedLink.link.accent.rgb.r + ";"); - linkItemStyle.push("--theme-accent-g: " + stagedLink.link.accent.rgb.g + ";"); - linkItemStyle.push("--theme-accent-b: " + stagedLink.link.accent.rgb.b + ";"); - linkItemStyle.push("--theme-accent: var(--theme-accent-r), var(--theme-accent-g), var(--theme-accent-b);"); - linkItemStyle.push("--theme-accent-accessible-threshold: 0.5;"); - linkItemStyle.push("--theme-accent-accessible-r: calc(var(--theme-accent-r) * 0.50);"); - linkItemStyle.push("--theme-accent-accessible-g: calc(var(--theme-accent-g) * 0.60);"); - linkItemStyle.push("--theme-accent-accessible-b: calc(var(--theme-accent-b) * 0.20);"); - linkItemStyle.push("--theme-accent-accessible-sum: calc(var(--theme-accent-accessible-r) + var(--theme-accent-accessible-g) + var(--theme-accent-accessible-b));"); - linkItemStyle.push("--theme-accent-accessible-perceived-lightness: calc(var(--theme-accent-accessible-sum) / 255);"); - linkItemStyle.push("--theme-accent-accessible-color: 0, 0%, calc((var(--theme-accent-accessible-perceived-lightness) - var(--theme-accent-accessible-threshold)) * -10000000%);"); - linkItemStyle.push("--link-item-visual-element-color: var(--theme-accent);"); - }; - if (stagedLink.link.color.by == "custom") { - var hsl = helper.convertColor.rgb.hsl(stagedLink.link.color.rgb); - - var shades = theme.mod.color.shades({ - rgb: stagedLink.link.color.rgb, - contrastNegative: 7, - contrastPositive: 7 - }); - - var rgb; - - if (hsl.l <= 50) { - if (hsl.l > 30 && hsl.l <= 50 && hsl.h > 40 && hsl.h < 200) { - rgb = shades.negative["9"]; - } else { - rgb = shades.positive["9"]; - }; - } else { - rgb = shades.negative["9"]; - }; - - if (hsl.l <= 50) { - linkItemStyle.push("--theme-style-text: var(--theme-white);"); - } else { - linkItemStyle.push("--theme-style-text: var(--theme-black);"); - }; - - linkItemStyle.push("--link-item-visual-element-color-focus-hover: var(--theme-style-text);"); - linkItemStyle.push("--link-item-color: " + stagedLink.link.color.rgb.r + ", " + stagedLink.link.color.rgb.g + ", " + stagedLink.link.color.rgb.b + ";"); - linkItemStyle.push("--link-item-color-focus-hover: " + stagedLink.link.color.rgb.r + ", " + stagedLink.link.color.rgb.g + ", " + stagedLink.link.color.rgb.b + ";"); - linkItemStyle.push("--link-item-name-color: " + rgb.r + ", " + rgb.g + ", " + rgb.b + ";"); - }; - }; - if (stagedLink.link.background.show) { - if (stagedLink.link.background.type == "image") { - if (helper.checkIfValidString(stagedLink.link.background.image.url)) { - linkItemStyle.push("--link-item-background-image-url: url(" + helper.trimString(stagedLink.link.background.image.url) + ");"); - }; - }; - }; - - var linkItemOptions = { - tag: "div", - attr: [{ - key: "class", - value: linkItemClass.join(" ") - }, { - key: "style", - value: linkItemStyle.join(" ") - }] - }; - - var linkItem = helper.makeNode(linkItemOptions); - - var linkPanelFrontOptions = { - tag: "a", - attr: [{ - key: "class", - value: "link-panel-front" - }, { - key: "tabindex", - value: 1 - }] - }; - if (helper.checkIfValidString(stagedLink.link.url) && !options.preview) { - linkPanelFrontOptions.attr.push({ - key: "href", - value: helper.removeSpaces(stagedLink.link.url) - }); - } else { - linkPanelFrontOptions.attr.push({ - key: "href", - value: "#" - }); - }; - if (state.get.current().link.item.newTab && !options.preview) { - linkPanelFrontOptions.attr.push({ - key: "target", - value: "_blank" - }); - }; - - var linkPanelFront = helper.makeNode(linkPanelFrontOptions); - - var linkPanelBack = helper.node("div|class:link-panel-back"); - - var linkDisplay = helper.node("div|class:link-display"); - - var linkBackgroundImage = helper.node("div|class:link-background-image"); - - var linkBackgroundVideo = helper.node("div|class:link-background-video"); - - if (stagedLink.link.display.visual.show) { - var linkDisplayVisual = helper.node("div|class:link-display-visual"); - - if (stagedLink.link.display.visual.type == "letter" && helper.checkIfValidString(stagedLink.link.display.visual.letter.text)) { - - linkDisplayVisual.appendChild(helper.makeNode({ - tag: "p", - text: helper.trimString(stagedLink.link.display.visual.letter.text), - attr: [{ - key: "class", - value: "link-display-letter" - }] - })); - linkDisplay.appendChild(linkDisplayVisual); - - } else if (stagedLink.link.display.visual.type == "icon" && helper.checkIfValidString(stagedLink.link.display.visual.icon.prefix) && helper.checkIfValidString(stagedLink.link.display.visual.icon.name) && helper.checkIfValidString(stagedLink.link.display.visual.icon.label)) { - - linkDisplayVisual.appendChild(helper.node("div|class:link-display-icon " + stagedLink.link.display.visual.icon.prefix + " fa-" + stagedLink.link.display.visual.icon.name)); - linkDisplay.appendChild(linkDisplayVisual); - - } else if (stagedLink.link.display.visual.type == "image" && helper.checkIfValidString(stagedLink.link.display.visual.image.url)) { - - linkDisplayVisual.appendChild(helper.makeNode({ - tag: "div", - attr: [{ - key: "class", - value: "link-display-image" - }, { - key: "style", - value: "--link-display-image-url: url(" + helper.trimString(stagedLink.link.display.visual.image.url) + ")" - }] - })); - linkDisplay.appendChild(linkDisplayVisual); - - }; - }; - - if (stagedLink.link.display.name.show && helper.checkIfValidString(stagedLink.link.display.name.text)) { - var linkDisplayName = helper.makeNode({ - tag: "p", - text: helper.trimString(stagedLink.link.display.name.text), - attr: [{ - key: "class", - value: "link-display-name" - }] - }); - linkDisplay.appendChild(linkDisplayName); - }; - - if (stagedLink.link.display.visual.show || stagedLink.link.display.name.show) { - linkPanelFront.appendChild(linkDisplay); - }; - - if (stagedLink.link.background.show) { - if (stagedLink.link.background.type == "image") { - if (helper.checkIfValidString(stagedLink.link.background.image.url)) { - linkPanelFront.appendChild(linkBackgroundImage); - }; - } else if (stagedLink.link.background.type == "video") { - if (helper.checkIfValidString(stagedLink.link.background.video.url)) { - if (stagedLink.link.background.video.url.includes("mp4") || stagedLink.link.background.video.url.endsWith("mp4")) { - var video = helper.node("video|autoplay,loop,muted,type:video/mp4") - var source = helper.node("source|src:" + stagedLink.link.background.video.url); - video.muted = true; - video.loop = true; - video.autoplay = true; - video.appendChild(source); - linkBackgroundVideo.appendChild(video); - linkPanelFront.appendChild(linkBackgroundVideo); - } else if (stagedLink.link.background.video.url.includes("webm") || stagedLink.link.background.video.url.endsWith("webm")) { - var video = helper.node("video|autoplay,loop,muted,type:video/webm") - var source = helper.node("source|src:" + stagedLink.link.background.video.url); - video.muted = true; - video.loop = true; - video.autoplay = true; - video.appendChild(source); - linkBackgroundVideo.appendChild(video); - linkPanelFront.appendChild(linkBackgroundVideo); - }; - }; - }; - }; - - var linkUrl = helper.node("div|class:link-url"); - var urlDisplayString; - if (helper.checkIfValidString(stagedLink.link.url)) { - urlDisplayString = helper.removeSpaces(stagedLink.link.url.replace(/^https?\:\/\//i, "").replace(/\/+$/, "")); - } else { - urlDisplayString = ""; - }; - var linkUrlText = helper.makeNode({ - tag: "p", - text: urlDisplayString, - attr: [{ - key: "class", - value: "link-url-text" - }, { - key: "title", - value: urlDisplayString - }] - }); - var linkControl = helper.node("div|class:link-control"); - var linkHandle = helper.node("div|class:button button-small link-control-item link-control-item-handle,tabindex:-1,title:Drag bookmark to reorder"); - var linkHandleIcon = helper.node("span|class:button-icon icon-reorder"); - var linkEdit = helper.node("button|class:button button-small link-control-item link-control-item-edit,tabindex:-1,title:Edit this bookmark"); - var linkEditIcon = helper.node("span|class:button-icon icon-edit"); - var linkLeft = helper.node("button|class:button button-small link-control-item link-control-item-left,tabindex:-1,title:Move this bookmark left"); - var linkLeftIcon = helper.node("span|class:button-icon icon-arrow-left"); - var linkRight = helper.node("button|class:button button-small link-control-item link-control-item-right,tabindex:-1,title:Move this bookmark right"); - var linkRightIcon = helper.node("span|class:button-icon icon-arrow-right"); - var linkRemove = helper.node("button|class:button button-small link-control-item link-control-item-remove,tabindex:-1,title:Remove this bookmark"); - var linkRemoveIcon = helper.node("span|class:button-icon icon-close"); - - linkLeft.appendChild(linkLeftIcon); - linkControl.appendChild(linkLeft); - linkHandle.appendChild(linkHandleIcon); - linkControl.appendChild(linkHandle); - linkRight.appendChild(linkRightIcon); - linkControl.appendChild(linkRight); - linkEdit.appendChild(linkEditIcon); - linkControl.appendChild(linkEdit); - linkRemove.appendChild(linkRemoveIcon); - linkControl.appendChild(linkRemove); - if (helper.checkIfValidString(stagedLink.link.url)) { - linkUrl.appendChild(linkUrlText); - }; - linkPanelBack.appendChild(linkUrl); - if (!options.preview) { - linkPanelBack.appendChild(linkControl); - }; - linkItem.appendChild(linkPanelFront); - linkItem.appendChild(linkPanelBack); - - if (state.get.current().search) { - linkLeft.disabled = true; - helper.addClass(linkHandle, "disabled"); - linkRight.disabled = true; - }; - - var copyStagedLink = JSON.parse(JSON.stringify(stagedLink)); - - linkLeft.addEventListener("click", function() { - render.move.item.left(copyStagedLink); - }, false); - - linkRight.addEventListener("click", function() { - render.move.item.right(copyStagedLink); - }, false); - - linkEdit.addEventListener("click", function() { - edit.item.open(copyStagedLink); - }, false); - - linkRemove.addEventListener("click", function() { - render.remove.item(copyStagedLink); - }, false); - - return linkItem; - }, - form: function(override) { - var options = { - useStagedLink: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - - var formArea = helper.node("form|class:link-form-area"); - var form = helper.node("form|class:link-form"); - var formAside = helper.node("div|class:link-form-aside"); - var formPreviewArea = helper.node("div|class:link-form-preview-area"); - - // group - var groupExistingRadio = helper.node("input|class:link-form-input-group-existing,id:link-form-input-group-existing,type:radio,name:link-form-input-group,tabindex:1,value:existing"); - var groupExistingLabel = render.form.label({ - name: "link-form-input-group-existing", - labelText: "Existing Group", - icon: true - }); - var groupExistingGroupLabel = render.form.label({ - name: "link-form-select-group", - labelText: "Name", - className: "sr-only" - }); - var groupExistingGroupSelect = helper.node("select|id:link-form-select-group,class:link-form-select-group,tabindex:1"); - var groupExistingPositionLabel = render.form.label({ - name: "link-form-position", - labelText: "Position" - }); - var groupExistingPosition = helper.node("select|id:link-form-position,class:link-form-position,tabindex:1"); - var groupNewRadio = helper.node("input|class:link-form-input-group-new,id:link-form-input-group-new,type:radio,name:link-form-input-group,tabindex:1,value:new"); - var groupNewLabel = render.form.label({ - name: "link-form-input-group-new", - labelText: "New Group", - icon: true - }); - var groupNewNameLabel = render.form.label({ - name: "link-form-select-group", - labelText: "Name", - className: "sr-only" - }); - var groupNewNameInput = helper.node("input|type:text,class:link-form-input-new-group,id:link-form-input-new-group,placeholder:Example group,tabindex:1,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false"); - var groupNewRandomNameButton = render.form.button("Random Group name"); - - form.appendChild( - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Group|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - groupExistingRadio, - groupExistingLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - groupExistingGroupLabel, - groupExistingGroupSelect - ]), - render.form.wrap([ - groupExistingPositionLabel, - groupExistingPosition - ]) - ]) - ]), - render.form.wrap([ - groupNewRadio, - groupNewLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - groupNewNameLabel, - groupNewNameInput - ]), - render.form.wrap([ - groupNewRandomNameButton - ]) - ]) - ]) - ]) - ]) - ]) - ); - - // display - var displayShowCheckbox = helper.node("input|class:link-form-input-display-visual-show,id:link-form-input-display-visual-show,type:checkbox,tabindex:1"); - var displayShowLabel = render.form.label({ - name: "link-form-input-display-visual-show", - labelText: "Show Visual Element", - labelDescription: "Display Letters, Icon or an Image on this Bookmark tile.", - icon: true - }); - - var displayLetterRadio = helper.node("input|class:link-form-input-display-visual-letter,id:link-form-input-display-visual-letter,type:radio,name:link-form-input-display-visual,tabindex:1,value:letter"); - var displayLetterLabel = render.form.label({ - name: "link-form-input-display-visual-letter", - labelText: "Letters", - icon: true - }); - var displayLetterInput = helper.node("input|type:text,class:link-form-input-letter,placeholder:E,tabindex:1,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false"); - - var displayIconRadio = helper.node("input|class:link-form-input-display-visual-icon,id:link-form-input-display-visual-icon,type:radio,name:link-form-input-display-visual,tabindex:1,value:icon"); - var displayIconLabel = render.form.label({ - name: "link-form-input-display-visual-icon", - labelText: "Icon", - icon: true - }); - var displayIconInput = helper.node("input|type:text,class:link-form-input-display-visual-icon form-group-item-grow link-form-input-icon auto-suggest-input,placeholder:Search for Brands or Icons,tabindex:1,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false"); - var displayIconFormGroupText = helper.node("div|class:form-group-text link-form-text-icon,tabindex:-1"); - var displayIconFormGroupClear = render.form.button(false, false, "icon-close"); - var displayIconHelper = render.form.helper("link-form-input-display-visual-icon-helper", "Refer to the \"Free\" and \"Brand\" icons from FontAwesome for full set of icons supported."); - - var displayImageLabel = render.form.label({ - name: "link-form-input-display-visual-image", - labelText: "Image", - icon: true - }); - var displayImageRadio = helper.node("input|class:link-form-input-display-visual-image,id:link-form-input-display-visual-image,type:radio,name:link-form-input-display-visual,tabindex:1,value:image"); - var displayImageInput = helper.node("input|type:text,class:link-form-input-image,placeholder:https://www.example.com/image.jpg,tabindex:1,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false"); - var displayImageHelper = render.form.helper("link-form-input-display-visual-image-helper", "Display an image in place of a letter or icon."); - - form.appendChild( - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Visual Element|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - displayShowCheckbox, - displayShowLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - displayLetterRadio, - displayLetterLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - displayLetterInput - ]) - ]) - ]), - render.form.wrap([ - displayIconRadio, - displayIconLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - render.form.group([ - displayIconInput, - displayIconFormGroupText, - displayIconFormGroupClear - ]) - ]), - render.form.wrap([ - displayIconHelper - ]) - ]) - ]), - render.form.wrap([ - displayImageRadio, - displayImageLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - displayImageInput, - ]), - render.form.wrap([ - displayImageHelper - ]) - ]) - ]) - ]) - ]) - ]) - ]) - ]) - ); - - // name - var nameShowCheckbox = helper.node("input|class:link-form-input-display-name-show,id:link-form-input-display-name-show,type:checkbox,tabindex:1"); - var nameShowLabel = render.form.label({ - name: "link-form-input-display-name-show", - labelText: "Show Name", - labelDescription: "Display a Name on this Bookmark tile.", - icon: true - }); - var nameInput = helper.node("input|type:text,class:link-form-input-display-name,id:link-form-input-display-name,placeholder:Example,tabindex:1,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false"); - - form.appendChild( - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Name|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - nameShowCheckbox, - nameShowLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - nameInput - ]) - ]) - ]) - ]) - ]) - ]) - ); - - // url - var urlLabel = render.form.label({ - name: "link-form-input-url", - labelText: "URL", - icon: true - }); - var urlInput = helper.node("input|type:text,class:link-form-input-url,id:link-form-input-url,placeholder:https://www.example.com/,tabindex:1,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false"); - var urlInputHelper = render.form.helper("link-form-input-url-helper", "Be sure to use the full URL and include \"http://\" or \"https\://\"..."); - - form.appendChild( - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Address|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - urlLabel, - urlInput - ]), - render.form.wrap([ - urlInputHelper - ]) - ]) - ]) - ]) - ); - - // advanced - var advancedCollapseButton = render.form.button("Advanced controls", "link-form-collapse-button", "icon-arrow-down", true); - var advancedCollapseButtonHelper = render.form.helper("link-form-image-helper", "Customise this Bookmarks appearance, Background, Colour and Accent."); - - // visual element - var displayLetterSizeLabel = render.form.label({ - name: "link-form-input-display-visual-letter-size-range", - labelText: "Letter size" - }); - var displayLetterSizeInputRange = helper.node("input|class:link-form-input-display-visual-letter-size-range mr-3,id:link-form-input-display-visual-letter-size-range,type:range,name:link-form-input-display-visual-letter-size-range,min:10,max:3000,step:10,tabindex:1"); - var displayLetterSizeInputNumber = helper.node("input|class:link-form-input-display-visual-letter-size-number form-group-item-medium form-group-radius-left,type:number,min:10,max:3000,step:10,tabindex:1"); - var displayLetterSizeInputDefault = render.form.button(false, "link-form-input-display-visual-letter-size-default", "icon-replay"); - - var displayIconSizeLabel = render.form.label({ - name: "link-form-input-display-visual-icon-size-range", - labelText: "Icon size" - }); - var displayIconSizeInputRange = helper.node("input|class:link-form-input-display-visual-icon-size-range mr-3,id:link-form-input-display-visual-icon-size-range,type:range,name:link-form-input-display-visual-icon-size-range,min:10,max:3000,step:10,tabindex:1"); - var displayIconSizeInputNumber = helper.node("input|class:link-form-input-display-visual-icon-size-number form-group-item-medium form-group-radius-left,type:number,min:10,max:3000,step:10,tabindex:1"); - var displayIconSizeInputDefault = render.form.button(false, "link-form-input-display-visual-icon-size-default", "icon-replay"); - - var displayImageSizeLabel = render.form.label({ - name: "link-form-input-display-visual-image-size-range", - labelText: "Image size" - }); - var displayImageSizeInputRange = helper.node("input|class:link-form-input-display-visual-image-size-range mr-3,id:link-form-input-display-visual-image-size-range,type:range,name:link-form-input-display-visual-image-size-range,min:10,max:3000,step:10,tabindex:1"); - var displayImageSizeInputNumber = helper.node("input|class:link-form-input-display-visual-image-size-number form-group-item-medium form-group-radius-left,type:number,min:10,max:3000,step:10,tabindex:1"); - var displayImageSizeInputDefault = render.form.button(false, "link-form-input-display-visual-image-size-default", "icon-replay"); - - var displayShadowSizeLabel = render.form.label({ - name: "link-form-input-display-visual-shadow-size-range", - labelText: "Shadow size" - }); - var displayShadowSizeInputRange = helper.node("input|class:link-form-input-display-visual-shadow-size-range mr-3,id:link-form-input-display-visual-shadow-size-range,type:range,name:link-form-input-display-visual-shadow-size-range,min:0,max:100,tabindex:1"); - var displayShadowSizeInputNumber = helper.node("input|class:link-form-input-display-visual-shadow-size-number form-group-item-medium form-group-radius-left,type:number,min:0,max:100,tabindex:1"); - var displayShadowSizeInputDefault = render.form.button(false, "link-form-input-display-visual-shadow-size-default", "icon-replay"); - var displayShadowSizeInputHelper = render.form.helper("link-form-input-display-visual-shadow-size-helper", "Only applies to Letters or Icons."); - - // name - var nameSizeLabel = render.form.label({ - name: "link-form-input-display-name-size-range", - labelText: "Name size" - }); - var nameSizeInputRange = helper.node("input|class:link-form-input-display-name-size-range mr-3,id:link-form-input-display-name-size-range,type:range,name:link-form-input-display-name-size-range,min:10,max:1500,step:10,tabindex:1"); - var nameSizeInputNumber = helper.node("input|class:link-form-input-display-name-size-number form-group-item-medium form-group-radius-left,type:number,min:10,max:1500,step:10,tabindex:1"); - var nameSizeInputDefault = render.form.button(false, "link-form-input-display-name-size-default", "icon-replay"); - - // content - var displayAlignmentLabel = render.form.label({ - labelText: "Visual Element and Name alignment" - }); - var displayAlignmentTopLeftRadio = helper.node("input|class:link-form-input-display-alignment-topleft,id:link-form-input-display-alignment-topleft,type:radio,name:link-form-input-display-alignment,tabindex:1,value:topleft"); - var displayAlignmentTopLeftLabel = render.form.label({ - name: "link-form-input-display-alignment-topleft", - icon: true - }); - var displayAlignmentTopCenterRadio = helper.node("input|class:link-form-input-display-alignment-topcenter,id:link-form-input-display-alignment-topcenter,type:radio,name:link-form-input-display-alignment,tabindex:1,value:topcenter"); - var displayAlignmentTopCenterLabel = render.form.label({ - name: "link-form-input-display-alignment-topcenter", - icon: true - }); - var displayAlignmentTopRightRadio = helper.node("input|class:link-form-input-display-alignment-topright,id:link-form-input-display-alignment-topright,type:radio,name:link-form-input-display-alignment,tabindex:1,value:topright"); - var displayAlignmentTopRightLabel = render.form.label({ - name: "link-form-input-display-alignment-topright", - icon: true - }); - var displayAlignmentCenterLeftRadio = helper.node("input|class:link-form-input-display-alignment-centerleft,id:link-form-input-display-alignment-centerleft,type:radio,name:link-form-input-display-alignment,tabindex:1,value:centerleft"); - var displayAlignmentCenterLeftLabel = render.form.label({ - name: "link-form-input-display-alignment-centerleft", - icon: true - }); - var displayAlignmentCenterCenterRadio = helper.node("input|class:link-form-input-display-alignment-centercenter,id:link-form-input-display-alignment-centercenter,type:radio,name:link-form-input-display-alignment,tabindex:1,value:centercenter"); - var displayAlignmentCenterCenterLabel = render.form.label({ - name: "link-form-input-display-alignment-centercenter", - icon: true - }); - var displayAlignmentCenterRightRadio = helper.node("input|class:link-form-input-display-alignment-centerright,id:link-form-input-display-alignment-centerright,type:radio,name:link-form-input-display-alignment,tabindex:1,value:centerright"); - var displayAlignmentCenterRightLabel = render.form.label({ - name: "link-form-input-display-alignment-centerright", - icon: true - }); - var displayAlignmentBottomLeftRadio = helper.node("input|class:link-form-input-display-alignment-bottomleft,id:link-form-input-display-alignment-bottomleft,type:radio,name:link-form-input-display-alignment,tabindex:1,value:bottomleft"); - var displayAlignmentBottomLeftLabel = render.form.label({ - name: "link-form-input-display-alignment-bottomleft", - icon: true - }); - var displayAlignmentBottomCenterRadio = helper.node("input|class:link-form-input-display-alignment-bottomcenter,id:link-form-input-display-alignment-bottomcenter,type:radio,name:link-form-input-display-alignment,tabindex:1,value:bottomcenter"); - var displayAlignmentBottomCenterLabel = render.form.label({ - name: "link-form-input-display-alignment-bottomcenter", - icon: true - }); - var displayAlignmentBottomRightRadio = helper.node("input|class:link-form-input-display-alignment-bottomright,id:link-form-input-display-alignment-bottomright,type:radio,name:link-form-input-display-alignment,tabindex:1,value:bottomright"); - var displayAlignmentBottomRightLabel = render.form.label({ - name: "link-form-input-display-alignment-bottomright", - icon: true - }); - var displayAlignmentHelper = render.form.helper("link-form-input-display-alignment-helper", "Position the Visual Element (letter, icon or image) and Name inside the Bookmark tile."); - - var displayRotateLabel = render.form.label({ - name: "link-form-input-display-rotate-range", - labelText: "Rotation" - }); - var displayRotateRange = helper.node("input|class:link-form-input-display-rotate-range mr-3,id:link-form-input-display-rotate-range,type:range,name:link-form-input-display-rotate-range,min:-180,max:180,tabindex:1"); - var displayRotateNumber = helper.node("input|class:link-form-input-display-rotate-number form-group-item-medium form-group-radius-left,type:number,min:-180,max:180,tabindex:1"); - var displayRotateDefault = render.form.button(false, "link-form-input-display-rotate-default", "icon-replay"); - var displayTranslateXLabel = render.form.label({ - name: "link-form-input-display-translate-x-range", - labelText: "Horizontally offset" - }); - var displayTranslateXRange = helper.node("input|class:link-form-input-display-translate-x-range mr-3,id:link-form-input-display-translate-x-range,type:range,name:link-form-input-display-translate-x-range,min:-1000,max:1000,step:10,tabindex:1"); - var displayTranslateXNumber = helper.node("input|class:link-form-input-display-translate-x-number form-group-item-medium form-group-radius-left,type:number,min:-1000,max:1000,step:10,tabindex:1"); - var displayTranslateXDefault = render.form.button(false, "link-form-input-display-translate-x-default", "icon-replay"); - var displayTranslateYLabel = render.form.label({ - name: "link-form-input-display-translate-y-range", - labelText: "Vertically offset" - }); - var displayTranslateYRange = helper.node("input|class:link-form-input-display-translate-y-range mr-3,id:link-form-input-display-translate-y-range,type:range,name:link-form-input-display-translate-y-range,min:-1000,max:1000,step:10,tabindex:1"); - var displayTranslateYNumber = helper.node("input|class:link-form-input-display-translate-y-number form-group-item-medium form-group-radius-left,type:number,min:-1000,max:1000,step:10,tabindex:1"); - var displayTranslateYDefault = render.form.button(false, "link-form-input-display-translate-y-default", "icon-replay"); - - var displayGutterLabel = render.form.label({ - name: "link-form-input-display-gutter-range", - labelText: "Gutter" - }); - var displayGutterRange = helper.node("input|class:link-form-input-display-gutter-range mr-3,id:link-form-input-display-gutter-range,type:range,name:link-form-input-display-gutter-range,min:0,max:40,tabindex:1"); - var displayGutterNumber = helper.node("input|class:link-form-input-display-gutter-number form-group-item-medium form-group-radius-left,type:number,min:0,max:40,tabindex:1"); - var displayGutterDefault = render.form.button(false, "link-form-input-display-gutter-default", "icon-replay"); - - var displayAlignmentHorizontalRadio = helper.node("input|class:link-form-input-alignment-horizontal,id:link-form-input-alignment-horizontal,type:radio,name:link-form-input-alignment,tabindex:1,value:horizontal"); - var displayAlignmentHorizontalLabel = render.form.label({ - name: "link-form-input-alignment-horizontal", - labelText: "Align horizontally", - labelDescription: "Works well with Bookmark List Style.", - icon: true - }); - var displayAlignmentVerticalRadio = helper.node("input|class:link-form-input-alignment-vertical,id:link-form-input-alignment-vertical,type:radio,name:link-form-input-alignment,tabindex:1,value:vertical"); - var displayAlignmentVerticalLabel = render.form.label({ - name: "link-form-input-alignment-vertical", - labelText: "Align vertically", - labelDescription: "Works well with Bookmark Block Style.", - icon: true - }); - var displayAlignmentHelper = render.form.helper("link-form-wide-tall-helper", "Only available when Visual Element and Name are shown."); - - var displayDirectionVisualnameRadio = helper.node("input|class:link-form-input-direction-visualname,id:link-form-input-direction-visualname,type:radio,name:link-form-input-direction,tabindex:1,value:visualname"); - var displayDirectionVisualnameLabel = render.form.label({ - name: "link-form-input-direction-visualname", - labelText: "Visual Element then Name", - labelDescription: "Stack the Visual Element (letter, icon or image) before the Name.", - icon: true - }); - var displayDirectionNamevisualRadio = helper.node("input|class:link-form-input-direction-namevisual,id:link-form-input-direction-namevisual,type:radio,name:link-form-input-direction,tabindex:1,value:namevisual"); - var displayDirectionNamevisualLabel = render.form.label({ - name: "link-form-input-direction-namevisual", - labelText: "Name then Visual Element", - labelDescription: "Stack the Name before the Visual Element (letter, icon or image).", - icon: true - }); - var displayDirectionHelper = render.form.helper("link-form-wide-tall-helper", "Only available when Visual Element and Name are shown."); - - // color - var colorThemeRadio = helper.node("input|class:link-form-input-color-theme,id:link-form-input-color-theme,type:radio,name:link-form-input-color,tabindex:1,value:theme"); - var colorThemeLabel = render.form.label({ - name: "link-form-input-color-theme", - labelText: "Theme colour", - labelDescription: "Use the Colour defined by the Theme.", - icon: true - }); - var colorCustomRadio = helper.node("input|class:link-form-input-color-custom,id:link-form-input-color-custom,type:radio,name:link-form-input-color,tabindex:1,value:custom"); - var colorCustomLabel = render.form.label({ - name: "link-form-input-color-custom", - labelText: "Custom colour", - labelDescription: "Override the Theme colour.", - icon: true - }); - var colorColorPicker = helper.node("input|id:link-form-input-color-picker,class:form-group-item-half link-form-input-color-picker,type:color,value:#000000,tabindex:1"); - var colorColorHex = helper.node("input|id:link-form-input-color-hex,class:form-group-item-half link-form-input-color-hex,type:text,placeholder:Hex code,value:#000000,tabindex:1,maxlength:7"); - - var colorHslHLabel = render.form.label({ - name: "link-form-input-color-hsl-h-range", - labelText: "Hue", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var colorHslHRange = helper.node("input|class:link-form-input-color-hsl-h-range mr-3,id:link-form-input-color-hsl-h-range,type:range,name:link-form-input-color-hsl-h-range,value:0,min:0,max:359,tabindex:1"); - var colorHslHNumber = helper.node("input|class:link-form-input-color-hsl-h-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:359,tabindex:1"); - var colorHslSLabel = render.form.label({ - name: "link-form-input-color-hsl-s-range", - labelText: "Saturation", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var colorHslSRange = helper.node("input|class:link-form-input-color-hsl-s-range mr-3,id:link-form-input-color-hsl-s-range,type:range,name:link-form-input-color-hsl-s-range,value:0,min:0,max:100,tabindex:1"); - var colorHslSNumber = helper.node("input|class:link-form-input-color-hsl-s-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:100,tabindex:1"); - var colorHslLLabel = render.form.label({ - name: "link-form-input-color-hsl-l-range", - labelText: "Lightness", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var colorHslLRange = helper.node("input|class:link-form-input-color-hsl-l-range mr-3,id:link-form-input-color-hsl-l-range,type:range,name:link-form-input-color-hsl-l-range,value:0,min:0,max:100,tabindex:1"); - var colorHslLNumber = helper.node("input|class:link-form-input-color-hsl-l-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:100,tabindex:1"); - var colorRgbRLabel = render.form.label({ - name: "link-form-input-color-rgb-r-range", - labelText: "Red", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var colorRgbRRange = helper.node("input|class:link-form-input-color-rgb-r-range mr-3,id:link-form-input-color-rgb-r-range,type:range,name:link-form-input-color-rgb-r-range,value:0,min:0,max:255,tabindex:1"); - var colorRgbRNumber = helper.node("input|class:link-form-input-color-rgb-r-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:255,tabindex:1"); - var colorRgbGLabel = render.form.label({ - name: "link-form-input-color-rgb-g-range", - labelText: "Green", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var colorRgbGRange = helper.node("input|class:link-form-input-color-rgb-g-range mr-3,id:link-form-input-color-rgb-g-range,type:range,name:link-form-input-color-rgb-g-range,value:0,min:0,max:255,tabindex:1"); - var colorRgbGNumber = helper.node("input|class:link-form-input-color-rgb-g-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:255,tabindex:1"); - var colorRgbBLabel = render.form.label({ - name: "link-form-input-color-rgb-b-range", - labelText: "Blue", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var colorRgbBRange = helper.node("input|class:link-form-input-color-rgb-b-range mr-3,id:link-form-input-color-rgb-b-range,type:range,name:link-form-input-color-rgb-b-range,value:0,min:0,max:255,tabindex:1"); - var colorRgbBNumber = helper.node("input|class:link-form-input-color-rgb-b-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:255,tabindex:1"); - - var colorOpacityLabel = render.form.label({ - name: "link-form-input-color-opacity-range", - labelText: "Opacity" - }); - var colorOpacityInputRange = helper.node("input|class:link-form-input-color-opacity-range mr-3,id:link-form-input-color-opacity-range,type:range,name:link-form-input-color-opacity-range,min:0,max:100,tabindex:1"); - var colorOpacityInputNumber = helper.node("input|class:link-form-input-color-opacity-number form-group-item-medium form-group-radius-left,type:number,min:0,max:100,tabindex:1"); - var colorOpacityInputDefault = render.form.button(false, "link-form-input-color-opacity-default", "icon-replay"); - - // accent - var accentThemeRadio = helper.node("input|class:link-form-input-accent-theme,id:link-form-input-accent-theme,type:radio,name:link-form-input-accent,tabindex:1,value:theme"); - var accentThemeLabel = render.form.label({ - name: "link-form-input-accent-theme", - labelText: "Theme accent", - labelDescription: "Use the Accent defined by the Theme.", - icon: true - }); - var accentCustomRadio = helper.node("input|class:link-form-input-accent-custom,id:link-form-input-accent-custom,type:radio,name:link-form-input-accent,tabindex:1,value:custom"); - var accentCustomLabel = render.form.label({ - name: "link-form-input-accent-custom", - labelText: "Custom accent", - labelDescription: "Override the Theme accent.", - icon: true - }); - var accentColorPicker = helper.node("input|id:link-form-input-accent-picker,class:form-group-item-half link-form-input-accent-picker,type:color,value:#000000,tabindex:1"); - var accentColorHex = helper.node("input|id:link-form-input-accent-hex,class:form-group-item-half link-form-input-accent-hex,type:text,placeholder:Hex code,value:#000000,tabindex:1,maxlength:7"); - - var accentHslHLabel = render.form.label({ - name: "link-form-input-accent-hsl-h-range", - labelText: "Hue", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var accentHslHRange = helper.node("input|class:link-form-input-accent-hsl-h-range mr-3,id:link-form-input-accent-hsl-h-range,type:range,name:link-form-input-accent-hsl-h-range,value:0,min:0,max:359,tabindex:1"); - var accentHslHNumber = helper.node("input|class:link-form-input-accent-hsl-h-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:359,tabindex:1"); - var accentHslSLabel = render.form.label({ - name: "link-form-input-accent-hsl-s-range", - labelText: "Saturation", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var accentHslSRange = helper.node("input|class:link-form-input-accent-hsl-s-range mr-3,id:link-form-input-accent-hsl-s-range,type:range,name:link-form-input-accent-hsl-s-range,value:0,min:0,max:100,tabindex:1"); - var accentHslSNumber = helper.node("input|class:link-form-input-accent-hsl-s-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:100,tabindex:1"); - var accentHslLLabel = render.form.label({ - name: "link-form-input-accent-hsl-l-range", - labelText: "Lightness", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var accentHslLRange = helper.node("input|class:link-form-input-accent-hsl-l-range mr-3,id:link-form-input-accent-hsl-l-range,type:range,name:link-form-input-accent-hsl-l-range,value:0,min:0,max:100,tabindex:1"); - var accentHslLNumber = helper.node("input|class:link-form-input-accent-hsl-l-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:100,tabindex:1"); - var accentRgbRLabel = render.form.label({ - name: "link-form-input-accent-rgb-r-range", - labelText: "Red", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var accentRgbRRange = helper.node("input|class:link-form-input-accent-rgb-r-range mr-3,id:link-form-input-accent-rgb-r-range,type:range,name:link-form-input-accent-rgb-r-range,value:0,min:0,max:255,tabindex:1"); - var accentRgbRNumber = helper.node("input|class:link-form-input-accent-rgb-r-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:255,tabindex:1"); - var accentRgbGLabel = render.form.label({ - name: "link-form-input-accent-rgb-g-range", - labelText: "Green", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var accentRgbGRange = helper.node("input|class:link-form-input-accent-rgb-g-range mr-3,id:link-form-input-accent-rgb-g-range,type:range,name:link-form-input-accent-rgb-g-range,value:0,min:0,max:255,tabindex:1"); - var accentRgbGNumber = helper.node("input|class:link-form-input-accent-rgb-g-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:255,tabindex:1"); - var accentRgbBLabel = render.form.label({ - name: "link-form-input-accent-rgb-b-range", - labelText: "Blue", - className: "form-group-text form-group-text-left form-group-text-transparent form-group-text-borderless form-group-item-medium mr-3 pb-0" - }); - var accentRgbBRange = helper.node("input|class:link-form-input-accent-rgb-b-range mr-3,id:link-form-input-accent-rgb-b-range,type:range,name:link-form-input-accent-rgb-b-range,value:0,min:0,max:255,tabindex:1"); - var accentRgbBNumber = helper.node("input|class:link-form-input-accent-rgb-b-number form-group-item-medium form-group-radius-left,type:number,value:0,min:0,max:255,tabindex:1"); - - // background - var backgroundShowInput = helper.node("input|class:link-form-input-background-show,id:link-form-input-background-show,type:checkbox,tabindex:1"); - var backgroundShowLabel = render.form.label({ - name: "link-form-input-background-show", - labelText: "Show background", - labelDescription: "Display an image or video as the background of this Bookmark tile.", - icon: true - }); - var backgroundImageRadio = helper.node("input|class:link-form-input-background-image,id:link-form-input-background-image,type:radio,name:link-form-input-background,tabindex:1,value:image"); - var backgroundImageLabel = render.form.label({ - name: "link-form-input-background-image", - labelText: "Image", - icon: true - }); - var backgroundImageUrlLabel = render.form.label({ - name: "link-form-background-image", - labelText: "Background image", - className: "sr-only" - }); - var backgroundImageUrlInput = helper.node("input|type:text,class:link-form-background-image,id:link-form-background-image,placeholder:https://www.example.com/image.jpg,tabindex:1,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false"); - var backgroundVideoRadio = helper.node("input|class:link-form-input-background-video,id:link-form-input-background-video,type:radio,name:link-form-input-background,tabindex:1,value:video"); - var backgroundVideoLabel = render.form.label({ - name: "link-form-input-background-video", - labelText: "Video", - icon: true - }); - var backgroundVideoUrlLabel = render.form.label({ - name: "link-form-background-video", - labelText: "Background video", - className: "sr-only" - }); - var backgroundVideoUrlInput = helper.node("input|type:text,class:link-form-background-video,id:link-form-background-video,placeholder:https://www.example.com/video.mp4,tabindex:1,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false"); - var backgroundVideoUrlInputHelper = render.form.helper("link-form-background-video-helper", "Supports MP4 and WebM format."); - var backgroundOpacityLabel = render.form.label({ - name: "link-form-image-opacity-range", - labelText: "Opacity" - }); - var backgroundOpacityInputRange = helper.node("input|class:link-form-image-opacity-range mr-3,id:link-form-image-opacity-range,type:range,name:link-form-image-opacity-range,min:0,max:100,tabindex:1"); - var backgroundOpacityInputNumber = helper.node("input|class:link-form-image-opacity-number form-group-item-medium form-group-radius-left,type:number,min:0,max:100,tabindex:1"); - var backgroundOpacityInputDefault = render.form.button(false, "link-form-image-opacity-default", "icon-replay"); - - // tall wide - var wideInput = helper.node("input|type:checkbox,class:link-form-wide,id:link-form-wide,tabindex:1"); - var wideLabel = render.form.label({ - name: "link-form-wide", - labelText: "Wide tile", - labelDescription: "Bookmark tile to span across two columns.", - icon: true - }); - var tallInput = helper.node("input|type:checkbox,class:link-form-tall,id:link-form-tall,tabindex:1"); - var tallLabel = render.form.label({ - name: "link-form-tall", - labelText: "Tall tile", - labelDescription: "Bookmark tile to span across two rows.", - icon: true, - }); - var wideTallLabelHelper = render.form.helper("link-form-wide-tall-helper", "Bookmark tile will span across two columns or rows if the Bookmark Area is large enough."); - - var advancedCollapse = render.form.collapse([ - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Visual Element|class:mb-0 mt-3") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - displayLetterSizeLabel, - render.form.group([ - displayLetterSizeInputRange, - displayLetterSizeInputNumber, - displayLetterSizeInputDefault - ]) - ]), - render.form.wrap([ - displayIconSizeLabel, - render.form.group([ - displayIconSizeInputRange, - displayIconSizeInputNumber, - displayIconSizeInputDefault - ]) - ]), - render.form.wrap([ - displayImageSizeLabel, - render.form.group([ - displayImageSizeInputRange, - displayImageSizeInputNumber, - displayImageSizeInputDefault - ]) - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - displayShadowSizeLabel, - render.form.group([ - displayShadowSizeInputRange, - displayShadowSizeInputNumber, - displayShadowSizeInputDefault - ]) - ]), - render.form.wrap([ - displayShadowSizeInputHelper - ]) - ]) - ]) - ]) - ]) - ]), - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Name|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - nameSizeLabel, - render.form.group([ - nameSizeInputRange, - nameSizeInputNumber, - nameSizeInputDefault - ]) - ]) - ]) - ]) - ]), - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Content|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - displayAlignmentLabel - ]), - render.form.wrap([ - render.form.formGrid3x3([ - render.form.wrap([ - displayAlignmentTopLeftRadio, - displayAlignmentTopLeftLabel - ]), - render.form.wrap([ - displayAlignmentTopCenterRadio, - displayAlignmentTopCenterLabel - ]), - render.form.wrap([ - displayAlignmentTopRightRadio, - displayAlignmentTopRightLabel - ]), - render.form.wrap([ - displayAlignmentCenterLeftRadio, - displayAlignmentCenterLeftLabel - ]), - render.form.wrap([ - displayAlignmentCenterCenterRadio, - displayAlignmentCenterCenterLabel - ]), - render.form.wrap([ - displayAlignmentCenterRightRadio, - displayAlignmentCenterRightLabel - ]), - render.form.wrap([ - displayAlignmentBottomLeftRadio, - displayAlignmentBottomLeftLabel - ]), - render.form.wrap([ - displayAlignmentBottomCenterRadio, - displayAlignmentBottomCenterLabel - ]), - render.form.wrap([ - displayAlignmentBottomRightRadio, - displayAlignmentBottomRightLabel - ]) - ]) - ]), - render.form.wrap([ - displayAlignmentHelper - ]), - helper.node("hr"), - render.form.wrap([ - displayRotateLabel, - render.form.group([ - displayRotateRange, - displayRotateNumber, - displayRotateDefault - ]) - ]), - render.form.wrap([ - displayTranslateXLabel, - render.form.group([ - displayTranslateXRange, - displayTranslateXNumber, - displayTranslateXDefault - ]) - ]), - render.form.wrap([ - displayTranslateYLabel, - render.form.group([ - displayTranslateYRange, - displayTranslateYNumber, - displayTranslateYDefault - ]) - ]), - helper.node("hr"), - render.form.wrap([ - displayGutterLabel, - render.form.group([ - displayGutterRange, - displayGutterNumber, - displayGutterDefault - ]) - ]), - helper.node("hr"), - render.form.wrap([ - displayAlignmentVerticalRadio, - displayAlignmentVerticalLabel - ]), - render.form.wrap([ - displayAlignmentHorizontalRadio, - displayAlignmentHorizontalLabel - ]), - render.form.wrap([ - displayAlignmentHelper - ]), - helper.node("hr"), - render.form.wrap([ - displayDirectionVisualnameRadio, - displayDirectionVisualnameLabel - ]), - render.form.wrap([ - displayDirectionNamevisualRadio, - displayDirectionNamevisualLabel - ]), - render.form.wrap([ - displayDirectionHelper - ]) - ]) - ]) - ]), - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Colour|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - colorThemeRadio, - colorThemeLabel - ]), - render.form.wrap([ - colorCustomRadio, - colorCustomLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - render.form.group([ - colorColorPicker, - colorColorHex - ]) - ]), - helper.node("hr"), - render.form.wrap([ - render.form.group([ - colorHslHLabel, - colorHslHRange, - colorHslHNumber - ]) - ]), - render.form.wrap([ - render.form.group([ - colorHslSLabel, - colorHslSRange, - colorHslSNumber - ]) - ]), - render.form.wrap([ - render.form.group([ - colorHslLLabel, - colorHslLRange, - colorHslLNumber - ]) - ]), - helper.node("hr"), - render.form.wrap([ - render.form.group([ - colorRgbRLabel, - colorRgbRRange, - colorRgbRNumber - ]) - ]), - render.form.wrap([ - render.form.group([ - colorRgbGLabel, - colorRgbGRange, - colorRgbGNumber - ]) - ]), - render.form.wrap([ - render.form.group([ - colorRgbBLabel, - colorRgbBRange, - colorRgbBNumber - ]) - ]) - ]) - ]), - helper.node("hr"), - render.form.wrap([ - colorOpacityLabel, - render.form.group([ - colorOpacityInputRange, - colorOpacityInputNumber, - colorOpacityInputDefault - ]) - ]) - ]) - ]) - ]), - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Accent|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - accentThemeRadio, - accentThemeLabel - ]), - render.form.wrap([ - accentCustomRadio, - accentCustomLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - render.form.group([ - accentColorPicker, - accentColorHex - ]) - ]), - helper.node("hr"), - render.form.wrap([ - render.form.group([ - accentHslHLabel, - accentHslHRange, - accentHslHNumber - ]) - ]), - render.form.wrap([ - render.form.group([ - accentHslSLabel, - accentHslSRange, - accentHslSNumber - ]) - ]), - render.form.wrap([ - render.form.group([ - accentHslLLabel, - accentHslLRange, - accentHslLNumber - ]) - ]), - helper.node("hr"), - render.form.wrap([ - render.form.group([ - accentRgbRLabel, - accentRgbRRange, - accentRgbRNumber - ]) - ]), - render.form.wrap([ - render.form.group([ - accentRgbGLabel, - accentRgbGRange, - accentRgbGNumber - ]) - ]), - render.form.wrap([ - render.form.group([ - accentRgbBLabel, - accentRgbBRange, - accentRgbBNumber - ]) - ]) - ]) - ]) - ]) - ]) - ]), - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Background|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - backgroundShowInput, - backgroundShowLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - backgroundVideoRadio, - backgroundVideoLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - backgroundVideoUrlLabel, - backgroundVideoUrlInput - ]), - render.form.wrap([ - backgroundVideoUrlInputHelper - ]) - ]) - ]), - render.form.wrap([ - backgroundImageRadio, - backgroundImageLabel - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - backgroundImageUrlLabel, - backgroundImageUrlInput - ]) - ]) - ]), - render.form.wrap([ - render.form.indent([ - helper.node("hr"), - render.form.wrap([ - backgroundOpacityLabel, - render.form.group([ - backgroundOpacityInputRange, - backgroundOpacityInputNumber, - backgroundOpacityInputDefault - ]) - ]) - ]) - ]) - ]) - ]) - ]) - ]) - ]), - render.form.fieldset([ - render.form.wrap([ - helper.node("h2:Tile|class:mb-0") - ]), - render.form.wrap([ - render.form.indent([ - render.form.wrap([ - wideInput, - wideLabel - ]), - render.form.wrap([ - tallInput, - tallLabel - ]), - render.form.wrap([ - wideTallLabelHelper - ]) - ]) - ]) - ]) - ]); - - form.appendChild( - render.form.fieldset([ - render.form.wrap([ - advancedCollapseButton - ]), - render.form.wrap([ - advancedCollapseButtonHelper - ]), - advancedCollapse - ]) - ); - - // form - formAside.appendChild(formPreviewArea); - formArea.appendChild(form); - formArea.appendChild(formAside); - - var makeGroupOptions = function() { - if (bookmarks.get().length > 0) { - bookmarks.get().forEach(function(arrayItem, index) { - var name; - if (helper.checkIfValidString(arrayItem.name.text)) { - name = arrayItem.name.text; - } else { - name = "Unnamed group " + (index + 1); - }; - var option = helper.makeNode({ - tag: "option", - text: name, - attr: [{ - key: "value", - value: name - }] - }); - groupExistingGroupSelect.appendChild(option); - }); - } else { - groupNewRadio.checked = true; - groupExistingRadio.setAttribute("disabled", ""); - groupExistingGroupSelect.setAttribute("disabled", ""); - helper.addClass(groupExistingPositionLabel, "disabled"); - groupExistingPosition.setAttribute("disabled", ""); - groupNewNameInput.removeAttribute("disabled"); - groupNewRandomNameButton.removeAttribute("disabled"); - stagedLink.position.group.new = true; - }; - }; - - var makePostionOptions = function() { - if (bookmarks.get().length > 0) { - - while (groupExistingPosition.lastChild) { - groupExistingPosition.removeChild(groupExistingPosition.lastChild); - }; - - var optionCount = 0; - - if (stagedLink.position.destination.item >= 0) { - if (options.useStagedLink && stagedLink.position.origin.group == stagedLink.position.destination.group) { - optionCount = optionCount + bookmarks.get()[stagedLink.position.origin.group].items.length; - } else { - optionCount = optionCount + bookmarks.get()[stagedLink.position.destination.group].items.length + 1; - }; - } else { - optionCount = 1; - }; - - for (var i = 1; i <= optionCount; i++) { - groupExistingPosition.appendChild(helper.node("option:" + helper.ordinalNumber(i))); - if (optionCount == i) { - groupExistingPosition.selectedIndex = (i - 1); - } - }; - - }; - }; - - var populateForm = function() { - groupExistingRadio.checked = true; - groupExistingGroupSelect.selectedIndex = stagedLink.position.origin.group; - if (options.useStagedLink) { - groupExistingPosition.selectedIndex = stagedLink.position.origin.item; - }; - - urlInput.value = stagedLink.link.url; - - displayShowCheckbox.checked = stagedLink.link.display.visual.show; - - if (stagedLink.link.display.visual.type == "letter") { - displayLetterRadio.checked = true; - displayIconRadio.checked = false; - displayImageRadio.checked = false; - } else if (stagedLink.link.display.visual.type == "icon") { - displayLetterRadio.checked = false; - displayIconRadio.checked = true; - displayImageRadio.checked = false; - } else if (stagedLink.link.display.visual.type == "image") { - displayLetterRadio.checked = false; - displayIconRadio.checked = false; - displayImageRadio.checked = true; - }; - - displayLetterInput.value = stagedLink.link.display.visual.letter.text; - displayIconInput.value = stagedLink.link.display.visual.icon.label; - displayImageInput.value = stagedLink.link.display.visual.image.url; - - if (helper.checkIfValidString(stagedLink.link.display.visual.icon.prefix) && helper.checkIfValidString(stagedLink.link.display.visual.icon.name) && helper.checkIfValidString(stagedLink.link.display.visual.icon.label)) { - displayIconFormGroupText.appendChild(helper.node("span|class:link-form-icon " + stagedLink.link.display.visual.icon.prefix + " fa-" + stagedLink.link.display.visual.icon.name)); - }; - - nameShowCheckbox.checked = stagedLink.link.display.name.show; - nameInput.value = stagedLink.link.display.name.text; - - displayLetterSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.visual.letter.size); - displayLetterSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.visual.letter.size); - displayIconSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.visual.icon.size); - displayIconSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.visual.icon.size); - displayImageSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.visual.image.size); - displayImageSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.visual.image.size); - displayShadowSizeInputRange.value = stagedLink.link.display.visual.shadow.size; - displayShadowSizeInputNumber.value = stagedLink.link.display.visual.shadow.size; - - nameSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.name.size); - nameSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.name.size); - - if (link.stagedLink.link.display.alignment == "topleft") { - displayAlignmentTopLeftRadio.checked = true; - }; - if (link.stagedLink.link.display.alignment == "topcenter") { - displayAlignmentTopCenterRadio.checked = true; - }; - if (link.stagedLink.link.display.alignment == "topright") { - displayAlignmentTopRightRadio.checked = true; - }; - if (link.stagedLink.link.display.alignment == "centerleft") { - displayAlignmentCenterLeftRadio.checked = true; - }; - if (link.stagedLink.link.display.alignment == "centercenter") { - displayAlignmentCenterCenterRadio.checked = true; - }; - if (link.stagedLink.link.display.alignment == "centerright") { - displayAlignmentCenterRightRadio.checked = true; - }; - if (link.stagedLink.link.display.alignment == "bottomleft") { - displayAlignmentBottomLeftRadio.checked = true; - }; - if (link.stagedLink.link.display.alignment == "bottomcenter") { - displayAlignmentBottomCenterRadio.checked = true; - }; - if (link.stagedLink.link.display.alignment == "bottomright") { - displayAlignmentBottomRightRadio.checked = true; - }; - - displayRotateRange.value = stagedLink.link.display.rotate; - displayRotateNumber.value = stagedLink.link.display.rotate; - displayTranslateXRange.value = mod.value.convert.from.float(stagedLink.link.display.translate.x); - displayTranslateXNumber.value = mod.value.convert.from.float(stagedLink.link.display.translate.x); - displayTranslateYRange.value = mod.value.convert.from.float(stagedLink.link.display.translate.y); - displayTranslateYNumber.value = mod.value.convert.from.float(stagedLink.link.display.translate.y); - - displayGutterRange.value = stagedLink.link.display.gutter; - displayGutterNumber.value = stagedLink.link.display.gutter; - - if (stagedLink.link.display.order == "visualname") { - displayDirectionVisualnameRadio.checked = true; - } else if (stagedLink.link.display.order == "namevisual") { - displayDirectionNamevisualRadio.checked = true; - }; - - if (stagedLink.link.display.direction == "vertical") { - displayAlignmentVerticalRadio.checked = true; - } else if (stagedLink.link.display.direction == "horizontal") { - displayAlignmentHorizontalRadio.checked = true; - }; - - if (stagedLink.link.color.by == "custom") { - colorThemeRadio.checked = false; - colorCustomRadio.checked = true; - } else { - colorThemeRadio.checked = true; - colorCustomRadio.checked = false; - }; - colorColorPicker.value = helper.convertColor.rgb.hex(stagedLink.link.color.rgb); - colorColorHex.value = helper.convertColor.rgb.hex(stagedLink.link.color.rgb); - colorHslHRange.value = stagedLink.link.color.hsl.h; - colorHslHNumber.value = stagedLink.link.color.hsl.h; - colorHslSRange.value = stagedLink.link.color.hsl.s; - colorHslSNumber.value = stagedLink.link.color.hsl.s; - colorHslLRange.value = stagedLink.link.color.hsl.l; - colorHslLNumber.value = stagedLink.link.color.hsl.l; - colorRgbRRange.value = stagedLink.link.color.rgb.r; - colorRgbRNumber.value = stagedLink.link.color.rgb.r; - colorRgbGRange.value = stagedLink.link.color.rgb.g; - colorRgbGNumber.value = stagedLink.link.color.rgb.g; - colorRgbBRange.value = stagedLink.link.color.rgb.b; - colorRgbBNumber.value = stagedLink.link.color.rgb.b; - - colorOpacityInputRange.value = mod.value.convert.from.float(stagedLink.link.color.opacity); - colorOpacityInputNumber.value = mod.value.convert.from.float(stagedLink.link.color.opacity); - - if (stagedLink.link.accent.by == "custom") { - accentThemeRadio.checked = false; - accentCustomRadio.checked = true; - } else { - accentThemeRadio.checked = true; - accentCustomRadio.checked = false; - }; - accentColorPicker.value = helper.convertColor.rgb.hex(stagedLink.link.accent.rgb); - accentColorHex.value = helper.convertColor.rgb.hex(stagedLink.link.accent.rgb); - accentHslHRange.value = stagedLink.link.accent.hsl.h; - accentHslHNumber.value = stagedLink.link.accent.hsl.h; - accentHslSRange.value = stagedLink.link.accent.hsl.s; - accentHslSNumber.value = stagedLink.link.accent.hsl.s; - accentHslLRange.value = stagedLink.link.accent.hsl.l; - accentHslLNumber.value = stagedLink.link.accent.hsl.l; - accentRgbRRange.value = stagedLink.link.accent.rgb.r; - accentRgbRNumber.value = stagedLink.link.accent.rgb.r; - accentRgbGRange.value = stagedLink.link.accent.rgb.g; - accentRgbGNumber.value = stagedLink.link.accent.rgb.g; - accentRgbBRange.value = stagedLink.link.accent.rgb.b; - accentRgbBNumber.value = stagedLink.link.accent.rgb.b; - - backgroundShowInput.checked = stagedLink.link.background.show; - if (stagedLink.link.background.type == "image") { - backgroundImageRadio.checked = true; - backgroundVideoRadio.checked = false; - } else if (stagedLink.link.background.type == "video") { - backgroundImageRadio.checked = false; - backgroundVideoRadio.checked = true; - }; - backgroundImageUrlInput.value = stagedLink.link.background.image.url; - backgroundVideoUrlInput.value = stagedLink.link.background.video.url; - backgroundOpacityInputRange.value = mod.value.convert.from.float(stagedLink.link.background.opacity); - backgroundOpacityInputNumber.value = mod.value.convert.from.float(stagedLink.link.background.opacity); - - if (stagedLink.link.wide) { - wideInput.checked = true; - }; - if (stagedLink.link.tall) { - tallInput.checked = true; - }; - }; - - var mirror = { - delay: null, - minMax: function(input) { - var value = parseInt(input.value, 10); - var min = parseInt(input.min, 10); - var max = parseInt(input.max, 10); - if (value < min) { - value = min; - }; - if (value > max) { - value = max; - }; - if (isNaN(value)) { - value = 0; - }; - return value; - }, - data: { - accent: { - by: { - hsl: function() { - stagedLink.link.accent.rgb = helper.convertColor.hsl.rgb(stagedLink.link.accent.hsl); - stagedLink.link.accent.rgb.r = Math.round(stagedLink.link.accent.rgb.r); - stagedLink.link.accent.rgb.g = Math.round(stagedLink.link.accent.rgb.g); - stagedLink.link.accent.rgb.b = Math.round(stagedLink.link.accent.rgb.b); - }, - rgb: function() { - stagedLink.link.accent.hsl = helper.convertColor.rgb.hsl(stagedLink.link.accent.rgb); - stagedLink.link.accent.hsl.h = Math.round(stagedLink.link.accent.hsl.h); - stagedLink.link.accent.hsl.s = Math.round(stagedLink.link.accent.hsl.s); - stagedLink.link.accent.hsl.l = Math.round(stagedLink.link.accent.hsl.l); - }, - hex: function(value) { - stagedLink.link.accent.rgb = helper.convertColor.hex.rgb(value); - stagedLink.link.accent.rgb.r = Math.round(stagedLink.link.accent.rgb.r); - stagedLink.link.accent.rgb.g = Math.round(stagedLink.link.accent.rgb.g); - stagedLink.link.accent.rgb.b = Math.round(stagedLink.link.accent.rgb.b); - stagedLink.link.accent.hsl = helper.convertColor.rgb.hsl(stagedLink.link.accent.rgb); - stagedLink.link.accent.hsl.h = Math.round(stagedLink.link.accent.hsl.h); - stagedLink.link.accent.hsl.s = Math.round(stagedLink.link.accent.hsl.s); - stagedLink.link.accent.hsl.l = Math.round(stagedLink.link.accent.hsl.l); - } - } - }, - color: { - by: { - hsl: function() { - stagedLink.link.color.rgb = helper.convertColor.hsl.rgb(stagedLink.link.color.hsl); - stagedLink.link.color.rgb.r = Math.round(stagedLink.link.color.rgb.r); - stagedLink.link.color.rgb.g = Math.round(stagedLink.link.color.rgb.g); - stagedLink.link.color.rgb.b = Math.round(stagedLink.link.color.rgb.b); - }, - rgb: function() { - stagedLink.link.color.hsl = helper.convertColor.rgb.hsl(stagedLink.link.color.rgb); - stagedLink.link.color.hsl.h = Math.round(stagedLink.link.color.hsl.h); - stagedLink.link.color.hsl.s = Math.round(stagedLink.link.color.hsl.s); - stagedLink.link.color.hsl.l = Math.round(stagedLink.link.color.hsl.l); - }, - hex: function(value) { - stagedLink.link.color.rgb = helper.convertColor.hex.rgb(value); - stagedLink.link.color.rgb.r = Math.round(stagedLink.link.color.rgb.r); - stagedLink.link.color.rgb.g = Math.round(stagedLink.link.color.rgb.g); - stagedLink.link.color.rgb.b = Math.round(stagedLink.link.color.rgb.b); - stagedLink.link.color.hsl = helper.convertColor.rgb.hsl(stagedLink.link.color.rgb); - stagedLink.link.color.hsl.h = Math.round(stagedLink.link.color.hsl.h); - stagedLink.link.color.hsl.s = Math.round(stagedLink.link.color.hsl.s); - stagedLink.link.color.hsl.l = Math.round(stagedLink.link.color.hsl.l); - } - } - } - }, - inputs: { - accent: function() { - return [{ - element: accentColorPicker, - value: stagedLink.link.accent.rgb - }, { - element: accentColorHex, - value: stagedLink.link.accent.rgb - }, { - element: accentHslHRange, - value: stagedLink.link.accent.hsl.h - }, { - element: accentHslHNumber, - value: stagedLink.link.accent.hsl.h - }, { - element: accentHslSRange, - value: stagedLink.link.accent.hsl.s - }, { - element: accentHslSNumber, - value: stagedLink.link.accent.hsl.s - }, { - element: accentHslLRange, - value: stagedLink.link.accent.hsl.l - }, { - element: accentHslLNumber, - value: stagedLink.link.accent.hsl.l - }, { - element: accentRgbRRange, - value: stagedLink.link.accent.rgb.r - }, { - element: accentRgbRNumber, - value: stagedLink.link.accent.rgb.r - }, { - element: accentRgbGRange, - value: stagedLink.link.accent.rgb.g - }, { - element: accentRgbGNumber, - value: stagedLink.link.accent.rgb.g - }, { - element: accentRgbBRange, - value: stagedLink.link.accent.rgb.b - }, { - element: accentRgbBNumber, - value: stagedLink.link.accent.rgb.b - }] - }, - color: function() { - return [{ - element: colorColorPicker, - value: stagedLink.link.color.rgb - }, { - element: colorColorHex, - value: stagedLink.link.color.rgb - }, { - element: colorHslHRange, - value: stagedLink.link.color.hsl.h - }, { - element: colorHslHNumber, - value: stagedLink.link.color.hsl.h - }, { - element: colorHslSRange, - value: stagedLink.link.color.hsl.s - }, { - element: colorHslSNumber, - value: stagedLink.link.color.hsl.s - }, { - element: colorHslLRange, - value: stagedLink.link.color.hsl.l - }, { - element: colorHslLNumber, - value: stagedLink.link.color.hsl.l - }, { - element: colorRgbRRange, - value: stagedLink.link.color.rgb.r - }, { - element: colorRgbRNumber, - value: stagedLink.link.color.rgb.r - }, { - element: colorRgbGRange, - value: stagedLink.link.color.rgb.g - }, { - element: colorRgbGNumber, - value: stagedLink.link.color.rgb.g - }, { - element: colorRgbBRange, - value: stagedLink.link.color.rgb.b - }, { - element: colorRgbBNumber, - value: stagedLink.link.color.rgb.b - }] - } - }, - value: function(origin, targets) { - targets.forEach(function(arrayItem, index) { - if (arrayItem.element != origin) { - switch (arrayItem.element.type) { - case "color": - arrayItem.element.value = helper.convertColor.rgb.hex(arrayItem.value); - break; - - case "text": - arrayItem.element.value = helper.convertColor.rgb.hex(arrayItem.value); - break; - - case "number": - arrayItem.element.value = arrayItem.value; - break; - - case "range": - arrayItem.element.value = arrayItem.value; - break; - }; - }; - }); - } - }; - - var collapse = { - advanced: function() { - if (mod.collapse.form.item.advanced) { - helper.addClass(advancedCollapse, "active"); - helper.addClass(advancedCollapseButton, "active"); - } else { - helper.removeClass(advancedCollapse, "active"); - helper.removeClass(advancedCollapseButton, "active"); - }; - } - }; - - var disableForm = function() { - if (stagedLink.position.group.new) { - helper.addClass(groupExistingGroupLabel, "disabled"); - groupExistingGroupSelect.setAttribute("disabled", ""); - groupExistingPosition.setAttribute("disabled", ""); - helper.addClass(groupExistingPositionLabel, "disabled"); - helper.removeClass(groupNewNameLabel, "disabled"); - groupNewNameInput.removeAttribute("disabled"); - groupNewRandomNameButton.removeAttribute("disabled"); - } else { - helper.removeClass(groupExistingGroupLabel, "disabled"); - groupExistingGroupSelect.removeAttribute("disabled"); - groupExistingPosition.removeAttribute("disabled"); - helper.removeClass(groupExistingPositionLabel, "disabled"); - helper.addClass(groupNewNameLabel, "disabled"); - groupNewNameInput.setAttribute("disabled", ""); - groupNewRandomNameButton.setAttribute("disabled", ""); - }; - - if (stagedLink.link.display.visual.show && stagedLink.link.display.visual.type == "letter") { - displayLetterRadio.removeAttribute("disabled"); - displayIconRadio.removeAttribute("disabled"); - displayImageRadio.removeAttribute("disabled"); - displayLetterInput.removeAttribute("disabled"); - displayIconInput.setAttribute("disabled", ""); - displayImageInput.setAttribute("disabled", ""); - helper.addClass(displayIconFormGroupText, "disabled"); - displayIconFormGroupText.tabIndex = -1; - helper.addClass(displayIconHelper, "disabled"); - displayIconFormGroupClear.setAttribute("disabled", ""); - displayImageInput.setAttribute("disabled", ""); - helper.addClass(displayImageHelper, "disabled"); - } else if (stagedLink.link.display.visual.show && stagedLink.link.display.visual.type == "icon") { - displayLetterRadio.removeAttribute("disabled"); - displayIconRadio.removeAttribute("disabled"); - displayImageRadio.removeAttribute("disabled"); - displayLetterInput.setAttribute("disabled", ""); - displayIconInput.removeAttribute("disabled"); - displayImageInput.setAttribute("disabled", ""); - helper.removeClass(displayIconFormGroupText, "disabled"); - displayIconFormGroupText.tabIndex = 1; - helper.removeClass(displayIconHelper, "disabled"); - displayIconFormGroupClear.removeAttribute("disabled"); - displayImageInput.setAttribute("disabled", ""); - helper.addClass(displayImageHelper, "disabled"); - } else if (stagedLink.link.display.visual.show && stagedLink.link.display.visual.type == "image") { - displayLetterRadio.removeAttribute("disabled"); - displayIconRadio.removeAttribute("disabled"); - displayImageRadio.removeAttribute("disabled"); - displayLetterInput.setAttribute("disabled", ""); - displayIconInput.setAttribute("disabled", ""); - displayImageInput.setAttribute("disabled", ""); - helper.addClass(displayIconFormGroupText, "disabled"); - displayIconFormGroupText.tabIndex = -1; - helper.addClass(displayIconHelper, "disabled"); - displayIconFormGroupClear.setAttribute("disabled", ""); - displayImageInput.removeAttribute("disabled"); - helper.removeClass(displayImageHelper, "disabled"); - } else { - displayLetterRadio.setAttribute("disabled", ""); - displayIconRadio.setAttribute("disabled", ""); - displayImageRadio.setAttribute("disabled", ""); - displayLetterInput.setAttribute("disabled", ""); - displayIconInput.setAttribute("disabled", ""); - displayImageInput.setAttribute("disabled", ""); - helper.addClass(displayIconFormGroupText, "disabled"); - displayIconFormGroupText.tabIndex = -1; - helper.addClass(displayIconHelper, "disabled"); - displayIconFormGroupClear.setAttribute("disabled", ""); - displayImageInput.setAttribute("disabled", ""); - helper.addClass(displayImageHelper, "disabled"); - }; - - if (stagedLink.link.display.name.show) { - nameInput.removeAttribute("disabled"); - } else { - nameInput.setAttribute("disabled", ""); - }; - - if (mod.collapse.form.item.advanced && stagedLink.link.display.visual.show) { - if (stagedLink.link.display.visual.type == "letter") { - helper.removeClass(displayLetterSizeLabel, "disabled"); - displayLetterSizeInputRange.removeAttribute("disabled"); - displayLetterSizeInputNumber.removeAttribute("disabled"); - displayLetterSizeInputDefault.removeAttribute("disabled"); - helper.addClass(displayIconSizeLabel, "disabled"); - displayIconSizeInputRange.setAttribute("disabled", ""); - displayIconSizeInputNumber.setAttribute("disabled", ""); - displayIconSizeInputDefault.setAttribute("disabled", ""); - helper.addClass(displayImageSizeLabel, "disabled"); - displayImageSizeInputRange.setAttribute("disabled", ""); - displayImageSizeInputNumber.setAttribute("disabled", ""); - displayImageSizeInputDefault.setAttribute("disabled", ""); - helper.removeClass(displayShadowSizeLabel, "disabled"); - displayShadowSizeInputRange.removeAttribute("disabled"); - displayShadowSizeInputNumber.removeAttribute("disabled"); - displayShadowSizeInputDefault.removeAttribute("disabled"); - helper.removeClass(displayShadowSizeInputHelper, "disabled"); - } else if (stagedLink.link.display.visual.type == "icon") { - helper.addClass(displayLetterSizeLabel, "disabled"); - displayLetterSizeInputRange.setAttribute("disabled", ""); - displayLetterSizeInputNumber.setAttribute("disabled", ""); - displayLetterSizeInputDefault.setAttribute("disabled", ""); - helper.removeClass(displayIconSizeLabel, "disabled"); - displayIconSizeInputRange.removeAttribute("disabled"); - displayIconSizeInputNumber.removeAttribute("disabled"); - displayIconSizeInputDefault.removeAttribute("disabled"); - helper.addClass(displayImageSizeLabel, "disabled"); - displayImageSizeInputRange.setAttribute("disabled", ""); - displayImageSizeInputNumber.setAttribute("disabled", ""); - displayImageSizeInputDefault.setAttribute("disabled", ""); - helper.removeClass(displayShadowSizeLabel, "disabled"); - displayShadowSizeInputRange.removeAttribute("disabled"); - displayShadowSizeInputNumber.removeAttribute("disabled"); - displayShadowSizeInputDefault.removeAttribute("disabled"); - helper.removeClass(displayShadowSizeInputHelper, "disabled"); - } else if (stagedLink.link.display.visual.type == "image") { - helper.addClass(displayLetterSizeLabel, "disabled"); - displayLetterSizeInputRange.setAttribute("disabled", ""); - displayLetterSizeInputNumber.setAttribute("disabled", ""); - displayLetterSizeInputDefault.setAttribute("disabled", ""); - helper.addClass(displayIconSizeLabel, "disabled"); - displayIconSizeInputRange.setAttribute("disabled", ""); - displayIconSizeInputNumber.setAttribute("disabled", ""); - displayIconSizeInputDefault.setAttribute("disabled", ""); - helper.removeClass(displayImageSizeLabel, "disabled"); - displayImageSizeInputRange.removeAttribute("disabled"); - displayImageSizeInputNumber.removeAttribute("disabled"); - displayImageSizeInputDefault.removeAttribute("disabled"); - helper.addClass(displayShadowSizeLabel, "disabled"); - displayShadowSizeInputRange.setAttribute("disabled", ""); - displayShadowSizeInputNumber.setAttribute("disabled", ""); - displayShadowSizeInputDefault.setAttribute("disabled", ""); - helper.addClass(displayShadowSizeInputHelper, "disabled"); - }; - } else { - helper.addClass(displayLetterSizeLabel, "disabled"); - displayLetterSizeInputRange.setAttribute("disabled", ""); - displayLetterSizeInputNumber.setAttribute("disabled", ""); - displayLetterSizeInputDefault.setAttribute("disabled", ""); - helper.addClass(displayIconSizeLabel, "disabled"); - displayIconSizeInputRange.setAttribute("disabled", ""); - displayIconSizeInputNumber.setAttribute("disabled", ""); - displayIconSizeInputDefault.setAttribute("disabled", ""); - helper.addClass(displayImageSizeLabel, "disabled"); - displayImageSizeInputRange.setAttribute("disabled", ""); - displayImageSizeInputNumber.setAttribute("disabled", ""); - displayImageSizeInputDefault.setAttribute("disabled", ""); - helper.addClass(displayShadowSizeLabel, "disabled"); - displayShadowSizeInputRange.setAttribute("disabled", ""); - displayShadowSizeInputNumber.setAttribute("disabled", ""); - displayShadowSizeInputDefault.setAttribute("disabled", ""); - helper.addClass(displayShadowSizeInputHelper, "disabled"); - }; - - if (mod.collapse.form.item.advanced && stagedLink.link.display.name.show) { - helper.removeClass(nameSizeLabel, "disabled"); - nameSizeInputRange.removeAttribute("disabled"); - nameSizeInputNumber.removeAttribute("disabled"); - nameSizeInputDefault.removeAttribute("disabled"); - } else { - helper.addClass(nameSizeLabel, "disabled"); - nameSizeInputRange.setAttribute("disabled", ""); - nameSizeInputNumber.setAttribute("disabled", ""); - nameSizeInputDefault.setAttribute("disabled", ""); - }; - - if (mod.collapse.form.item.advanced && stagedLink.link.display.visual.show && stagedLink.link.display.name.show) { - helper.removeClass(displayGutterLabel, "disabled"); - displayGutterRange.removeAttribute("disabled"); - displayGutterNumber.removeAttribute("disabled"); - displayGutterDefault.removeAttribute("disabled"); - displayAlignmentHorizontalRadio.removeAttribute("disabled"); - helper.removeClass(displayAlignmentHorizontalLabel, "disabled"); - displayAlignmentVerticalRadio.removeAttribute("disabled"); - helper.removeClass(displayAlignmentVerticalLabel, "disabled"); - displayDirectionVisualnameRadio.removeAttribute("disabled"); - helper.removeClass(displayDirectionVisualnameLabel, "disabled"); - displayDirectionNamevisualRadio.removeAttribute("disabled"); - helper.removeClass(displayDirectionNamevisualLabel, "disabled"); - } else { - helper.addClass(displayGutterLabel, "disabled"); - displayGutterRange.setAttribute("disabled", ""); - displayGutterNumber.setAttribute("disabled", ""); - displayGutterDefault.setAttribute("disabled", ""); - displayAlignmentHorizontalRadio.setAttribute("disabled", ""); - helper.addClass(displayAlignmentHorizontalLabel, "disabled"); - displayAlignmentVerticalRadio.setAttribute("disabled", ""); - helper.addClass(displayAlignmentVerticalLabel, "disabled"); - displayDirectionVisualnameRadio.setAttribute("disabled", ""); - helper.addClass(displayDirectionVisualnameLabel, "disabled"); - displayDirectionNamevisualRadio.setAttribute("disabled", ""); - helper.addClass(displayDirectionNamevisualLabel, "disabled"); - }; - - if (mod.collapse.form.item.advanced) { - helper.removeClass(wideTallLabelHelper, "disabled"); - helper.removeClass(displayAlignmentLabel, "disabled"); - displayAlignmentTopLeftRadio.removeAttribute("disabled"); - displayAlignmentTopCenterRadio.removeAttribute("disabled"); - displayAlignmentTopRightRadio.removeAttribute("disabled"); - displayAlignmentCenterLeftRadio.removeAttribute("disabled"); - displayAlignmentCenterCenterRadio.removeAttribute("disabled"); - displayAlignmentCenterRightRadio.removeAttribute("disabled"); - displayAlignmentBottomLeftRadio.removeAttribute("disabled"); - displayAlignmentBottomCenterRadio.removeAttribute("disabled"); - displayAlignmentBottomRightRadio.removeAttribute("disabled"); - helper.removeClass(displayAlignmentHelper, "disabled"); - helper.removeClass(displayRotateLabel, "disabled"); - displayRotateRange.removeAttribute("disabled"); - displayRotateNumber.removeAttribute("disabled"); - displayRotateDefault.removeAttribute("disabled"); - helper.removeClass(displayTranslateXLabel, "disabled"); - displayTranslateXRange.removeAttribute("disabled"); - displayTranslateXNumber.removeAttribute("disabled"); - displayTranslateXDefault.removeAttribute("disabled"); - helper.removeClass(displayTranslateYLabel, "disabled"); - displayTranslateYRange.removeAttribute("disabled"); - displayTranslateYNumber.removeAttribute("disabled"); - displayTranslateYDefault.removeAttribute("disabled"); - helper.removeClass(displayAlignmentHelper, "disabled"); - helper.removeClass(displayDirectionHelper, "disabled"); - colorThemeRadio.removeAttribute("disabled"); - helper.removeClass(colorThemeLabel, "disabled"); - colorCustomRadio.removeAttribute("disabled"); - helper.removeClass(colorCustomLabel, "disabled"); - helper.removeClass(colorOpacityLabel, "disabled"); - colorOpacityInputRange.removeAttribute("disabled"); - colorOpacityInputNumber.removeAttribute("disabled"); - colorOpacityInputDefault.removeAttribute("disabled"); - accentThemeRadio.removeAttribute("disabled"); - helper.removeClass(accentThemeLabel, "disabled"); - accentCustomRadio.removeAttribute("disabled"); - helper.removeClass(accentCustomLabel, "disabled"); - backgroundShowInput.removeAttribute("disabled"); - wideInput.removeAttribute("disabled"); - helper.removeClass(wideLabel, "disabled"); - tallInput.removeAttribute("disabled"); - helper.removeClass(tallLabel, "disabled"); - } else { - helper.addClass(wideTallLabelHelper, "disabled"); - helper.addClass(displayAlignmentLabel, "disabled"); - displayAlignmentTopLeftRadio.setAttribute("disabled", ""); - displayAlignmentTopCenterRadio.setAttribute("disabled", ""); - displayAlignmentTopRightRadio.setAttribute("disabled", ""); - displayAlignmentCenterLeftRadio.setAttribute("disabled", ""); - displayAlignmentCenterCenterRadio.setAttribute("disabled", ""); - displayAlignmentCenterRightRadio.setAttribute("disabled", ""); - displayAlignmentBottomLeftRadio.setAttribute("disabled", ""); - displayAlignmentBottomCenterRadio.setAttribute("disabled", ""); - displayAlignmentBottomRightRadio.setAttribute("disabled", ""); - helper.addClass(displayAlignmentHelper, "disabled"); - helper.addClass(displayRotateLabel, "disabled"); - displayRotateRange.setAttribute("disabled", ""); - displayRotateNumber.setAttribute("disabled", ""); - displayRotateDefault.setAttribute("disabled", ""); - helper.addClass(displayTranslateXLabel, "disabled"); - displayTranslateXRange.setAttribute("disabled", ""); - displayTranslateXNumber.setAttribute("disabled", ""); - displayTranslateXDefault.setAttribute("disabled", ""); - helper.addClass(displayTranslateYLabel, "disabled"); - displayTranslateYRange.setAttribute("disabled", ""); - displayTranslateYNumber.setAttribute("disabled", ""); - displayTranslateYDefault.setAttribute("disabled", ""); - helper.addClass(displayAlignmentHelper, "disabled"); - helper.addClass(displayDirectionHelper, "disabled"); - colorThemeRadio.setAttribute("disabled", ""); - helper.addClass(colorThemeLabel, "disabled"); - colorCustomRadio.setAttribute("disabled", ""); - helper.addClass(colorCustomLabel, "disabled"); - helper.addClass(colorOpacityLabel, "disabled"); - colorOpacityInputRange.setAttribute("disabled", ""); - colorOpacityInputNumber.setAttribute("disabled", ""); - colorOpacityInputDefault.setAttribute("disabled", ""); - accentThemeRadio.setAttribute("disabled", ""); - helper.addClass(accentThemeLabel, "disabled"); - accentCustomRadio.setAttribute("disabled", ""); - helper.addClass(accentCustomLabel, "disabled"); - backgroundShowInput.setAttribute("disabled", ""); - wideInput.setAttribute("disabled", ""); - helper.addClass(wideLabel, "disabled"); - tallInput.setAttribute("disabled", ""); - helper.addClass(tallLabel, "disabled"); - }; - - if (mod.collapse.form.item.advanced && stagedLink.link.background.show) { - backgroundImageRadio.removeAttribute("disabled"); - helper.removeClass(backgroundImageLabel, "disabled"); - backgroundVideoRadio.removeAttribute("disabled"); - helper.removeClass(backgroundVideoLabel, "disabled"); - helper.removeClass(backgroundOpacityLabel, "disabled"); - backgroundOpacityInputRange.removeAttribute("disabled"); - backgroundOpacityInputNumber.removeAttribute("disabled"); - backgroundOpacityInputDefault.removeAttribute("disabled"); - } else { - backgroundImageRadio.setAttribute("disabled", ""); - helper.addClass(backgroundImageLabel, "disabled"); - backgroundVideoRadio.setAttribute("disabled", ""); - helper.addClass(backgroundVideoLabel, "disabled"); - helper.addClass(backgroundOpacityLabel, "disabled"); - backgroundOpacityInputRange.setAttribute("disabled", ""); - backgroundOpacityInputNumber.setAttribute("disabled", ""); - backgroundOpacityInputDefault.setAttribute("disabled", ""); - }; - - if (mod.collapse.form.item.advanced && stagedLink.link.background.show && stagedLink.link.background.type == "image") { - helper.removeClass(backgroundImageUrlLabel, "disabled"); - backgroundImageUrlInput.removeAttribute("disabled"); - helper.addClass(backgroundVideoUrlLabel, "disabled"); - backgroundVideoUrlInput.setAttribute("disabled", ""); - helper.addClass(backgroundVideoUrlInputHelper, "disabled"); - } else if (mod.collapse.form.item.advanced && stagedLink.link.background.show && stagedLink.link.background.type == "video") { - helper.addClass(backgroundImageUrlLabel, "disabled"); - backgroundImageUrlInput.setAttribute("disabled", ""); - backgroundVideoUrlInput.removeAttribute("disabled"); - helper.removeClass(backgroundVideoUrlLabel, "disabled"); - helper.removeClass(backgroundVideoUrlInputHelper, "disabled"); - } else { - helper.addClass(backgroundImageUrlLabel, "disabled"); - backgroundImageUrlInput.setAttribute("disabled", ""); - backgroundVideoUrlInput.setAttribute("disabled", ""); - helper.addClass(backgroundVideoUrlLabel, "disabled"); - helper.addClass(backgroundVideoUrlInputHelper, "disabled"); - }; - - if (mod.collapse.form.item.advanced && stagedLink.link.color.by == "custom") { - colorColorPicker.removeAttribute("disabled"); - colorColorHex.removeAttribute("disabled"); - helper.removeClass(colorHslHLabel, "disabled"); - colorHslHRange.removeAttribute("disabled"); - colorHslHNumber.removeAttribute("disabled"); - helper.removeClass(colorHslSLabel, "disabled"); - colorHslSRange.removeAttribute("disabled"); - colorHslSNumber.removeAttribute("disabled"); - helper.removeClass(colorHslLLabel, "disabled"); - colorHslLRange.removeAttribute("disabled"); - colorHslLNumber.removeAttribute("disabled"); - helper.removeClass(colorRgbRLabel, "disabled"); - colorRgbRRange.removeAttribute("disabled"); - colorRgbRNumber.removeAttribute("disabled"); - helper.removeClass(colorRgbGLabel, "disabled"); - colorRgbGRange.removeAttribute("disabled"); - colorRgbGNumber.removeAttribute("disabled"); - helper.removeClass(colorRgbBLabel, "disabled"); - colorRgbBRange.removeAttribute("disabled"); - colorRgbBNumber.removeAttribute("disabled"); - } else { - colorColorPicker.setAttribute("disabled", ""); - colorColorHex.setAttribute("disabled", ""); - helper.addClass(colorHslHLabel, "disabled"); - colorHslHRange.setAttribute("disabled", ""); - colorHslHNumber.setAttribute("disabled", ""); - helper.addClass(colorHslSLabel, "disabled"); - colorHslSRange.setAttribute("disabled", ""); - colorHslSNumber.setAttribute("disabled", ""); - helper.addClass(colorHslLLabel, "disabled"); - colorHslLRange.setAttribute("disabled", ""); - colorHslLNumber.setAttribute("disabled", ""); - helper.addClass(colorRgbRLabel, "disabled"); - colorRgbRRange.setAttribute("disabled", ""); - colorRgbRNumber.setAttribute("disabled", ""); - helper.addClass(colorRgbGLabel, "disabled"); - colorRgbGRange.setAttribute("disabled", ""); - colorRgbGNumber.setAttribute("disabled", ""); - helper.addClass(colorRgbBLabel, "disabled"); - colorRgbBRange.setAttribute("disabled", ""); - colorRgbBNumber.setAttribute("disabled", ""); - }; - if (mod.collapse.form.item.advanced && stagedLink.link.accent.by == "custom") { - accentColorPicker.removeAttribute("disabled"); - accentColorHex.removeAttribute("disabled"); - helper.removeClass(accentHslHLabel, "disabled"); - accentHslHRange.removeAttribute("disabled"); - accentHslHNumber.removeAttribute("disabled"); - helper.removeClass(accentHslSLabel, "disabled"); - accentHslSRange.removeAttribute("disabled"); - accentHslSNumber.removeAttribute("disabled"); - helper.removeClass(accentHslLLabel, "disabled"); - accentHslLRange.removeAttribute("disabled"); - accentHslLNumber.removeAttribute("disabled"); - helper.removeClass(accentRgbRLabel, "disabled"); - accentRgbRRange.removeAttribute("disabled"); - accentRgbRNumber.removeAttribute("disabled"); - helper.removeClass(accentRgbGLabel, "disabled"); - accentRgbGRange.removeAttribute("disabled"); - accentRgbGNumber.removeAttribute("disabled"); - helper.removeClass(accentRgbBLabel, "disabled"); - accentRgbBRange.removeAttribute("disabled"); - accentRgbBNumber.removeAttribute("disabled"); - } else { - accentColorPicker.setAttribute("disabled", ""); - accentColorHex.setAttribute("disabled", ""); - helper.addClass(accentHslHLabel, "disabled"); - accentHslHRange.setAttribute("disabled", ""); - accentHslHNumber.setAttribute("disabled", ""); - helper.addClass(accentHslSLabel, "disabled"); - accentHslSRange.setAttribute("disabled", ""); - accentHslSNumber.setAttribute("disabled", ""); - helper.addClass(accentHslLLabel, "disabled"); - accentHslLRange.setAttribute("disabled", ""); - accentHslLNumber.setAttribute("disabled", ""); - helper.addClass(accentRgbRLabel, "disabled"); - accentRgbRRange.setAttribute("disabled", ""); - accentRgbRNumber.setAttribute("disabled", ""); - helper.addClass(accentRgbGLabel, "disabled"); - accentRgbGRange.setAttribute("disabled", ""); - accentRgbGNumber.setAttribute("disabled", ""); - helper.addClass(accentRgbBLabel, "disabled"); - accentRgbBRange.setAttribute("disabled", ""); - accentRgbBNumber.setAttribute("disabled", ""); - }; - }; - - makeGroupOptions(); - - makePostionOptions(); - - disableForm(); - - populateForm(); - - form.addEventListener("keydown", function(event) { - if (event.keyCode == 13) { - event.preventDefault(); - return false; - }; - }, false); - groupExistingRadio.addEventListener("change", function(event) { - stagedLink.position.destination.group = groupExistingGroupSelect.selectedIndex; - stagedLink.position.group.new = false; - stagedLink.position.group.name.show = false; - stagedLink.position.group.openAll.show = false; - disableForm(); - }, false); - groupExistingGroupSelect.addEventListener("change", function(event) { - stagedLink.position.destination.group = this.selectedIndex; - makePostionOptions(); - stagedLink.position.destination.item = groupExistingPosition.selectedIndex; - }, false); - groupExistingPosition.addEventListener("change", function(event) { - stagedLink.position.destination.item = this.selectedIndex; - }, false); - groupNewRadio.addEventListener("change", function(event) { - stagedLink.position.destination.group = bookmarks.get().length; - stagedLink.position.group.new = true; - stagedLink.position.group.name.show = true; - stagedLink.position.group.openAll.show = true; - disableForm(); - }, false); - groupNewNameInput.addEventListener("input", function(event) { - stagedLink.position.group.name.text = this.value; - }, false); - groupNewRandomNameButton.addEventListener("click", function(event) { - var randomName = helper.randomString({ - adjectivesCount: helper.randomNumber(1, 3) - }); - stagedLink.position.group.name.text = randomName; - groupNewNameInput.value = randomName; - }, false); - - displayShowCheckbox.addEventListener("change", function(event) { - stagedLink.link.display.visual.show = this.checked; - disableForm(); - render.item.preview.delay(formPreviewArea); - }, false); - displayLetterRadio.addEventListener("change", function(event) { - stagedLink.link.display.visual.type = this.value; - render.item.preview.delay(formPreviewArea); - disableForm(); - }, false); - displayLetterInput.addEventListener("input", function(event) { - stagedLink.link.display.visual.letter.text = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayIconRadio.addEventListener("change", function(event) { - stagedLink.link.display.visual.type = this.value; - render.item.preview.delay(formPreviewArea); - disableForm(); - }, false); - displayIconFormGroupClear.addEventListener("click", function(event) { - stagedLink.link.display.visual.icon.name = ""; - stagedLink.link.display.visual.icon.prefix = ""; - stagedLink.link.display.visual.icon.label = ""; - var existingIcon = helper.e(".link-form-icon"); - if (existingIcon) { - existingIcon.remove(); - }; - displayIconInput.value = ""; - render.item.preview.delay(formPreviewArea); - }, false); - displayImageRadio.addEventListener("change", function(event) { - stagedLink.link.display.visual.type = this.value; - render.item.preview.delay(formPreviewArea); - disableForm(); - }, false); - displayImageInput.addEventListener("input", function(event) { - stagedLink.link.display.visual.image.url = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - nameShowCheckbox.addEventListener("change", function(event) { - stagedLink.link.display.name.show = this.checked; - disableForm(); - render.item.preview.delay(formPreviewArea); - }, false); - nameInput.addEventListener("input", function(event) { - stagedLink.link.display.name.text = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - urlInput.addEventListener("input", function(event) { - stagedLink.link.url = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - - advancedCollapseButton.addEventListener("click", function() { - if (mod.collapse.form.item.advanced) { - mod.collapse.form.item.advanced = false; - } else { - mod.collapse.form.item.advanced = true; - }; - collapse.advanced(); - disableForm(); - }); - displayLetterSizeInputRange.addEventListener("input", function(event) { - stagedLink.link.display.visual.letter.size = mod.value.convert.to.float(parseInt(this.value, 10)); - displayLetterSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.visual.letter.size); - render.item.preview.delay(formPreviewArea); - }); - displayLetterSizeInputNumber.addEventListener("input", function(event) { - var inputValue = parseInt(this.value, 10); - for (var key in mod.value.modify) { - if (this[key] != "") { - inputValue = mod.value.modify[key](inputValue, this); - }; - }; - stagedLink.link.display.visual.letter.size = mod.value.convert.to.float(inputValue); - displayLetterSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.visual.letter.size); - var set = function(input) { - input.value = mod.value.convert.from.float(stagedLink.link.display.visual.letter.size); - }; - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - displayLetterSizeInputDefault.addEventListener("click", function(event) { - stagedLink.link.display.visual.letter.size = helper.getObject({ - object: state.get.default(), - path: "link.item.display.visual.letter.size" - }); - displayLetterSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.visual.letter.size); - displayLetterSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.visual.letter.size); - render.item.preview.delay(formPreviewArea); - }); - displayIconSizeInputRange.addEventListener("input", function(event) { - stagedLink.link.display.visual.icon.size = mod.value.convert.to.float(parseInt(this.value, 10)); - displayIconSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.visual.icon.size); - render.item.preview.delay(formPreviewArea); - }); - displayIconSizeInputNumber.addEventListener("input", function(event) { - var inputValue = parseInt(this.value, 10); - for (var key in mod.value.modify) { - if (this[key] != "") { - inputValue = mod.value.modify[key](inputValue, this); - }; - }; - stagedLink.link.display.visual.icon.size = mod.value.convert.to.float(inputValue); - displayIconSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.visual.icon.size); - var set = function(input) { - input.value = mod.value.convert.from.float(stagedLink.link.display.visual.icon.size); - }; - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - displayIconSizeInputDefault.addEventListener("click", function(event) { - stagedLink.link.display.visual.icon.size = helper.getObject({ - object: state.get.default(), - path: "link.item.display.visual.icon.size" - }); - displayIconSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.visual.icon.size); - displayIconSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.visual.icon.size); - render.item.preview.delay(formPreviewArea); - }); - displayImageSizeInputRange.addEventListener("input", function(event) { - stagedLink.link.display.visual.image.size = mod.value.convert.to.float(parseInt(this.value, 10)); - displayImageSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.visual.image.size); - render.item.preview.delay(formPreviewArea); - }); - displayImageSizeInputNumber.addEventListener("input", function(event) { - var inputValue = parseInt(this.value, 10); - for (var key in mod.value.modify) { - if (this[key] != "") { - inputValue = mod.value.modify[key](inputValue, this); - }; - }; - stagedLink.link.display.visual.image.size = mod.value.convert.to.float(inputValue); - displayImageSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.visual.image.size); - var set = function(input) { - input.value = mod.value.convert.from.float(stagedLink.link.display.visual.image.size); - }; - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - displayImageSizeInputDefault.addEventListener("click", function(event) { - stagedLink.link.display.visual.image.size = helper.getObject({ - object: state.get.default(), - path: "link.item.display.visual.image.size" - }); - displayImageSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.visual.image.size); - displayImageSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.visual.image.size); - render.item.preview.delay(formPreviewArea); - }); - displayShadowSizeInputRange.addEventListener("input", function(event) { - stagedLink.link.display.visual.shadow.size = parseInt(this.value, 10); - displayShadowSizeInputNumber.value = stagedLink.link.display.visual.shadow.size; - render.item.preview.delay(formPreviewArea); - }); - displayShadowSizeInputNumber.addEventListener("input", function(event) { - var inputValue = parseInt(this.value, 10); - for (var key in mod.value.modify) { - if (this[key] != "") { - inputValue = mod.value.modify[key](inputValue, this); - }; - }; - stagedLink.link.display.visual.shadow.size = inputValue; - displayShadowSizeInputRange.value = stagedLink.link.display.visual.shadow.size; - var set = function(input) { - input.value = stagedLink.link.display.visual.shadow.size; - }; - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - displayShadowSizeInputDefault.addEventListener("click", function(event) { - stagedLink.link.display.visual.shadow.size = helper.getObject({ - object: state.get.default(), - path: "link.item.display.visual.shadow.size" - }); - displayShadowSizeInputRange.value = stagedLink.link.display.visual.shadow.size; - displayShadowSizeInputNumber.value = stagedLink.link.display.visual.shadow.size; - render.item.preview.delay(formPreviewArea); - }); - nameSizeInputRange.addEventListener("input", function(event) { - stagedLink.link.display.name.size = mod.value.convert.to.float(parseInt(this.value, 10)); - nameSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.name.size); - render.item.preview.delay(formPreviewArea); - }); - nameSizeInputNumber.addEventListener("input", function(event) { - var inputValue = parseInt(this.value, 10); - for (var key in mod.value.modify) { - if (this[key] != "") { - inputValue = mod.value.modify[key](inputValue, this); - }; - }; - stagedLink.link.display.name.size = mod.value.convert.to.float(inputValue); - nameSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.name.size); - var set = function(input) { - input.value = mod.value.convert.from.float(stagedLink.link.display.name.size); - }; - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - nameSizeInputDefault.addEventListener("click", function(event) { - stagedLink.link.display.name.size = helper.getObject({ - object: state.get.default(), - path: "link.item.display.name.size" - }); - nameSizeInputRange.value = mod.value.convert.from.float(stagedLink.link.display.name.size); - nameSizeInputNumber.value = mod.value.convert.from.float(stagedLink.link.display.name.size); - render.item.preview.delay(formPreviewArea); - }); - displayAlignmentTopLeftRadio.addEventListener("input", function(event) { - link.stagedLink.link.display.alignment = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayAlignmentTopCenterRadio.addEventListener("input", function(event) { - link.stagedLink.link.display.alignment = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayAlignmentTopRightRadio.addEventListener("input", function(event) { - link.stagedLink.link.display.alignment = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayAlignmentCenterLeftRadio.addEventListener("input", function(event) { - link.stagedLink.link.display.alignment = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayAlignmentCenterCenterRadio.addEventListener("input", function(event) { - link.stagedLink.link.display.alignment = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayAlignmentCenterRightRadio.addEventListener("input", function(event) { - link.stagedLink.link.display.alignment = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayAlignmentBottomLeftRadio.addEventListener("input", function(event) { - link.stagedLink.link.display.alignment = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayAlignmentBottomCenterRadio.addEventListener("input", function(event) { - link.stagedLink.link.display.alignment = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayAlignmentBottomRightRadio.addEventListener("input", function(event) { - link.stagedLink.link.display.alignment = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayRotateRange.addEventListener("input", function(event) { - stagedLink.link.display.rotate = parseInt(this.value, 10); - displayRotateNumber.value = stagedLink.link.display.rotate; - render.item.preview.delay(formPreviewArea); - }); - displayRotateNumber.addEventListener("input", function(event) { - var inputValue = parseInt(this.value, 10); - for (var key in mod.value.modify) { - if (this[key] != "") { - inputValue = mod.value.modify[key](inputValue, this); - }; - }; - stagedLink.link.display.rotate = inputValue; - displayRotateRange.value = stagedLink.link.display.rotate; - var set = function(input) { - input.value = stagedLink.link.display.rotate; - }; - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - displayRotateDefault.addEventListener("click", function(event) { - stagedLink.link.display.rotate = helper.getObject({ - object: state.get.default(), - path: "link.item.display.rotate" - }); - displayRotateRange.value = stagedLink.link.display.rotate; - displayRotateNumber.value = stagedLink.link.display.rotate; - render.item.preview.delay(formPreviewArea); - }); - displayTranslateXRange.addEventListener("input", function(event) { - stagedLink.link.display.translate.x = mod.value.convert.to.float(parseInt(this.value, 10)); - displayTranslateXNumber.value = mod.value.convert.from.float(stagedLink.link.display.translate.x); - render.item.preview.delay(formPreviewArea); - }); - displayTranslateXNumber.addEventListener("input", function(event) { - var inputValue = parseInt(this.value, 10); - for (var key in mod.value.modify) { - if (this[key] != "") { - inputValue = mod.value.modify[key](inputValue, this); - }; - }; - stagedLink.link.display.translate.x = mod.value.convert.to.float(inputValue); - displayTranslateXRange.value = mod.value.convert.from.float(stagedLink.link.display.translate.x); - var set = function(input) { - input.value = mod.value.convert.from.float(stagedLink.link.display.translate.x); - }; - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - displayTranslateXDefault.addEventListener("click", function(event) { - stagedLink.link.display.translate.x = helper.getObject({ - object: state.get.default(), - path: "link.item.display.translate.x" - }); - displayTranslateXRange.value = mod.value.convert.from.float(stagedLink.link.display.translate.x); - displayTranslateXNumber.value = mod.value.convert.from.float(stagedLink.link.display.translate.x); - render.item.preview.delay(formPreviewArea); - }); - displayTranslateYRange.addEventListener("input", function(event) { - stagedLink.link.display.translate.y = mod.value.convert.to.float(parseInt(this.value, 10)); - displayTranslateYNumber.value = mod.value.convert.from.float(stagedLink.link.display.translate.y); - render.item.preview.delay(formPreviewArea); - }); - displayTranslateYNumber.addEventListener("input", function(event) { - var inputValue = parseInt(this.value, 10); - for (var key in mod.value.modify) { - if (this[key] != "") { - inputValue = mod.value.modify[key](inputValue, this); - }; - }; - stagedLink.link.display.translate.y = mod.value.convert.to.float(inputValue); - displayTranslateYRange.value = mod.value.convert.from.float(stagedLink.link.display.translate.y); - var set = function(input) { - input.value = mod.value.convert.from.float(stagedLink.link.display.translate.y); - }; - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - displayTranslateYDefault.addEventListener("click", function(event) { - stagedLink.link.display.translate.y = helper.getObject({ - object: state.get.default(), - path: "link.item.display.translate.x" - }); - displayTranslateYRange.value = mod.value.convert.from.float(stagedLink.link.display.translate.y); - displayTranslateYNumber.value = mod.value.convert.from.float(stagedLink.link.display.translate.y); - render.item.preview.delay(formPreviewArea); - }); - displayGutterRange.addEventListener("input", function(event) { - stagedLink.link.display.gutter = parseInt(this.value, 10); - displayGutterNumber.value = stagedLink.link.display.gutter; - render.item.preview.delay(formPreviewArea); - }); - displayGutterNumber.addEventListener("input", function(event) { - var inputValue = parseInt(this.value, 10); - for (var key in mod.value.modify) { - if (this[key] != "") { - inputValue = mod.value.modify[key](inputValue, this); - }; - }; - stagedLink.link.display.gutter = inputValue; - displayGutterRange.value = stagedLink.link.display.gutter; - var set = function(input) { - input.value = stagedLink.link.display.gutter; - }; - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - displayGutterDefault.addEventListener("click", function(event) { - stagedLink.link.display.gutter = helper.getObject({ - object: state.get.default(), - path: "link.item.display.gutter" - }); - displayGutterRange.value = stagedLink.link.display.gutter; - displayGutterNumber.value = stagedLink.link.display.gutter; - render.item.preview.delay(formPreviewArea); - }); - displayAlignmentVerticalRadio.addEventListener("input", function(event) { - stagedLink.link.display.direction = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayAlignmentHorizontalRadio.addEventListener("input", function(event) { - stagedLink.link.display.direction = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayDirectionVisualnameRadio.addEventListener("input", function(event) { - stagedLink.link.display.order = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - displayDirectionNamevisualRadio.addEventListener("input", function(event) { - stagedLink.link.display.order = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - colorThemeRadio.addEventListener("change", function() { - stagedLink.link.color.by = this.value; - render.item.preview.delay(formPreviewArea); - disableForm(); - }, false); - colorCustomRadio.addEventListener("change", function() { - stagedLink.link.color.by = this.value; - render.item.preview.delay(formPreviewArea); - disableForm(); - }, false); - colorColorPicker.addEventListener("change", function() { - mirror.data.color.by.hex(this.value); - mirror.value(this, mirror.inputs.color()); - render.item.preview.delay(formPreviewArea); - }, false); - colorColorHex.addEventListener("input", function() { - if (helper.isHexNumber(this.value)) { - mirror.data.color.by.hex(this.value); - mirror.value(this, mirror.inputs.color()); - render.item.preview.delay(formPreviewArea); - }; - }, false); - colorHslHRange.addEventListener("input", function() { - stagedLink.link.color.hsl.h = parseInt(this.value, 10); - mirror.data.color.by.hsl(); - mirror.value(this, mirror.inputs.color()); - render.item.preview.delay(formPreviewArea); - }); - colorHslHNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.color.hsl.h; - }; - stagedLink.link.color.hsl.h = mirror.minMax(this); - mirror.data.color.by.hsl(); - mirror.value(this, mirror.inputs.color()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - colorHslSRange.addEventListener("input", function() { - stagedLink.link.color.hsl.s = parseInt(this.value, 10); - mirror.data.color.by.hsl(); - mirror.value(this, mirror.inputs.color()); - render.item.preview.delay(formPreviewArea); - }); - colorHslSNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.color.hsl.s; - }; - stagedLink.link.color.hsl.s = mirror.minMax(this); - mirror.data.color.by.hsl(); - mirror.value(this, mirror.inputs.color()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - colorHslLRange.addEventListener("input", function() { - stagedLink.link.color.hsl.l = parseInt(this.value, 10); - mirror.data.color.by.hsl(); - mirror.value(this, mirror.inputs.color()); - render.item.preview.delay(formPreviewArea); - }); - colorHslLNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.color.hsl.l; - }; - stagedLink.link.color.hsl.l = mirror.minMax(this); - mirror.data.color.by.hsl(); - mirror.value(this, mirror.inputs.color()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - colorRgbRRange.addEventListener("input", function() { - stagedLink.link.color.rgb.r = parseInt(this.value, 10); - mirror.data.color.by.rgb(); - mirror.value(this, mirror.inputs.color()); - render.item.preview.delay(formPreviewArea); - }); - colorRgbRNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.color.rgb.r; - }; - stagedLink.link.color.rgb.r = mirror.minMax(this); - mirror.data.color.by.rgb(); - mirror.value(this, mirror.inputs.color()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - colorRgbGRange.addEventListener("input", function() { - stagedLink.link.color.rgb.g = parseInt(this.value, 10); - mirror.data.color.by.rgb(); - mirror.value(this, mirror.inputs.color()); - render.item.preview.delay(formPreviewArea); - }); - colorRgbGNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.color.rgb.g; - }; - stagedLink.link.color.rgb.g = mirror.minMax(this); - mirror.data.color.by.rgb(); - mirror.value(this, mirror.inputs.color()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - colorRgbBRange.addEventListener("input", function() { - stagedLink.link.color.rgb.b = parseInt(this.value, 10); - mirror.data.color.by.rgb(); - mirror.value(this, mirror.inputs.color()); - render.item.preview.delay(formPreviewArea); - }); - colorRgbBNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.color.rgb.b; - }; - stagedLink.link.color.rgb.b = mirror.minMax(this); - mirror.data.color.by.rgb(); - mirror.value(this, mirror.inputs.color()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - colorOpacityInputRange.addEventListener("input", function(event) { - stagedLink.link.color.opacity = mod.value.convert.to.float(parseInt(this.value, 10)); - colorOpacityInputNumber.value = mod.value.convert.from.float(stagedLink.link.color.opacity); - render.item.preview.delay(formPreviewArea); - }); - colorOpacityInputNumber.addEventListener("input", function(event) { - var inputValue = parseInt(this.value, 10); - for (var key in mod.value.modify) { - if (this[key] != "") { - inputValue = mod.value.modify[key](inputValue, this); - }; - }; - stagedLink.link.color.opacity = mod.value.convert.to.float(inputValue); - colorOpacityInputRange.value = mod.value.convert.from.float(stagedLink.link.color.opacity); - var set = function(input) { - input.value = mod.value.convert.from.float(stagedLink.link.color.opacity); - }; - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - colorOpacityInputDefault.addEventListener("click", function(event) { - stagedLink.link.color.opacity = helper.getObject({ - object: state.get.default(), - path: "link.item.background.opacity" - }); - colorOpacityInputRange.value = mod.value.convert.from.float(stagedLink.link.color.opacity); - colorOpacityInputNumber.value = mod.value.convert.from.float(stagedLink.link.color.opacity); - render.item.preview.delay(formPreviewArea); - }); - accentThemeRadio.addEventListener("change", function() { - stagedLink.link.accent.by = this.value; - render.item.preview.delay(formPreviewArea); - disableForm(); - }, false); - accentCustomRadio.addEventListener("change", function() { - stagedLink.link.accent.by = this.value; - render.item.preview.delay(formPreviewArea); - disableForm(); - }, false); - accentColorPicker.addEventListener("change", function() { - mirror.data.accent.by.hex(this.value); - mirror.value(this, mirror.inputs.accent()); - render.item.preview.delay(formPreviewArea); - }, false); - accentColorHex.addEventListener("input", function() { - if (helper.isHexNumber(this.value)) { - mirror.data.accent.by.hex(this.value); - mirror.value(this, mirror.inputs.accent()); - render.item.preview.delay(formPreviewArea); - }; - }, false); - accentHslHRange.addEventListener("input", function() { - stagedLink.link.accent.hsl.h = parseInt(this.value, 10); - mirror.data.accent.by.hsl(); - mirror.value(this, mirror.inputs.accent()); - render.item.preview.delay(formPreviewArea); - }); - accentHslHNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.accent.hsl.h; - }; - stagedLink.link.accent.hsl.h = mirror.minMax(this); - mirror.data.accent.by.hsl(); - mirror.value(this, mirror.inputs.accent()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - accentHslSRange.addEventListener("input", function() { - stagedLink.link.accent.hsl.s = parseInt(this.value, 10); - mirror.data.accent.by.hsl(); - mirror.value(this, mirror.inputs.accent()); - render.item.preview.delay(formPreviewArea); - }); - accentHslSNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.accent.hsl.s; - }; - stagedLink.link.accent.hsl.s = mirror.minMax(this); - mirror.data.accent.by.hsl(); - mirror.value(this, mirror.inputs.accent()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - accentHslLRange.addEventListener("input", function() { - stagedLink.link.accent.hsl.l = parseInt(this.value, 10); - mirror.data.accent.by.hsl(); - mirror.value(this, mirror.inputs.accent()); - render.item.preview.delay(formPreviewArea); - }); - accentHslLNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.accent.hsl.l; - }; - stagedLink.link.accent.hsl.l = mirror.minMax(this); - mirror.data.accent.by.hsl(); - mirror.value(this, mirror.inputs.accent()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - accentRgbRRange.addEventListener("input", function() { - stagedLink.link.accent.rgb.r = parseInt(this.value, 10); - mirror.data.accent.by.rgb(); - mirror.value(this, mirror.inputs.accent()); - render.item.preview.delay(formPreviewArea); - }); - accentRgbRNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.accent.rgb.r; - }; - stagedLink.link.accent.rgb.r = mirror.minMax(this); - mirror.data.accent.by.rgb(); - mirror.value(this, mirror.inputs.accent()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - accentRgbGRange.addEventListener("input", function() { - stagedLink.link.accent.rgb.g = parseInt(this.value, 10); - mirror.data.accent.by.rgb(); - mirror.value(this, mirror.inputs.accent()); - render.item.preview.delay(formPreviewArea); - }); - accentRgbGNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.accent.rgb.g; - }; - stagedLink.link.accent.rgb.g = mirror.minMax(this); - mirror.data.accent.by.rgb(); - mirror.value(this, mirror.inputs.accent()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - accentRgbBRange.addEventListener("input", function() { - stagedLink.link.accent.rgb.b = parseInt(this.value, 10); - mirror.data.accent.by.rgb(); - mirror.value(this, mirror.inputs.accent()); - render.item.preview.delay(formPreviewArea); - }); - accentRgbBNumber.addEventListener("input", function() { - var set = function(input) { - input.value = stagedLink.link.accent.rgb.b; - }; - stagedLink.link.accent.rgb.b = mirror.minMax(this); - mirror.data.accent.by.rgb(); - mirror.value(this, mirror.inputs.accent()); - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - backgroundShowInput.addEventListener("change", function() { - stagedLink.link.background.show = this.checked; - render.item.preview.delay(formPreviewArea); - disableForm(); - }); - backgroundImageRadio.addEventListener("change", function(event) { - stagedLink.link.background.type = this.value; - render.item.preview.delay(formPreviewArea); - disableForm(); - }, false); - backgroundVideoRadio.addEventListener("change", function(event) { - stagedLink.link.background.type = this.value; - render.item.preview.delay(formPreviewArea); - disableForm(); - }, false); - backgroundImageUrlInput.addEventListener("input", function(event) { - stagedLink.link.background.image.url = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - backgroundVideoUrlInput.addEventListener("input", function(event) { - stagedLink.link.background.video.url = this.value; - render.item.preview.delay(formPreviewArea); - }, false); - backgroundOpacityInputRange.addEventListener("input", function(event) { - stagedLink.link.background.opacity = mod.value.convert.to.float(parseInt(this.value, 10)); - backgroundOpacityInputNumber.value = mod.value.convert.from.float(stagedLink.link.background.opacity); - render.item.preview.delay(formPreviewArea); - }); - backgroundOpacityInputNumber.addEventListener("input", function(event) { - var inputValue = parseInt(this.value, 10); - for (var key in mod.value.modify) { - if (this[key] != "") { - inputValue = mod.value.modify[key](inputValue, this); - }; - }; - stagedLink.link.background.opacity = mod.value.convert.to.float(inputValue); - backgroundOpacityInputRange.value = mod.value.convert.from.float(stagedLink.link.background.opacity); - var set = function(input) { - input.value = mod.value.convert.from.float(stagedLink.link.background.opacity); - }; - clearTimeout(mirror.delay); - mirror.delay = setTimeout(set, 500, this); - render.item.preview.delay(formPreviewArea); - }); - backgroundOpacityInputDefault.addEventListener("click", function(event) { - stagedLink.link.background.opacity = helper.getObject({ - object: state.get.default(), - path: "link.item.background.opacity" - }); - backgroundOpacityInputRange.value = mod.value.convert.from.float(stagedLink.link.background.opacity); - backgroundOpacityInputNumber.value = mod.value.convert.from.float(stagedLink.link.background.opacity); - render.item.preview.delay(formPreviewArea); - }); - wideInput.addEventListener("change", function(event) { - stagedLink.link.wide = this.checked; - render.item.preview.delay(formPreviewArea); - }, false); - tallInput.addEventListener("change", function(event) { - stagedLink.link.tall = this.checked; - render.item.preview.delay(formPreviewArea); - }, false); - - var autoSuggestAnchor = displayIconFormGroupText.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode; - - autoSuggest.bind.input({ - input: displayIconInput, - anchorElement: autoSuggestAnchor, - type: "fontawesomeIcon", - postFocus: displayIconFormGroupText - }); - - render.item.preview.clear(formPreviewArea); - render.item.preview.update(formPreviewArea); - - return formArea; - }, - preview: { - update: function(formPreviewArea) { - var previewGrid; - if (stagedLink.link.tall || stagedLink.link.wide) { - previewGrid = helper.node("div|class:link-item-preview-grid link-item-preview-grid-small is-link-show"); - } else { - previewGrid = helper.node("div|class:link-item-preview-grid link-item-preview-grid-large is-link-show"); - }; - - helper.addClass(previewGrid, "is-link-area-justify-" + state.get.current().link.area.justify); - helper.addClass(previewGrid, "is-link-style-" + state.get.current().link.style); - helper.addClass(previewGrid, "is-link-orientation-" + state.get.current().link.orientation); - if (state.get.current().link.item.url.show) { - helper.addClass(previewGrid, "is-link-item-url-show"); - }; - if (state.get.current().link.item.line.show) { - helper.addClass(previewGrid, "is-link-item-line-show"); - }; - if (state.get.current().link.item.shadow.show) { - helper.addClass(previewGrid, "is-link-item-shadow-show"); - }; - if (state.get.current().link.item.hoverScale.show) { - helper.addClass(previewGrid, "is-link-item-hoverscale-show"); - }; - - var previewHeadline; - - if (stagedLink.link.tall || stagedLink.link.wide) { - previewHeadline = helper.makeNode({ - tag: "p", - text: "Preview (scale 1:2)", - attr: [{ - key: "class", - value: "link-form-preview-headline small muted" - }] - }); - } else { - previewHeadline = helper.node("p:Preview|class:link-form-preview-headline small muted"); - }; - - var previewLinkItem = render.item.link({ - preview: true - }); - - previewGrid.appendChild(previewLinkItem); - formPreviewArea.appendChild(previewHeadline); - formPreviewArea.appendChild(previewGrid); - }, - clear: function(formPreviewArea) { - while (formPreviewArea.lastChild) { - formPreviewArea.removeChild(formPreviewArea.lastChild); - }; - }, - delay: function(formPreviewArea) { - clearTimeout(_timerLinkItemPreview); - _timerLinkItemPreview = setTimeout(function functionName() { - render.item.preview.clear(formPreviewArea); - render.item.preview.update(formPreviewArea); - }, 300); - } - }, - formCollapse: function() { - helper.eA(".link-form-collapse").forEach(function(arrayItem, index) { - helper.addClass(arrayItem, "active"); - arrayItem.getBoundingClientRect().height; - arrayItem.setAttribute("style", "--link-form-collapse-height:" + arrayItem.getBoundingClientRect().height + "px;"); - helper.removeClass(arrayItem, "active"); - }); - }, - size: function() { - var html = helper.e("html"); - html.style.setProperty("--link-item-size", state.get.current().link.item.size + "em"); - }, - tabindex: function() { - var allLinkControlItem = helper.eA(".link-control-item"); - if (state.get.current().edit) { - allLinkControlItem.forEach(function(arrayItem, index) { - arrayItem.tabIndex = 1; - }); - } else { - allLinkControlItem.forEach(function(arrayItem, index) { - arrayItem.tabIndex = -1; - }); - }; - }, - border: function() { - var html = helper.e("html"); - html.style.setProperty("--link-item-border", state.get.current().link.item.border); - } - }; - - render.all = function() { - var linkSection = helper.e(".link"); - var linkArea = helper.node("div|class:link-area"); - linkSection.appendChild(linkArea); - var make = { - bookmarks: function() { - bookmarks.get().forEach(function(arrayItem, index) { - stagedLink.init(); - stagedGroup.position.origin = index; - stagedGroup.position.destination = index; - stagedGroup.position.origin = index; - stagedGroup.group = JSON.parse(JSON.stringify(arrayItem)); - stagedLink.position.origin.group = index; - stagedLink.position.destination.group = index; - group = render.group.area(); - if (arrayItem.items.length > 0) { - arrayItem.items.forEach(function(arrayItem, index) { - stagedLink.link = JSON.parse(JSON.stringify(arrayItem)); - stagedLink.position.origin.item = index; - stagedLink.position.destination.item = index; - if (state.get.current().search) { - if (stagedLink.link.searchMatch) { - group.querySelector(".group-body").appendChild(render.item.link()); - }; - } else { - group.querySelector(".group-body").appendChild(render.item.link()); - }; - }); - } else { - group.querySelector(".group-body").appendChild(render.empty.item(stagedGroup.position.destination)); - }; - if (state.get.current().search) { - if (search.mod.searching.count.group(index) > 0) { - linkArea.appendChild(group); - }; - } else { - linkArea.appendChild(group); - }; - stagedGroup.reset(); - stagedLink.reset(); - }); - }, - empty: { - search: function() { - linkArea.appendChild(render.empty.search()); - }, - bookmarks: function() { - linkArea.appendChild(render.empty.group()); - } - } - }; - // if bookmarks exist - if (bookmarks.get().length > 0) { - // if searching - if (state.get.current().search) { - search.mod.searching.get(); - // if matching results found - if (search.mod.searching.count.all() > 0) { - make.bookmarks(); - } else { - make.empty.search(); - }; - } else { - search.mod.searching.clear(); - make.bookmarks(); - }; - } else { - // if searching - if (state.get.current().search) { - make.empty.search(); - } else { - make.empty.bookmarks(); - }; - }; - }; - - render.empty = { - group: function() { - var group = helper.node("div|class:group"); - var groupBody = helper.node("div|class:group-body"); - var linkEmpty = helper.node("div|class:link-empty link-item"); - var para = helper.node("p:No Groups or Bookmarks|class:small muted"); - var addButton = helper.node("button:Add a Bookmark|class:button button-line button-small,type:button,tabindex:1"); - linkEmpty.appendChild(para); - linkEmpty.appendChild(addButton); - groupBody.appendChild(linkEmpty); - group.appendChild(groupBody); - addButton.addEventListener("click", function(event) { - add.item.open(); - }, false); - return group; - }, - item: function(groupIndex) { - var linkEmpty = helper.node("div|class:link-empty link-item"); - var para = helper.node("p:Empty Group|class:small muted"); - var addButton = helper.node("button:Add a Bookmark|class:button button-line button-small,type:button,tabindex:1"); - linkEmpty.appendChild(para); - linkEmpty.appendChild(addButton); - addButton.addEventListener("click", function(event) { - add.item.open(); - add.item.selectGroup(groupIndex); - }, false); - return linkEmpty; - }, - search: function() { - var group = helper.node("div|class:group"); - var groupBody = helper.node("div|class:group-body"); - var linkEmpty = helper.node("div|class:link-empty link-item"); - var para1 = helper.makeNode({ - tag: "p", - text: "No bookmarks matching \"" + helper.e(".search-input").value + "\" found" - }); - var para2 = helper.node("p:\"Enter\" to Search " + state.get.current().header.search.engine[state.get.current().header.search.engine.selected].name + ".|class:small muted"); - linkEmpty.appendChild(para1); - linkEmpty.appendChild(para2); - groupBody.appendChild(linkEmpty); - group.appendChild(groupBody); - return group; - } - }; - - render.focus = { - group: { - previous: { - remove: function(copyStagedGroup) { - var allGroup = helper.eA(".group"); - var target = copyStagedGroup.position.origin - 1; - if (target < 0) { - target = 0; - }; - if (allGroup.length > 0) { - if (allGroup[target].querySelector(".group-control-item-remove")) { - allGroup[target].querySelector(".group-control-item-remove").focus(); - }; - } else { - helper.e("body").focus(); - }; - }, - up: function(copyStagedGroup) { - var allGroup = helper.eA(".group"); - var target = copyStagedGroup.position.origin - 1; - if (target < 0) { - target = 0; - }; - if (allGroup.length > 0) { - if (allGroup[target].querySelector(".group-control-item-up")) { - allGroup[target].querySelector(".group-control-item-up").focus(); - }; - } else { - helper.e("body").focus(); - }; - } - }, - next: { - down: function(copyStagedGroup) { - var allGroup = helper.eA(".group"); - var target = copyStagedGroup.position.origin + 1; - if (target > allGroup.length - 1) { - target = allGroup.length - 1; - }; - if (allGroup.length > 0) { - if (allGroup[target].querySelector(".group-control-item-down")) { - allGroup[target].querySelector(".group-control-item-down").focus(); - }; - } else { - helper.e("body").focus(); - }; - } - }, - current: { - edit: function(copyStagedGroup) { - var allGroup = helper.eA(".group"); - var target = copyStagedGroup.position.destination; - if (allGroup.length > 0) { - if (allGroup[target].querySelector(".group-control-item-edit")) { - allGroup[target].querySelector(".group-control-item-edit").focus(); - }; - } else { - helper.e("body").focus(); - }; - } - } - }, - item: { - previous: { - remove: function(copyStagedLink) { - var allGroup = helper.eA(".group"); - var allLinkItem = allGroup[copyStagedLink.position.origin.group].querySelectorAll(".link-item"); - var target = copyStagedLink.position.origin.item - 1; - if (target < 0) { - target = 0; - }; - if (allLinkItem.length > 0) { - if (allLinkItem[target].querySelector(".link-control-item-remove")) { - allLinkItem[target].querySelector(".link-control-item-remove").focus(); - }; - } else { - helper.e("body").focus(); - }; - }, - left: function(copyStagedLink) { - var allGroup = helper.eA(".group"); - var allLinkItem = allGroup[copyStagedLink.position.origin.group].querySelectorAll(".link-item"); - var target = copyStagedLink.position.origin.item - 1; - if (target < 0) { - target = 0; - }; - if (allLinkItem.length > 0) { - if (allLinkItem[target].querySelector(".link-control-item-left")) { - allLinkItem[target].querySelector(".link-control-item-left").focus(); - }; - } else { - helper.e("body").focus(); - }; - } - }, - next: { - right: function(copyStagedLink) { - var allGroup = helper.eA(".group"); - var allLinkItem = allGroup[copyStagedLink.position.origin.group].querySelectorAll(".link-item"); - var target = copyStagedLink.position.origin.item + 1; - if (target > allLinkItem.length - 1) { - target = allLinkItem.length - 1; - }; - if (allLinkItem.length > 0) { - if (allLinkItem[target].querySelector(".link-control-item-right")) { - allLinkItem[target].querySelector(".link-control-item-right").focus(); - }; - } else { - helper.e("body").focus(); - }; - } - }, - current: { - edit: function(copyStagedLink) { - var allGroup = helper.eA(".group"); - var allLinkItem = allGroup[copyStagedLink.position.destination.group].querySelectorAll(".link-item"); - var target = copyStagedLink.position.destination.item; - if (copyStagedLink.position.group.new) { - allLinkItem[0].querySelector(".link-control-item-edit").focus(); - } else { - if (allLinkItem.length > 0) { - allLinkItem[target].querySelector(".link-control-item-edit").focus(); - } else { - helper.e("body").focus(); - }; - }; - } - } - } - }; - - render.autoSuggestIconAction = function(autoSuggestData) { - stagedLink.link.display.visual.icon.label = autoSuggestData.label; - stagedLink.link.display.visual.icon.name = autoSuggestData.name; - if (autoSuggestData.styles.includes("solid")) { - stagedLink.link.display.visual.icon.prefix = "fas"; - } else if (autoSuggestData.styles.includes("brands")) { - stagedLink.link.display.visual.icon.prefix = "fab"; - }; - var existingIcon = helper.e(".link-form-icon"); - if (existingIcon) { - existingIcon.remove(); - }; - helper.e(".link-form-input-icon").value = autoSuggestData.label; - helper.e(".link-form-text-icon").appendChild(helper.node("span|class:link-form-icon " + stagedLink.link.display.visual.icon.prefix + " fa-" + stagedLink.link.display.visual.icon.name)); - helper.e(".link-form-text-icon").focus(); - render.item.preview.delay(helper.e(".link-form-preview-area")); - }; - - render.add = { - item: { - open: function() { - stagedLink.init(); - if (bookmarks.get().length > 0) { - stagedLink.position.destination.item = bookmarks.get()[0].items.length; - }; - var form = render.item.form(); - var successAction = function() { - stagedLink.link.timeStamp = new Date().getTime(); - bookmarks.mod.add.link(JSON.parse(JSON.stringify(stagedLink))); - add.item.close(); - data.save(); - groupAndItems(); - control.render.dependents(); - control.render.class(); - shade.close(); - pagelock.unlock(); - }; - var cancelAction = function() { - add.item.close(); - shade.close(); - }; - modal.open({ - heading: "Add a new Bookmark", - successAction: successAction, - cancelAction: cancelAction, - actionText: "Add", - content: form, - width: 55 - }); - shade.open({ - action: function() { - add.item.close(); - modal.close(); - } - }); - pagelock.lock(); - render.item.formCollapse(); - }, - close: function() { - stagedLink.reset(); - autoSuggest.close(); - pagelock.unlock(); - mod.collapse.reset(); - }, - selectGroup: function(groupIndex) { - stagedGroup.init(); - stagedLink.position.destination.group = groupIndex; - stagedLink.position.destination.item = 0; - helper.e(".link-form-select-group").selectedIndex = stagedLink.position.destination.group; - var linkFormPosition = helper.e(".link-form-position"); - while (linkFormPosition.lastChild) { - linkFormPosition.removeChild(linkFormPosition.lastChild); - }; - linkFormPosition.appendChild(helper.node("option:" + helper.ordinalNumber(1))); - } - }, - group: { - open: function() { - stagedGroup.init(); - if (bookmarks.get().length > 0) { - stagedGroup.position.destination = bookmarks.get().length; - }; - var successAction = function() { - bookmarks.mod.add.group(JSON.parse(JSON.stringify(stagedGroup))); - add.group.close(); - data.save(); - groupAndItems(); - control.render.dependents(); - control.render.class(); - shade.close(); - pagelock.unlock(); - }; - var cancelAction = function() { - add.group.close(); - shade.close(); - }; - modal.open({ - heading: "Add a new Group", - successAction: successAction, - cancelAction: cancelAction, - actionText: "Add", - size: "small", - content: render.group.form({ - new: true - }) - }); - shade.open({ - action: function() { - add.group.close(); - modal.close(); - } - }); - pagelock.lock(); - }, - close: function() { - stagedGroup.reset(); - autoSuggest.close(); - pagelock.unlock(); - } - } - }; - - render.edit = { - item: { - open: function(copyStagedLink) { - stagedLink.link = JSON.parse(JSON.stringify(copyStagedLink.link)); - stagedLink.position = JSON.parse(JSON.stringify(copyStagedLink.position)); - var form = render.item.form({ - useStagedLink: true - }); - var heading; - if (helper.checkIfValidString(stagedLink.link.display.name.text)) { - heading = "Edit " + stagedLink.link.display.name.text; - } else { - heading = "Edit unnamed bookmark"; - }; - var successAction = function() { - var copyStagedLink = JSON.parse(JSON.stringify(stagedLink)); - bookmarks.mod.edit.link(copyStagedLink); - edit.item.close(); - data.save(); - groupAndItems(); - if (!state.get.current().search) { - render.focus.item.current.edit(copyStagedLink); - }; - autoSuggest.close(); - shade.close(); - pagelock.unlock(); - }; - var cancelAction = function() { - edit.item.close(); - shade.close(); - }; - modal.open({ - heading: heading, - successAction: successAction, - cancelAction: cancelAction, - actionText: "Save", - content: form, - width: 55 - }); - shade.open({ - action: function() { - edit.item.close(); - modal.close(); - } - }); - pagelock.lock(); - render.item.formCollapse(); - }, - close: function() { - stagedLink.reset(); - autoSuggest.close(); - pagelock.unlock(); - mod.collapse.reset(); - } - }, - group: { - open: function(copyStagedGroup) { - stagedGroup.group = JSON.parse(JSON.stringify(copyStagedGroup.group)); - stagedGroup.position = JSON.parse(JSON.stringify(copyStagedGroup.position)); - var form = render.group.form({ - useStagedGroup: true - }); - var heading; - if (helper.checkIfValidString(stagedGroup.group.name.text)) { - heading = "Edit " + stagedGroup.group.name.text; - } else { - heading = "Edit unnamed group " + (stagedGroup.position.origin + 1); - }; - var successAction = function() { - var copyStagedGroup = JSON.parse(JSON.stringify(stagedGroup)); - bookmarks.mod.edit.group(copyStagedGroup); - edit.group.close(); - data.save(); - groupAndItems(); - if (!state.get.current().search) { - render.focus.group.current.edit(copyStagedGroup); - }; - autoSuggest.close(); - shade.close(); - pagelock.unlock(); - }; - var cancelAction = function() { - edit.group.close(); - shade.close(); - }; - modal.open({ - heading: heading, - successAction: successAction, - cancelAction: cancelAction, - actionText: "Save", - size: "small", - content: form - }); - shade.open({ - action: function() { - edit.group.close(); - modal.close(); - } - }); - pagelock.lock(); - }, - close: function() { - stagedGroup.reset(); - autoSuggest.close(); - pagelock.unlock(); - } - } - }; - - render.remove = { - item: function(copyStagedLink) { - stagedLink.link = JSON.parse(JSON.stringify(copyStagedLink.link)); - stagedLink.position = JSON.parse(JSON.stringify(copyStagedLink.position)); - var heading; - if (helper.checkIfValidString(stagedLink.link.display.name.text)) { - heading = "Remove " + stagedLink.link.display.name.text; - } else { - heading = "Remove unnamed bookmark"; - }; - var successAction = function() { - var copyStagedLink = JSON.parse(JSON.stringify(stagedLink)); - bookmarks.remove.link(copyStagedLink); - edit.mode.check(); - data.save(); - groupAndItems(); - control.render.dependents(); - control.render.class(); - if (!state.get.current().search) { - render.focus.item.previous.remove(copyStagedLink); - }; - shade.close(); - pagelock.unlock(); - stagedLink.reset(); - }; - var cancelAction = function() { - stagedLink.reset(); - shade.close(); - pagelock.unlock(); - }; - modal.open({ - heading: heading, - content: "Are you sure you want to remove this Bookmark? This can not be undone.", - successAction: successAction, - cancelAction: cancelAction, - actionText: "Remove", - size: "small" - }); - shade.open({ - action: function() { - stagedLink.reset(); - autoSuggest.close(); - pagelock.unlock(); - modal.close(); - } - }); - pagelock.lock(); - }, - group: function(copyStagedGroup) { - stagedGroup.group = JSON.parse(JSON.stringify(copyStagedGroup.group)); - stagedGroup.position = JSON.parse(JSON.stringify(copyStagedGroup.position)); - var heading; - if (helper.checkIfValidString(stagedGroup.group.name.text)) { - heading = "Remove " + stagedGroup.group.name.text; - } else { - heading = "Remove unnamed group " + (stagedGroup.position.origin + 1); - }; - var successAction = function() { - var copyStagedGroup = JSON.parse(JSON.stringify(stagedGroup)); - bookmarks.remove.group(copyStagedGroup); - edit.mode.check(); - data.save(); - groupAndItems(); - control.render.dependents(); - control.render.class(); - if (!state.get.current().search) { - render.focus.group.previous.remove(copyStagedGroup); - }; - shade.close(); - pagelock.unlock(); - stagedGroup.reset(); - }; - var cancelAction = function() { - stagedGroup.reset(); - shade.close(); - pagelock.unlock(); - }; - modal.open({ - heading: heading, - content: "Are you sure you want to remove this Group and all the Bookmarks within? This can not be undone.", - successAction: successAction, - cancelAction: cancelAction, - actionText: "Remove", - size: "small" - }); - shade.open({ - action: function() { - stagedGroup.reset(); - autoSuggest.close(); - pagelock.unlock(); - modal.close(); - } - }); - pagelock.lock(); - } - }; - - render.breakpoint = { - add: function() { - var html = helper.e("html"); - switch (state.get.current().link.breakpoint) { - case "xs": - helper.addClass(html, "is-link-breakpoint-xs"); - break - case "sm": - helper.addClass(html, "is-link-breakpoint-sm"); - break - case "md": - helper.addClass(html, "is-link-breakpoint-md"); - break - case "lg": - helper.addClass(html, "is-link-breakpoint-lg"); - break - case "xl": - helper.addClass(html, "is-link-breakpoint-xl"); - break - case "xxl": - helper.addClass(html, "is-link-breakpoint-xxl"); - break - }; - }, - remove: function() { - var html = helper.e("html"); - helper.removeClass(html, "is-link-breakpoint-xs"); - helper.removeClass(html, "is-link-breakpoint-sm"); - helper.removeClass(html, "is-link-breakpoint-md"); - helper.removeClass(html, "is-link-breakpoint-lg"); - helper.removeClass(html, "is-link-breakpoint-xl"); - helper.removeClass(html, "is-link-breakpoint-xxl"); - }, - update: function() { - render.breakpoint.remove(); - render.breakpoint.add(); - } - }; - - var add = { - item: { - open: function() { - mod.add.item.open(); - render.add.item.open(); - }, - close: function() { - mod.add.item.close(); - render.add.item.close(); - }, - selectGroup: function(groupIndex) { - render.add.item.selectGroup(groupIndex); - } - }, - group: { - open: function() { - mod.add.group.open(); - render.add.group.open(); - }, - close: function() { - mod.add.group.close(); - render.add.group.close(); - } - } - }; - - var edit = { - mode: { - open: function() { - mod.edit.mode.open(); - control.render.update.control.header(); - control.render.update.control.menu(); - control.render.class(); - }, - close: function() { - mod.edit.mode.close(); - control.render.update.control.header(); - control.render.update.control.menu(); - control.render.class(); - }, - check: function() { - if (bookmarks.get().length <= 0) { - edit.mode.close(); - }; - }, - toggle: function() { - if (state.get.current().edit) { - edit.mode.close(); - } else { - edit.mode.open(); - }; - render.group.tabindex(); - render.item.tabindex(); - } - }, - item: { - open: function(copyStagedLink) { - mod.edit.item.open(); - render.edit.item.open(copyStagedLink); - }, - close: function() { - mod.edit.item.close(); - render.edit.item.close(); - } - }, - group: { - open: function(copyStagedGroup) { - mod.edit.group.open(); - render.edit.group.open(copyStagedGroup); - }, - close: function() { - mod.edit.group.close(); - render.edit.group.close(); - } - } - }; - - var tabindex = function() { - render.group.tabindex(); - render.item.tabindex(); - }; - - var groupAndItems = function() { - if (helper.e(".link-area")) { - bind.resize.unobserve(helper.e(".link-area")); - }; - render.clear.item(); - render.clear.group(); - render.all(); - render.group.tabindex(); - render.item.tabindex(); - bind.resize.observe(helper.e(".link-area")); - if (!state.get.current().search) { - bind.sort.group(); - bind.sort.item(); - }; - }; - - var init = function() { - mod.add.item.close(); - mod.add.group.close(); - groupAndItems(); - render.group.name.size(); - render.group.openall.size(); - render.group.openall.opacity(); - render.group.border(); - render.item.size(); - render.item.border(); - render.area.width(); - }; - - // exposed methods - return { - init: init, - mod: mod, - render: render, - add: add, - edit: edit, - tabindex: tabindex, - groupAndItems: groupAndItems, - stagedLink: stagedLink, - stagedGroup: stagedGroup - }; - -})(); diff --git a/src/js/menu.js b/src/js/menu.js deleted file mode 100644 index 698f9b68..00000000 --- a/src/js/menu.js +++ /dev/null @@ -1,279 +0,0 @@ -var menu = (function() { - - var mod = {}; - - mod.open = function() { - helper.setObject({ - object: state.get.current(), - path: "menu", - newValue: true - }); - }; - - mod.close = function() { - helper.setObject({ - object: state.get.current(), - path: "menu", - newValue: false - }); - }; - - mod.nav = { - state: { - layout: true, - header: false, - bookmarks: false, - groups: false, - theme: false, - background: false, - data: false, - coffee: false, - firefox: false, - nighttab: false - }, - toggle: function(name) { - for (var key in mod.nav.state) { - mod.nav.state[key] = false; - }; - mod.nav.state[name] = true; - } - }; - - var bind = {}; - - bind.focus = { - loop: function(event) { - var firstElement = helper.e(".control-menu-layout"); - var lastElement = helper.e(".menu-close-tab"); - 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(); - } - }; - }, - add: function() { - window.addEventListener("keydown", bind.focus.loop, false); - }, - remove: function() { - window.removeEventListener("keydown", bind.focus.loop, false); - } - }; - - render = {}; - - render.panel = function() { - if (state.get.current().menu) { - helper.addClass(helper.e("html"), "is-menu-open"); - } else { - helper.removeClass(helper.e("html"), "is-menu-open"); - }; - }; - - render.nav = { - active: function() { - for (var key in mod.nav.state) { - if (mod.nav.state[key]) { - helper.removeClass(helper.e(".menu-content-" + key), "is-hidden"); - } else { - helper.addClass(helper.e(".menu-content-" + key), "is-hidden"); - }; - }; - }, - tabindex: function() { - var menu = helper.e(".menu"); - var menuCloseTab = helper.e(".menu-close-tab"); - var allMenuContent = helper.eA(".menu-content"); - allMenuContent.forEach(function(arrayItem, index) { - arrayItem.querySelectorAll("[tabindex]").forEach(function(arrayItem, index) { - if (state.get.current().menu) { - arrayItem.tabIndex = 1; - } else { - arrayItem.tabIndex = -1; - }; - }); - }); - if (state.get.current().menu) { - menu.tabIndex = 1; - menuCloseTab.tabIndex = 2; - } else { - menu.tabIndex = -1; - menuCloseTab.tabIndex = -1; - }; - }, - scroll: function() { - if (window.innerWidth < 700) { - helper.e(".menu-area").scrollTop = 0; - } else { - for (var key in mod.nav.state) { - if (mod.nav.state[key]) { - helper.e(".menu-content-" + key).scrollTop = 0; - }; - }; - }; - } - }; - - render.tab = { - active: function() { - for (var key in mod.nav.state) { - var controlMenu = helper.e(".control-menu-" + key); - if (mod.nav.state[key]) { - helper.addClass(controlMenu, "active"); - } else { - helper.removeClass(controlMenu, "active"); - }; - }; - }, - tabindex: function() { - var allMenuNavTab = helper.eA(".menu-nav-tab"); - allMenuNavTab.forEach(function(arrayItem, index) { - if (state.get.current().menu) { - arrayItem.tabIndex = 1; - } else { - arrayItem.tabIndex = -1; - }; - }); - } - }; - - render.subnav = { - active: function() { - for (var key in mod.nav.state) { - var menuSubnav = helper.e(".menu-subnav-" + key); - if (menuSubnav) { - if (mod.nav.state[key]) { - helper.addClass(menuSubnav, "active"); - } else { - helper.removeClass(menuSubnav, "active"); - }; - }; - }; - }, - tabindex: function() { - for (var key in mod.nav.state) { - var menuNavBody = helper.e(".menu-subnav-" + key); - if (menuNavBody) { - menuNavBody.querySelectorAll("[tabindex]").forEach(function(arrayItem, index) { - if (mod.nav.state[key] && state.get.current().menu) { - arrayItem.tabIndex = 1; - } else { - arrayItem.tabIndex = -1; - }; - }); - }; - }; - }, - height: function() { - var allMenuNavBody = helper.eA(".menu-subnav"); - allMenuNavBody.forEach(function(arrayItem, index) { - helper.addClass(arrayItem, "active"); - arrayItem.setAttribute("style", "--menu-subnav-height: " + arrayItem.getBoundingClientRect().height + "px;"); - helper.removeClass(arrayItem, "active"); - }); - } - }; - - render.focus = function() { - helper.e(".menu").focus(); - }; - - render.removeStyle = function() { - helper.e(".menu").removeAttribute("style"); - }; - - render.firefoxSpecific = function() { - var firefoxBrowser = typeof InstallTrigger !== "undefined"; - if (firefoxBrowser) { - helper.removeClass(helper.e(".menu-nav-item-firefox"), "is-hidden"); - } else { - helper.addClass(helper.e(".menu-nav-item-firefox"), "is-hidden"); - }; - }; - - var nav = function(name) { - mod.nav.toggle(name); - render.nav.active(); - render.nav.tabindex(); - render.tab.active(); - render.tab.tabindex(); - render.subnav.active(); - render.subnav.tabindex(); - render.nav.scroll(); - }; - - var open = function() { - mod.open(); - render.panel(); - render.focus(); - render.nav.active(); - render.nav.tabindex(); - render.tab.active(); - render.tab.tabindex(); - render.subnav.active(); - render.subnav.tabindex(); - bind.focus.add(); - shade.open({ - action: function() { - mod.close(); - render.panel(); - render.nav.active(); - render.nav.tabindex(); - render.tab.active(); - render.tab.tabindex(); - render.subnav.active(); - render.subnav.tabindex(); - bind.focus.remove(); - pagelock.unlock(); - } - }); - pagelock.lock(); - }; - - var close = function() { - mod.close(); - render.panel(); - render.nav.active(); - render.nav.tabindex(); - render.tab.active(); - render.tab.tabindex(); - render.subnav.active(); - render.subnav.tabindex(); - bind.focus.remove(); - shade.close(); - pagelock.unlock(); - }; - - var toggle = function() { - if (state.get.current().menu) { - close(); - } else { - open(); - }; - }; - - var init = function() { - mod.close(); - render.removeStyle(); - render.subnav.height(); - render.nav.active(); - render.firefoxSpecific(); - }; - - return { - init: init, - mod: mod, - bind: bind, - render: render, - open: open, - close: close, - toggle: toggle, - nav: nav - }; - -})(); diff --git a/src/js/modal.js b/src/js/modal.js deleted file mode 100644 index ae651c62..00000000 --- a/src/js/modal.js +++ /dev/null @@ -1,206 +0,0 @@ -var modal = (function() { - - var _previousModal = null; - - var _maxHeadingLength = 50; - - var mod = {}; - - mod.open = function() { - helper.setObject({ - object: state.get.current(), - path: "modal", - newValue: true - }); - }; - - mod.close = function() { - helper.setObject({ - object: state.get.current(), - path: "modal", - newValue: false - }); - }; - - var bind = {}; - - bind.focus = { - loop: function(event) { - var allElements = helper.e(".modal").querySelectorAll("[tabindex]"); - var firstElement = allElements[0]; - var lastElement = allElements[allElements.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(); - } - }; - }, - add: function() { - window.addEventListener("keydown", bind.focus.loop, false); - }, - remove: function() { - window.removeEventListener("keydown", bind.focus.loop, false); - } - }; - - var render = {}; - - render.toggle = function(override) { - if (state.get.current().modal) { - render.open(override); - } else { - render.close(); - }; - }; - - render.close = function() { - var allModal = helper.eA(".modal"); - if (allModal[0]) { - for (var i = 0; i < allModal.length; i++) { - allModal[i].close(); - }; - }; - _previousModal = null; - }; - - render.open = function(override) { - var options = { - heading: "Modal", - content: "Body", - successAction: null, - cancelAction: null, - actionText: "OK", - cancelText: "Cancel", - size: "medium", - width: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - var _makeModal = function() { - var body = helper.e("body"); - var modal = helper.node("div|class:modal"); - var modalWrapper = helper.node("div|class:modal-wrapper"); - if (options.width && typeof options.width == "number") { - modal.setAttribute("style", "--modal-size: " + options.width + "em;"); - } else if (options.size == "small") { - modal.setAttribute("style", "--modal-size: var(--modal-small);"); - } else if (options.size == "medium") { - modal.setAttribute("style", "--modal-size: var(--modal-medium);"); - } else if (options.size == "large") { - modal.setAttribute("style", "--modal-size: var(--modal-large);"); - }; - modal.close = function() { - if (modal.classList.contains("is-opaque")) { - helper.removeClass(modal, "is-opaque"); - helper.addClass(modal, "is-transparent"); - } else { - modal.remove(); - }; - bind.focus.remove(); - }; - var modalBody = helper.node("div|class:modal-body"); - var modalBodySpacer = helper.node("div|class:modal-body-spacer"); - var modalControls = helper.node("div|class:modal-controls form-group"); - var actionButton = helper.node("button:" + options.actionText + "|class:button button-line button-block modal-button,tabindex:1"); - var cancelButton = helper.node("button:" + options.cancelText + "|class:button button-line button-block modal-button,tabindex:1"); - modalControls.appendChild(cancelButton); - modalControls.appendChild(actionButton); - if (options.heading != null) { - if (options.heading.length > _maxHeadingLength) { - options.heading = options.heading.substring(0, _maxHeadingLength).replace(/\s+$/, "") + "..."; - }; - var modalHeading = helper.makeNode({ - tag: "h1", - text: options.heading, - attr: [{ - key: "class", - value: "modal-heading" - }, { - key: "tabindex", - value: 1 - }] - }); - modalBodySpacer.appendChild(modalHeading); - }; - if (options.content) { - if (typeof options.content == "string") { - var container = helper.node("div|class:container"); - var para = helper.makeNode({ - tag: "p", - text: options.content - }); - container.appendChild(para); - modalBodySpacer.appendChild(container); - } else { - modalBodySpacer.appendChild(options.content); - }; - }; - modalBody.appendChild(modalBodySpacer); - modalWrapper.appendChild(modalBody); - modalWrapper.appendChild(modalControls); - modal.appendChild(modalWrapper); - modal.addEventListener("transitionend", function(event, elapsed) { - if (event.propertyName === "opacity" && getComputedStyle(this).opacity == 0) { - this.parentElement.removeChild(this); - }; - }.bind(modal), false); - actionButton.addEventListener("click", function(event) { - if (options.successAction) { - options.successAction(); - }; - this.close(); - }.bind(modal), false); - cancelButton.addEventListener("click", function(event) { - if (options.cancelAction) { - options.cancelAction(); - }; - close(); - }.bind(modal), false); - _previousModal = modal; - body.appendChild(modal); - getComputedStyle(modal).opacity; - helper.removeClass(modal, "is-transparent"); - helper.addClass(modal, "is-opaque"); - modalHeading.focus(this); - }; - if (_previousModal != null) { - render.close(); - }; - _makeModal(); - }; - - var open = function(override) { - mod.open(); - render.open(override); - bind.focus.add(); - }; - - var close = function() { - mod.close(); - render.close(); - bind.focus.remove(); - }; - - var init = function() { - mod.close(); - render.close(); - }; - - // exposed methods - return { - init: init, - mod: mod, - bind: bind, - render: render, - open: open, - close: close - }; - -})(); diff --git a/src/js/pagelock.js b/src/js/pagelock.js deleted file mode 100644 index 70b61d11..00000000 --- a/src/js/pagelock.js +++ /dev/null @@ -1,71 +0,0 @@ -var pagelock = (function() { - - var mod = {}; - - mod.lock = function() { - helper.setObject({ - object: state.get.current(), - path: "pagelock", - newValue: true - }); - }; - - mod.unlock = function() { - helper.setObject({ - object: state.get.current(), - path: "pagelock", - newValue: false - }); - }; - - mod.toggle = function() { - if (state.get.current().menu || state.get.current().modal || state.get.current().autoSuggest) { - mod.lock(); - } else { - mod.unlock(); - }; - }; - - var render = {}; - - render.lock = function() { - helper.addClass(helper.e("body"), "scroll-disabled"); - }; - - render.unlock = function() { - helper.removeClass(helper.e("body"), "scroll-disabled"); - }; - - render.toggle = function() { - if (state.get.current().pagelock) { - render.lock(); - } else { - render.unlock(); - }; - }; - - var lock = function() { - mod.lock(); - render.toggle(); - }; - - var unlock = function() { - mod.unlock(); - render.unlock(); - }; - - var toggle = function() { - mod.toggle(); - render.toggle(); - }; - - // exposed methods - return { - mod: mod, - render: render, - toggle: toggle, - lock: lock, - unlock: unlock - }; - -})(); diff --git a/src/js/ready.js b/src/js/ready.js deleted file mode 100644 index e9da538b..00000000 --- a/src/js/ready.js +++ /dev/null @@ -1,35 +0,0 @@ -var ready = (function() { - - var _timer = null; - - var bind = {}; - - bind.loaded = { - func: function() { - render.loaded(); - clearTimeout(_timer); - }, - timer: function() { - _timer = setTimeout(bind.loaded.func, 300); - } - }; - - var render = {}; - - render.loaded = function() { - var html = helper.e("html"); - helper.addClass(html, "is-ready"); - }; - - var init = function() { - bind.loaded.timer(); - }; - - // exposed methods - return { - init: init, - bind: bind, - render: render - }; - -})(); diff --git a/src/js/search.js b/src/js/search.js deleted file mode 100644 index c7d3ea15..00000000 --- a/src/js/search.js +++ /dev/null @@ -1,180 +0,0 @@ -var search = (function() { - - var bind = {}; - - bind.input = function() { - if (state.get.current().header.search.show) { - var searchInput = helper.e(".search-input"); - searchInput.addEventListener("input", function() { - check(); - }, false); - }; - }; - - bind.clear = function() { - if (state.get.current().header.search.show) { - var searchClear = helper.e(".search-clear"); - searchClear.addEventListener("click", function() { - mod.searching.close(); - render.clear.input(); - render.clear.button(); - render.searching(); - link.groupAndItems(); - }, false); - }; - }; - - var mod = {}; - - mod.searching = { - open: function() { - helper.setObject({ - object: state.get.current(), - path: "search", - newValue: true - }); - }, - close: function() { - helper.setObject({ - object: state.get.current(), - path: "search", - newValue: false - }); - }, - get: function() { - var searchInput = helper.e(".search-input"); - var string = helper.trimString(searchInput.value).toLowerCase(); - if (state.get.current().search) { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.searchMatch = false; - var matchUrl = helper.checkIfValidString(arrayItem.url) && arrayItem.url.toLowerCase().includes(string); - var matchName = helper.checkIfValidString(arrayItem.name) && helper.trimString(arrayItem.name).toLowerCase().includes(string); - if (matchUrl || matchName) { - arrayItem.searchMatch = true; - }; - }); - }); - }; - }, - clear: function() { - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - arrayItem.searchMatch = false; - }); - }); - }, - count: { - all: function() { - var searchResultCount = 0; - bookmarks.get().forEach(function(arrayItem, index) { - arrayItem.items.forEach(function(arrayItem, index) { - if (arrayItem.searchMatch) { - searchResultCount = searchResultCount + 1; - }; - }); - }); - return searchResultCount; - }, - group: function(index) { - var searchResultCount = 0; - if (bookmarks.get()[index]) { - bookmarks.get()[index].items.forEach(function(arrayItem, index) { - if (arrayItem.searchMatch) { - searchResultCount = searchResultCount + 1; - }; - }); - }; - return searchResultCount; - } - } - }; - - var render = {}; - - render.engine = function() { - if (state.get.current().header.search.show) { - var search = helper.e(".search"); - var searchInput = helper.e(".search-input"); - var placeholder = ""; - if (state.get.current().link.show) { - placeholder = "Find bookmarks or search"; - } else { - placeholder = "Search"; - }; - placeholder = placeholder + " " + state.get.current().header.search.engine[state.get.current().header.search.engine.selected].name; - searchInput.setAttribute("placeholder", placeholder); - search.setAttribute("action", state.get.current().header.search.engine[state.get.current().header.search.engine.selected].url); - }; - }; - - render.clear = {}; - - render.clear.input = function() { - var searchInput = helper.e(".search-input"); - searchInput.value = ""; - searchInput.focus(); - }; - - render.clear.button = function() { - var searchClear = helper.e(".search-clear"); - if (state.get.current().search) { - searchClear.removeAttribute("disabled"); - } else { - searchClear.setAttribute("disabled", ""); - }; - }; - - render.focus = function() { - if (state.get.current().header.search.show && state.get.current().header.search.focus) { - window.addEventListener("load", function(event) { - helper.e(".search-input").focus(); - }); - }; - }; - - render.searching = function() { - var html = helper.e("html"); - if (state.get.current().search) { - helper.addClass(html, "is-header-searching"); - } else { - helper.removeClass(html, "is-header-searching"); - }; - }; - - render.check = function() { - var searchInput = helper.e(".search-input"); - if (helper.checkIfValidString(searchInput.value)) { - mod.searching.open(); - } else { - mod.searching.close(); - }; - }; - - var check = function() { - render.check(); - render.searching(); - render.clear.button(); - link.groupAndItems(); - }; - - var init = function() { - bind.input(); - bind.clear(); - mod.searching.close(); - mod.searching.clear(); - render.engine(); - render.focus(); - render.searching(); - }; - - // exposed methods - return { - init: init, - mod: mod, - bind: bind, - render: render, - check: check - }; - -})(); diff --git a/src/js/shade.js b/src/js/shade.js deleted file mode 100644 index 984267c1..00000000 --- a/src/js/shade.js +++ /dev/null @@ -1,127 +0,0 @@ -var shade = (function() { - - var _previousShade = null; - - var mod = {}; - - mod.open = function() { - helper.setObject({ - object: state.get.current(), - path: "shade", - newValue: true - }); - }; - - mod.close = function() { - helper.setObject({ - object: state.get.current(), - path: "shade", - newValue: false - }); - }; - - mod.toggle = function() { - if (state.get.current().shade) { - helper.setObject({ - object: state.get.current(), - path: "shade", - newValue: false - }); - } else { - helper.setObject({ - object: state.get.current(), - path: "shade", - newValue: true - }); - }; - }; - - var render = {}; - - render.toggle = function(override) { - if (state.get.current().shade) { - render.open(override); - } else { - render.close(); - }; - }; - - render.close = function() { - var allShade = helper.eA(".shade"); - if (allShade[0]) { - for (var i = 0; i < allShade.length; i++) { - allShade[i].close(); - }; - }; - }; - - render.open = function(override) { - var options = { - action: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - var _makeShade = function() { - mod.open(); - var body = helper.e("body"); - var shade = document.createElement("div"); - shade.setAttribute("class", "shade"); - shade.close = function() { - if (shade.classList.contains("is-opaque")) { - helper.removeClass(shade, "is-opaque"); - helper.addClass(shade, "is-transparent"); - } else { - shade.remove(); - }; - mod.close(); - _previousShade = null; - }; - shade.addEventListener("transitionend", function(event, elapsed) { - if (event.propertyName === "opacity" && getComputedStyle(this).opacity == 0) { - this.parentElement.removeChild(this); - }; - }.bind(shade), false); - shade.addEventListener("click", function() { - if (options.action) { - options.action(); - }; - this.close(); - }, false); - _previousShade = shade; - body.appendChild(shade); - getComputedStyle(shade).opacity; - helper.removeClass(shade, "is-transparent"); - helper.addClass(shade, "is-opaque"); - }; - if (_previousShade != null) { - render.close(); - }; - _makeShade(); - }; - - var open = function(override) { - mod.open(); - render.open(override); - }; - - var close = function() { - mod.close(); - render.close(); - }; - - var init = function() { - mod.close(); - render.close(); - }; - - // exposed methods - return { - init: init, - mod: mod, - render: render, - open: open, - close: close - }; - -})(); diff --git a/src/js/state.js b/src/js/state.js deleted file mode 100644 index 52728227..00000000 --- a/src/js/state.js +++ /dev/null @@ -1,364 +0,0 @@ -var state = (function() { - - var mod = {}; - - mod.current = { - header: { - area: { width: 100, justify: "center", align: "center" }, - item: { justify: "left" }, - greeting: { show: false, type: "good", custom: "", 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: 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: 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: 3 }, icon: { size: 3 }, image: { size: 3 }, shadow: { size: 0 } }, - name: { show: true, size: 0.9 }, - gutter: 2, - direction: "vertical", - order: "visualname", - alignment: "centercenter", - rotate: 0, - translate: { x: 0, y: 0 } - }, - url: { show: true }, - line: { show: true }, - shadow: { show: true }, - hoverScale: { show: true }, - newTab: false, - size: 1, - border: 0 - }, - show: true, - add: false, - edit: false, - style: "block", - orientation: "bottom", - breakpoint: "xs" - }, - 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: 80, - scrollPastEnd: false, - scrollbars: "auto", - title: "" - }, - theme: { - 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 } - }, - color: { - hsl: { h: 222, s: 14, l: 56 }, - rgb: { r: 129, g: 138, b: 160 }, - contrast: { light: 4, dark: 4 }, - generated: {} - }, - font: { - display: { name: "", weight: 400, style: "normal" }, - ui: { name: "", weight: 400, style: "normal" } - }, - style: "dark", - radius: 0.25, - shadow: 0.75, - shade: { opacity: 0.4 }, - 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: false, - shade: false, - edge: false, - search: false, - menu: false, - modal: false, - dropdown: false, - autoSuggest: false - }; - - mod.default = { - header: { - area: { - width: 100 - }, - clock: { - separator: { - text: "" - }, - size: 1 - }, - date: { - separator: { - text: "" - }, - size: 1 - }, - search: { - width: { - size: 30 - }, - size: 1, - opacity: 1 - }, - editAdd: { - size: 1, - opacity: 1 - }, - colorAccent: { - size: 1, - opacity: 1 - }, - menu: { - size: 1, - opacity: 1 - }, - color: { - opacity: 0.95 - }, - border: { - top: 0, - bottom: 0 - }, - greeting: { - size: 1 - }, - transitional: { - size: 1 - } - }, - link: { - area: { - width: 100 - }, - item: { - color: { - opacity: 1 - }, - background: { - opacity: 1 - }, - display: { - visual: { - letter: { - size: 3 - }, - icon: { - size: 3 - }, - image: { - size: 3 - }, - shadow: { - size: 0 - } - }, - name: { - size: 0.9 - }, - gutter: 2, - rotate: 0, - translate: { - x: 0, - y: 0 - } - }, - size: 1, - border: 0 - } - }, - group: { - name: { - size: 1 - }, - openAll: { - size: 1, - opacity: 1 - }, - border: 0 - }, - layout: { - padding: 4, - gutter: 2, - size: 1, - width: 80, - title: "" - }, - theme: { - accent: { - hsl: { - h: 221, - s: 100, - l: 50 - }, - rgb: { - r: 0, - g: 80, - b: 255 - }, - cycle: { - speed: 300, - step: 10 - } - }, - color: { - hsl: { - h: 222, - s: 14, - l: 56 - }, - rgb: { - r: 129, - g: 138, - b: 160 - }, - contrast: { - light: 4, - dark: 4 - } - }, - font: { - display: { - name: "", - weight: 400, - style: "normal" - }, - ui: { - name: "", - weight: 400, - style: "normal" - } - }, - style: "dark", - radius: 0.25, - shadow: 0.75, - shade: { - opacity: 0.4 - } - }, - background: { - visual: { - blur: 0, - scale: 1, - opacity: 1, - grayscale: 0, - accent: 0, - vignette: { - opacity: 0, - start: 90, - end: 70 - } - } - } - }; - - mod.get = { - current: function() { - return mod.current; - }, - default: function() { - return JSON.parse(JSON.stringify(mod.default)); - } - }; - - mod.restore = function(data) { - if ("state" in data) { - mod.current = data.state; - }; - }; - - var init = function() { - if (data.load()) { - mod.restore(data.load()); - }; - }; - - var get = { - current: function() { - return mod.get.current(); - }, - default: function() { - return mod.get.default(); - } - }; - - return { - init: init, - mod: mod, - get: get - }; - -})(); diff --git a/src/js/theme.js b/src/js/theme.js deleted file mode 100644 index 4b96d511..00000000 --- a/src/js/theme.js +++ /dev/null @@ -1,3131 +0,0 @@ -var theme = (function() { - - var _timerFontDisplay = null; - var _timerFontUi = null; - var _timerAccentCycle = null; - - var stagedThemeCustom = { - position: { - index: null - }, - theme: { - name: null, - font: null, - color: null, - accent: { - hsl: null, - rgb: null - }, - radius: null, - shadow: null, - style: null, - shade: null, - timestamp: null - } - }; - - stagedThemeCustom.reset = function() { - stagedThemeCustom.position.index = null; - stagedThemeCustom.theme.name = null; - stagedThemeCustom.theme.font = null; - stagedThemeCustom.theme.color = null; - stagedThemeCustom.theme.accent.hsl = null; - stagedThemeCustom.theme.accent.rgb = null; - stagedThemeCustom.theme.radius = null; - stagedThemeCustom.theme.shadow = null; - stagedThemeCustom.theme.style = null; - stagedThemeCustom.theme.shade = null; - stagedThemeCustom.theme.timestamp = null; - }; - - var bind = {}; - - bind.accent = { - cycle: { - toggle: function() { - if (state.get.current().theme.accent.cycle.active) { - bind.accent.cycle.add(); - } else { - bind.accent.cycle.remove(); - }; - }, - add: function() { - _timerAccentCycle = setInterval(function() { - accent.cycle(); - control.render.update.control.header(control.mod.header[5]); - if (state.get.current().menu) { - control.render.update.control.menu(control.mod.menu.controls.theme.accent[0]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[1]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[3]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[4]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[5]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[6]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[7]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[8]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[9]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[10]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[11]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[12]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[13]); - control.render.update.control.menu(control.mod.menu.controls.theme.accent[14]); - }; - }, state.get.current().theme.accent.cycle.speed); - }, - remove: function() { - clearInterval(_timerAccentCycle); - _timerAccentCycle = null; - } - } - }; - - bind.style = { - initial: function() { - window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", function(event) { - mod.style.initial(); - }); - } - }; - - var mod = {}; - - mod.apply = function(data) { - helper.setObject({ - object: state.get.current(), - path: "theme.font", - newValue: data.font - }); - helper.setObject({ - object: state.get.current(), - path: "theme.color", - newValue: data.color - }); - helper.setObject({ - object: state.get.current(), - path: "theme.accent.hsl", - newValue: data.accent.hsl - }); - helper.setObject({ - object: state.get.current(), - path: "theme.accent.rgb", - newValue: data.accent.rgb - }); - helper.setObject({ - object: state.get.current(), - path: "theme.radius", - newValue: data.radius - }); - helper.setObject({ - object: state.get.current(), - path: "theme.shadow", - newValue: data.shadow - }); - helper.setObject({ - object: state.get.current(), - path: "theme.style", - newValue: data.style - }); - helper.setObject({ - object: state.get.current(), - path: "theme.shade", - newValue: data.shade - }); - }; - - mod.style = { - initial: function() { - switch (state.get.current().theme.style) { - case "dark": - data.mod.set("nightTabStyle", state.get.current().theme.style); - break; - - case "light": - data.mod.set("nightTabStyle", state.get.current().theme.style); - break; - - case "system": - if (window.matchMedia("(prefers-color-scheme:dark)").matches) { - data.mod.set("nightTabStyle", "dark"); - } else if (window.matchMedia("(prefers-color-scheme:light)").matches) { - data.mod.set("nightTabStyle", "light"); - }; - break; - }; - }, - light: function() { - helper.setObject({ - object: state.get.current(), - path: "theme.style", - newValue: "light" - }); - }, - dark: function() { - helper.setObject({ - object: state.get.current(), - path: "theme.style", - newValue: "dark" - }); - }, - system: function() { - helper.setObject({ - object: state.get.current(), - path: "theme.style", - newValue: "system" - }); - } - }; - - mod.accent = { - hsl: function() { - var hsl = helper.convertColor.rgb.hsl(state.get.current().theme.accent.rgb); - helper.setObject({ - object: state.get.current(), - path: "theme.accent.hsl", - newValue: { - h: Math.round(hsl.h), - s: Math.round(hsl.s), - l: Math.round(hsl.l) - } - }); - }, - rgb: function() { - var rgb = helper.convertColor.hsl.rgb(state.get.current().theme.accent.hsl); - helper.setObject({ - object: state.get.current(), - path: "theme.accent.rgb", - newValue: { - r: Math.round(rgb.r), - g: Math.round(rgb.g), - b: Math.round(rgb.b) - } - }); - }, - random: function() { - if (state.get.current().theme.accent.random.active) { - var randomValue = function(min, max) { - return Math.floor(Math.random() * (max - min) + 1) + min; - }; - var color = { - any: function() { - return { - h: randomValue(0, 360), - s: randomValue(0, 100), - l: randomValue(0, 100) - }; - }, - light: function() { - return { - h: randomValue(0, 360), - s: randomValue(50, 90), - l: randomValue(50, 90) - }; - }, - dark: function() { - return { - h: randomValue(0, 360), - s: randomValue(10, 50), - l: randomValue(10, 50) - }; - }, - pastel: function() { - return { - h: randomValue(0, 360), - s: 50, - l: 80 - }; - }, - saturated: function() { - return { - h: randomValue(0, 360), - s: 100, - l: 50 - }; - } - }; - var hsl = color[state.get.current().theme.accent.random.style](); - var rgb = helper.convertColor.hsl.rgb(hsl); - helper.setObject({ - object: state.get.current(), - path: "theme.accent.rgb", - newValue: { - r: Math.round(rgb.r), - g: Math.round(rgb.g), - b: Math.round(rgb.b) - } - }); - helper.setObject({ - object: state.get.current(), - path: "theme.accent.hsl", - newValue: { - h: Math.round(hsl.h), - s: Math.round(hsl.s), - l: Math.round(hsl.l) - } - }); - }; - }, - cycle: function() { - var incrementVal = function(start, end, currentValue) { - var newValue = currentValue + state.get.current().theme.accent.cycle.step; - if (newValue > end) { - newValue = start; - }; - return newValue; - }; - var hsl = helper.convertColor.rgb.hsl(state.get.current().theme.accent.rgb); - hsl.h = incrementVal(0, 359, hsl.h); - var rgb = helper.convertColor.hsl.rgb(hsl); - helper.setObject({ - object: state.get.current(), - path: "theme.accent.rgb", - newValue: { - r: Math.round(rgb.r), - g: Math.round(rgb.g), - b: Math.round(rgb.b) - } - }); - helper.setObject({ - object: state.get.current(), - path: "theme.accent.hsl", - newValue: { - h: Math.round(hsl.h), - s: Math.round(hsl.s), - l: Math.round(hsl.l) - } - }); - }, - preset: { - nameModifier: { - "90": "Super extra light", - "77": "Extra light", - "63": "Light", - "37": "Dark", - "23": "Extra dark", - "10": "Super extra dark" - }, - all: [{ - name: "Grey", - type: "grey", - colors: [{ - h: 0, - s: 0, - l: 90 - }, { - h: 0, - s: 0, - l: 77 - }, { - h: 0, - s: 0, - l: 63 - }, { - h: 0, - s: 0, - l: 50 - }, { - h: 0, - s: 0, - l: 37 - }, { - h: 0, - s: 0, - l: 23 - }, { - h: 0, - s: 0, - l: 10 - }] - }, { - name: "Red", - type: "primary", - colors: [{ - h: 0, - s: 40, - l: 90 - }, { - h: 0, - s: 60, - l: 77 - }, { - h: 0, - s: 80, - l: 63 - }, { - h: 0, - s: 100, - l: 50 - }, { - h: 0, - s: 80, - l: 37 - }, { - h: 0, - s: 60, - l: 23 - }, { - h: 0, - s: 40, - l: 10 - }] - }, { - name: "Orange", - type: "secondary", - colors: [{ - h: 30, - s: 40, - l: 90 - }, { - h: 30, - s: 60, - l: 77 - }, { - h: 30, - s: 80, - l: 63 - }, { - h: 30, - s: 100, - l: 50 - }, { - h: 30, - s: 80, - l: 37 - }, { - h: 30, - s: 60, - l: 23 - }, { - h: 30, - s: 40, - l: 10 - }] - }, { - name: "Yellow", - type: "primary", - colors: [{ - h: 60, - s: 40, - l: 90 - }, { - h: 60, - s: 60, - l: 77 - }, { - h: 60, - s: 80, - l: 63 - }, { - h: 60, - s: 100, - l: 50 - }, { - h: 60, - s: 80, - l: 37 - }, { - h: 60, - s: 60, - l: 23 - }, { - h: 60, - s: 40, - l: 10 - }] - }, { - name: "Lime", - type: "secondary", - colors: [{ - h: 90, - s: 40, - l: 90 - }, { - h: 90, - s: 60, - l: 77 - }, { - h: 90, - s: 80, - l: 63 - }, { - h: 90, - s: 100, - l: 50 - }, { - h: 90, - s: 80, - l: 37 - }, { - h: 90, - s: 60, - l: 23 - }, { - h: 90, - s: 40, - l: 10 - }] - }, { - name: "Green", - type: "primary", - colors: [{ - h: 120, - s: 40, - l: 90 - }, { - h: 120, - s: 60, - l: 77 - }, { - h: 120, - s: 80, - l: 63 - }, { - h: 120, - s: 100, - l: 50 - }, { - h: 120, - s: 80, - l: 37 - }, { - h: 120, - s: 60, - l: 23 - }, { - h: 120, - s: 40, - l: 10 - }] - }, { - name: "Aqua", - type: "secondary", - colors: [{ - h: 150, - s: 40, - l: 90 - }, { - h: 150, - s: 60, - l: 77 - }, { - h: 150, - s: 80, - l: 63 - }, { - h: 150, - s: 100, - l: 50 - }, { - h: 150, - s: 80, - l: 37 - }, { - h: 150, - s: 60, - l: 23 - }, { - h: 150, - s: 40, - l: 10 - }] - }, { - name: "Cyan", - type: "primary", - colors: [{ - h: 180, - s: 40, - l: 90 - }, { - h: 180, - s: 60, - l: 77 - }, { - h: 180, - s: 80, - l: 63 - }, { - h: 180, - s: 100, - l: 50 - }, { - h: 180, - s: 80, - l: 37 - }, { - h: 180, - s: 60, - l: 23 - }, { - h: 180, - s: 40, - l: 10 - }] - }, { - name: "Teal", - type: "secondary", - colors: [{ - h: 210, - s: 40, - l: 90 - }, { - h: 210, - s: 60, - l: 77 - }, { - h: 210, - s: 80, - l: 63 - }, { - h: 210, - s: 100, - l: 50 - }, { - h: 210, - s: 80, - l: 37 - }, { - h: 210, - s: 60, - l: 23 - }, { - h: 210, - s: 40, - l: 10 - }] - }, { - name: "Blue", - type: "primary", - colors: [{ - h: 240, - s: 40, - l: 90 - }, { - h: 240, - s: 60, - l: 77 - }, { - h: 240, - s: 80, - l: 63 - }, { - h: 240, - s: 100, - l: 50 - }, { - h: 240, - s: 80, - l: 37 - }, { - h: 240, - s: 60, - l: 23 - }, { - h: 240, - s: 40, - l: 10 - }] - }, { - name: "Purple", - type: "secondary", - colors: [{ - h: 270, - s: 40, - l: 90 - }, { - h: 270, - s: 60, - l: 77 - }, { - h: 270, - s: 80, - l: 63 - }, { - h: 270, - s: 100, - l: 50 - }, { - h: 270, - s: 80, - l: 37 - }, { - h: 270, - s: 60, - l: 23 - }, { - h: 270, - s: 40, - l: 10 - }] - }, { - name: "Magenta", - type: "primary", - colors: [{ - h: 300, - s: 40, - l: 90 - }, { - h: 300, - s: 60, - l: 77 - }, { - h: 300, - s: 80, - l: 63 - }, { - h: 300, - s: 100, - l: 50 - }, { - h: 300, - s: 80, - l: 37 - }, { - h: 300, - s: 60, - l: 23 - }, { - h: 300, - s: 40, - l: 10 - }] - }, { - name: "Fuchsia", - type: "secondary", - colors: [{ - h: 330, - s: 40, - l: 90 - }, { - h: 330, - s: 60, - l: 77 - }, { - h: 330, - s: 80, - l: 63 - }, { - h: 330, - s: 100, - l: 50 - }, { - h: 330, - s: 80, - l: 37 - }, { - h: 330, - s: 60, - l: 23 - }, { - h: 330, - s: 40, - l: 10 - }] - }], - set: function(hsl) { - var rgb = helper.convertColor.hsl.rgb(hsl); - helper.setObject({ - object: state.get.current(), - path: "theme.accent.hsl", - newValue: { - h: hsl.h, - s: hsl.s, - l: hsl.l - } - }); - helper.setObject({ - object: state.get.current(), - path: "theme.accent.rgb", - newValue: { - r: Math.round(rgb.r), - g: Math.round(rgb.g), - b: Math.round(rgb.b) - } - }); - } - } - }; - - mod.color = { - hsl: function() { - var hsl = helper.convertColor.rgb.hsl(state.get.current().theme.color.rgb); - helper.setObject({ - object: state.get.current(), - path: "theme.color.hsl", - newValue: { - h: Math.round(hsl.h), - s: Math.round(hsl.s), - l: Math.round(hsl.l) - } - }); - }, - rgb: function() { - var rgb = helper.convertColor.hsl.rgb(state.get.current().theme.color.hsl); - helper.setObject({ - object: state.get.current(), - path: "theme.color.rgb", - newValue: { - r: Math.round(rgb.r), - g: Math.round(rgb.g), - b: Math.round(rgb.b) - } - }); - }, - shades: function(override) { - var options = { - rgb: null, - contrastNegative: null, - contrastPositive: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - - var shadeMax = 10; - var shadeMin = 1; - - if (options.contrastNegative == null || !options.contrastNegative) { - options.contrastNegative = state.get.default().theme.color.contrast.dark; - }; - if (options.contrastPositive == null || !options.contrastPositive) { - options.contrastPositive = state.get.default().theme.color.contrast.light; - }; - - var hsl = helper.convertColor.rgb.hsl(options.rgb); - - var validateRGBNumber = function(rgb) { - for (var key in rgb) { - if (rgb[key] < 0) { - rgb[key] = 0; - } else if (rgb[key] > 255) { - rgb[key] = 255; - }; - rgb[key] = Math.round(rgb[key]); - }; - return rgb; - }; - - var shadeColors = { - negative: {}, - positive: {} - }; - - // set light theme shades - for (var i = shadeMax; i >= shadeMin; i--) { - var rgb = helper.convertColor.hsl.rgb({ - h: hsl.h, - s: hsl.s, - l: hsl.l - (options.contrastNegative * i) - }); - shadeColors.negative[i] = validateRGBNumber(rgb); - }; - - // set dark theme shades - for (var i = shadeMin; i <= shadeMax; i++) { - var rgb = helper.convertColor.hsl.rgb({ - h: hsl.h, - s: hsl.s, - l: hsl.l + (options.contrastPositive * i) - }); - shadeColors.positive[i] = validateRGBNumber(rgb); - }; - - return shadeColors; - }, - generated: function() { - var shades = mod.color.shades({ - rgb: state.get.current().theme.color.rgb, - contrastNegative: state.get.current().theme.color.contrast.dark, - contrastPositive: state.get.current().theme.color.contrast.light - }); - helper.setObject({ - object: state.get.current(), - path: "theme.color.generated.negative", - newValue: shades.negative - }); - helper.setObject({ - object: state.get.current(), - path: "theme.color.generated.positive", - newValue: shades.positive - }); - } - }; - - mod.preset = { - get: function(index) { - return JSON.parse(JSON.stringify(mod.preset.all[index])); - }, - all: [{ - name: "nightTab (default)", - font: state.get.default().theme.font, - color: state.get.default().theme.color, - accent: { - hsl: state.get.default().theme.accent.hsl, - rgb: state.get.default().theme.accent.rgb - }, - radius: state.get.default().theme.radius, - shadow: state.get.default().theme.shadow, - style: state.get.default().theme.style, - shade: state.get.default().theme.shade - }, { - name: "Black", - font: state.get.default().theme.font, - color: { - hsl: { - h: 0, - s: 0, - l: 50 - }, - rgb: { - r: 128, - g: 128, - b: 128 - }, - contrast: { - light: 5, - dark: 5 - } - }, - accent: { - hsl: { - h: 0, - s: 0, - l: 50 - }, - rgb: { - r: 128, - g: 128, - b: 128 - } - }, - radius: state.get.default().theme.radius, - shadow: state.get.default().theme.shadow, - style: "dark", - shade: state.get.default().theme.shade - }, { - name: "White", - font: state.get.default().theme.font, - color: { - hsl: { - h: 0, - s: 0, - l: 50 - }, - rgb: { - r: 128, - g: 128, - b: 128 - }, - contrast: { - light: 5, - dark: 5 - } - }, - accent: { - hsl: { - h: 0, - s: 0, - l: 50 - }, - rgb: { - r: 128, - g: 128, - b: 128 - } - }, - radius: state.get.default().theme.radius, - shadow: state.get.default().theme.shadow, - style: "light", - shade: state.get.default().theme.shade - }, { - name: "Midnight", - font: { - display: { - name: "Megrim", - weight: 400, - style: "normal" - }, - ui: { - name: "Lato", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 221, - s: 40, - l: 48 - }, - rgb: { - r: 73, - g: 104, - b: 171 - }, - contrast: { - light: 4, - dark: 3.5 - } - }, - accent: { - rgb: { - r: 0, - g: 17, - b: 255 - }, - hsl: { - h: 236, - s: 100, - l: 50 - } - }, - radius: 0.5, - shadow: 0.75, - style: "dark", - shade: { - opacity: 0.1 - } - }, { - name: "Lex", - font: { - display: { - name: "Autour One", - weight: 400, - style: "normal" - }, - ui: { - name: "Solway", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 278, - s: 73, - l: 50 - }, - rgb: { - r: 153, - g: 34, - b: 221 - }, - contrast: { - light: 4, - dark: 4 - } - }, - accent: { - rgb: { - r: 0, - g: 255, - b: 170 - }, - hsl: { - h: 160, - s: 100, - l: 50 - } - }, - radius: 0.1, - shadow: 1, - style: "dark", - shade: { - opacity: 0.9 - } - }, { - name: "Cruiser", - font: { - display: { - name: "Alatsi", - weight: 400, - style: "normal" - }, - ui: { - name: "Source Sans Pro", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 217, - s: 46, - l: 60 - }, - rgb: { - r: 106, - g: 142, - b: 199 - }, - contrast: { - light: 4, - dark: 4 - } - }, - accent: { - rgb: { - r: 255, - g: 251, - b: 0 - }, - hsl: { - h: 59, - s: 100, - l: 50 - } - }, - radius: 0.2, - shadow: 1.5, - style: "dark", - shade: { - opacity: 0.7 - } - }, { - name: "Mint", - font: { - display: { - name: "Unica One", - weight: 400, - style: "normal" - }, - ui: { - name: "Montserrat", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 157, - s: 50, - l: 49 - }, - rgb: { - r: 63, - g: 191, - b: 143 - }, - contrast: { - light: 4, - dark: 4 - } - }, - accent: { - rgb: { - r: 94, - g: 255, - b: 226 - }, - hsl: { - h: 169, - s: 100, - l: 68 - } - }, - radius: 0.8, - shadow: 1, - style: "dark", - shade: { - opacity: 0.4 - } - }, { - name: "Snow", - font: { - display: { - name: "Righteous", - weight: 400, - style: "normal" - }, - ui: { - name: "Raleway", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 217, - s: 46, - l: 58 - }, - rgb: { - r: 98, - g: 136, - b: 197 - }, - contrast: { - light: 4.4, - dark: 1.5 - } - }, - accent: { - rgb: { - r: 181, - g: 226, - b: 236 - }, - hsl: { - h: 191, - s: 59, - l: 82 - } - }, - radius: 0, - shadow: 0.25, - style: "light", - shade: { - opacity: 0.6 - } - }, { - name: "Vanadium", - font: { - display: { - name: "Grenze Gotisch", - weight: 100, - style: "normal" - }, - ui: { - name: "Roboto", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 218, - s: 33, - l: 43 - }, - rgb: { - r: 73, - g: 100, - b: 146 - }, - contrast: { - light: 5, - dark: 3.5 - } - }, - accent: { - hsl: { - h: 30, - s: 100, - l: 50 - }, - rgb: { - r: 255, - g: 128, - b: 0 - } - }, - radius: 0.25, - shadow: 0.25, - style: "dark", - shade: { - opacity: 0.2 - } - }, { - name: "Rumble", - font: { - display: { - name: "Odibee Sans", - weight: 400, - style: "normal" - }, - ui: { - name: "Roboto Condensed", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 25, - s: 29, - l: 48 - }, - rgb: { - r: 159, - g: 118, - b: 87 - }, - contrast: { - light: 5, - dark: 3.5 - } - }, - accent: { - rgb: { - r: 196, - g: 0, - b: 66 - }, - hsl: { - h: 340, - s: 100, - l: 38 - } - }, - radius: 0.75, - shadow: 1.75, - style: "dark", - shade: { - opacity: 0.5 - } - }, { - name: "Sol", - font: { - display: { - name: "Fredoka One", - weight: 400, - style: "normal" - }, - ui: { - name: "Muli", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 56, - s: 100, - l: 30 - }, - rgb: { - r: 153, - g: 142, - b: 0 - }, - contrast: { - light: 2, - dark: 1 - } - }, - accent: { - rgb: { - r: 255, - g: 185, - b: 0 - }, - hsl: { - h: 44, - s: 100, - l: 50 - } - }, - radius: 0.5, - shadow: 0.25, - style: "light", - shade: { - opacity: 0.9 - } - }, { - name: "Deco", - font: { - display: { - name: "Poiret One", - weight: 400, - style: "normal" - }, - ui: { - name: "Lato", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 184, - s: 38, - l: 61 - }, - rgb: { - r: 119, - g: 188, - b: 194 - }, - contrast: { - light: 1, - dark: 4 - } - }, - accent: { - rgb: { - r: 255, - g: 161, - b: 161 - }, - hsl: { - h: 0, - s: 100, - l: 82 - } - }, - radius: 2, - shadow: 0.5, - style: "dark", - shade: { - opacity: 0.1 - } - }, { - name: "Grimm", - font: { - display: { - name: "Griffy", - weight: 400, - style: "normal" - }, - ui: { - name: "Roboto Slab", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 283, - s: 7, - l: 40 - }, - rgb: { - r: 105, - g: 94, - b: 109 - }, - contrast: { - light: 5, - dark: 2 - } - }, - accent: { - rgb: { - r: 0, - g: 255, - b: 102 - }, - hsl: { - h: 144, - s: 100, - l: 50 - } - }, - radius: 1, - shadow: 1.5, - style: "dark", - shade: { - opacity: 0.9 - } - }, { - name: "Macaroon", - font: { - display: { - name: "Calistoga", - weight: 400, - style: "normal" - }, - ui: { - name: "Source Sans Pro", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 301, - s: 28, - l: 56 - }, - rgb: { - r: 175, - g: 112, - b: 173 - }, - contrast: { - light: 3, - dark: 2 - } - }, - accent: { - rgb: { - r: 110, - g: 109, - b: 208 - }, - hsl: { - h: 241, - s: 51, - l: 62 - } - }, - radius: 0.4, - shadow: 0.5, - style: "light", - shade: { - opacity: 0.3 - } - }, { - name: "Pepper", - font: { - display: { - name: "Big Shoulders Display", - weight: 400, - style: "normal" - }, - ui: { - name: "Montserrat", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 0, - s: 69, - l: 62 - }, - rgb: { - r: 224, - g: 91, - b: 91 - }, - contrast: { - light: 3.5, - dark: 4.5 - } - }, - accent: { - rgb: { - r: 255, - g: 150, - b: 0 - }, - hsl: { - h: 35, - s: 100, - l: 50 - } - }, - radius: 0.6, - shadow: 1, - style: "dark", - shade: { - opacity: 0.1 - } - }, { - name: "Steel", - font: { - display: { - name: "Abel", - weight: 400, - style: "normal" - }, - ui: { - name: "Raleway", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 214, - s: 30, - l: 44 - }, - rgb: { - r: 78, - g: 107, - b: 145 - }, - contrast: { - light: 3.5, - dark: 3 - } - }, - accent: { - rgb: { - r: 59, - g: 95, - b: 118 - }, - hsl: { - h: 203, - s: 33, - l: 35 - } - }, - radius: 0.3, - shadow: 0.5, - style: "light", - shade: { - opacity: 0.7 - } - }, { - name: "Outrun", - font: { - display: { - name: "Major Mono Display", - weight: 400, - style: "normal" - }, - ui: { - name: "Roboto Condensed", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 227, - s: 52, - l: 55 - }, - rgb: { - r: 80, - g: 106, - b: 199 - }, - contrast: { - light: 4, - dark: 4 - } - }, - accent: { - rgb: { - r: 255, - g: 0, - b: 187 - }, - hsl: { - h: 316, - s: 100, - l: 50 - } - }, - radius: 0, - shadow: 0, - style: "dark", - shade: { - opacity: 0.7 - } - }, { - name: "Pumpkin", - font: { - display: { - name: "Girassol", - weight: 400, - style: "normal" - }, - ui: { - name: "Muli", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 198, - s: 0, - l: 46 - }, - rgb: { - r: 117, - g: 117, - b: 117 - }, - contrast: { - light: 5, - dark: 3.5 - } - }, - accent: { - rgb: { - r: 238, - g: 119, - b: 34 - }, - hsl: { - h: 25, - s: 86, - l: 53 - } - }, - radius: 0.2, - shadow: 1, - style: "dark", - shade: { - opacity: 0.1 - } - }, { - name: "Funkadelic", - font: { - display: { - name: "Monoton", - weight: 400, - style: "normal" - }, - ui: { - name: "Lato", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 307, - s: 100, - l: 59 - }, - rgb: { - r: 254, - g: 45, - b: 230 - }, - contrast: { - light: 4, - dark: 4 - } - }, - accent: { - rgb: { - r: 238, - g: 238, - b: 34 - }, - hsl: { - h: 60, - s: 86, - l: 53 - } - }, - radius: 1.2, - shadow: 0, - style: "dark", - shade: { - opacity: 0.8 - } - }, { - name: "Azure", - font: { - display: { - name: "Unica One", - weight: 400, - style: "normal" - }, - ui: { - name: "Inria Sans", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 215, - s: 18, - l: 32 - }, - rgb: { - r: 67, - g: 79, - b: 96 - }, - contrast: { - light: 2, - dark: 2 - } - }, - accent: { - rgb: { - r: 0, - g: 255, - b: 255 - }, - hsl: { - h: 180, - s: 100, - l: 50 - } - }, - radius: 0.25, - shadow: 0.5, - style: "dark", - shade: { - opacity: 0.02 - } - }, { - name: "Bean", - font: { - display: { - name: "Life Savers", - weight: 400, - style: "normal" - }, - ui: { - name: "Oswald", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 191, - s: 73, - l: 48 - }, - rgb: { - r: 33, - g: 178, - b: 211 - }, - contrast: { - light: 5, - dark: 4 - } - }, - accent: { - rgb: { - r: 255, - g: 160, - b: 0 - }, - hsl: { - h: 38, - s: 100, - l: 50 - } - }, - radius: 0.5, - shadow: 1.75, - style: "dark", - shade: { - opacity: 0.1 - } - }, { - name: "Marker", - font: { - display: { - name: "Permanent Marker", - weight: 400, - style: "normal" - }, - ui: { - name: "Roboto Condensed", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 0, - s: 0, - l: 50 - }, - rgb: { - r: 128, - g: 128, - b: 128 - }, - contrast: { - light: 4, - dark: 1 - } - }, - accent: { - rgb: { - r: 34, - g: 51, - b: 68 - }, - hsl: { - h: 210, - s: 33, - l: 20 - } - }, - radius: 0.3, - shadow: 0.5, - style: "light", - shade: { - opacity: 0.9 - } - }, { - name: "Kapow", - font: { - display: { - name: "Bangers", - weight: 400, - style: "normal" - }, - ui: { - name: "Sniglet", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 194, - s: 77, - l: 50 - }, - rgb: { - r: 29, - g: 179, - b: 225 - }, - contrast: { - light: 4.5, - dark: 2.6 - } - }, - accent: { - rgb: { - r: 21, - g: 255, - b: 0 - }, - hsl: { - h: 115, - s: 100, - l: 50 - } - }, - radius: 0.4, - shadow: 1, - style: "dark", - shade: { - opacity: 0.7 - } - }, { - name: "Dash", - font: { - display: { - name: "Fredericka the Great", - weight: 400, - style: "normal" - }, - ui: { - name: "Oswald", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 211, - s: 10, - l: 50 - }, - rgb: { - r: 114, - g: 127, - b: 140 - }, - contrast: { - light: 5, - dark: 2 - } - }, - accent: { - rgb: { - r: 187, - g: 17, - b: 68 - }, - hsl: { - h: 342, - s: 83, - l: 40 - } - }, - radius: 0, - shadow: 0, - style: "light", - shade: { - opacity: 0.5 - } - }, { - name: "Savage", - font: { - display: { - name: "Metal Mania", - weight: 400, - style: "normal" - }, - ui: { - name: "Lato", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 35, - s: 7, - l: 37 - }, - rgb: { - r: 100, - g: 95, - b: 87 - }, - contrast: { - light: 5.2, - dark: 3.2 - } - }, - accent: { - rgb: { - r: 255, - g: 0, - b: 0 - }, - hsl: { - h: 0, - s: 100, - l: 50 - } - }, - radius: 0, - shadow: 2.5, - style: "dark", - shade: { - opacity: 0.8 - } - }, { - name: "Trine", - font: { - display: { - name: "Josefin Sans", - weight: 300, - style: "normal" - }, - ui: { - name: "Roboto Slab", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 228, - s: 71, - l: 50 - }, - rgb: { - r: 36, - g: 73, - b: 218 - }, - contrast: { - light: 4.2, - dark: 3.9 - } - }, - accent: { - rgb: { - r: 0, - g: 255, - b: 255 - }, - hsl: { - h: 180, - s: 100, - l: 50 - } - }, - radius: 0.5, - shadow: 1.25, - style: "dark", - shade: { - opacity: 0.1 - } - }, { - name: "Obsidian", - font: { - display: { - name: "Zilla Slab", - weight: 700, - style: "normal" - }, - ui: { - name: "Montserrat", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 200, - s: 10, - l: 43 - }, - rgb: { - r: 98, - g: 113, - b: 120 - }, - contrast: { - light: 4, - dark: 4 - } - }, - accent: { - rgb: { - r: 0, - g: 255, - b: 255 - }, - hsl: { - h: 180, - s: 100, - l: 50 - } - }, - radius: 0.25, - shadow: 2, - style: "dark", - shade: { - opacity: 0.05 - } - }, { - name: "Earthquake", - font: { - display: { - name: "Tulpen One", - weight: 400, - style: "normal" - }, - ui: { - name: "Barlow Condensed", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 0, - s: 13, - l: 37 - }, - rgb: { - r: 106, - g: 82, - b: 82 - }, - contrast: { - light: 6.3, - dark: 2 - } - }, - accent: { - rgb: { - r: 255, - g: 204, - b: 0 - }, - hsl: { - h: 48, - s: 100, - l: 50 - } - }, - radius: 0.8, - shadow: 1, - style: "dark", - shade: { - opacity: 0.8 - } - }, { - name: "Koto", - font: { - display: { - name: "Dosis", - weight: 200, - style: "normal" - }, - ui: { - name: "Montserrat", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 231, - s: 56, - l: 53 - }, - rgb: { - r: 68, - g: 88, - b: 202 - }, - contrast: { - light: 4.5, - dark: 4 - } - }, - accent: { - rgb: { - r: 255, - g: 12, - b: 88 - }, - hsl: { - h: 341, - s: 100, - l: 52 - } - }, - radius: 0.25, - shadow: 0.5, - style: "dark", - shade: { - opacity: 0.5 - } - }, { - name: "Acrid", - font: { - display: { - name: "Titillium Web", - weight: 400, - style: "italic" - }, - ui: { - name: "Inconsolata", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 301, - s: 32, - l: 57 - }, - rgb: { - r: 180, - g: 110, - b: 179 - }, - contrast: { - light: 4, - dark: 4.6 - } - }, - accent: { - rgb: { - r: 29, - g: 213, - b: 0 - }, - hsl: { - h: 112, - s: 100, - l: 42 - } - }, - radius: 0.3, - shadow: 0.75, - style: "dark", - shade: { - opacity: 0.2 - } - }, { - name: "Nord", - font: { - display: { - name: "Rubik", - weight: 400, - style: "normal" - }, - ui: { - name: "Inter", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 220, - s: 16, - l: 41 - }, - rgb: { - r: 88, - g: 99, - b: 121 - }, - contrast: { - light: 5.3, - dark: 2.5 - } - }, - accent: { - hsl: { - h: 213, - s: 32, - l: 52 - }, - rgb: { - r: 94, - g: 129, - b: 172 - } - }, - radius: 0.75, - shadow: 1, - style: "dark", - shade: { - opacity: 0.05 - } - }, { - name: "Hypnos", - font: { - display: { - name: "Shadows Into Light", - weight: 100, - style: "normal" - }, - ui: { - name: "Fira Code", - weight: 400, - style: "normal" - } - }, - color: { - hsl: { - h: 243, - s: 26, - l: 36 - }, - rgb: { - r: 70, - g: 68, - b: 116 - }, - contrast: { - light: 5.4, - dark: 2.6 - } - }, - accent: { - hsl: { - h: 30, - s: 100, - l: 80 - }, - rgb: { - r: 255, - g: 204, - b: 153 - } - }, - radius: 0.6, - shadow: 0.25, - style: "dark", - shade: { - opacity: 0.2 - } - }] - }; - - mod.custom = { - get: function(index) { - return JSON.parse(JSON.stringify(state.get.current().theme.custom.all[index])); - }, - add: function() { - state.get.current().theme.custom.all.push(JSON.parse(JSON.stringify(stagedThemeCustom.theme))); - }, - edit: function() { - state.get.current().theme.custom.all.splice(stagedThemeCustom.position.index, 1, JSON.parse(JSON.stringify(stagedThemeCustom.theme))); - }, - remove: function(copyStagedThemeCustom) { - state.get.current().theme.custom.all.splice(stagedThemeCustom.position.index, 1); - }, - close: function() { - helper.setObject({ - object: state.get.current(), - path: "theme.custom.edit", - newValue: false - }); - } - }; - - mod.font = { - display: { - light: function() { - helper.setObject({ - object: state.get.current(), - path: "theme.font.display.weight", - newValue: 300 - }); - }, - regular: function() { - helper.setObject({ - object: state.get.current(), - path: "theme.font.display.weight", - newValue: 400 - }); - }, - bold: function() { - helper.setObject({ - object: state.get.current(), - path: "theme.font.display.weight", - newValue: 700 - }); - } - }, - ui: { - light: function() { - helper.setObject({ - object: state.get.current(), - path: "theme.font.ui.weight", - newValue: 300 - }); - }, - regular: function() { - helper.setObject({ - object: state.get.current(), - path: "theme.font.ui.weight", - newValue: 400 - }); - }, - bold: function() { - helper.setObject({ - object: state.get.current(), - path: "theme.font.ui.weight", - newValue: 700 - }); - } - } - }; - - var render = {}; - - render.style = { - dark: function() { - var html = helper.e("html"); - helper.addClass(html, "is-theme-style-dark"); - helper.removeClass(html, "is-theme-style-light"); - helper.removeClass(html, "is-theme-style-system"); - }, - light: function() { - var html = helper.e("html"); - helper.removeClass(html, "is-theme-style-dark"); - helper.addClass(html, "is-theme-style-light"); - helper.removeClass(html, "is-theme-style-system"); - }, - system: function() { - var html = helper.e("html"); - helper.removeClass(html, "is-theme-style-dark"); - helper.removeClass(html, "is-theme-style-light"); - helper.addClass(html, "is-theme-style-system"); - } - }; - - render.accent = { - color: function() { - var html = helper.e("html"); - var rgb = state.get.current().theme.accent.rgb; - html.style.setProperty("--theme-accent-r", rgb.r); - html.style.setProperty("--theme-accent-g", rgb.g); - html.style.setProperty("--theme-accent-b", rgb.b); - }, - preset: function() { - var themeAccentPreset = helper.e(".theme-accent-preset"); - - var _makeAccentButton = function(name, type, hsl) { - var themeAccentPresetItem = helper.node("button|class:theme-accent-preset-item theme-accent-preset-type-" + type + " button button-block button-ring,title:" + name + ",tabindex:-1"); - var themeAccentPresetItemName = helper.node("span:" + name + "|class:sr-only"); - themeAccentPresetItem.appendChild(themeAccentPresetItemName); - themeAccentPresetItem.style.setProperty("--theme-accent-preset-item-color-h", hsl.h); - themeAccentPresetItem.style.setProperty("--theme-accent-preset-item-color-s", hsl.s); - themeAccentPresetItem.style.setProperty("--theme-accent-preset-item-color-l", hsl.l); - themeAccentPresetItem.addEventListener("click", function() { - mod.accent.preset.set(hsl); - data.save(); - render.accent.color(); - control.render.update.control.header(); - control.render.update.control.menu(); - }); - return themeAccentPresetItem; - }; - - mod.accent.preset.all.forEach(function(arrayItem, index) { - var name = arrayItem.name; - var type = arrayItem.type; - arrayItem.colors.forEach(function(arrayItem, index) { - var fullName; - if (mod.accent.preset.nameModifier[arrayItem.l] != undefined) { - fullName = mod.accent.preset.nameModifier[arrayItem.l] + " " + name.toLowerCase(); - } else { - fullName = name; - }; - themeAccentPreset.appendChild(_makeAccentButton(fullName, type, arrayItem)); - }); - }); - - } - }; - - render.color = { - shade: function() { - var html = helper.e("html"); - // negative - for (var i = 10; i >= 1; i--) { - var rgb = state.get.current().theme.color.generated.negative[i]; - var number = i; - if (i < 10) { - number = "0" + number; - }; - html.style.setProperty("--theme-shade-negative-" + number, rgb.r + ", " + rgb.g + ", " + rgb.b); - }; - // neutral - var rgb = state.get.current().theme.color.rgb; - html.style.setProperty("--theme-shade", rgb.r + ", " + rgb.g + ", " + rgb.b); - // positive - for (var i = 1; i <= 10; i++) { - var rgb = state.get.current().theme.color.generated.positive[i]; - var number = i; - if (i < 10) { - number = "0" + number; - }; - html.style.setProperty("--theme-shade-positive-" + number, rgb.r + ", " + rgb.g + ", " + rgb.b); - }; - } - }; - - render.font = { - load: { - display: function() { - var displayFont = helper.trimString(state.get.current().theme.font.display.name); - if (helper.checkIfValidString(displayFont)) { - WebFont.load({ - // fontloading: function(familyName, fvd) { - // console.log("fontloading:", familyName); - // }, - google: { - families: [helper.trimString(state.get.current().theme.font.display.name) + ":100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i"], - } - }); - }; - render.font.display.name(); - }, - ui: function() { - var uiFont = helper.trimString(state.get.current().theme.font.ui.name); - if (helper.checkIfValidString(uiFont)) { - WebFont.load({ - // fontloading: function(familyName, fvd) { - // console.log("fontloading:", familyName); - // }, - google: { - families: [helper.trimString(state.get.current().theme.font.ui.name) + ":100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i"], - } - }); - }; - render.font.ui.name(); - } - }, - delay: { - display: function() { - clearTimeout(_timerFontDisplay); - _timerFontDisplay = setTimeout(render.font.load.display, 600); - }, - ui: function() { - clearTimeout(_timerFontUi); - _timerFontUi = setTimeout(render.font.load.ui, 600); - } - }, - display: { - name: function() { - var html = helper.e("html"); - if (helper.checkIfValidString(state.get.current().theme.font.display.name)) { - html.style.setProperty("--theme-font-display-name", "\"" + helper.trimString(state.get.current().theme.font.display.name) + "\", \"Fjalla One\", sans-serif"); - } else { - html.style.removeProperty("--theme-font-display-name"); - }; - }, - weight: function() { - var html = helper.e("html"); - html.style.setProperty("--theme-font-display-weight", state.get.current().theme.font.display.weight); - }, - style: function() { - var html = helper.e("html"); - html.style.removeProperty("--theme-font-display-style"); - html.style.setProperty("--theme-font-display-style", state.get.current().theme.font.display.style); - } - }, - ui: { - name: function() { - var html = helper.e("html"); - if (helper.checkIfValidString(state.get.current().theme.font.ui.name)) { - html.style.setProperty("--theme-font-ui-name", "\"" + helper.trimString(state.get.current().theme.font.ui.name) + "\", \"Open Sans\", sans-serif"); - } else { - html.style.removeProperty("--theme-font-ui-name"); - }; - }, - weight: function() { - var html = helper.e("html"); - html.style.setProperty("--theme-font-ui-weight", state.get.current().theme.font.ui.weight); - }, - style: function() { - var html = helper.e("html"); - html.style.removeProperty("--theme-font-ui-style"); - html.style.setProperty("--theme-font-ui-style", state.get.current().theme.font.ui.style); - } - } - }; - - render.radius = function() { - var html = helper.e("html"); - html.style.setProperty("--theme-radius", state.get.current().theme.radius + "rem"); - }; - - render.shadow = function() { - var html = helper.e("html"); - html.style.setProperty("--theme-shadow", state.get.current().theme.shadow); - }; - - render.preset = function() { - var themePreset = helper.e(".theme-preset"); - var formInline = helper.node("div|class:form-inline"); - var allThemePreset = JSON.parse(JSON.stringify(mod.preset.all)); - allThemePreset.forEach(function(arrayItem, index) { - var themePresetItem = helper.node("div|class:theme-preset-item"); - var themePresetTile = helper.node("div|class:theme-preset-tile"); - var themePresetButton = helper.node("button|class:theme-preset-button button button-block button-ring,tabindex:-1"); - var themePresetPreview = helper.node("span|class:theme-preset-preview"); - var shadeSteps = 4; - var rgb = arrayItem.color.rgb; - var hsl = arrayItem.color.hsl; - for (var i = 1; i <= shadeSteps; i++) { - if (i > 1) { - var shiftDark = function() { - rgb = helper.convertColor.hsl.rgb({ - h: hsl.h, - s: hsl.s, - l: hsl.l - ((arrayItem.color.contrast.dark) * (i * 2)) - }); - }; - var shiftLight = function() { - rgb = helper.convertColor.hsl.rgb({ - h: hsl.h, - s: hsl.s, - l: hsl.l + ((arrayItem.color.contrast.light) * (i * 2)) - }); - }; - if (arrayItem.style == "dark") { - shiftDark(); - } else if (arrayItem.style == "light") { - shiftLight(); - } else if (arrayItem.style == "system") { - if (window.matchMedia("(prefers-color-scheme:dark)").matches) { - shiftDark(); - } else if (window.matchMedia("(prefers-color-scheme:light)").matches) { - shiftLight(); - }; - }; - }; - for (var colorKey in rgb) { - if (rgb[colorKey] < 0) { - rgb[colorKey] = 0; - } else if (rgb[colorKey] > 255) { - rgb[colorKey] = 255; - }; - rgb[colorKey] = Math.round(rgb[colorKey]); - }; - var themePresetBackground = helper.node("span|class:theme-preset-background-0" + i); - themePresetPreview.style.setProperty("--theme-preset-background-0" + i, rgb.r + ", " + rgb.g + ", " + rgb.b); - themePresetPreview.appendChild(themePresetBackground); - }; - var themePresetAccent = helper.node("span|class:theme-preset-accent"); - themePresetPreview.style.setProperty("--theme-preset-accent", arrayItem.accent.rgb.r + ", " + arrayItem.accent.rgb.g + ", " + arrayItem.accent.rgb.b); - themePresetPreview.appendChild(themePresetAccent); - - if (helper.checkIfValidString(arrayItem.name)) { - var themePresetName = helper.node("span:" + arrayItem.name + "|class:theme-preset-name"); - themePresetPreview.appendChild(themePresetName); - }; - - themePresetButton.appendChild(themePresetPreview); - themePresetTile.appendChild(themePresetButton); - themePresetItem.appendChild(themePresetTile); - formInline.appendChild(themePresetItem); - - themePresetButton.addEventListener("click", function() { - mod.apply(mod.preset.get(index)); - data.save(); - mod.color.generated(); - render.font.display.name(); - render.font.display.weight(); - render.font.display.style(); - render.font.ui.name(); - render.font.ui.weight(); - render.font.ui.style(); - render.color.shade(); - render.accent.color(); - render.radius(); - render.shadow(); - render.shade.opacity(); - render.themeMetaTag(); - style.check(); - control.render.update.control.header(); - control.render.update.control.menu(); - control.render.class(); - render.font.load.display(); - render.font.load.ui(); - }, false); - }); - themePreset.appendChild(formInline); - }; - - render.custom = { - all: function() { - var themeCustomSaved = helper.e(".theme-custom"); - var formInline = helper.node("div|class:form-inline"); - var allThemeCuston = JSON.parse(JSON.stringify(state.get.current().theme.custom.all)); - if (allThemeCuston.length > 0) { - allThemeCuston.forEach(function(arrayItem, index) { - var themeCustomItem = helper.node("div|class:theme-custom-item"); - var themeCustomTile = helper.node("div|class:theme-custom-tile"); - var themeCustomButton = helper.node("button|class:theme-custom-button button button-block button-ring,tabindex:-1"); - var themeCustomPreview = helper.node("span|class:theme-custom-preview"); - var themeCustomControlWrap = helper.node("div|class:theme-custom-control-wrap"); - var themeCustomControl = helper.node("div|class:theme-custom-control"); - var themeCustomEdit = helper.node("button|class:theme-custom-control-item theme-custom-control-item-remove button,tabindex:-1"); - var themeCustomEditIcon = helper.node("span|class:button-icon icon-edit"); - var themeCustomRemove = helper.node("button|class:theme-custom-control-item theme-custom-control-item-remove button,tabindex:-1"); - var themeCustomRemoveIcon = helper.node("span|class:button-icon icon-close"); - var shadeSteps = 4; - var rgb = arrayItem.color.rgb; - var hsl = arrayItem.color.hsl; - for (var i = 1; i <= shadeSteps; i++) { - if (i > 1) { - var shiftDark = function() { - rgb = helper.convertColor.hsl.rgb({ - h: hsl.h, - s: hsl.s, - l: hsl.l - ((arrayItem.color.contrast.dark) * (i * 2)) - }); - }; - var shiftLight = function() { - rgb = helper.convertColor.hsl.rgb({ - h: hsl.h, - s: hsl.s, - l: hsl.l + ((arrayItem.color.contrast.light) * (i * 2)) - }); - }; - if (arrayItem.style == "dark") { - shiftDark(); - } else if (arrayItem.style == "light") { - shiftLight(); - } else if (arrayItem.style == "system") { - if (window.matchMedia("(prefers-color-scheme:dark)").matches) { - shiftDark(); - } else if (window.matchMedia("(prefers-color-scheme:light)").matches) { - shiftLight(); - }; - }; - }; - for (var colorKey in rgb) { - if (rgb[colorKey] < 0) { - rgb[colorKey] = 0; - } else if (rgb[colorKey] > 255) { - rgb[colorKey] = 255; - }; - rgb[colorKey] = Math.round(rgb[colorKey]); - }; - var themeCustomBackground = helper.node("span|class:theme-custom-background-0" + i); - themeCustomPreview.style.setProperty("--theme-custom-background-0" + i, rgb.r + ", " + rgb.g + ", " + rgb.b); - themeCustomPreview.appendChild(themeCustomBackground); - }; - var themeCustomAccent = helper.node("span|class:theme-custom-accent"); - themeCustomPreview.style.setProperty("--theme-custom-accent", arrayItem.accent.rgb.r + ", " + arrayItem.accent.rgb.g + ", " + arrayItem.accent.rgb.b); - themeCustomPreview.appendChild(themeCustomAccent); - if (helper.checkIfValidString(arrayItem.name)) { - themeCustomPreview.appendChild(helper.node("span:" + helper.trimString(arrayItem.name) + "|class:theme-custom-name")); - }; - themeCustomButton.appendChild(themeCustomPreview); - themeCustomEdit.appendChild(themeCustomEditIcon); - themeCustomRemove.appendChild(themeCustomRemoveIcon); - themeCustomControl.appendChild(themeCustomEdit); - themeCustomControl.appendChild(themeCustomRemove); - themeCustomControlWrap.appendChild(themeCustomControl); - themeCustomTile.appendChild(themeCustomButton); - themeCustomTile.appendChild(themeCustomControlWrap); - themeCustomItem.appendChild(themeCustomTile); - formInline.appendChild(themeCustomItem); - - stagedThemeCustom.position.index = index; - stagedThemeCustom.theme = arrayItem; - var copyStagedThemeCustom = JSON.parse(JSON.stringify(stagedThemeCustom)); - - themeCustomButton.addEventListener("click", function() { - mod.apply(mod.custom.get(index)); - data.save(); - mod.color.generated(); - render.font.display.name(); - render.font.display.weight(); - render.font.display.style(); - render.font.ui.name(); - render.font.ui.weight(); - render.font.ui.style(); - render.color.shade(); - render.accent.color(); - render.radius(); - render.shadow(); - render.shade.opacity(); - render.themeMetaTag(); - render.font.load.display(); - render.font.load.ui(); - style.check(); - control.render.update.control.header(); - control.render.update.control.menu(); - control.render.class(); - }, false); - - themeCustomEdit.addEventListener("click", function() { - menu.close(); - render.custom.edit(copyStagedThemeCustom); - }, false); - - themeCustomRemove.addEventListener("click", function() { - menu.close(); - render.custom.remove(copyStagedThemeCustom); - }, false); - - stagedThemeCustom.reset(); - }); - themeCustomSaved.appendChild(formInline); - themeCustomSaved.appendChild(helper.node("hr")); - }; - }, - form: function(override) { - var options = { - useStagedTheme: null - }; - if (override) { - options = helper.applyOptions(options, override); - }; - var form = helper.node("form|class:group-form"); - - var nameFieldset = helper.node("fieldset"); - var nameFormWrap = helper.node("div|class:form-wrap"); - var nameLabel = helper.node("label:Name|for:theme-name"); - var nameInput = helper.node("input|id:theme-name,class:theme-name mb-0,type:text,tabindex:1,placeholder:Example theme,autocomplete:off,autocorrect:off,autocapitalize:off,spellcheck:false"); - - var randomFormWrap = helper.node("div|class:form-wrap"); - var randomButton = helper.node("button:Random Theme name|class:button button-line,type:button,tabindex:1"); - - randomFormWrap.appendChild(randomButton); - - nameFormWrap.appendChild(nameLabel); - nameFormWrap.appendChild(nameInput); - nameFieldset.appendChild(nameFormWrap); - nameFieldset.appendChild(randomFormWrap); - - form.appendChild(nameFieldset); - - if (options.useStagedTheme) { - nameInput.value = stagedThemeCustom.theme.name; - }; - - nameInput.addEventListener("input", function() { - stagedThemeCustom.theme.name = this.value; - }, false); - - randomButton.addEventListener("click", function(event) { - var randomName = helper.randomString({ - adjectivesCount: helper.randomNumber(1, 3) - }); - stagedThemeCustom.theme.name = randomName; - nameInput.value = randomName; - }, false); - - form.addEventListener("keydown", function(event) { - if (event.keyCode == 13) { - event.preventDefault(); - return false; - }; - }, false); - return form; - }, - add: function() { - var successAction = function() { - stagedThemeCustom.theme.font = state.get.current().theme.font; - stagedThemeCustom.theme.color = state.get.current().theme.color; - stagedThemeCustom.theme.accent.hsl = state.get.current().theme.accent.hsl; - stagedThemeCustom.theme.accent.rgb = state.get.current().theme.accent.rgb; - stagedThemeCustom.theme.radius = state.get.current().theme.radius; - stagedThemeCustom.theme.shadow = state.get.current().theme.shadow; - stagedThemeCustom.theme.style = state.get.current().theme.style; - stagedThemeCustom.theme.shade = state.get.current().theme.shade; - stagedThemeCustom.theme.timestamp = new Date().getTime(); - mod.custom.add(); - data.save(); - custom.check(); - render.custom.clear(); - render.custom.all(); - shade.close(); - pagelock.unlock(); - stagedThemeCustom.reset(); - control.render.dependents(); - }; - var cancelAction = function() { - shade.close(); - pagelock.unlock(); - stagedThemeCustom.reset(); - }; - modal.open({ - heading: "Save current Theme", - content: render.custom.form(), - successAction: successAction, - cancelAction: cancelAction, - actionText: "Save", - size: "small" - }); - shade.open({ - action: function() { - modal.close(); - pagelock.unlock(); - stagedThemeCustom.reset(); - } - }); - pagelock.lock(); - }, - edit: function(copyStagedThemeCustom) { - stagedThemeCustom.position.index = JSON.parse(JSON.stringify(copyStagedThemeCustom.position.index)); - stagedThemeCustom.theme = JSON.parse(JSON.stringify(copyStagedThemeCustom.theme)); - var form = render.custom.form({ - useStagedTheme: true - }); - var heading; - if (helper.checkIfValidString(stagedThemeCustom.theme.name)) { - heading = "Edit " + stagedThemeCustom.theme.name; - } else { - heading = "Edit unnamed theme"; - }; - var successAction = function() { - mod.custom.edit(); - data.save(); - render.custom.clear(); - render.custom.all(); - shade.close(); - pagelock.unlock(); - stagedThemeCustom.reset(); - }; - var cancelAction = function() { - shade.close(); - pagelock.unlock(); - stagedThemeCustom.reset(); - }; - modal.open({ - heading: heading, - successAction: successAction, - cancelAction: cancelAction, - actionText: "Save", - size: "small", - content: form - }); - shade.open({ - action: function() { - modal.close(); - pagelock.unlock(); - stagedThemeCustom.reset(); - } - }); - pagelock.lock(); - }, - remove: function(copyStagedThemeCustom) { - stagedThemeCustom.position.index = JSON.parse(JSON.stringify(copyStagedThemeCustom.position.index)); - stagedThemeCustom.theme = JSON.parse(JSON.stringify(copyStagedThemeCustom.theme)); - var heading; - if (helper.checkIfValidString(stagedThemeCustom.theme.name)) { - heading = "Remove " + stagedThemeCustom.theme.name; - } else { - heading = "Remove unnamed theme"; - }; - var successAction = function() { - mod.custom.remove(); - data.save(); - custom.check(); - render.custom.clear(); - render.custom.all(); - shade.close(); - pagelock.unlock(); - stagedThemeCustom.reset(); - control.render.update.control.header(); - control.render.update.control.menu(); - control.render.class(); - control.render.dependents(); - }; - var cancelAction = function() { - shade.close(); - pagelock.unlock(); - stagedThemeCustom.reset(); - }; - modal.open({ - heading: heading, - content: "Are you sure you want to remove this Theme? This can not be undone.", - successAction: successAction, - cancelAction: cancelAction, - actionText: "Remove", - size: "small" - }); - shade.open({ - action: function() { - modal.close(); - pagelock.unlock(); - stagedThemeCustom.reset(); - } - }); - pagelock.lock(); - }, - clear: function() { - var themeCustom = helper.e(".theme-custom"); - while (themeCustom.lastChild) { - themeCustom.removeChild(themeCustom.lastChild); - }; - }, - tabIndex: function() { - if (state.get.current().theme.custom.edit && state.get.current().menu) { - helper.eA(".theme-custom-control-item").forEach(function(arrayItem, index) { - arrayItem.tabIndex = 1; - }); - } else { - helper.eA(".theme-custom-control-item").forEach(function(arrayItem, index) { - arrayItem.tabIndex = -1; - }); - }; - }, - formWrap: { - open: function() { - var themeCustom = helper.e(".theme-custom"); - helper.removeClass(themeCustom, "form-wrap-hide-space"); - }, - close: function() { - var themeCustom = helper.e(".theme-custom"); - helper.addClass(themeCustom, "form-wrap-hide-space"); - } - } - }; - - render.shade = { - opacity: function() { - var html = helper.e("html"); - html.style.setProperty("--theme-shade-opacity", state.get.current().theme.shade.opacity); - } - }; - - render.themeMetaTag = function() { - var head = helper.e("head"); - var metaThemeColor = helper.e(".meta-theme-color"); - if (metaThemeColor) { - metaThemeColor.remove(); - }; - var meta = helper.node("meta|class:meta-theme-color,name:theme-color,content:" + helper.convertColor.rgb.hex(state.get.current().theme.color.generated.negative[10])); - head.appendChild(meta); - }; - - var accent = { - random: function() { - mod.accent.random(); - render.accent.color(); - }, - cycle: function() { - mod.accent.cycle(); - render.accent.color(); - } - }; - - var style = { - dark: function() { - mod.style.dark(); - mod.style.initial(); - render.style.dark(); - }, - light: function() { - mod.style.light(); - mod.style.initial(); - render.style.light(); - }, - system: function() { - mod.style.system(); - mod.style.initial(); - render.style.system(); - }, - check: function() { - if (state.get.current().theme.style == "dark") { - style.dark(); - } else if (state.get.current().theme.style == "light") { - style.light(); - } else if (state.get.current().theme.style == "system") { - style.system(); - }; - }, - toggle: function() { - if (state.get.current().theme.style == "dark") { - style.light(); - } else if (state.get.current().theme.style == "light") { - style.dark(); - }; - } - } - - var custom = { - add: function() { - render.custom.add(); - }, - edit: function() { - render.custom.edit(); - render.custom.tabIndex(); - }, - check: function() { - if (state.get.current().theme.custom.all.length > 0) { - render.custom.formWrap.open(); - } else { - mod.custom.close(); - render.custom.formWrap.close(); - }; - } - }; - - var init = function() { - mod.style.initial(); - mod.color.generated(); - mod.accent.random(); - mod.custom.close(); - bind.accent.cycle.toggle(); - bind.style.initial(); - render.font.load.display(); - render.font.load.ui(); - render.font.display.name(); - render.font.display.weight(); - render.font.display.style(); - render.font.ui.name(); - render.font.ui.weight(); - render.font.ui.style(); - render.color.shade(); - render.accent.color(); - render.accent.preset(); - render.radius(); - render.shadow(); - render.shade.opacity(); - render.preset(); - render.custom.all(); - render.themeMetaTag(); - custom.check(); - }; - - // exposed methods - return { - init: init, - mod: mod, - bind: bind, - render: render, - style: style, - accent: accent, - custom: custom - }; - -})(); diff --git a/src/js/tip.js b/src/js/tip.js deleted file mode 100644 index 985c6872..00000000 --- a/src/js/tip.js +++ /dev/null @@ -1,138 +0,0 @@ -var tip = (function() { - - var destroyTimer = null; - - var intervalId; - - var _bind = function() { - var allTip = helper.eA("[data-tip-options]"); - for (var i = 0; i < allTip.length; i++) { - var options = helper.makeObject(allTip[i].dataset.tipOptions); - _bind_tip(allTip[i]); - }; - }; - - var _bind_tip = function(tip) { - var options = helper.makeObject(tip.dataset.tipOptions); - var action = { - focus: function() { - tip.addEventListener("focus", function() { - if (options.delay) { - intervalId = setInterval(function() { - render(tip); - }, options.delay); - } else { - render(tip); - }; - }, false); - tip.addEventListener("blur", function() { - destroy(); - clearInterval(intervalId); - }, false); - }, - hover: function() { - tip.addEventListener("mouseover", function() { - if (options.delay) { - intervalId = setInterval(function() { - render(tip); - }, options.delay); - } else { - render(tip); - }; - }, false); - tip.addEventListener("mouseout", function() { - destroy(); - clearInterval(intervalId); - }, false); - } - }; - action[options.state](); - }; - - var delayDestroy = function() { - var allTipBox = helper.eA(".tip-box"); - for (var i = 0; i < allTipBox.length; i++) { - if (!allTipBox[i].classList.contains("is-opaque")) { - allTipBox[i].parentElement.removeChild(allTipBox[i]); - }; - }; - }; - - var destroy = function() { - var allTipBox = helper.eA(".tip-box"); - if (allTipBox[0]) { - for (var i = 0; i < allTipBox.length; i++) { - allTipBox[i].destroy(); - }; - }; - }; - - var render = function(tip) { - // console.log(tip.getBoundingClientRect()); - var options = helper.makeObject(tip.dataset.tipOptions); - var body = helper.e("body"); - var tipWrapper = document.createElement("div"); - tipWrapper.setAttribute("class", "tip tip-box is-transparent"); - var tipArrow = document.createElement("span"); - tipArrow.setAttribute("class", "tip-arrow"); - var tipMessage = document.createElement("p"); - tipMessage.setAttribute("class", "tip-message"); - tipMessage.textContent = options.message; - tipWrapper.destroy = function() { - if (tipWrapper.classList.contains("is-opaque")) { - helper.removeClass(tipWrapper, "is-opaque"); - helper.addClass(tipWrapper, "is-transparent"); - helper.removeClass(tipWrapper, "tip-intro"); - helper.addClass(tipWrapper, "tip-outro"); - } else { - tipWrapper.remove(); - }; - }; - tipWrapper.addEventListener("transitionend", function(event, elapsed) { - if (event.propertyName === "opacity" && getComputedStyle(this).opacity == 0) { - this.parentElement.removeChild(this); - }; - }.bind(tipWrapper), false); - - tipWrapper.appendChild(tipMessage); - tipWrapper.appendChild(tipArrow); - body.appendChild(tipWrapper); - tipWrapper.setAttribute("style", "width: " + (parseInt(tipWrapper.getBoundingClientRect().width, 10) + 2) + "px;"); - - var width = parseInt(tipWrapper.getBoundingClientRect().width); - var top = parseInt(tip.getBoundingClientRect().top, 10) + parseInt(pageYOffset, 10) - parseInt(tipWrapper.getBoundingClientRect().height, 10) - parseInt(getComputedStyle(tipWrapper).marginTop, 10) - parseInt(getComputedStyle(tipWrapper).marginBottom, 10); - var left = parseInt(tip.getBoundingClientRect().left, 10) + parseInt((tip.getBoundingClientRect().width / 2), 10) - parseInt(((width + parseInt(getComputedStyle(tipWrapper).marginLeft, 10) + parseInt(getComputedStyle(tipWrapper).marginRight, 10)) / 2), 10); - - tipWrapper.setAttribute("style", "width: " + width + "px; top: " + top + "px; left: " + left + "px"); - var style = { - top: tipWrapper.style.top, - width: tipWrapper.style.width - }; - - if (tipWrapper.getBoundingClientRect().left < parseInt(getComputedStyle(tipWrapper).marginLeft, 10)) { - // console.log("too far left"); - tipWrapper.setAttribute("style", "width: " + style.width + "; top: " + style.top + "; left: " + 0 + "px;"); - tipArrow.setAttribute("style", "left: " + (parseInt(tip.getBoundingClientRect().left, 10) + parseInt((tip.getBoundingClientRect().width / 2), 10) - parseInt(getComputedStyle(tipWrapper).marginLeft, 10)) + "px;"); - } else if (tipWrapper.getBoundingClientRect().right > (document.documentElement.clientWidth - parseInt(getComputedStyle(tipWrapper).marginLeft, 10))) { - // console.log("too far right"); - tipWrapper.setAttribute("style", "width: " + style.width + "; top: " + style.top + "; left: initial; right: " + 0 + "px;"); - tipArrow.setAttribute("style", "left: " + (-parseInt(tipWrapper.getBoundingClientRect().left, 10) + parseInt(tip.getBoundingClientRect().left, 10) + (parseInt((tip.getBoundingClientRect().width), 10) / 2)) + "px;"); - }; - - getComputedStyle(tipWrapper).opacity; - helper.removeClass(tipWrapper, "is-transparent"); - helper.addClass(tipWrapper, "is-opaque"); - helper.addClass(tipWrapper, "tip-intro"); - }; - - var init = function() { - _bind(); - }; - - // exposed methods - return { - destroy: destroy, - init: init - }; - -})(); diff --git a/src/js/transitional.js b/src/js/transitional.js deleted file mode 100644 index 9fc58028..00000000 --- a/src/js/transitional.js +++ /dev/null @@ -1,73 +0,0 @@ -var transitional = (function() { - - var bind = {}; - - bind.tick = function() { - window.setInterval(function() { - render.clear(); - render.all(); - }, 1000); - }; - - var render = {}; - - render.clear = function() { - if (state.get.current().header.transitional.show) { - var transitional = helper.e(".transitional"); - while (transitional.lastChild) { - transitional.removeChild(transitional.lastChild); - }; - }; - }; - - render.all = function() { - if (state.get.current().header.transitional.show) { - var transitional = helper.e(".transitional"); - var message = { - timeanddate: function() { - 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.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.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) { - return "The time and day is"; - } else { - return "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) { - return "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) { - return "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) { - return "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) { - return "The year is"; - } else { - return "The date is"; - }; - } else if (state.get.current().header.clock.seconds.show || state.get.current().header.clock.minutes.show || state.get.current().header.clock.hours.show) { - return "The time is"; - }; - }, - its: function() { - return "It's"; - } - }; - var string = message[state.get.current().header.transitional.type](); - var transitionalItem = helper.node("span|class:transitional-item"); - var transitionalItemText = helper.node("span:" + string + "|class:transitional-item-text"); - transitionalItem.appendChild(transitionalItemText); - transitional.appendChild(transitionalItem); - }; - }; - - var init = function() { - bind.tick(); - render.all(); - }; - - // exposed methods - return { - init: init, - render: render - }; - -})(); diff --git a/src/js/version.js b/src/js/version.js deleted file mode 100644 index 53980faf..00000000 --- a/src/js/version.js +++ /dev/null @@ -1,54 +0,0 @@ -var version = (function() { - - var current = "6.6.0"; - - var name = "Jaded Raven"; - - var compare = function(a, b) { - var pa = a.split("."); - var pb = b.split("."); - for (var i = 0; i < 3; i++) { - var na = Number(pa[i]); - var 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; - }; - - var get = function() { - // return chrome.runtime.getManifest().version; - return { - number: current, - name: name - }; - }; - - var render = function() { - helper.e(".display-version").textContent = get().number; - helper.e(".display-name").textContent = get().name; - }; - - var init = function() { - render(); - }; - - // exposed methods - return { - init: init, - get: get, - compare: compare, - render: render - }; - -})(); diff --git a/src/manifest.json b/src/manifest.json index e40b5887..7984d6cb 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -2,14 +2,15 @@ "name": "nightTab", "short_name": "nightTab", "description": "A neutral new tab page accented with a chosen colour. Customise the layout, style, background and bookmarks in nightTab.", - "version": "6.6.0", + "version": "7.0.0", "manifest_version": 2, "chrome_url_overrides": { "newtab": "index.html" }, "icons": { - "16": "icons/icon-16.png", - "48": "icons/icon-48.png", - "128": "icons/icon-128.png" + "16": "icon/icon-16.png", + "48": "icon/icon-48.png", + "128": "icon/icon-128.png", + "512": "icon/icon-512.png" } } diff --git a/src/style-guide.html b/src/style-guide.html deleted file mode 100644 index 1480789c..00000000 --- a/src/style-guide.html +++ /dev/null @@ -1,728 +0,0 @@ - - - - - - - Style Guide - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- -
-
- - - - -
-
- -
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
-
- -
- -
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- -
-
-
- - - -
-
-
-
- - - -
-
-
- -
-
-
-
- - -
-
- - -
-
- - -
-
-
-
-
-
- - -
-
- - -
-
- - -
-
-
-
- -
-
-
-
- - -
- - -
-
- -
-
-
- - -
-
- - -
-
- - -
-
-
- - - -
-
-
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
-
-
-
- - -
-
- - -
-
- - -
-
-
-
-
-
- - -
-
- - -
-
- - -
-
-
-
-
-
- -
-
-
-
- - -
- - - -
- -
    -
  • - -
  • -
  • - -
  • -
-
-
-
-
- -
-
- - -
-
- - -
-
- -
-
- -
- - - - -
Form Group Text
-
-
-
- -
-
- - -
-
- -
-
- - -
-
- -
-
- - -
-
- -
-
- -
-
- -
- -
- - - - - - - - diff --git a/src/utility/applyCSSClass.js b/src/utility/applyCSSClass.js new file mode 100644 index 00000000..14f27700 --- /dev/null +++ b/src/utility/applyCSSClass.js @@ -0,0 +1,36 @@ +import { state } from '../component/state'; +import { get } from './get'; + +export const applyCSSClass = (path) => { + + const html = document.querySelector('html'); + + const apply = (path) => { + + get({ + object: state.get.option(), + path: path + }).forEach((item, i) => { + + html.classList.remove('is-' + path.replace(/\./g, '-').toLowerCase() + '-' + item); + + }); + + html.classList.add('is-' + path.replace(/\./g, '-').toLowerCase() + '-' + get({ + object: state.get.current(), + path: path + })); + + }; + + if (Array.isArray(path)) { + + path.forEach((item, i) => { apply(item); }); + + } else { + + apply(path); + + }; + +}; diff --git a/src/utility/applyCSSState.js b/src/utility/applyCSSState.js new file mode 100644 index 00000000..5d1a3cbd --- /dev/null +++ b/src/utility/applyCSSState.js @@ -0,0 +1,32 @@ +import { state } from '../component/state'; +import { get } from './get'; + +export const applyCSSState = function(path) { + + const html = document.querySelector('html'); + + const apply = (path) => { + + if (get({ object: state.get.current(), path: path })) { + + html.classList.add('is-' + path.replace(/\./g, '-').toLowerCase()); + + } else { + + html.classList.remove('is-' + path.replace(/\./g, '-').toLowerCase()); + + }; + + }; + + if (Array.isArray(path)) { + + path.forEach((item, i) => { apply(item); }); + + } else { + + apply(path); + + }; + +}; diff --git a/src/utility/applyCSSVar.js b/src/utility/applyCSSVar.js new file mode 100644 index 00000000..194144db --- /dev/null +++ b/src/utility/applyCSSVar.js @@ -0,0 +1,27 @@ +import { state } from '../component/state'; +import { get } from './get'; + +export const applyCSSVar = (path) => { + + const html = document.querySelector('html'); + + const apply = (path) => { + + html.style.setProperty('--' + path.replace(/\./g, '-').toLowerCase(), get({ + object: state.get.current(), + path: path + })); + + }; + + if (Array.isArray(path)) { + + path.forEach((item, i) => { apply(item); }); + + } else { + + apply(path); + + }; + +}; diff --git a/src/utility/averageColor.js b/src/utility/averageColor.js new file mode 100644 index 00000000..b16767c8 --- /dev/null +++ b/src/utility/averageColor.js @@ -0,0 +1,9 @@ +export const averageColor = function(rgb1, rgb2) { + + return { + r: Math.round(Math.sqrt(Math.pow(rgb1.r, 1.75) + Math.pow(rgb2.r, 1.75) / 2)), + g: Math.round(Math.sqrt(Math.pow(rgb1.g, 1.75) + Math.pow(rgb2.g, 1.75) / 2)), + b: Math.round(Math.sqrt(Math.pow(rgb1.b, 1.75) + Math.pow(rgb2.b, 1.75) / 2)) + }; + +}; diff --git a/src/utility/clearChildNode.js b/src/utility/clearChildNode.js new file mode 100644 index 00000000..bde8b2e1 --- /dev/null +++ b/src/utility/clearChildNode.js @@ -0,0 +1,7 @@ +export const clearChildNode = (element) => { + + while (element.lastChild) { + element.removeChild(element.lastChild); + }; + +}; diff --git a/src/utility/complexNode.js b/src/utility/complexNode.js new file mode 100644 index 00000000..65048657 --- /dev/null +++ b/src/utility/complexNode.js @@ -0,0 +1,48 @@ +export const complexNode = ({ + tag = 'div', + text = false, + attr = [], + node = [] +} = {}) => { + + const element = document.createElement(tag); + + if (text) { + element.innerHTML = text; + }; + + if (attr.length > 0) { + attr.forEach((item, i) => { + + if ('key' in item && 'value' in item) { + element.setAttribute(item.key, item.value); + } else if ('key' in item) { + element.setAttribute(item.key, ''); + }; + + }); + }; + + if (node) { + if (typeof node != 'string') { + if (node.length > 0) { + + node.forEach((item, i) => { + if (item instanceof HTMLElement) { + element.appendChild(item); + }; + }); + + } else { + + if (node instanceof HTMLElement) { + element.appendChild(node); + }; + + }; + }; + }; + + return element; + +}; diff --git a/src/utility/convertColor.js b/src/utility/convertColor.js new file mode 100644 index 00000000..6d087294 --- /dev/null +++ b/src/utility/convertColor.js @@ -0,0 +1,147 @@ +export const convertColor = { + rgb: {}, + hsl: {}, + hex: {} +}; + +convertColor.rgb.hsl = (rgb) => { + var r = rgb.r / 255; + var g = rgb.g / 255; + var b = rgb.b / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + }; + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + }; + + var l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + }; + + return { + h: Math.round(h), + s: Math.round(s * 100), + l: Math.round(l * 100) + }; +}; + +convertColor.rgb.hex = (args) => { + var integer = ((Math.round(args.r) & 0xFF) << 16) + + ((Math.round(args.g) & 0xFF) << 8) + + (Math.round(args.b) & 0xFF); + + var string = integer.toString(16); + + return '#' + '000000'.substring(string.length) + string; +}; + +convertColor.hsl.rgb = (hsl) => { + var h = hsl.h / 360; + var s = hsl.s / 100; + var l = hsl.l / 100; + var t2; + var t3; + var val; + + if (s === 0) { + val = l * 255; + return { + r: Math.round(val), + g: Math.round(val), + b: Math.round(val) + }; + }; + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + }; + + var t1 = 2 * l - t2; + + var rgb = [0, 0, 0]; + + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + + if (t3 < 0) { + t3++; + }; + + if (t3 > 1) { + t3--; + }; + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + }; + + rgb[i] = val * 255; + }; + + return { + r: Math.round(rgb[0]), + g: Math.round(rgb[1]), + b: Math.round(rgb[2]) + }; +}; + +convertColor.hex.rgb = (args) => { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + + if (!match) { + return { + r: 0, + g: 0, + b: 0 + }; + }; + + var colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map((char) => { + return char + char; + }).join(''); + }; + + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; + + return { + r: r, + g: g, + b: b + }; +}; diff --git a/src/utility/dateTime.js b/src/utility/dateTime.js new file mode 100644 index 00000000..5a34fe80 --- /dev/null +++ b/src/utility/dateTime.js @@ -0,0 +1,21 @@ +export const dateTime = () => { + + const date = new Date(); + + const month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + + return { + // string: date.constructor(), + // time: date.getTime(), + date: date.getDate(), + day: date.getDay(), + year: date.getFullYear(), + hours: date.getHours(), + milliseconds: date.getMilliseconds(), + minutes: date.getMinutes(), + month: date.getMonth(), + monthString: month[date.getMonth()], + seconds: date.getSeconds() + }; + +}; diff --git a/src/utility/get.js b/src/utility/get.js new file mode 100644 index 00000000..1fbeb1f1 --- /dev/null +++ b/src/utility/get.js @@ -0,0 +1,48 @@ +import { makePath } from './makePath.js'; + +export const get = ({ + object = null, + path = null +} = {}) => { + + const address = makePath(path); + + const getValue = () => { + + while (address.length > 1) { + + // shift off and store the first key + let currentKey = address.shift(); + + // if the key is not found make a new object + if (!(currentKey in object)) { + // make an empty object in the current object level + if (isNaN(currentKey)) { + object[currentKey] = {}; + } else { + object[currentKey] = []; + }; + }; + + // drill down the object with the first key + object = object[currentKey]; + + }; + + let finalKey = address.shift(); + + if (!(finalKey in object)) { + return ''; + } else { + return object[finalKey]; + }; + + }; + + if (object != null && path != null) { + return getValue(); + } else { + return false; + }; + +}; diff --git a/src/utility/isElementVisible.js b/src/utility/isElementVisible.js new file mode 100644 index 00000000..018e9141 --- /dev/null +++ b/src/utility/isElementVisible.js @@ -0,0 +1,31 @@ +export const isElementVisible = (element) => { + + var rect = element.getBoundingClientRect(); + + const vWidth = window.innerWidth || doc.documentElement.clientWidth; + + const vHeight = window.innerHeight || doc.documentElement.clientHeight; + + const efp = (x, y) => { + return document.elementFromPoint(x, y) + }; + + // Return false if element is not in the viewport + if ( + rect.right < 0 || + rect.bottom < 0 || + rect.left > vWidth || + rect.top > vHeight + ) { + return false; + }; + + // Return true if any of the element four corners are visible + return ( + element.contains(efp(rect.left, rect.top)) || + element.contains(efp(rect.right, rect.top)) || + element.contains(efp(rect.right, rect.bottom)) || + element.contains(efp(rect.left, rect.bottom)) + ); + +}; diff --git a/src/utility/isJson.js b/src/utility/isJson.js new file mode 100644 index 00000000..f2d7bd52 --- /dev/null +++ b/src/utility/isJson.js @@ -0,0 +1,11 @@ +export const isJson = (string) => { + + try { + JSON.parse(string); + } catch (error) { + return false; + }; + + return true; + +}; diff --git a/src/utility/isValidString.js b/src/utility/isValidString.js new file mode 100644 index 00000000..91a937cc --- /dev/null +++ b/src/utility/isValidString.js @@ -0,0 +1,12 @@ +export const isValidString = (value) => { + let result = false; + + if (typeof value == 'string') { + value = value.trim().replace(/\s/g, ''); + if (value != '') { + result = true; + }; + }; + + return result; +}; diff --git a/src/utility/makePath.js b/src/utility/makePath.js new file mode 100644 index 00000000..d231babf --- /dev/null +++ b/src/utility/makePath.js @@ -0,0 +1,34 @@ +export const makePath = (string) => { + + if (string) { + + let array; + + if (string.indexOf('[') != -1 && string.indexOf(']') != -1) { + + array = string.split('.').join(',').split('[').join(',').split(']').join(',').split(','); + + for (var i = 0; i < array.length; i++) { + if (array[i] == '') { + array.splice(i, 1); + }; + if (!isNaN(parseInt(array[i], 10))) { + array[i] = parseInt(array[i], 10); + }; + }; + + } else { + + array = string.split('.'); + + }; + + return array; + + } else { + + return false; + + }; + +}; diff --git a/src/utility/minMax.js b/src/utility/minMax.js new file mode 100644 index 00000000..d9f03b57 --- /dev/null +++ b/src/utility/minMax.js @@ -0,0 +1,25 @@ +export const minMax = ({ + min = 0, + max = 0, + value = 0 +} = {}) => { + + if (value > max) { + + return max; + + } else if (value < min) { + + return min; + + } else if (isNaN(value)) { + + return min; + + } else { + + return value; + + }; + +}; diff --git a/src/utility/node.js b/src/utility/node.js new file mode 100644 index 00000000..a418a227 --- /dev/null +++ b/src/utility/node.js @@ -0,0 +1,110 @@ +export const node = (string, node) => { + + // set element + let tag; + + if (string.indexOf('|') > 0) { + tag = string.slice(0, string.indexOf('|')); + } else { + tag = string; + }; + + let text = false; + + if (tag.indexOf(':') > 0) { + // regex + // find all : and split + // ignore all \: + let pair = tag.split(/:(?!.*:\\)/); + tag = pair[0]; + // replace \: with : + text = pair[1].replace('\\', ':'); + }; + + let element = document.createElement(tag); + + if (text && text != '') { + element.innerHTML = text; + }; + + let attributes = string.slice(string.indexOf('|') + 1, string.length).split(','); + + // set attributes + if (string.indexOf('|') > 0 && string.indexOf('|') < string.length - 1) { + + attributes.forEach((item, i) => { + if (item.indexOf(':') > 0) { + // if key and value + var pair = item.substring(0, item.indexOf(':')) + ',' + item.substring(item.indexOf(':') + 1, item.length); + pair = pair.split(','); + attributes[i] = { + key: pair[0], + value: pair[1] + }; + } else { + // if key only + attributes[i] = { + key: item, + value: undefined + }; + } + }); + + attributes.forEach((item, i) => { + if ('key' in item && item.key != undefined && 'value' in item && item.value != undefined) { + element.setAttribute(item.key, item.value); + } else if ('key' in item && item.key != undefined) { + element.setAttribute(item.key, ''); + } + }); + + }; + + if (node) { + + if (typeof node != 'string') { + + if (node.length > 0) { + + node.forEach((item, i) => { + + if (item instanceof HTMLElement) { + + element.appendChild(item); + + } else { + + let div = document.createElement('div'); + + div.innerHTML = item; + + element.appendChild(div.firstChild); + + }; + + }); + + } else { + + if (node instanceof HTMLElement) { + + element.appendChild(node); + + } else { + + let div = document.createElement('div'); + + div.innerHTML = node; + + element.appendChild(div.firstChild); + + }; + + }; + + }; + + }; + + return element; +}; diff --git a/src/utility/ordinalNumber.js b/src/utility/ordinalNumber.js new file mode 100644 index 00000000..f8528c81 --- /dev/null +++ b/src/utility/ordinalNumber.js @@ -0,0 +1,21 @@ +export const ordinalNumber = (number) => { + + var j = number % 10; + + var k = number % 100; + + if (j == 1 && k != 11) { + return number + 'st'; + }; + + if (j == 2 && k != 12) { + return number + 'nd'; + }; + + if (j == 3 && k != 13) { + return number + 'rd'; + }; + + return number + 'th'; + +}; diff --git a/src/utility/ordinalWord.js b/src/utility/ordinalWord.js new file mode 100644 index 00000000..4f88a365 --- /dev/null +++ b/src/utility/ordinalWord.js @@ -0,0 +1,44 @@ +export const ordinalWord = (word) => { + + const endsWithDoubleZeroPattern = /(hundred|thousand|(m|b|tr|quadr)illion)$/; + + const endsWithTeenPattern = /teen$/; + + const endsWithYPattern = /y$/; + + const endsWithZeroThroughTwelvePattern = /(Zero|One|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten|Eleven|Twelve)$/; + + const ordinalLessThanThirteen = { + Zero: 'Zeroth', + One: 'First', + Two: 'Second', + Three: 'Third', + Four: 'Fourth', + Five: 'Fifth', + Six: 'Sixth', + Seven: 'Seventh', + Eight: 'Eighth', + Nine: 'Ninth', + Ten: 'Tenth', + Eleven: 'Eleventh', + Twelve: 'Twelfth' + }; + + const replaceWithOrdinalVariant = (match, numberWord) => { + return ordinalLessThanThirteen[numberWord]; + }; + + // Ends with *00 (100, 1000, etc.) or *teen (13, 14, 15, 16, 17, 18, 19) + if (endsWithDoubleZeroPattern.test(word) || endsWithTeenPattern.test(word)) { + return word + 'th'; + // Ends with *y (20, 30, 40, 50, 60, 70, 80, 90) + } else if (endsWithYPattern.test(word)) { + return word.replace(endsWithYPattern, 'ieth'); + // Ends with one through twelve + } else if (endsWithZeroThroughTwelvePattern.test(word)) { + return word.replace(endsWithZeroThroughTwelvePattern, replaceWithOrdinalVariant); + }; + + return word; + +}; diff --git a/src/utility/randomNumber.js b/src/utility/randomNumber.js new file mode 100644 index 00000000..28925588 --- /dev/null +++ b/src/utility/randomNumber.js @@ -0,0 +1,5 @@ +export const randomNumber = (min, max) => { + + return Math.floor(Math.random() * (max - min + 1) + min); + +}; diff --git a/src/utility/randomString.js b/src/utility/randomString.js new file mode 100644 index 00000000..8baf7389 --- /dev/null +++ b/src/utility/randomString.js @@ -0,0 +1,162 @@ +export const randomString = ({ + letter = false, + adjectivesCount = false +} = {}) => { + + const alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; + + const adjectives = { + a: ['Aback', 'Abaft', 'Abandoned', 'Abashed', 'Aberrant', 'Abhorrent', 'Abiding', 'Abject', 'Ablaze', 'Able', 'Abnormal', 'Aboriginal', 'Abortive', 'Abounding', 'Abrasive', 'Abrupt', 'Absent', 'Absorbed', 'Absorbing', 'Abstracted', 'Absurd', 'Abundant', 'Abusive', 'Acceptable', 'Accessible', 'Accidental', 'Accurate', 'Acid', 'Acidic', 'Acoustic', 'Acrid', 'Adamant', 'Adaptable', 'Addicted', 'Adhesive', 'Adjoining', 'Adorable', 'Adventurous', 'Afraid', 'Aggressive', 'Agonizing', 'Agreeable', 'Ahead', 'Ajar', 'Alert', 'Alike', 'Alive', 'Alleged', 'Alluring', 'Aloof', 'Amazing', 'Ambiguous', 'Ambitious', 'Amuck', 'Amused', 'Amusing', 'Ancient', 'Angry', 'Animated', 'Annoyed', 'Annoying', 'Anxious', 'Apathetic', 'Aquatic', 'Aromatic', 'Arrogant', 'Ashamed', 'Aspiring', 'Assorted', 'Astonishing', 'Attractive', 'Auspicious', 'Automatic', 'Available', 'Average', 'Aware', 'Awesome', 'Axiomatic'], + b: ['Bad', 'Barbarous', 'Bashful', 'Bawdy', 'Beautiful', 'Befitting', 'Belligerent', 'Beneficial', 'Bent', 'Berserk', 'Bewildered', 'Big', 'Billowy', 'Bitter', 'Bizarre', 'Black', 'Bloody', 'Blue', 'Blushing', 'Boiling', 'Boorish', 'Bored', 'Boring', 'Bouncy', 'Boundless', 'Brainy', 'Brash', 'Brave', 'Brawny', 'Breakable', 'Breezy', 'Brief', 'Bright', 'Broad', 'Broken', 'Brown', 'Bumpy', 'Burly', 'Bustling', 'Busy'], + c: ['Cagey', 'Calculating', 'Callous', 'Calm', 'Capable', 'Capricious', 'Careful', 'Careless', 'Caring', 'Cautious', 'Ceaseless', 'Certain', 'Changeable', 'Charming', 'Cheap', 'Cheerful', 'Chemical', 'Chief', 'Childlike', 'Chilly', 'Chivalrous', 'Chubby', 'Chunky', 'Clammy', 'Classy', 'Clean', 'Clear', 'Clever', 'Cloistered', 'Cloudy', 'Closed', 'Clumsy', 'Cluttered', 'Coherent', 'Cold', 'Colorful', 'Colossal', 'Combative', 'Comfortable', 'Common', 'Complete', 'Complex', 'Concerned', 'Condemned', 'Confused', 'Conscious', 'Cooing', 'Cool', 'Cooperative', 'Coordinated', 'Courageous', 'Cowardly', 'Crabby', 'Craven', 'Crazy', 'Creepy', 'Crooked', 'Crowded', 'Cruel', 'Cuddly', 'Cultured', 'Cumbersome', 'Curious', 'Curly', 'Curved', 'Curvy', 'Cut', 'Cute', 'Cynical'], + d: ['Daffy', 'Daily', 'Damaged', 'Damaging', 'Damp', 'Dangerous', 'Dapper', 'Dark', 'Dashing', 'Dazzling', 'Dead', 'Deadpan', 'Deafening', 'Dear', 'Debonair', 'Decisive', 'Decorous', 'Deep', 'Deeply', 'Defeated', 'Defective', 'Defiant', 'Delicate', 'Delicious', 'Delightful', 'Demonic', 'Delirious', 'Dependent', 'Depressed', 'Deranged', 'Descriptive', 'Deserted', 'Detailed', 'Determined', 'Devilish', 'Didactic', 'Different', 'Difficult', 'Diligent', 'Direful', 'Dirty', 'Disagreeable', 'Disastrous', 'Discreet', 'Disgusted', 'Disgusting', 'Disillusioned', 'Dispensable', 'Distinct', 'Disturbed', 'Divergent', 'Dizzy', 'Domineering', 'Doubtful', 'Drab', 'Draconian', 'Dramatic', 'Dreary', 'Drunk', 'Dry', 'Dull', 'Dusty', 'Dynamic', 'Dysfunctional'], + e: ['Eager', 'Early', 'Earsplitting', 'Earthy', 'Easy', 'Eatable', 'Economic', 'Educated', 'Efficacious', 'Efficient', 'Elastic', 'Elated', 'Elderly', 'Electric', 'Elegant', 'Elfin', 'Elite', 'Embarrassed', 'Eminent', 'Empty', 'Enchanted', 'Enchanting', 'Encouraging', 'Endurable', 'Energetic', 'Enormous', 'Entertaining', 'Enthusiastic', 'Envious', 'Equable', 'Equal', 'Erect', 'Erratic', 'Ethereal', 'Evanescent', 'Evasive', 'Even', 'Excellent', 'Excited', 'Exciting', 'Exclusive', 'Exotic', 'Expensive', 'Exuberant', 'Exultant'], + f: ['Fabulous', 'Faded', 'Faint', 'Fair', 'Faithful', 'Fallacious', 'False', 'Familiar', 'Famous', 'Fanatical', 'Fancy', 'Fantastic', 'Far', 'Fascinated', 'Fast', 'Fat', 'Faulty', 'Fearful', 'Fearless', 'Feeble', 'Feigned', 'Female', 'Fertile', 'Festive', 'Few', 'Fierce', 'Filthy', 'Fine', 'Finicky', 'First', 'Fixed', 'Flagrant', 'Flaky', 'Flashy', 'Flat', 'Flawless', 'Flimsy', 'Flippant', 'Flowery', 'Fluffy', 'Fluttering', 'Foamy', 'Foolish', 'Foregoing', 'Forgetful', 'Fortunate', 'Frail', 'Fragile', 'Frantic', 'Free', 'Freezing', 'Frequent', 'Fresh', 'Fretful', 'Friendly', 'Frightened', 'Frightening', 'Full', 'Fumbling', 'Functional', 'Funny', 'Furry', 'Furtive', 'Future', 'Futuristic', 'Fuzzy'], + g: ['Gabby', 'Gainful', 'Gamy', 'Gaping', 'Garrulous', 'Gaudy', 'General', 'Gentle', 'Giant', 'Giddy', 'Gifted', 'Gigantic', 'Glamorous', 'Gleaming', 'Glib', 'Glistening', 'Glorious', 'Glossy', 'Godly', 'Good', 'Goofy', 'Gorgeous', 'Graceful', 'Grandiose', 'Grateful', 'Gratis', 'Gray', 'Greasy', 'Great', 'Greedy', 'Green', 'Grey', 'Grieving', 'Groovy', 'Grotesque', 'Grouchy', 'Grubby', 'Gruesome', 'Grumpy', 'Guarded', 'Guiltless', 'Gullible', 'Gusty', 'Guttural'], + h: ['Habitual', 'Half', 'Hallowed', 'Halting', 'Handsome', 'Handy', 'Hanging', 'Hapless', 'Happy', 'Hard', 'Harmonious', 'Harsh', 'Hateful', 'Heady', 'Healthy', 'Heartbreaking', 'Heavenly', 'Heavy', 'Hellish', 'Helpful', 'Helpless', 'Hesitant', 'Hideous', 'High', 'Highfalutin', 'Hilarious', 'Hissing', 'Historical', 'Holistic', 'Hollow', 'Homeless', 'Homely', 'Honorable', 'Horrible', 'Hospitable', 'Hot', 'Huge', 'Hulking', 'Humdrum', 'Humorous', 'Hungry', 'Hurried', 'Hurt', 'Hushed', 'Husky', 'Hypnotic', 'Hysterical'], + i: ['Icky', 'Icy', 'Idiotic', 'Ignorant', 'Ill', 'Illegal', 'Illustrious', 'Imaginary', 'Immense', 'Imminent', 'Impartial', 'Imperfect', 'Impolite', 'Important', 'Imported', 'Impossible', 'Incandescent', 'Incompetent', 'Inconclusive', 'Industrious', 'Incredible', 'Inexpensive', 'Infamous', 'Innate', 'Innocent', 'Inquisitive', 'Insidious', 'Instinctive', 'Intelligent', 'Interesting', 'Internal', 'Invincible', 'Irate', 'Irritating', 'Itchy'], + j: ['Jaded', 'Jagged', 'Jazzy', 'Jealous', 'Jittery', 'Jobless', 'Jolly', 'Joyous', 'Judicious', 'Juicy', 'Jumbled', 'Jumpy', 'Juvenile'], + k: ['Keen', 'Kind', 'Kindhearted', 'Kindly', 'Knotty', 'Knowing', 'Knowledgeable', 'Known'], + l: ['Labored', 'Lackadaisical', 'Lacking', 'Lame', 'Lamentable', 'Languid', 'Large', 'Last', 'Late', 'Laughable', 'Lavish', 'Lazy', 'Lean', 'Learned', 'Left', 'Legal', 'Lethal', 'Level', 'Lewd', 'Light', 'Like', 'Likeable', 'Limping', 'Literate', 'Little', 'Lively', 'Living', 'Lonely', 'Long', 'Longing', 'Loose', 'Lopsided', 'Loud', 'Loutish', 'Lovely', 'Loving', 'Low', 'Lowly', 'Lucky', 'Ludicrous', 'Lumpy', 'Lush', 'Luxuriant', 'Lying', 'Lyrical'], + m: ['Macabre', 'Macho', 'Maddening', 'Madly', 'Magenta', 'Magical', 'Magnificent', 'Majestic', 'Makeshift', 'Male', 'Malicious', 'Mammoth', 'Maniacal', 'Many', 'Marked', 'Massive', 'Married', 'Marvelous', 'Material', 'Materialistic', 'Mature', 'Mean', 'Measly', 'Meaty', 'Medical', 'Meek', 'Mellow', 'Melodic', 'Melted', 'Merciful', 'Mere', 'Messy', 'Mighty', 'Military', 'Milky', 'Mindless', 'Miniature', 'Minor', 'Miscreant', 'Misty', 'Mixed', 'Moaning', 'Modern', 'Moldy', 'Momentous', 'Motionless', 'Mountainous', 'Muddled', 'Mundane', 'Murky', 'Mushy', 'Mute', 'Mysterious'], + n: ['Naive', 'Nappy', 'Narrow', 'Nasty', 'Natural', 'Naughty', 'Nauseating', 'Near', 'Neat', 'Nebulous', 'Necessary', 'Needless', 'Needy', 'Neighborly', 'Nervous', 'New', 'Next', 'Nice', 'Nifty', 'Nimble', 'Nippy', 'Noiseless', 'Noisy', 'Nonchalant', 'Nondescript', 'Nonstop', 'Normal', 'Nostalgic', 'Nosy', 'Noxious', 'Numberless', 'Numerous', 'Nutritious', 'Nutty'], + o: ['Oafish', 'Obedient', 'Obeisant', 'Obese', 'Obnoxious', 'Obscene', 'Obsequious', 'Observant', 'Obsolete', 'Obtainable', 'Oceanic', 'Odd', 'Offbeat', 'Old', 'Omniscient', 'Onerous', 'Open', 'Opposite', 'Optimal', 'Orange', 'Ordinary', 'Organic', 'Ossified', 'Outgoing', 'Outrageous', 'Outstanding', 'Oval', 'Overconfident', 'Overjoyed', 'Overrated', 'Overt', 'Overwrought'], + p: ['Painful', 'Painstaking', 'Pale', 'Paltry', 'Panicky', 'Panoramic', 'Parallel', 'Parched', 'Parsimonious', 'Past', 'Pastoral', 'Pathetic', 'Peaceful', 'Penitent', 'Perfect', 'Periodic', 'Permissible', 'Perpetual', 'Petite', 'Phobic', 'Physical', 'Picayune', 'Pink', 'Piquant', 'Placid', 'Plain', 'Plant', 'Plastic', 'Plausible', 'Pleasant', 'Plucky', 'Pointless', 'Poised', 'Polite', 'Political', 'Poor', 'Possessive', 'Possible', 'Powerful', 'Precious', 'Premium', 'Present', 'Pretty', 'Previous', 'Pricey', 'Prickly', 'Private', 'Probable', 'Productive', 'Profuse', 'Protective', 'Proud', 'Psychedelic', 'Psychotic', 'Public', 'Puffy', 'Pumped', 'Puny', 'Purple', 'Purring', 'Pushy', 'Puzzled', 'Puzzling'], + q: ['Quaint', 'Quarrelsome', 'Questionable', 'Quick', 'Quiet', 'Quirky', 'Quixotic', 'Quizzical'], + r: ['Rabid', 'Racial', 'Ragged', 'Rainy', 'Rambunctious', 'Rampant', 'Rapid', 'Rare', 'Raspy', 'Ratty', 'Ready', 'Real', 'Rebel', 'Receptive', 'Recondite', 'Red', 'Redundant', 'Reflective', 'Regular', 'Relieved', 'Remarkable', 'Reminiscent', 'Repulsive', 'Resolute', 'Resonant', 'Responsible', 'Rhetorical', 'Rich', 'Right', 'Righteous', 'Rightful', 'Rigid', 'Ripe', 'Ritzy', 'Roasted', 'Robust', 'Romantic', 'Roomy', 'Rotten', 'Rough', 'Round', 'Royal', 'Ruddy', 'Rude', 'Rural', 'Rustic', 'Ruthless'], + s: ['Sable', 'Sad', 'Safe', 'Salty', 'Same', 'Sassy', 'Satisfying', 'Savory', 'Scandalous', 'Scarce', 'Scared', 'Scary', 'Scattered', 'Scientific', 'Scintillating', 'Scrawny', 'Screeching', 'Second', 'Secret', 'Secretive', 'Sedate', 'Seemly', 'Selective', 'Selfish', 'Separate', 'Serious', 'Shaggy', 'Shaky', 'Shallow', 'Sharp', 'Shiny', 'Shivering', 'Shocking', 'Short', 'Shrill', 'Shut', 'Shy', 'Sick', 'Silent', 'Silky', 'Silly', 'Simple', 'Simplistic', 'Sincere', 'Skillful', 'Skinny', 'Sleepy', 'Slim', 'Slimy', 'Slippery', 'Sloppy', 'Slow', 'Small', 'Smart', 'Smelly', 'Smiling', 'Smoggy', 'Smooth', 'Sneaky', 'Snobbish', 'Snotty', 'Soft', 'Soggy', 'Solid', 'Somber', 'Sophisticated', 'Sordid', 'Sore', 'Sour', 'Sparkling', 'Special', 'Spectacular', 'Spicy', 'Spiffy', 'Spiky', 'Spiritual', 'Spiteful', 'Splendid', 'Spooky', 'Spotless', 'Spotted', 'Spotty', 'Spurious', 'Squalid', 'Square', 'Squealing', 'Squeamish', 'Staking', 'Stale', 'Standing', 'Statuesque', 'Steadfast', 'Steady', 'Steep', 'Stereotyped', 'Sticky', 'Stiff', 'Stimulating', 'Stingy', 'Stormy', 'Straight', 'Strange', 'Striped', 'Strong', 'Stupendous', 'Sturdy', 'Subdued', 'Subsequent', 'Substantial', 'Successful', 'Succinct', 'Sudden', 'Sulky', 'Super', 'Superb', 'Superficial', 'Supreme', 'Swanky', 'Sweet', 'Sweltering', 'Swift', 'Symptomatic', 'Synonymous'], + t: ['Taboo', 'Tacit', 'Tacky', 'Talented', 'Tall', 'Tame', 'Tan', 'Tangible', 'Tangy', 'Tart', 'Tasteful', 'Tasteless', 'Tasty', 'Tawdry', 'Tearful', 'Tedious', 'Teeny', 'Telling', 'Temporary', 'Ten', 'Tender', 'Tense', 'Tenuous', 'Terrific', 'Tested', 'Testy', 'Thankful', 'Therapeutic', 'Thick', 'Thin', 'Thinkable', 'Third', 'Thirsty', 'Thoughtful', 'Thoughtless', 'Threatening', 'Thundering', 'Tidy', 'Tight', 'Tightfisted', 'Tiny', 'Tired', 'Tiresome', 'Toothsome', 'Torpid', 'Tough', 'Towering', 'Tranquil', 'Trashy', 'Tremendous', 'Tricky', 'Trite', 'Troubled', 'Truculent', 'True', 'Truthful', 'Typical'], + u: ['Ubiquitous', 'Ultra', 'Unable', 'Unaccountable', 'Unadvised', 'Unarmed', 'Unbecoming', 'Unbiased', 'Uncovered', 'Understood', 'Undesirable', 'Unequal', 'Unequaled', 'Uneven', 'Unhealthy', 'Uninterested', 'Unique', 'Unkempt', 'Unknown', 'Unnatural', 'Unruly', 'Unsightly', 'Unsuitable', 'Untidy', 'Unused', 'Unusual', 'Unwieldy', 'Unwritten', 'Upbeat', 'Uppity', 'Upset', 'Uptight', 'Used', 'Useful', 'Useless', 'Utopian'], + v: ['Vacuous', 'Vagabond', 'Vague', 'Valuable', 'Various', 'Vast', 'Vengeful', 'Venomous', 'Verdant', 'Versed', 'Victorious', 'Vigorous', 'Violent', 'Violet', 'Vivacious', 'Voiceless', 'Volatile', 'Voracious', 'Vulgar'], + w: ['Wacky', 'Waggish', 'Waiting', 'Wakeful', 'Wandering', 'Wanting', 'Warlike', 'Warm', 'Wary', 'Wasteful', 'Watery', 'Weak', 'Wealthy', 'Weary', 'Wet', 'Whimsical', 'Whispering', 'White', 'Whole', 'Wholesale', 'Wicked', 'Wide', 'Wiggly', 'Wild', 'Willing', 'Windy', 'Wiry', 'Wise', 'Wistful', 'Witty', 'Woebegone', 'Womanly', 'Wonderful', 'Wooden', 'Woozy', 'Workable', 'Worried', 'Worthless', 'Wrathful', 'Wretched', 'Wrong', 'Wry'], + x: ['Xenial', 'Xenodochial', 'Xenophobic'], + y: ['Yellow', 'Yielding', 'Young', 'Youthful', 'Yummy'], + z: ['Zany', 'Zealous', 'Zesty', 'Zippy', 'Zombiesque', 'Zonked'] + }; + + const animals = { + a: ['Aardvark', 'Albatross', 'Alligator', 'Alpaca', 'Ant', 'Anteater', 'Antelope', 'Ape', 'Armadillo'], + b: ['Baboon', 'Badger', 'Barracuda', 'Bat', 'Bear', 'Beaver', 'Bee', 'Bison', 'Boar', 'Buffalo', 'Butterfly'], + c: ['Camel', 'Capybara', 'Caribou', 'Cassowary', 'Cat', 'Caterpillar', 'Cattle', 'Chamois', 'Cheetah', 'Chicken', 'Chimpanzee', 'Chinchilla', 'Chough', 'Clam', 'Cobra', 'Cockroach', 'Cod', 'Cormorant', 'Coyote', 'Crab', 'Crane', 'Crocodile', 'Crow', 'Curlew'], + d: ['Deer', 'Dinosaur', 'Dog', 'Dogfish', 'Dolphin', 'Donkey', 'Dotterel', 'Dove', 'Dragonfly', 'Duck', 'Dugong', 'Dunlin'], + e: ['Eagle', 'Echidna', 'Eel', 'Eland', 'Elephant', 'Elephant Seal', 'Elk', 'Emu'], + f: ['Falcon', 'Ferret', 'Finch', 'Fish', 'Flamingo', 'Fly', 'Fox', 'Frog'], + g: ['Gaur', 'Gazelle', 'Gerbil', 'Giant Panda', 'Giraffe', 'Gnat', 'Gnu', 'Goat', 'Goose', 'Goldfinch', 'Goldfish', 'Gorilla', 'Goshawk', 'Grasshopper', 'Grouse', 'Guanaco', 'Guinea Fowl', 'Guinea Pig', 'Gull'], + h: ['Hamster', 'Hare', 'Hawk', 'Hedgehog', 'Heron', 'Herring', 'Hippopotamus', 'Hornet', 'Horse', 'Human', 'Hummingbird', 'Hyena'], + i: ['Ibex', 'Ibis', 'Iguana', 'Impala', 'Isopod'], + j: ['Jackal', 'Jaguar', 'Jay', 'Jellyfish'], + k: ['Kangaroo', 'Kingfisher', 'Koala', 'Komodo Dragon', 'Kookabura', 'Kouprey', 'Kudu'], + l: ['Lapwing', 'Lark', 'Lemur', 'Leopard', 'Lima', 'Lion', 'Llama', 'Lobster', 'Locust', 'Loris', 'Louse', 'Lyrebird'], + m: ['Magpie', 'Mallard', 'Manatee', 'Mandrill', 'Mantis', 'Marten', 'Meerkat', 'Mink', 'Mole', 'Mongoose', 'Monkey', 'Moose', 'Mouse', 'Mosquito', 'Mule'], + n: ['Narwhal', 'Newt', 'Nightingale', 'Nyala'], + o: ['Octopus', 'Okapi', 'Opossum', 'Oryx', 'Ostrich', 'Otter', 'Owl', 'Ox', 'Oyster'], + p: ['Panther', 'Parrot', 'Partridge', 'Peafowl', 'Pelican', 'Penguin', 'Pheasant', 'Pig', 'Pigeon', 'Polar Bear', 'Pony', 'Porcupine', 'Porpoise'], + q: ['Quail', 'Quelea', 'Quetzal'], + r: ['Rabbit', 'Raccoon', 'Rail', 'Ram', 'Rat', 'Raven', 'Red Deer', 'Red Panda', 'Reindeer', 'Rhinoceros', 'Rook'], + s: ['Salamander', 'Salmon', 'Sand Dollar', 'Sandpiper', 'Sardine', 'Scorpion', 'Sea Lion', 'Sea Urchin', 'Seahorse', 'Seal', 'Shark', 'Sheep', 'Shrew', 'Skunk', 'Snail', 'Snake', 'Sparrow', 'Spider', 'Spoonbill', 'Squid', 'Squirrel', 'Starling', 'Stingray', 'Stinkbug', 'Stork', 'Swallow', 'Swan'], + t: ['Tapir', 'Tarsier', 'Termite', 'Tiger', 'Toad', 'Trout', 'Turkey', 'Turtle'], + u: ['Uakari', 'Unau', 'Urial', 'Urchin', 'Umbrellabird', 'Unicornfish', 'Uromastyx', 'Uguisu'], + v: ['Vampire Bat', 'Viper', 'Vole', 'Vulture'], + w: ['Wallaby', 'Walrus', 'Wasp', 'Weasel', 'Whale', 'Wolf', 'Wolverine', 'Wombat', 'Woodcock', 'Woodpecker', 'Worm', 'Wren'], + x: ['Xaviers Greenbul', 'Xeme', 'Xingu Corydoras', 'Xolo'], + y: ['Yabby', 'Yak', 'Yellowhammer', 'Yellowjacket'], + z: ['Zebra', 'Zebu', 'Zokor', 'Zorilla'] + }; + + const action = { + alliteration: { + short: () => { + + const randomAdjective = adjectives[letter.toLowerCase()][Math.floor(Math.random() * adjectives[letter.toLowerCase()].length)]; + + const randomAnimal = animals[letter.toLowerCase()][Math.floor(Math.random() * animals[letter.toLowerCase()].length)]; + + return randomAdjective + ' ' + randomAnimal; + + }, + long: () => { + + const randomAdjective = ''; + + for (let i = 1; i <= adjectivesCount; i++) { + + if (adjectives[letter.toLowerCase()].length > 0) { + if (randomAdjective.length > 0) { + randomAdjective = randomAdjective + ' '; + }; + randomAdjective = randomAdjective + adjectives[letter.toLowerCase()].splice(Math.floor(Math.random() * adjectives[letter.toLowerCase()].length), 1); + }; + + }; + + const randomAnimal = animals[letter.toLowerCase()][Math.floor(Math.random() * animals[letter.toLowerCase()].length)]; + + return randomAdjective + ' ' + randomAnimal; + } + }, + mix: { + short: () => { + + const adjectivesSeed = alphabet[Math.floor(Math.random() * (alphabet.length - 1))]; + + const animalsSeed = alphabet[Math.floor(Math.random() * (alphabet.length - 1))]; + + const randomAdjective = adjectives[adjectivesSeed][Math.floor(Math.random() * adjectives[adjectivesSeed].length)]; + + const randomAnimal = animals[animalsSeed][Math.floor(Math.random() * animals[animalsSeed].length)]; + + return randomAdjective + ' ' + randomAnimal; + + }, + long: () => { + + var randomAdjective = ''; + + for (let i = 1; i <= adjectivesCount; i++) { + + var adjectiveLetter = alphabet[Math.floor(Math.random() * (alphabet.length - 1))]; + + if (adjectiveLetter in adjectives && adjectives[adjectiveLetter].length > 0) { + + if (randomAdjective.length > 0) { + randomAdjective = randomAdjective + ' '; + }; + + randomAdjective = randomAdjective + adjectives[adjectiveLetter].splice(Math.floor(Math.random() * adjectives[adjectiveLetter].length), 1); + + if (adjectives[adjectiveLetter].length == 0) { + delete adjectives[adjectiveLetter]; + }; + + }; + }; + + var randomAnimalArray = animals[alphabet[Math.floor(Math.random() * (alphabet.length - 1))]] + + var randomAnimal = randomAnimalArray[Math.floor(Math.random() * (randomAnimalArray.length - 1))]; + + return randomAdjective + ' ' + randomAnimal; + + } + } + }; + + if (letter && alphabet.includes(letter.toLowerCase())) { + + if (adjectivesCount && adjectivesCount > 0) { + return action.alliteration.long(); + } else { + return action.alliteration.short(); + }; + + } else { + + if (adjectivesCount && adjectivesCount > 0) { + return action.mix.long(); + } else { + return action.mix.short(); + }; + + }; + +}; diff --git a/src/utility/set.js b/src/utility/set.js new file mode 100644 index 00000000..ca0b89b4 --- /dev/null +++ b/src/utility/set.js @@ -0,0 +1,45 @@ +import { makePath } from './makePath.js'; + +export const set = ({ + object = null, + path = null, + value = null +} = {}) => { + + const address = makePath(path); + + const setValue = () => { + + while (address.length > 1) { + + // shift off and store the first + let currentKey = address.shift(); + + // if the key is not found make a new object + if (!(currentKey in object)) { + // make an empty object in the current object level + if (isNaN(currentKey)) { + object[currentKey] = {}; + } else { + object[currentKey] = []; + }; + }; + + // drill down the object with the first key + object = object[currentKey]; + + }; + + let finalKey = address.shift(); + + object[finalKey] = value; + + }; + + if (object != null && path != null && value != null) { + setValue(); + } else { + return false; + }; + +}; diff --git a/src/utility/sortArrayOfObject.js b/src/utility/sortArrayOfObject.js new file mode 100644 index 00000000..90c2bd34 --- /dev/null +++ b/src/utility/sortArrayOfObject.js @@ -0,0 +1,37 @@ +import { get } from './get'; + +export const sortArrayOfObject = (array, key) => { + + array.sort((a, b) => { + + let textA = get({ + object: a, + path: key + }); + + if (typeof textA == 'string') { + textA = textA.toLowerCase(); + }; + + let textB = get({ + object: b, + path: key + }); + + if (typeof textB == 'string') { + textB = textB.toLowerCase(); + }; + + if (textA < textB) { + return -1; + } else if (textA > textB) { + return 1; + } else { + return 0; + }; + + }); + + return array; + +}; diff --git a/src/utility/trimString.js b/src/utility/trimString.js new file mode 100644 index 00000000..127c63a3 --- /dev/null +++ b/src/utility/trimString.js @@ -0,0 +1,9 @@ +export const trimString = (value) => { + + if (typeof value == 'string') { + return value.trim().replace(/\s\s+/g, ' '); + } else { + return value; + }; + +}; diff --git a/src/utility/wordNumber.js b/src/utility/wordNumber.js new file mode 100644 index 00000000..d5bcb630 --- /dev/null +++ b/src/utility/wordNumber.js @@ -0,0 +1,87 @@ +export const wordNumber = (number) => { + + const ten = 10; + + const oneHundred = 100; + + const oneThousand = 1000; + + const oneMillion = 1000000; + + const oneBillion = 1000000000; // 1,000,000,000 (9) + + const oneTrillion = 1000000000000; // 1,000,000,000,000 (12) + + const oneQuadrillion = 1000000000000000; // 1,000,000,000,000,000 (15) + + const max = 9007199254740992; // 9,007,199,254,740,992 (15) + + const lessThanTwenty = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen']; + + const tenthsLessThanHundred = ['Zero', 'Ten', 'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety']; + + + const generateWords = function(number) { + + let remainder; + + let word; + + let words = arguments[1]; + + // We’re done + if (number === 0) { + return !words ? 'Zero' : words.join(' ').replace(/,$/, ''); + }; + + // First run + if (!words) { + words = []; + }; + + // If negative, prepend “minus” + if (number < 0) { + words.push('minus'); + number = Math.abs(number); + }; + + if (number < 20) { + remainder = 0; + word = lessThanTwenty[number]; + } else if (number < oneHundred) { + remainder = number % ten; + word = tenthsLessThanHundred[Math.floor(number / ten)]; + // In case of remainder, we need to handle it here to be able to add the “-” + if (remainder) { + word += '-' + lessThanTwenty[remainder]; + remainder = 0; + }; + } else if (number < oneThousand) { + remainder = number % oneHundred; + word = generateWords(Math.floor(number / oneHundred)) + ' Hundred'; + } else if (number < oneMillion) { + remainder = number % oneThousand; + word = generateWords(Math.floor(number / oneThousand)) + ' Thousand,'; + } else if (number < oneBillion) { + remainder = number % oneMillion; + word = generateWords(Math.floor(number / oneMillion)) + ' Million,'; + } else if (number < oneTrillion) { + remainder = number % oneBillion; + word = generateWords(Math.floor(number / oneBillion)) + ' Billion,'; + } else if (number < oneQuadrillion) { + remainder = number % oneTrillion; + word = generateWords(Math.floor(number / oneTrillion)) + ' Trillion,'; + } else if (number <= max) { + remainder = number % oneQuadrillion; + word = generateWords(Math.floor(number / oneQuadrillion)) + ' Quadrillion,'; + }; + + words.push(word); + + return generateWords(remainder, words); + }; + + var num = parseInt(number, 10); + + return generateWords(num); +}; diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..e006eb61 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,77 @@ +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyPlugin = require('copy-webpack-plugin'); +const ZipPlugin = require('zip-webpack-plugin'); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); + +const version = require('./src/manifest.json').version; +const name = require('./src/manifest.json').name; + +module.exports = { + entry: { + index: path.resolve(__dirname, 'src', 'index.js') + }, + output: { + filename: '[name].[contenthash].js', + path: path.resolve(__dirname, 'dist/web'), + clean: true + }, + devServer: { + port: 5000, + watchContentBase: true + }, + module: { + rules: [{ + test: /\.css$/i, + use: ['style-loader', 'css-loader'] + // use: [MiniCssExtractPlugin.loader, 'css-loader'] + }, { + test: /\.(ttf|woff|woff2)$/, + use: { + loader: 'file-loader', + options: { + name: '[name].[ext]', + outputPath: 'font/' + } + } + }, { + test: /\.(jpe?g|png|gif|svg)$/i, + use: [{ + loader: 'file-loader', + }] + }] + }, + optimization: { + minimize: true, + minimizer: [ + new CssMinimizerPlugin({ + minify: CssMinimizerPlugin.cleanCssMinify + }) + ] + }, + plugins: [ + // new MiniCssExtractPlugin({ + // filename: '[name].[contenthash].css' + // }), + new HtmlWebpackPlugin({ + template: './src/index.html' + }), + new CopyPlugin({ + patterns: [{ + from: './src/manifest.json', + to: './manifest.json' + }, { + from: './src/icon/', + to: './icon/' + }, { + from: './src/initialBackground.js', + to: './initialBackground.js' + }] + }), + new ZipPlugin({ + path: path.resolve(__dirname, 'dist/extension'), + filename: name + '_' + version + '.zip' + }) + ] +};