Compare commits
44 Commits
docker-tes
...
feat/struc
Author | SHA1 | Date | |
---|---|---|---|
|
df33229934 | ||
|
49fafaa096 | ||
|
ca9b32a23b | ||
|
76e3ff4e02 | ||
|
eabf3ca7d3 | ||
|
94e6db10bb | ||
|
26e1d5fec3 | ||
|
66be87b688 | ||
|
f7b4e32218 | ||
|
57407112fb | ||
|
b280cc2e01 | ||
|
e6ebf892c5 | ||
|
b754641058 | ||
|
722f4f760e | ||
|
01e04a209f | ||
|
0299fd1ea0 | ||
|
cf8dec53ca | ||
|
d5c012d748 | ||
|
2ccbd9a44c | ||
|
ccd89d48d9 | ||
|
87d788ddef | ||
|
809b625a34 | ||
|
95c753a549 | ||
|
0bb8b7ec5c | ||
|
c6d084f5dc | ||
|
0024ce36c8 | ||
|
c44e746807 | ||
|
b1826066f4 | ||
|
b0b8acc45b | ||
|
e2b9ffc072 | ||
|
68c43ea372 | ||
|
3b46baca4f | ||
|
772e461c08 | ||
|
5c6018a0f9 | ||
|
0b7989c3d3 | ||
|
8cfcc3e39c | ||
|
3a57261590 | ||
|
a86a1a461c | ||
|
2257e1df0c | ||
|
ccb72c8970 | ||
|
740ff941a5 | ||
|
117a683d9a | ||
|
9eba4b7373 | ||
|
91306dc0c7 |
0
.assets/manifest.json
Normal file
2
.gitignore
vendored
@@ -37,3 +37,5 @@ Thumbs.db
|
|||||||
# Db
|
# Db
|
||||||
db.sqlite
|
db.sqlite
|
||||||
/searxng
|
/searxng
|
||||||
|
|
||||||
|
certificates
|
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
[](https://discord.gg/26aArMy8tT)
|
[](https://discord.gg/26aArMy8tT)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -90,6 +90,9 @@ There are mainly 2 ways of installing Perplexica - With Docker, Without Docker.
|
|||||||
- `OLLAMA`: Your Ollama API URL. You should enter it as `http://host.docker.internal:PORT_NUMBER`. If you installed Ollama on port 11434, use `http://host.docker.internal:11434`. For other ports, adjust accordingly. **You need to fill this if you wish to use Ollama's models instead of OpenAI's**.
|
- `OLLAMA`: Your Ollama API URL. You should enter it as `http://host.docker.internal:PORT_NUMBER`. If you installed Ollama on port 11434, use `http://host.docker.internal:11434`. For other ports, adjust accordingly. **You need to fill this if you wish to use Ollama's models instead of OpenAI's**.
|
||||||
- `GROQ`: Your Groq API key. **You only need to fill this if you wish to use Groq's hosted models**.
|
- `GROQ`: Your Groq API key. **You only need to fill this if you wish to use Groq's hosted models**.
|
||||||
- `ANTHROPIC`: Your Anthropic API key. **You only need to fill this if you wish to use Anthropic models**.
|
- `ANTHROPIC`: Your Anthropic API key. **You only need to fill this if you wish to use Anthropic models**.
|
||||||
|
- `Gemini`: Your Gemini API key. **You only need to fill this if you wish to use Google's models**.
|
||||||
|
- `DEEPSEEK`: Your Deepseek API key. **Only needed if you want Deepseek models.**
|
||||||
|
- `AIMLAPI`: Your AI/ML API key. **Only needed if you want to use AI/ML API models and embeddings.**
|
||||||
|
|
||||||
**Note**: You can change these after starting Perplexica from the settings dialog.
|
**Note**: You can change these after starting Perplexica from the settings dialog.
|
||||||
|
|
||||||
@@ -111,7 +114,7 @@ There are mainly 2 ways of installing Perplexica - With Docker, Without Docker.
|
|||||||
2. Clone the repository and rename the `sample.config.toml` file to `config.toml` in the root directory. Ensure you complete all required fields in this file.
|
2. Clone the repository and rename the `sample.config.toml` file to `config.toml` in the root directory. Ensure you complete all required fields in this file.
|
||||||
3. After populating the configuration run `npm i`.
|
3. After populating the configuration run `npm i`.
|
||||||
4. Install the dependencies and then execute `npm run build`.
|
4. Install the dependencies and then execute `npm run build`.
|
||||||
5. Finally, start the app by running `npm rum start`
|
5. Finally, start the app by running `npm run start`
|
||||||
|
|
||||||
**Note**: Using Docker is recommended as it simplifies the setup process, especially for managing environment variables and dependencies.
|
**Note**: Using Docker is recommended as it simplifies the setup process, especially for managing environment variables and dependencies.
|
||||||
|
|
||||||
@@ -132,7 +135,7 @@ If you're encountering an Ollama connection error, it is likely due to the backe
|
|||||||
|
|
||||||
3. **Linux Users - Expose Ollama to Network:**
|
3. **Linux Users - Expose Ollama to Network:**
|
||||||
|
|
||||||
- Inside `/etc/systemd/system/ollama.service`, you need to add `Environment="OLLAMA_HOST=0.0.0.0"`. Then restart Ollama by `systemctl restart ollama`. For more information see [Ollama docs](https://github.com/ollama/ollama/blob/main/docs/faq.md#setting-environment-variables-on-linux)
|
- Inside `/etc/systemd/system/ollama.service`, you need to add `Environment="OLLAMA_HOST=0.0.0.0:11434"`. (Change the port number if you are using a different one.) Then reload the systemd manager configuration with `systemctl daemon-reload`, and restart Ollama by `systemctl restart ollama`. For more information see [Ollama docs](https://github.com/ollama/ollama/blob/main/docs/faq.md#setting-environment-variables-on-linux)
|
||||||
|
|
||||||
- Ensure that the port (default is 11434) is not blocked by your firewall.
|
- Ensure that the port (default is 11434) is not blocked by your firewall.
|
||||||
|
|
||||||
|
@@ -41,6 +41,6 @@ To update Perplexica to the latest version, follow these steps:
|
|||||||
3. Check for changes in the configuration files. If the `sample.config.toml` file contains new fields, delete your existing `config.toml` file, rename `sample.config.toml` to `config.toml`, and update the configuration accordingly.
|
3. Check for changes in the configuration files. If the `sample.config.toml` file contains new fields, delete your existing `config.toml` file, rename `sample.config.toml` to `config.toml`, and update the configuration accordingly.
|
||||||
4. After populating the configuration run `npm i`.
|
4. After populating the configuration run `npm i`.
|
||||||
5. Install the dependencies and then execute `npm run build`.
|
5. Install the dependencies and then execute `npm run build`.
|
||||||
6. Finally, start the app by running `npm rum start`
|
6. Finally, start the app by running `npm run start`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
15
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "perplexica-frontend",
|
"name": "perplexica-frontend",
|
||||||
"version": "1.10.2",
|
"version": "1.11.0-rc2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"author": "ItzCrazyKns",
|
"author": "ItzCrazyKns",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -15,11 +15,12 @@
|
|||||||
"@headlessui/react": "^2.2.0",
|
"@headlessui/react": "^2.2.0",
|
||||||
"@iarna/toml": "^2.2.5",
|
"@iarna/toml": "^2.2.5",
|
||||||
"@icons-pack/react-simple-icons": "^12.3.0",
|
"@icons-pack/react-simple-icons": "^12.3.0",
|
||||||
"@langchain/anthropic": "^0.3.15",
|
"@langchain/anthropic": "^0.3.24",
|
||||||
"@langchain/community": "^0.3.36",
|
"@langchain/community": "^0.3.49",
|
||||||
"@langchain/core": "^0.3.42",
|
"@langchain/core": "^0.3.66",
|
||||||
"@langchain/google-genai": "^0.1.12",
|
"@langchain/google-genai": "^0.2.15",
|
||||||
"@langchain/openai": "^0.0.25",
|
"@langchain/ollama": "^0.2.3",
|
||||||
|
"@langchain/openai": "^0.6.2",
|
||||||
"@langchain/textsplitters": "^0.1.0",
|
"@langchain/textsplitters": "^0.1.0",
|
||||||
"@tailwindcss/typography": "^0.5.12",
|
"@tailwindcss/typography": "^0.5.12",
|
||||||
"@xenova/transformers": "^2.17.2",
|
"@xenova/transformers": "^2.17.2",
|
||||||
@@ -31,7 +32,7 @@
|
|||||||
"drizzle-orm": "^0.40.1",
|
"drizzle-orm": "^0.40.1",
|
||||||
"html-to-text": "^9.0.5",
|
"html-to-text": "^9.0.5",
|
||||||
"jspdf": "^3.0.1",
|
"jspdf": "^3.0.1",
|
||||||
"langchain": "^0.1.30",
|
"langchain": "^0.3.30",
|
||||||
"lucide-react": "^0.363.0",
|
"lucide-react": "^0.363.0",
|
||||||
"mammoth": "^1.9.1",
|
"mammoth": "^1.9.1",
|
||||||
"markdown-to-jsx": "^7.7.2",
|
"markdown-to-jsx": "^7.7.2",
|
||||||
|
BIN
public/icon-100.png
Normal file
After Width: | Height: | Size: 916 B |
BIN
public/icon-50.png
Normal file
After Width: | Height: | Size: 515 B |
BIN
public/icon.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
public/screenshots/p1.png
Normal file
After Width: | Height: | Size: 183 KiB |
BIN
public/screenshots/p1_small.png
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
public/screenshots/p2.png
Normal file
After Width: | Height: | Size: 627 KiB |
BIN
public/screenshots/p2_small.png
Normal file
After Width: | Height: | Size: 202 KiB |
131
public/weather-ico/clear-day.svg
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.34167" y="-.34167" width="1.6833" height="1.85">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** SUN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-sun {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
-moz-transform: rotate(360deg);
|
||||||
|
-ms-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun {
|
||||||
|
-webkit-animation-name: am-weather-sun;
|
||||||
|
-moz-animation-name: am-weather-sun;
|
||||||
|
-ms-animation-name: am-weather-sun;
|
||||||
|
animation-name: am-weather-sun;
|
||||||
|
-webkit-animation-duration: 9s;
|
||||||
|
-moz-animation-duration: 9s;
|
||||||
|
-ms-animation-duration: 9s;
|
||||||
|
animation-duration: 9s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-sun-shiny {
|
||||||
|
0% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
stroke-dasharray: 0.1px 10px;
|
||||||
|
stroke-dashoffset: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun-shiny line {
|
||||||
|
-webkit-animation-name: am-weather-sun-shiny;
|
||||||
|
-moz-animation-name: am-weather-sun-shiny;
|
||||||
|
-ms-animation-name: am-weather-sun-shiny;
|
||||||
|
animation-name: am-weather-sun-shiny;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="translate(0,16)">
|
||||||
|
<g class="am-weather-sun"
|
||||||
|
style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" />
|
||||||
|
<g transform="rotate(45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(135)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="scale(-1)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(225)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
159
public/weather-ico/clear-night.svg
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.3038" y="-.3318" width="1.6076" height="1.894">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** MOON
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-moon {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
-moz-transform: rotate(15deg);
|
||||||
|
-ms-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon {
|
||||||
|
-webkit-animation-name: am-weather-moon;
|
||||||
|
-moz-animation-name: am-weather-moon;
|
||||||
|
-ms-animation-name: am-weather-moon;
|
||||||
|
animation-name: am-weather-moon;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
-webkit-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-moz-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-ms-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-1 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-1 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-1;
|
||||||
|
-moz-animation-name: am-weather-moon-star-1;
|
||||||
|
-ms-animation-name: am-weather-moon-star-1;
|
||||||
|
animation-name: am-weather-moon-star-1;
|
||||||
|
-webkit-animation-delay: 3s;
|
||||||
|
-moz-animation-delay: 3s;
|
||||||
|
-ms-animation-delay: 3s;
|
||||||
|
animation-delay: 3s;
|
||||||
|
-webkit-animation-duration: 5s;
|
||||||
|
-moz-animation-duration: 5s;
|
||||||
|
-ms-animation-duration: 5s;
|
||||||
|
animation-duration: 5s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-2 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-2 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-2;
|
||||||
|
-moz-animation-name: am-weather-moon-star-2;
|
||||||
|
-ms-animation-name: am-weather-moon-star-2;
|
||||||
|
animation-name: am-weather-moon-star-2;
|
||||||
|
-webkit-animation-delay: 5s;
|
||||||
|
-moz-animation-delay: 5s;
|
||||||
|
-ms-animation-delay: 5s;
|
||||||
|
animation-delay: 5s;
|
||||||
|
-webkit-animation-duration: 4s;
|
||||||
|
-moz-animation-duration: 4s;
|
||||||
|
-ms-animation-duration: 4s;
|
||||||
|
animation-duration: 4s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g id="night" transform="translate(-4,-18)" filter="url(#blur)">
|
||||||
|
<g transform="matrix(.8 0 0 .78534 36 20.022)" stroke-width="1.2616">
|
||||||
|
<g class="am-weather-moon-star-1"
|
||||||
|
style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon points="4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5" fill="#ffa500" stroke-miterlimit="10"
|
||||||
|
stroke-width="1.4105" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon-star-2"
|
||||||
|
style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon transform="translate(20,10)" points="4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5"
|
||||||
|
fill="#ffa500" stroke-miterlimit="10" stroke-width="1.4105" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon"
|
||||||
|
style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0">
|
||||||
|
<path
|
||||||
|
d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z"
|
||||||
|
fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2.5232" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.7 KiB |
178
public/weather-ico/cloudy-1-day.svg
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.28472" width="1.403" height="1.6944">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** SUN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-sun {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
-moz-transform: rotate(360deg);
|
||||||
|
-ms-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun {
|
||||||
|
-webkit-animation-name: am-weather-sun;
|
||||||
|
-moz-animation-name: am-weather-sun;
|
||||||
|
-ms-animation-name: am-weather-sun;
|
||||||
|
animation-name: am-weather-sun;
|
||||||
|
-webkit-animation-duration: 9s;
|
||||||
|
-moz-animation-duration: 9s;
|
||||||
|
-ms-animation-duration: 9s;
|
||||||
|
animation-duration: 9s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-sun-shiny {
|
||||||
|
0% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
stroke-dasharray: 0.1px 10px;
|
||||||
|
stroke-dashoffset: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun-shiny line {
|
||||||
|
-webkit-animation-name: am-weather-sun-shiny;
|
||||||
|
-moz-animation-name: am-weather-sun-shiny;
|
||||||
|
-ms-animation-name: am-weather-sun-shiny;
|
||||||
|
animation-name: am-weather-sun-shiny;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="translate(0,16)">
|
||||||
|
<g class="am-weather-sun"
|
||||||
|
style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" />
|
||||||
|
<g transform="rotate(45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(135)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="scale(-1)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(225)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-2"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#c6deff" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.8 KiB |
206
public/weather-ico/cloudy-1-night.svg
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.19471" y="-.26087" width="1.3744" height="1.6884">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** MOON
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-moon {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
-moz-transform: rotate(15deg);
|
||||||
|
-ms-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon {
|
||||||
|
-webkit-animation-name: am-weather-moon;
|
||||||
|
-moz-animation-name: am-weather-moon;
|
||||||
|
-ms-animation-name: am-weather-moon;
|
||||||
|
animation-name: am-weather-moon;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
-webkit-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-moz-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-ms-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-1 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-1 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-1;
|
||||||
|
-moz-animation-name: am-weather-moon-star-1;
|
||||||
|
-ms-animation-name: am-weather-moon-star-1;
|
||||||
|
animation-name: am-weather-moon-star-1;
|
||||||
|
-webkit-animation-delay: 3s;
|
||||||
|
-moz-animation-delay: 3s;
|
||||||
|
-ms-animation-delay: 3s;
|
||||||
|
animation-delay: 3s;
|
||||||
|
-webkit-animation-duration: 5s;
|
||||||
|
-moz-animation-duration: 5s;
|
||||||
|
-ms-animation-duration: 5s;
|
||||||
|
animation-duration: 5s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-2 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-2 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-2;
|
||||||
|
-moz-animation-name: am-weather-moon-star-2;
|
||||||
|
-ms-animation-name: am-weather-moon-star-2;
|
||||||
|
animation-name: am-weather-moon-star-2;
|
||||||
|
-webkit-animation-delay: 5s;
|
||||||
|
-moz-animation-delay: 5s;
|
||||||
|
-ms-animation-delay: 5s;
|
||||||
|
animation-delay: 5s;
|
||||||
|
-webkit-animation-duration: 4s;
|
||||||
|
-moz-animation-duration: 4s;
|
||||||
|
-ms-animation-duration: 4s;
|
||||||
|
animation-duration: 4s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="matrix(.8 0 0 .8 16 4)">
|
||||||
|
<g class="am-weather-moon-star-1"
|
||||||
|
style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon points="1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4" fill="#ffa500"
|
||||||
|
stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon-star-2"
|
||||||
|
style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon transform="translate(20,10)" points="1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4"
|
||||||
|
fill="#ffa500" stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon"
|
||||||
|
style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0">
|
||||||
|
<path
|
||||||
|
d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z"
|
||||||
|
fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-2"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#c6deff" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.6 KiB |
244
public/weather-ico/fog-day.svg
Normal file
@@ -0,0 +1,244 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** SUN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-sun {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
-moz-transform: rotate(360deg);
|
||||||
|
-ms-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun {
|
||||||
|
-webkit-animation-name: am-weather-sun;
|
||||||
|
-moz-animation-name: am-weather-sun;
|
||||||
|
-ms-animation-name: am-weather-sun;
|
||||||
|
animation-name: am-weather-sun;
|
||||||
|
-webkit-animation-duration: 9s;
|
||||||
|
-moz-animation-duration: 9s;
|
||||||
|
-ms-animation-duration: 9s;
|
||||||
|
animation-duration: 9s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** FOG
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-fog-1 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
transform: translate(7px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-fog-1 {
|
||||||
|
-webkit-animation-name: am-weather-fog-1;
|
||||||
|
-moz-animation-name: am-weather-fog-1;
|
||||||
|
-ms-animation-name: am-weather-fog-1;
|
||||||
|
animation-name: am-weather-fog-1;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-fog-2 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
21.05% {
|
||||||
|
transform: translate(-6px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
78.95% {
|
||||||
|
transform: translate(9px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-fog-2 {
|
||||||
|
-webkit-animation-name: am-weather-fog-2;
|
||||||
|
-moz-animation-name: am-weather-fog-2;
|
||||||
|
-ms-animation-name: am-weather-fog-2;
|
||||||
|
animation-name: am-weather-fog-2;
|
||||||
|
-webkit-animation-duration: 20s;
|
||||||
|
-moz-animation-duration: 20s;
|
||||||
|
-ms-animation-duration: 20s;
|
||||||
|
animation-duration: 20s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-fog-3 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
25% {
|
||||||
|
transform: translate(4px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
75% {
|
||||||
|
transform: translate(-4px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-fog-3 {
|
||||||
|
-webkit-animation-name: am-weather-fog-3;
|
||||||
|
-moz-animation-name: am-weather-fog-3;
|
||||||
|
-ms-animation-name: am-weather-fog-3;
|
||||||
|
animation-name: am-weather-fog-3;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-fog-4 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
transform: translate(-4px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-fog-4 {
|
||||||
|
-webkit-animation-name: am-weather-fog-4;
|
||||||
|
-moz-animation-name: am-weather-fog-4;
|
||||||
|
-ms-animation-name: am-weather-fog-4;
|
||||||
|
animation-name: am-weather-fog-4;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="translate(0,16)">
|
||||||
|
<g class="am-weather-sun" transform="translate(0,16)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" stroke-width="2" />
|
||||||
|
<g transform="rotate(45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(135)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="scale(-1)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />F
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(225)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<circle r="5" fill="#ffc04a" stroke="#ffc04a" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-fog" transform="translate(-10,20)" fill="none" stroke="#c6deff" stroke-linecap="round"
|
||||||
|
stroke-width="2">
|
||||||
|
<line class="am-weather-fog-1" y1="0" y2="0" x1="1" x2="37" stroke-dasharray="3, 5, 17, 5, 7" />
|
||||||
|
<line class="am-weather-fog-2" y1="5" y2="5" x1="9" x2="33" stroke-dasharray="11, 7, 15" />
|
||||||
|
<line class="am-weather-fog-3" y1="10" y2="10" x1="5" x2="40" stroke-dasharray="11, 7, 3, 5, 9" />
|
||||||
|
<line class="am-weather-fog-4" y1="15" y2="15" x1="7" x2="42" stroke-dasharray="13, 5, 9, 5, 3" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.0 KiB |
309
public/weather-ico/fog-night.svg
Normal file
@@ -0,0 +1,309 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** MOON
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-moon {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
-moz-transform: rotate(15deg);
|
||||||
|
-ms-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon {
|
||||||
|
-webkit-animation-name: am-weather-moon;
|
||||||
|
-moz-animation-name: am-weather-moon;
|
||||||
|
-ms-animation-name: am-weather-moon;
|
||||||
|
animation-name: am-weather-moon;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
-webkit-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-moz-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-ms-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-1 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-1 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-1;
|
||||||
|
-moz-animation-name: am-weather-moon-star-1;
|
||||||
|
-ms-animation-name: am-weather-moon-star-1;
|
||||||
|
animation-name: am-weather-moon-star-1;
|
||||||
|
-webkit-animation-delay: 3s;
|
||||||
|
-moz-animation-delay: 3s;
|
||||||
|
-ms-animation-delay: 3s;
|
||||||
|
animation-delay: 3s;
|
||||||
|
-webkit-animation-duration: 5s;
|
||||||
|
-moz-animation-duration: 5s;
|
||||||
|
-ms-animation-duration: 5s;
|
||||||
|
animation-duration: 5s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-2 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-2 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-2;
|
||||||
|
-moz-animation-name: am-weather-moon-star-2;
|
||||||
|
-ms-animation-name: am-weather-moon-star-2;
|
||||||
|
animation-name: am-weather-moon-star-2;
|
||||||
|
-webkit-animation-delay: 5s;
|
||||||
|
-moz-animation-delay: 5s;
|
||||||
|
-ms-animation-delay: 5s;
|
||||||
|
animation-delay: 5s;
|
||||||
|
-webkit-animation-duration: 4s;
|
||||||
|
-moz-animation-duration: 4s;
|
||||||
|
-ms-animation-duration: 4s;
|
||||||
|
animation-duration: 4s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** FOG
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-fog-1 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
transform: translate(7px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-fog-1 {
|
||||||
|
-webkit-animation-name: am-weather-fog-1;
|
||||||
|
-moz-animation-name: am-weather-fog-1;
|
||||||
|
-ms-animation-name: am-weather-fog-1;
|
||||||
|
animation-name: am-weather-fog-1;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-fog-2 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
21.05% {
|
||||||
|
transform: translate(-6px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
78.95% {
|
||||||
|
transform: translate(9px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-fog-2 {
|
||||||
|
-webkit-animation-name: am-weather-fog-2;
|
||||||
|
-moz-animation-name: am-weather-fog-2;
|
||||||
|
-ms-animation-name: am-weather-fog-2;
|
||||||
|
animation-name: am-weather-fog-2;
|
||||||
|
-webkit-animation-duration: 20s;
|
||||||
|
-moz-animation-duration: 20s;
|
||||||
|
-ms-animation-duration: 20s;
|
||||||
|
animation-duration: 20s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-fog-3 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
25% {
|
||||||
|
transform: translate(4px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
75% {
|
||||||
|
transform: translate(-4px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-fog-3 {
|
||||||
|
-webkit-animation-name: am-weather-fog-3;
|
||||||
|
-moz-animation-name: am-weather-fog-3;
|
||||||
|
-ms-animation-name: am-weather-fog-3;
|
||||||
|
animation-name: am-weather-fog-3;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-fog-4 {
|
||||||
|
0% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
transform: translate(-4px, 0px)
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: translate(0px, 0px)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-fog-4 {
|
||||||
|
-webkit-animation-name: am-weather-fog-4;
|
||||||
|
-moz-animation-name: am-weather-fog-4;
|
||||||
|
-ms-animation-name: am-weather-fog-4;
|
||||||
|
animation-name: am-weather-fog-4;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="matrix(.8 0 0 .8 16 4)">
|
||||||
|
<g class="am-weather-moon-star-1"
|
||||||
|
style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffc04a"
|
||||||
|
stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon-star-2"
|
||||||
|
style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3"
|
||||||
|
fill="#ffc04a" stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon"
|
||||||
|
style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0">
|
||||||
|
<path
|
||||||
|
d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z"
|
||||||
|
fill="#ffc04a" stroke="#ffc04a" stroke-linejoin="round" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-fog" transform="translate(-10,20)" fill="none" stroke="#c6deff" stroke-linecap="round"
|
||||||
|
stroke-width="2">
|
||||||
|
<line class="am-weather-fog-1" y1="0" y2="0" x1="1" x2="37" stroke-dasharray="3, 5, 17, 5, 7" />
|
||||||
|
<line class="am-weather-fog-2" y1="5" y2="5" x1="9" x2="33" stroke-dasharray="11, 7, 15" />
|
||||||
|
<line class="am-weather-fog-3" y1="10" y2="10" x1="5" x2="40" stroke-dasharray="11, 7, 3, 5, 9" />
|
||||||
|
<line class="am-weather-fog-4" y1="15" y2="15" x1="7" x2="42" stroke-dasharray="13, 5, 9, 5, 3" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
204
public/weather-ico/frost-day.svg
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** SUN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-sun {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
-moz-transform: rotate(360deg);
|
||||||
|
-ms-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun {
|
||||||
|
-webkit-animation-name: am-weather-sun;
|
||||||
|
-moz-animation-name: am-weather-sun;
|
||||||
|
-ms-animation-name: am-weather-sun;
|
||||||
|
animation-name: am-weather-sun;
|
||||||
|
-webkit-animation-duration: 9s;
|
||||||
|
-moz-animation-duration: 9s;
|
||||||
|
-ms-animation-duration: 9s;
|
||||||
|
animation-duration: 9s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** FROST
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-frost {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
1% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
3% {
|
||||||
|
-webkit-transform: translate(-0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(-0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(-0.3px, 0.0px);
|
||||||
|
transform: translate(-0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
5% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
7% {
|
||||||
|
-webkit-transform: translate(-0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(-0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(-0.3px, 0.0px);
|
||||||
|
transform: translate(-0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
9% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
11% {
|
||||||
|
-webkit-transform: translate(-0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(-0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(-0.3px, 0.0px);
|
||||||
|
transform: translate(-0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
13% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
15% {
|
||||||
|
-webkit-transform: translate(-0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(-0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(-0.3px, 0.0px);
|
||||||
|
transform: translate(-0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
16% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-frost {
|
||||||
|
-webkit-animation-name: am-weather-frost;
|
||||||
|
-moz-animation-name: am-weather-frost;
|
||||||
|
animation-name: am-weather-frost;
|
||||||
|
-webkit-animation-duration: 1.11s;
|
||||||
|
-moz-animation-duration: 1.11s;
|
||||||
|
animation-duration: 1.11s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="translate(0,16)">
|
||||||
|
<g class="am-weather-sun" transform="translate(0,16)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round" stroke-width="2" />
|
||||||
|
<g transform="rotate(45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(135)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="scale(-1)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />F
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(225)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffc04a" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<circle r="5" fill="#ffc04a" stroke="#ffc04a" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-16,4)">
|
||||||
|
<g class="am-weather-frost" stroke="#57a0ee" transform="translate(0,2)" fill="none" stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
style="-moz-animation-duration:1.11s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-frost;-moz-animation-timing-function:linear;-webkit-animation-duration:1.11s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-frost;-webkit-animation-timing-function:linear">
|
||||||
|
<path d="M11,32H45" />
|
||||||
|
<path d="M15.5,37H40.5" />
|
||||||
|
<path d="M22.5,42H33.5" />
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<path stroke="#57a0ee" transform="translate(0,0)" fill="none" stroke-width="2" stroke-linecap="round"
|
||||||
|
d="M28,31V9M28,22l11,-3.67M34,20l2,-4M34,20l4,2M28,22l-11,-3.67M22,20l-2,-4M22,20l-4,2M28,14.27l3.01,-3.02M28,14.27l-3.01,-3.02" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 7.3 KiB |
269
public/weather-ico/frost-night.svg
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** MOON
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-moon {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
-moz-transform: rotate(15deg);
|
||||||
|
-ms-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon {
|
||||||
|
-webkit-animation-name: am-weather-moon;
|
||||||
|
-moz-animation-name: am-weather-moon;
|
||||||
|
-ms-animation-name: am-weather-moon;
|
||||||
|
animation-name: am-weather-moon;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
-webkit-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-moz-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-ms-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-1 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-1 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-1;
|
||||||
|
-moz-animation-name: am-weather-moon-star-1;
|
||||||
|
-ms-animation-name: am-weather-moon-star-1;
|
||||||
|
animation-name: am-weather-moon-star-1;
|
||||||
|
-webkit-animation-delay: 3s;
|
||||||
|
-moz-animation-delay: 3s;
|
||||||
|
-ms-animation-delay: 3s;
|
||||||
|
animation-delay: 3s;
|
||||||
|
-webkit-animation-duration: 5s;
|
||||||
|
-moz-animation-duration: 5s;
|
||||||
|
-ms-animation-duration: 5s;
|
||||||
|
animation-duration: 5s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-2 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-2 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-2;
|
||||||
|
-moz-animation-name: am-weather-moon-star-2;
|
||||||
|
-ms-animation-name: am-weather-moon-star-2;
|
||||||
|
animation-name: am-weather-moon-star-2;
|
||||||
|
-webkit-animation-delay: 5s;
|
||||||
|
-moz-animation-delay: 5s;
|
||||||
|
-ms-animation-delay: 5s;
|
||||||
|
animation-delay: 5s;
|
||||||
|
-webkit-animation-duration: 4s;
|
||||||
|
-moz-animation-duration: 4s;
|
||||||
|
-ms-animation-duration: 4s;
|
||||||
|
animation-duration: 4s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** FROST
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-frost {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
1% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
3% {
|
||||||
|
-webkit-transform: translate(-0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(-0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(-0.3px, 0.0px);
|
||||||
|
transform: translate(-0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
5% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
7% {
|
||||||
|
-webkit-transform: translate(-0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(-0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(-0.3px, 0.0px);
|
||||||
|
transform: translate(-0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
9% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
11% {
|
||||||
|
-webkit-transform: translate(-0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(-0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(-0.3px, 0.0px);
|
||||||
|
transform: translate(-0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
13% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
15% {
|
||||||
|
-webkit-transform: translate(-0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(-0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(-0.3px, 0.0px);
|
||||||
|
transform: translate(-0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
16% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-frost {
|
||||||
|
-webkit-animation-name: am-weather-frost;
|
||||||
|
-moz-animation-name: am-weather-frost;
|
||||||
|
animation-name: am-weather-frost;
|
||||||
|
-webkit-animation-duration: 1.11s;
|
||||||
|
-moz-animation-duration: 1.11s;
|
||||||
|
animation-duration: 1.11s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="matrix(.8 0 0 .8 16 4)">
|
||||||
|
<g class="am-weather-moon-star-1"
|
||||||
|
style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffc04a"
|
||||||
|
stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon-star-2"
|
||||||
|
style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3"
|
||||||
|
fill="#ffc04a" stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon"
|
||||||
|
style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0">
|
||||||
|
<path
|
||||||
|
d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z"
|
||||||
|
fill="#ffc04a" stroke="#ffc04a" stroke-linejoin="round" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-16,4)">
|
||||||
|
<g class="am-weather-frost" stroke="#57a0ee" transform="translate(0,2)" fill="none" stroke-width="2"
|
||||||
|
stroke-linecap="round"
|
||||||
|
style="-moz-animation-duration:1.11s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-frost;-moz-animation-timing-function:linear;-webkit-animation-duration:1.11s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-frost;-webkit-animation-timing-function:linear">
|
||||||
|
<path d="M11,32H45" />
|
||||||
|
<path d="M15.5,37H40.5" />
|
||||||
|
<path d="M22.5,42H33.5" />
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<path stroke="#57a0ee" transform="translate(0,0)" fill="none" stroke-width="2" stroke-linecap="round"
|
||||||
|
d="M28,31V9M28,22l11,-3.67M34,20l2,-4M34,20l4,2M28,22l-11,-3.67M22,20l-2,-4M22,20l-4,2M28,14.27l3.01,-3.02M28,14.27l-3.01,-3.02" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
141
public/weather-ico/rain-and-sleet-mix.svg
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<!-- Mix of Rain and Sleet | Contributed by hsoJ95 on GitHub: https://github.com/hsoj95 -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.24684" y="-.22776" width="1.4937" height="1.5756">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** RAIN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-rain {
|
||||||
|
0% {
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dashoffset: -100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-1 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-2 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-delay: 0.25s;
|
||||||
|
-moz-animation-delay: 0.25s;
|
||||||
|
-ms-animation-delay: 0.25s;
|
||||||
|
animation-delay: 0.25s;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-3 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-3 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-3;
|
||||||
|
-moz-animation-name: am-weather-cloud-3;
|
||||||
|
animation-name: am-weather-cloud-3;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g class="am-weather-cloud-3"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-3;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-3;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-sleet-2" transform="translate(-20,-10) rotate(10,-247.39,200.17)" fill="none" stroke="#91c0f8"
|
||||||
|
stroke-linecap="round">
|
||||||
|
<line class="am-weather-rain-1" transform="translate(-5,1)" y2="8" stroke-dasharray="0.1, 7" stroke-width="2"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
<line class="am-weather-rain-1" transform="translate(5)" y2="8" stroke-dasharray="0.1, 7" stroke-width="2"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-rain-3" transform="translate(-20,-10) rotate(10,-245.89,217.31)" fill="none" stroke="#91c0f8"
|
||||||
|
stroke-dasharray="4, 7" stroke-linecap="round" stroke-width="2">
|
||||||
|
<line class="am-weather-rain-1" transform="translate(-13,1)" y2="8"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
<line class="am-weather-rain-1" transform="translate(-3,2)" y2="8"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
<line class="am-weather-rain-2" transform="translate(7,-1)" y2="8"
|
||||||
|
style="-moz-animation-delay:0.25s;-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-delay:0.25s;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-delay:0.25s;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 7.6 KiB |
179
public/weather-ico/rainy-1-day.svg
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** SUN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-sun {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
-moz-transform: rotate(360deg);
|
||||||
|
-ms-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun {
|
||||||
|
-webkit-animation-name: am-weather-sun;
|
||||||
|
-moz-animation-name: am-weather-sun;
|
||||||
|
-ms-animation-name: am-weather-sun;
|
||||||
|
animation-name: am-weather-sun;
|
||||||
|
-webkit-animation-duration: 9s;
|
||||||
|
-moz-animation-duration: 9s;
|
||||||
|
-ms-animation-duration: 9s;
|
||||||
|
animation-duration: 9s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** RAIN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-rain {
|
||||||
|
0% {
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dashoffset: -100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-1 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="translate(0,16)">
|
||||||
|
<g class="am-weather-sun"
|
||||||
|
style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" />
|
||||||
|
<g transform="rotate(45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(135)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="scale(-1)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(225)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-rain-1" transform="translate(-20,-10) rotate(10,-238.68,233.96)">
|
||||||
|
<line class="am-weather-rain-1" transform="translate(-6,1)" y2="8" fill="none" stroke="#91c0f8"
|
||||||
|
stroke-dasharray="4, 7" stroke-linecap="round" stroke-width="2"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 7.4 KiB |
243
public/weather-ico/rainy-1-night.svg
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.21122" width="1.403" height="1.4997">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** MOON
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-moon {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
-moz-transform: rotate(15deg);
|
||||||
|
-ms-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon {
|
||||||
|
-webkit-animation-name: am-weather-moon;
|
||||||
|
-moz-animation-name: am-weather-moon;
|
||||||
|
-ms-animation-name: am-weather-moon;
|
||||||
|
animation-name: am-weather-moon;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
-webkit-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-moz-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-ms-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-1 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-1 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-1;
|
||||||
|
-moz-animation-name: am-weather-moon-star-1;
|
||||||
|
-ms-animation-name: am-weather-moon-star-1;
|
||||||
|
animation-name: am-weather-moon-star-1;
|
||||||
|
-webkit-animation-delay: 3s;
|
||||||
|
-moz-animation-delay: 3s;
|
||||||
|
-ms-animation-delay: 3s;
|
||||||
|
animation-delay: 3s;
|
||||||
|
-webkit-animation-duration: 5s;
|
||||||
|
-moz-animation-duration: 5s;
|
||||||
|
-ms-animation-duration: 5s;
|
||||||
|
animation-duration: 5s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-2 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-2 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-2;
|
||||||
|
-moz-animation-name: am-weather-moon-star-2;
|
||||||
|
-ms-animation-name: am-weather-moon-star-2;
|
||||||
|
animation-name: am-weather-moon-star-2;
|
||||||
|
-webkit-animation-delay: 5s;
|
||||||
|
-moz-animation-delay: 5s;
|
||||||
|
-ms-animation-delay: 5s;
|
||||||
|
animation-delay: 5s;
|
||||||
|
-webkit-animation-duration: 4s;
|
||||||
|
-moz-animation-duration: 4s;
|
||||||
|
-ms-animation-duration: 4s;
|
||||||
|
animation-duration: 4s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** RAIN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-rain {
|
||||||
|
0% {
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dashoffset: -100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-1 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="matrix(.8 0 0 .8 16 4)">
|
||||||
|
<g class="am-weather-moon-star-1"
|
||||||
|
style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500"
|
||||||
|
stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon-star-2"
|
||||||
|
style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3"
|
||||||
|
fill="#ffa500" stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon"
|
||||||
|
style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0">
|
||||||
|
<path
|
||||||
|
d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z"
|
||||||
|
fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weaher-rain-1" transform="translate(-20,-10) rotate(10,-238.68,233.96)">
|
||||||
|
<line class="am-weather-rain-1" transform="translate(-6,1)" y2="8" fill="none" stroke="#91c0f8"
|
||||||
|
stroke-dasharray="4, 7" stroke-linecap="round" stroke-width="2"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 10 KiB |
204
public/weather-ico/rainy-2-day.svg
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.20592" width="1.403" height="1.4872">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** SUN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-sun {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
-moz-transform: rotate(360deg);
|
||||||
|
-ms-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun {
|
||||||
|
-webkit-animation-name: am-weather-sun;
|
||||||
|
-moz-animation-name: am-weather-sun;
|
||||||
|
-ms-animation-name: am-weather-sun;
|
||||||
|
animation-name: am-weather-sun;
|
||||||
|
-webkit-animation-duration: 9s;
|
||||||
|
-moz-animation-duration: 9s;
|
||||||
|
-ms-animation-duration: 9s;
|
||||||
|
animation-duration: 9s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** RAIN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-rain {
|
||||||
|
0% {
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dashoffset: -100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-1 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-2 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-delay: 0.25s;
|
||||||
|
-moz-animation-delay: 0.25s;
|
||||||
|
-ms-animation-delay: 0.25s;
|
||||||
|
animation-delay: 0.25s;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="translate(0,16)">
|
||||||
|
<g class="am-weather-sun"
|
||||||
|
style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear">
|
||||||
|
<line transform="translate(0,9)" y2="3" stroke="#ffa500" stroke-linecap="round" stroke-width="2" fifll="none" />
|
||||||
|
<g transform="rotate(45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(135)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="scale(-1)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(225)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-20,-10) rotate(10,-245.89,217.31)" fill="none" stroke="#91c0f8" stroke-dasharray="4, 7" stroke-linecap="round"
|
||||||
|
stroke-width="2">
|
||||||
|
<line class="am-weather-rain-1" transform="translate(-6,1)" y2="8"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
<line class="am-weather-rain-2" transform="translate(0,-1)" y2="8"
|
||||||
|
style="-moz-animation-delay:0.25s;-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-delay:0.25s;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-delay:0.25s;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.8 KiB |
256
public/weather-ico/rainy-2-night.svg
Normal file
@@ -0,0 +1,256 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** MOON
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-moon {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
-moz-transform: rotate(15deg);
|
||||||
|
-ms-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon {
|
||||||
|
-webkit-animation-name: am-weather-moon;
|
||||||
|
-moz-animation-name: am-weather-moon;
|
||||||
|
-ms-animation-name: am-weather-moon;
|
||||||
|
animation-name: am-weather-moon;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
-webkit-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-moz-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-ms-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-1 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-1 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-1;
|
||||||
|
-moz-animation-name: am-weather-moon-star-1;
|
||||||
|
-ms-animation-name: am-weather-moon-star-1;
|
||||||
|
animation-name: am-weather-moon-star-1;
|
||||||
|
-webkit-animation-delay: 3s;
|
||||||
|
-moz-animation-delay: 3s;
|
||||||
|
-ms-animation-delay: 3s;
|
||||||
|
animation-delay: 3s;
|
||||||
|
-webkit-animation-duration: 5s;
|
||||||
|
-moz-animation-duration: 5s;
|
||||||
|
-ms-animation-duration: 5s;
|
||||||
|
animation-duration: 5s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-2 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-2 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-2;
|
||||||
|
-moz-animation-name: am-weather-moon-star-2;
|
||||||
|
-ms-animation-name: am-weather-moon-star-2;
|
||||||
|
animation-name: am-weather-moon-star-2;
|
||||||
|
-webkit-animation-delay: 5s;
|
||||||
|
-moz-animation-delay: 5s;
|
||||||
|
-ms-animation-delay: 5s;
|
||||||
|
animation-delay: 5s;
|
||||||
|
-webkit-animation-duration: 4s;
|
||||||
|
-moz-animation-duration: 4s;
|
||||||
|
-ms-animation-duration: 4s;
|
||||||
|
animation-duration: 4s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** RAIN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-rain {
|
||||||
|
0% {
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dashoffset: -100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-1 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-2 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-delay: 0.25s;
|
||||||
|
-moz-animation-delay: 0.25s;
|
||||||
|
-ms-animation-delay: 0.25s;
|
||||||
|
animation-delay: 0.25s;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g class="layer" transform="translate(16,-2)">
|
||||||
|
<g transform="matrix(.8 0 0 .8 16 4)">
|
||||||
|
<g class="am-weather-moon-star-1"
|
||||||
|
style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500"
|
||||||
|
stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon-star-2"
|
||||||
|
style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3"
|
||||||
|
fill="#ffa500" stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon"
|
||||||
|
style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0">
|
||||||
|
<path
|
||||||
|
d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z"
|
||||||
|
fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-rain-2" transform="translate(-20,-10) rotate(10,34,46)" fill="none" stroke="#91c0f8"
|
||||||
|
stroke-dasharray="4, 7" stroke-linecap="round" stroke-width="2">
|
||||||
|
<line class="am-weather-rain-1" transform="translate(-6,1)" x1="34" x2="34" y1="46" y2="54"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
<line class="am-weather-rain-2" transform="translate(0,-1)" x1="34" x2="34" y1="46" y2="54"
|
||||||
|
style="-moz-animation-delay:0.25s;-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-delay:0.25s;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-delay:0.25s;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
206
public/weather-ico/rainy-3-day.svg
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.24684" y="-.22892" width="1.4937" height="1.5576">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** SUN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-sun {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
-moz-transform: rotate(360deg);
|
||||||
|
-ms-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun {
|
||||||
|
-webkit-animation-name: am-weather-sun;
|
||||||
|
-moz-animation-name: am-weather-sun;
|
||||||
|
-ms-animation-name: am-weather-sun;
|
||||||
|
animation-name: am-weather-sun;
|
||||||
|
-webkit-animation-duration: 9s;
|
||||||
|
-moz-animation-duration: 9s;
|
||||||
|
-ms-animation-duration: 9s;
|
||||||
|
animation-duration: 9s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** RAIN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-rain {
|
||||||
|
0% {
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dashoffset: -100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-1 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-2 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-delay: 0.25s;
|
||||||
|
-moz-animation-delay: 0.25s;
|
||||||
|
-ms-animation-delay: 0.25s;
|
||||||
|
animation-delay: 0.25s;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="translate(0,16)">
|
||||||
|
<g class="am-weather-sun"
|
||||||
|
style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear">
|
||||||
|
<line transform="translate(0,9)" y2="3" stroke="#ffa500" stroke-linecap="round" stroke-width="2" fifll="none" />
|
||||||
|
<g transform="rotate(45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(135)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="scale(-1)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(225)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-20,-10) rotate(10,-247.39,200.17)" fill="none" stroke="#91c0f8" stroke-dasharray="4, 4"
|
||||||
|
stroke-linecap="round" stroke-width="2">
|
||||||
|
<line class="am-weather-rain-1" transform="translate(-4,1)" y2="8"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
<line class="am-weather-rain-2" transform="translate(0,-1)" y2="8"
|
||||||
|
style="-moz-animation-delay:0.25s;-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-delay:0.25s;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-delay:0.25s;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
<line class="am-weather-rain-1" transform="translate(4)" y2="8"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 9.3 KiB |
270
public/weather-ico/rainy-3-night.svg
Normal file
@@ -0,0 +1,270 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.24684" y="-.22892" width="1.4937" height="1.5576">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** RAIN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-rain {
|
||||||
|
0% {
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dashoffset: -100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-1 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-rain-2 {
|
||||||
|
-webkit-animation-name: am-weather-rain;
|
||||||
|
-moz-animation-name: am-weather-rain;
|
||||||
|
-ms-animation-name: am-weather-rain;
|
||||||
|
animation-name: am-weather-rain;
|
||||||
|
-webkit-animation-delay: 0.25s;
|
||||||
|
-moz-animation-delay: 0.25s;
|
||||||
|
-ms-animation-delay: 0.25s;
|
||||||
|
animation-delay: 0.25s;
|
||||||
|
-webkit-animation-duration: 8s;
|
||||||
|
-moz-animation-duration: 8s;
|
||||||
|
-ms-animation-duration: 8s;
|
||||||
|
animation-duration: 8s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** MOON
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-moon {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
-moz-transform: rotate(15deg);
|
||||||
|
-ms-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon {
|
||||||
|
-webkit-animation-name: am-weather-moon;
|
||||||
|
-moz-animation-name: am-weather-moon;
|
||||||
|
-ms-animation-name: am-weather-moon;
|
||||||
|
animation-name: am-weather-moon;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
-webkit-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-moz-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-ms-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-1 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-1 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-1;
|
||||||
|
-moz-animation-name: am-weather-moon-star-1;
|
||||||
|
-ms-animation-name: am-weather-moon-star-1;
|
||||||
|
animation-name: am-weather-moon-star-1;
|
||||||
|
-webkit-animation-delay: 3s;
|
||||||
|
-moz-animation-delay: 3s;
|
||||||
|
-ms-animation-delay: 3s;
|
||||||
|
animation-delay: 3s;
|
||||||
|
-webkit-animation-duration: 5s;
|
||||||
|
-moz-animation-duration: 5s;
|
||||||
|
-ms-animation-duration: 5s;
|
||||||
|
animation-duration: 5s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-2 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-2 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-2;
|
||||||
|
-moz-animation-name: am-weather-moon-star-2;
|
||||||
|
-ms-animation-name: am-weather-moon-star-2;
|
||||||
|
animation-name: am-weather-moon-star-2;
|
||||||
|
-webkit-animation-delay: 5s;
|
||||||
|
-moz-animation-delay: 5s;
|
||||||
|
-ms-animation-delay: 5s;
|
||||||
|
animation-delay: 5s;
|
||||||
|
-webkit-animation-duration: 4s;
|
||||||
|
-moz-animation-duration: 4s;
|
||||||
|
-ms-animation-duration: 4s;
|
||||||
|
animation-duration: 4s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="matrix(.8 0 0 .8 16 4)">
|
||||||
|
<g class="am-weather-moon-star-1"
|
||||||
|
style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500"
|
||||||
|
stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon-star-2"
|
||||||
|
style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3"
|
||||||
|
fill="#ffa500" stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon"
|
||||||
|
style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0">
|
||||||
|
<path
|
||||||
|
d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z"
|
||||||
|
fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g transform="translate(-20,-10) rotate(10,-247.39,200.17)" fill="none" stroke="#91c0f8" stroke-dasharray="4, 4"
|
||||||
|
stroke-linecap="round" stroke-width="2">
|
||||||
|
<line class="am-weather-rain-1" transform="translate(-4,1)" y2="8"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
<line class="am-weather-rain-2" transform="translate(0,-1)" y2="8"
|
||||||
|
style="-moz-animation-delay:0.25s;-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-delay:0.25s;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-delay:0.25s;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
<line class="am-weather-rain-1" transform="translate(4)" y2="8"
|
||||||
|
style="-moz-animation-duration:8s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-rain;-moz-animation-timing-function:linear;-ms-animation-duration:8s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-rain;-ms-animation-timing-function:linear;-webkit-animation-duration:8s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-rain;-webkit-animation-timing-function:linear" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
374
public/weather-ico/scattered-thunderstorms-day.svg
Normal file
@@ -0,0 +1,374 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<!-- Scattered Thunderstorms | Contributed by hsoJ95 on GitHub: https://github.com/hsoj95 -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.1975" width="1.403" height="1.4766">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-3 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(-5px, 0px);
|
||||||
|
-moz-transform: translate(-5px, 0px);
|
||||||
|
-ms-transform: translate(-5px, 0px);
|
||||||
|
transform: translate(-5px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(10px, 0px);
|
||||||
|
-moz-transform: translate(10px, 0px);
|
||||||
|
-ms-transform: translate(10px, 0px);
|
||||||
|
transform: translate(10px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(-5px, 0px);
|
||||||
|
-moz-transform: translate(-5px, 0px);
|
||||||
|
-ms-transform: translate(-5px, 0px);
|
||||||
|
transform: translate(-5px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-3 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-3;
|
||||||
|
-moz-animation-name: am-weather-cloud-3;
|
||||||
|
animation-name: am-weather-cloud-3;
|
||||||
|
-webkit-animation-duration: 7s;
|
||||||
|
-moz-animation-duration: 7s;
|
||||||
|
animation-duration: 7s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** SUN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-sun {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
-moz-transform: rotate(360deg);
|
||||||
|
-ms-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun {
|
||||||
|
-webkit-animation-name: am-weather-sun;
|
||||||
|
-moz-animation-name: am-weather-sun;
|
||||||
|
-ms-animation-name: am-weather-sun;
|
||||||
|
animation-name: am-weather-sun;
|
||||||
|
-webkit-animation-duration: 9s;
|
||||||
|
-moz-animation-duration: 9s;
|
||||||
|
-ms-animation-duration: 9s;
|
||||||
|
animation-duration: 9s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-sun-shiny {
|
||||||
|
0% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
stroke-dasharray: 0.1px 10px;
|
||||||
|
stroke-dashoffset: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun-shiny line {
|
||||||
|
-webkit-animation-name: am-weather-sun-shiny;
|
||||||
|
-moz-animation-name: am-weather-sun-shiny;
|
||||||
|
-ms-animation-name: am-weather-sun-shiny;
|
||||||
|
animation-name: am-weather-sun-shiny;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** STROKE
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-stroke {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
2% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
4% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
6% {
|
||||||
|
-webkit-transform: translate(0.5px, 0.4px);
|
||||||
|
-moz-transform: translate(0.5px, 0.4px);
|
||||||
|
-ms-transform: translate(0.5px, 0.4px);
|
||||||
|
transform: translate(0.5px, 0.4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
8% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
10% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
12% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
14% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
16% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
18% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
20% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
22% {
|
||||||
|
-webkit-transform: translate(1px, 0.0px);
|
||||||
|
-moz-transform: translate(1px, 0.0px);
|
||||||
|
-ms-transform: translate(1px, 0.0px);
|
||||||
|
transform: translate(1px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
24% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
26% {
|
||||||
|
-webkit-transform: translate(-1px, 0.0px);
|
||||||
|
-moz-transform: translate(-1px, 0.0px);
|
||||||
|
-ms-transform: translate(-1px, 0.0px);
|
||||||
|
transform: translate(-1px, 0.0px);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
28% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
40% {
|
||||||
|
fill: orange;
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
65% {
|
||||||
|
fill: white;
|
||||||
|
-webkit-transform: translate(-1px, 5.0px);
|
||||||
|
-moz-transform: translate(-1px, 5.0px);
|
||||||
|
-ms-transform: translate(-1px, 5.0px);
|
||||||
|
transform: translate(-1px, 5.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
61% {
|
||||||
|
fill: orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-stroke {
|
||||||
|
-webkit-animation-name: am-weather-stroke;
|
||||||
|
-moz-animation-name: am-weather-stroke;
|
||||||
|
animation-name: am-weather-stroke;
|
||||||
|
-webkit-animation-duration: 1.11s;
|
||||||
|
-moz-animation-duration: 1.11s;
|
||||||
|
animation-duration: 1.11s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g id="thunder" transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="translate(0,16)">
|
||||||
|
<g class="am-weather-sun"
|
||||||
|
style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" />
|
||||||
|
<g transform="rotate(45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(135)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="scale(-1)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(225)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-lightning" transform="matrix(1.2,0,0,1.2,-4,28)">
|
||||||
|
<polygon class="am-weather-stroke" points="11.1 6.9 14.3 -2.9 20.5 -2.9 16.4 4.3 20.3 4.3 11.5 14.6 14.9 6.9"
|
||||||
|
fill="#ffa500" stroke="#fff"
|
||||||
|
style="-moz-animation-duration:1.11s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-stroke;-moz-animation-timing-function:linear;-webkit-animation-duration:1.11s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-stroke;-webkit-animation-timing-function:linear" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 13 KiB |
283
public/weather-ico/scattered-thunderstorms-night.svg
Normal file
@@ -0,0 +1,283 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<!-- Scattered Thunderstorms | Contributed by hsoJ95 on GitHub: https://github.com/hsoj95 -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.1975" width="1.403" height="1.4766">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-3 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(-5px, 0px);
|
||||||
|
-moz-transform: translate(-5px, 0px);
|
||||||
|
-ms-transform: translate(-5px, 0px);
|
||||||
|
transform: translate(-5px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(10px, 0px);
|
||||||
|
-moz-transform: translate(10px, 0px);
|
||||||
|
-ms-transform: translate(10px, 0px);
|
||||||
|
transform: translate(10px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(-5px, 0px);
|
||||||
|
-moz-transform: translate(-5px, 0px);
|
||||||
|
-ms-transform: translate(-5px, 0px);
|
||||||
|
transform: translate(-5px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-3 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-3;
|
||||||
|
-moz-animation-name: am-weather-cloud-3;
|
||||||
|
animation-name: am-weather-cloud-3;
|
||||||
|
-webkit-animation-duration: 7s;
|
||||||
|
-moz-animation-duration: 7s;
|
||||||
|
animation-duration: 7s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** STROKE
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-stroke {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
2% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
4% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
6% {
|
||||||
|
-webkit-transform: translate(0.5px, 0.4px);
|
||||||
|
-moz-transform: translate(0.5px, 0.4px);
|
||||||
|
-ms-transform: translate(0.5px, 0.4px);
|
||||||
|
transform: translate(0.5px, 0.4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
8% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
10% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
12% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
14% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
16% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
18% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
20% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
22% {
|
||||||
|
-webkit-transform: translate(1px, 0.0px);
|
||||||
|
-moz-transform: translate(1px, 0.0px);
|
||||||
|
-ms-transform: translate(1px, 0.0px);
|
||||||
|
transform: translate(1px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
24% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
26% {
|
||||||
|
-webkit-transform: translate(-1px, 0.0px);
|
||||||
|
-moz-transform: translate(-1px, 0.0px);
|
||||||
|
-ms-transform: translate(-1px, 0.0px);
|
||||||
|
transform: translate(-1px, 0.0px);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
28% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
40% {
|
||||||
|
fill: orange;
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
65% {
|
||||||
|
fill: white;
|
||||||
|
-webkit-transform: translate(-1px, 5.0px);
|
||||||
|
-moz-transform: translate(-1px, 5.0px);
|
||||||
|
-ms-transform: translate(-1px, 5.0px);
|
||||||
|
transform: translate(-1px, 5.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
61% {
|
||||||
|
fill: orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-stroke {
|
||||||
|
-webkit-animation-name: am-weather-stroke;
|
||||||
|
-moz-animation-name: am-weather-stroke;
|
||||||
|
animation-name: am-weather-stroke;
|
||||||
|
-webkit-animation-duration: 1.11s;
|
||||||
|
-moz-animation-duration: 1.11s;
|
||||||
|
animation-duration: 1.11s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g id="thunder" transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="matrix(.8 0 0 .8 16 4)">
|
||||||
|
<g class="am-weather-moon-star-1"
|
||||||
|
style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon points="3.3 1.5 4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7" fill="#ffa500"
|
||||||
|
stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon-star-2"
|
||||||
|
style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon transform="translate(20,10)" points="3.3 1.5 4 2.7 5.2 3.3 4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7"
|
||||||
|
fill="#ffa500" stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon"
|
||||||
|
style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0">
|
||||||
|
<path
|
||||||
|
d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z"
|
||||||
|
fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-lightning" transform="matrix(1.2,0,0,1.2,-4,28)">
|
||||||
|
<polygon class="am-weather-stroke" points="11.1 6.9 14.3 -2.9 20.5 -2.9 16.4 4.3 20.3 4.3 11.5 14.6 14.9 6.9"
|
||||||
|
fill="#ffa500" stroke="#fff"
|
||||||
|
style="-moz-animation-duration:1.11s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-stroke;-moz-animation-timing-function:linear;-webkit-animation-duration:1.11s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-stroke;-webkit-animation-timing-function:linear" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
307
public/weather-ico/severe-thunderstorm.svg
Normal file
@@ -0,0 +1,307 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<!-- Severe Thunderstorm | Contributed by hsoJ95 on GitHub: https://github.com/hsoj95 -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.17571" y="-.19575" width="1.3379" height="1.4959">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-3 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(-5px, 0px);
|
||||||
|
-moz-transform: translate(-5px, 0px);
|
||||||
|
-ms-transform: translate(-5px, 0px);
|
||||||
|
transform: translate(-5px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(10px, 0px);
|
||||||
|
-moz-transform: translate(10px, 0px);
|
||||||
|
-ms-transform: translate(10px, 0px);
|
||||||
|
transform: translate(10px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(-5px, 0px);
|
||||||
|
-moz-transform: translate(-5px, 0px);
|
||||||
|
-ms-transform: translate(-5px, 0px);
|
||||||
|
transform: translate(-5px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-3 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-3;
|
||||||
|
-moz-animation-name: am-weather-cloud-3;
|
||||||
|
animation-name: am-weather-cloud-3;
|
||||||
|
-webkit-animation-duration: 7s;
|
||||||
|
-moz-animation-duration: 7s;
|
||||||
|
animation-duration: 7s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-cloud-1 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-1 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-1;
|
||||||
|
-moz-animation-name: am-weather-cloud-1;
|
||||||
|
animation-name: am-weather-cloud-1;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** STROKE
|
||||||
|
*/
|
||||||
|
|
||||||
|
@keyframes am-weather-stroke {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
2% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
4% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
6% {
|
||||||
|
-webkit-transform: translate(0.5px, 0.4px);
|
||||||
|
-moz-transform: translate(0.5px, 0.4px);
|
||||||
|
-ms-transform: translate(0.5px, 0.4px);
|
||||||
|
transform: translate(0.5px, 0.4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
8% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
10% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
12% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
14% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
16% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
18% {
|
||||||
|
-webkit-transform: translate(0.3px, 0.0px);
|
||||||
|
-moz-transform: translate(0.3px, 0.0px);
|
||||||
|
-ms-transform: translate(0.3px, 0.0px);
|
||||||
|
transform: translate(0.3px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
20% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
22% {
|
||||||
|
-webkit-transform: translate(1px, 0.0px);
|
||||||
|
-moz-transform: translate(1px, 0.0px);
|
||||||
|
-ms-transform: translate(1px, 0.0px);
|
||||||
|
transform: translate(1px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
24% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
26% {
|
||||||
|
-webkit-transform: translate(-1px, 0.0px);
|
||||||
|
-moz-transform: translate(-1px, 0.0px);
|
||||||
|
-ms-transform: translate(-1px, 0.0px);
|
||||||
|
transform: translate(-1px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
28% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
40% {
|
||||||
|
fill: orange;
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
65% {
|
||||||
|
fill: white;
|
||||||
|
-webkit-transform: translate(-1px, 5.0px);
|
||||||
|
-moz-transform: translate(-1px, 5.0px);
|
||||||
|
-ms-transform: translate(-1px, 5.0px);
|
||||||
|
transform: translate(-1px, 5.0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
61% {
|
||||||
|
fill: orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0.0px, 0.0px);
|
||||||
|
-moz-transform: translate(0.0px, 0.0px);
|
||||||
|
-ms-transform: translate(0.0px, 0.0px);
|
||||||
|
transform: translate(0.0px, 0.0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-stroke {
|
||||||
|
-webkit-animation-name: am-weather-stroke;
|
||||||
|
-moz-animation-name: am-weather-stroke;
|
||||||
|
animation-name: am-weather-stroke;
|
||||||
|
-webkit-animation-duration: 1.11s;
|
||||||
|
-moz-animation-duration: 1.11s;
|
||||||
|
animation-duration: 1.11s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes error {
|
||||||
|
0% {
|
||||||
|
fill: #cc0000;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
fill: #ff0000;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
fill: #cc0000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#Shape {
|
||||||
|
-webkit-animation-name: error;
|
||||||
|
-moz-animation-name: error;
|
||||||
|
animation-name: error;
|
||||||
|
-webkit-animation-duration: 1s;
|
||||||
|
-moz-animation-duration: 1s;
|
||||||
|
animation-duration: 1s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g class="am-weather-cloud-1"
|
||||||
|
style="-moz-animation-duration:7s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-1;-moz-animation-timing-function:linear;-webkit-animation-duration:7s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-1;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="matrix(.6 0 0 .6 -10 -6)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#666" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#333" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1.2,0,0,1.2,-4,28)">
|
||||||
|
<polygon class="am-weather-stroke"
|
||||||
|
points="11.1 6.9 14.3 -2.9 20.5 -2.9 16.4 4.3 20.3 4.3 11.5 14.6 14.9 6.9" fill="#ffa500" stroke="#fff"
|
||||||
|
style="-moz-animation-duration:1.11s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-stroke;-moz-animation-timing-function:linear;-webkit-animation-duration:1.11s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-stroke;-webkit-animation-timing-function:linear" />
|
||||||
|
</g>
|
||||||
|
<g class="warning" transform="translate(20,30)">
|
||||||
|
<path
|
||||||
|
d="m7.7791 2.906-5.9912 10.117c-0.56283 0.95042-0.24862 2.1772 0.7018 2.74 0.30853 0.18271 0.66051 0.27911 1.0191 0.27911h11.982c1.1046 0 2-0.89543 2-2 0-0.35857-0.0964-0.71056-0.27911-1.0191l-5.9912-10.117c-0.56283-0.95042-1.7896-1.2646-2.74-0.7018-0.28918 0.17125-0.53055 0.41262-0.7018 0.7018z"
|
||||||
|
fill="#c00" />
|
||||||
|
<path d="m9.5 10.5v-5" stroke="#fff" stroke-linecap="round" stroke-width="1.5" />
|
||||||
|
<circle cx="9.5" cy="13" r="1" fill="#fff" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 13 KiB |
241
public/weather-ico/snowy-1-day.svg
Normal file
@@ -0,0 +1,241 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.23099" width="1.403" height="1.5634">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** SUN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-sun {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
-moz-transform: rotate(360deg);
|
||||||
|
-ms-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun {
|
||||||
|
-webkit-animation-name: am-weather-sun;
|
||||||
|
-moz-animation-name: am-weather-sun;
|
||||||
|
-ms-animation-name: am-weather-sun;
|
||||||
|
animation-name: am-weather-sun;
|
||||||
|
-webkit-animation-duration: 9s;
|
||||||
|
-moz-animation-duration: 9s;
|
||||||
|
-ms-animation-duration: 9s;
|
||||||
|
animation-duration: 9s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-sun-shiny {
|
||||||
|
0% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
stroke-dasharray: 0.1px 10px;
|
||||||
|
stroke-dashoffset: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun-shiny line {
|
||||||
|
-webkit-animation-name: am-weather-sun-shiny;
|
||||||
|
-moz-animation-name: am-weather-sun-shiny;
|
||||||
|
-ms-animation-name: am-weather-sun-shiny;
|
||||||
|
animation-name: am-weather-sun-shiny;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** SNOW
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-snow {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0) translateY(0);
|
||||||
|
-moz-transform: translateX(0) translateY(0);
|
||||||
|
-ms-transform: translateX(0) translateY(0);
|
||||||
|
transform: translateX(0) translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
33.33% {
|
||||||
|
-webkit-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-moz-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-ms-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
transform: translateX(-1.2px) translateY(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
66.66% {
|
||||||
|
-webkit-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-moz-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-ms-transform: translateX(1.4px) translateY(4px);
|
||||||
|
transform: translateX(1.4px) translateY(4px);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-moz-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-ms-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
transform: translateX(-1.6px) translateY(6px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-1 {
|
||||||
|
-webkit-animation-name: am-weather-snow;
|
||||||
|
-moz-animation-name: am-weather-snow;
|
||||||
|
-ms-animation-name: am-weather-snow;
|
||||||
|
animation-name: am-weather-snow;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="translate(0,16)">
|
||||||
|
<g class="am-weather-sun" transform="translate(0,16)"
|
||||||
|
style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" />
|
||||||
|
<g transform="rotate(45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(135)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="scale(-1)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(225)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-1"
|
||||||
|
style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(12,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 9.6 KiB |
269
public/weather-ico/snowy-1-night.svg
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.23099" width="1.403" height="1.5634">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** MOON
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-moon {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
-moz-transform: rotate(15deg);
|
||||||
|
-ms-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon {
|
||||||
|
-webkit-animation-name: am-weather-moon;
|
||||||
|
-moz-animation-name: am-weather-moon;
|
||||||
|
-ms-animation-name: am-weather-moon;
|
||||||
|
animation-name: am-weather-moon;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
-webkit-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-moz-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-ms-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-1 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-1 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-1;
|
||||||
|
-moz-animation-name: am-weather-moon-star-1;
|
||||||
|
-ms-animation-name: am-weather-moon-star-1;
|
||||||
|
animation-name: am-weather-moon-star-1;
|
||||||
|
-webkit-animation-delay: 3s;
|
||||||
|
-moz-animation-delay: 3s;
|
||||||
|
-ms-animation-delay: 3s;
|
||||||
|
animation-delay: 3s;
|
||||||
|
-webkit-animation-duration: 5s;
|
||||||
|
-moz-animation-duration: 5s;
|
||||||
|
-ms-animation-duration: 5s;
|
||||||
|
animation-duration: 5s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-2 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-2 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-2;
|
||||||
|
-moz-animation-name: am-weather-moon-star-2;
|
||||||
|
-ms-animation-name: am-weather-moon-star-2;
|
||||||
|
animation-name: am-weather-moon-star-2;
|
||||||
|
-webkit-animation-delay: 5s;
|
||||||
|
-moz-animation-delay: 5s;
|
||||||
|
-ms-animation-delay: 5s;
|
||||||
|
animation-delay: 5s;
|
||||||
|
-webkit-animation-duration: 4s;
|
||||||
|
-moz-animation-duration: 4s;
|
||||||
|
-ms-animation-duration: 4s;
|
||||||
|
animation-duration: 4s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** SNOW
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-snow {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0) translateY(0);
|
||||||
|
-moz-transform: translateX(0) translateY(0);
|
||||||
|
-ms-transform: translateX(0) translateY(0);
|
||||||
|
transform: translateX(0) translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
33.33% {
|
||||||
|
-webkit-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-moz-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-ms-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
transform: translateX(-1.2px) translateY(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
66.66% {
|
||||||
|
-webkit-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-moz-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-ms-transform: translateX(1.4px) translateY(4px);
|
||||||
|
transform: translateX(1.4px) translateY(4px);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-moz-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-ms-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
transform: translateX(-1.6px) translateY(6px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-1 {
|
||||||
|
-webkit-animation-name: am-weather-snow;
|
||||||
|
-moz-animation-name: am-weather-snow;
|
||||||
|
-ms-animation-name: am-weather-snow;
|
||||||
|
animation-name: am-weather-snow;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="matrix(.8 0 0 .8 16 4)">
|
||||||
|
<g class="am-weather-moon-star-1"
|
||||||
|
style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500"
|
||||||
|
stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon-star-2"
|
||||||
|
style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3"
|
||||||
|
fill="#ffa500" stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon"
|
||||||
|
style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0">
|
||||||
|
<path
|
||||||
|
d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z"
|
||||||
|
fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-1"
|
||||||
|
style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(12,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
273
public/weather-ico/snowy-2-day.svg
Normal file
@@ -0,0 +1,273 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.23099" width="1.403" height="1.5634">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** SUN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-sun {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
-moz-transform: rotate(360deg);
|
||||||
|
-ms-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun {
|
||||||
|
-webkit-animation-name: am-weather-sun;
|
||||||
|
-moz-animation-name: am-weather-sun;
|
||||||
|
-ms-animation-name: am-weather-sun;
|
||||||
|
animation-name: am-weather-sun;
|
||||||
|
-webkit-animation-duration: 9s;
|
||||||
|
-moz-animation-duration: 9s;
|
||||||
|
-ms-animation-duration: 9s;
|
||||||
|
animation-duration: 9s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-sun-shiny {
|
||||||
|
0% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
stroke-dasharray: 0.1px 10px;
|
||||||
|
stroke-dashoffset: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun-shiny line {
|
||||||
|
-webkit-animation-name: am-weather-sun-shiny;
|
||||||
|
-moz-animation-name: am-weather-sun-shiny;
|
||||||
|
-ms-animation-name: am-weather-sun-shiny;
|
||||||
|
animation-name: am-weather-sun-shiny;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** SNOW
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-snow {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0) translateY(0);
|
||||||
|
-moz-transform: translateX(0) translateY(0);
|
||||||
|
-ms-transform: translateX(0) translateY(0);
|
||||||
|
transform: translateX(0) translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
33.33% {
|
||||||
|
-webkit-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-moz-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-ms-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
transform: translateX(-1.2px) translateY(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
66.66% {
|
||||||
|
-webkit-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-moz-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-ms-transform: translateX(1.4px) translateY(4px);
|
||||||
|
transform: translateX(1.4px) translateY(4px);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-moz-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-ms-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
transform: translateX(-1.6px) translateY(6px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-1 {
|
||||||
|
-webkit-animation-name: am-weather-snow;
|
||||||
|
-moz-animation-name: am-weather-snow;
|
||||||
|
-ms-animation-name: am-weather-snow;
|
||||||
|
animation-name: am-weather-snow;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-2 {
|
||||||
|
-webkit-animation-name: am-weather-snow;
|
||||||
|
-moz-animation-name: am-weather-snow;
|
||||||
|
-ms-animation-name: am-weather-snow;
|
||||||
|
animation-name: am-weather-snow;
|
||||||
|
-webkit-animation-delay: 1.2s;
|
||||||
|
-moz-animation-delay: 1.2s;
|
||||||
|
-ms-animation-delay: 1.2s;
|
||||||
|
animation-delay: 1.2s;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="translate(0,16)">
|
||||||
|
<g class="am-weather-sun"
|
||||||
|
style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round" stroke-width="2" />
|
||||||
|
<g transform="rotate(45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(135)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="scale(-1)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(225)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-1"
|
||||||
|
style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(7,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-2"
|
||||||
|
style="-moz-animation-delay:1.2s;-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-delay:1.2s;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-delay:1.2s;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(16,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
301
public/weather-ico/snowy-2-night.svg
Normal file
@@ -0,0 +1,301 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.20655" y="-.23099" width="1.403" height="1.5634">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** MOON
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-moon {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
-moz-transform: rotate(15deg);
|
||||||
|
-ms-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon {
|
||||||
|
-webkit-animation-name: am-weather-moon;
|
||||||
|
-moz-animation-name: am-weather-moon;
|
||||||
|
-ms-animation-name: am-weather-moon;
|
||||||
|
animation-name: am-weather-moon;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
-webkit-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-moz-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-ms-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-1 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-1 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-1;
|
||||||
|
-moz-animation-name: am-weather-moon-star-1;
|
||||||
|
-ms-animation-name: am-weather-moon-star-1;
|
||||||
|
animation-name: am-weather-moon-star-1;
|
||||||
|
-webkit-animation-delay: 3s;
|
||||||
|
-moz-animation-delay: 3s;
|
||||||
|
-ms-animation-delay: 3s;
|
||||||
|
animation-delay: 3s;
|
||||||
|
-webkit-animation-duration: 5s;
|
||||||
|
-moz-animation-duration: 5s;
|
||||||
|
-ms-animation-duration: 5s;
|
||||||
|
animation-duration: 5s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-2 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-2 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-2;
|
||||||
|
-moz-animation-name: am-weather-moon-star-2;
|
||||||
|
-ms-animation-name: am-weather-moon-star-2;
|
||||||
|
animation-name: am-weather-moon-star-2;
|
||||||
|
-webkit-animation-delay: 5s;
|
||||||
|
-moz-animation-delay: 5s;
|
||||||
|
-ms-animation-delay: 5s;
|
||||||
|
animation-delay: 5s;
|
||||||
|
-webkit-animation-duration: 4s;
|
||||||
|
-moz-animation-duration: 4s;
|
||||||
|
-ms-animation-duration: 4s;
|
||||||
|
animation-duration: 4s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** SNOW
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-snow {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0) translateY(0);
|
||||||
|
-moz-transform: translateX(0) translateY(0);
|
||||||
|
-ms-transform: translateX(0) translateY(0);
|
||||||
|
transform: translateX(0) translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
33.33% {
|
||||||
|
-webkit-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-moz-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-ms-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
transform: translateX(-1.2px) translateY(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
66.66% {
|
||||||
|
-webkit-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-moz-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-ms-transform: translateX(1.4px) translateY(4px);
|
||||||
|
transform: translateX(1.4px) translateY(4px);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-moz-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-ms-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
transform: translateX(-1.6px) translateY(6px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-1 {
|
||||||
|
-webkit-animation-name: am-weather-snow;
|
||||||
|
-moz-animation-name: am-weather-snow;
|
||||||
|
-ms-animation-name: am-weather-snow;
|
||||||
|
animation-name: am-weather-snow;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-2 {
|
||||||
|
-webkit-animation-name: am-weather-snow;
|
||||||
|
-moz-animation-name: am-weather-snow;
|
||||||
|
-ms-animation-name: am-weather-snow;
|
||||||
|
animation-name: am-weather-snow;
|
||||||
|
-webkit-animation-delay: 1.2s;
|
||||||
|
-moz-animation-delay: 1.2s;
|
||||||
|
-ms-animation-delay: 1.2s;
|
||||||
|
animation-delay: 1.2s;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="matrix(.8 0 0 .8 16 4)">
|
||||||
|
<g class="am-weather-moon-star-1"
|
||||||
|
style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500"
|
||||||
|
stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon-star-2"
|
||||||
|
style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3"
|
||||||
|
fill="#ffa500" stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon"
|
||||||
|
style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0">
|
||||||
|
<path
|
||||||
|
d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z"
|
||||||
|
fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-3"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-1"
|
||||||
|
style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(7,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-2"
|
||||||
|
style="-moz-animation-delay:1.2s;-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-delay:1.2s;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-delay:1.2s;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(16,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 13 KiB |
334
public/weather-ico/snowy-3-day.svg
Normal file
@@ -0,0 +1,334 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.24684" y="-.26897" width="1.4937" height="1.6759">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** SUN
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-sun {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
-moz-transform: rotate(360deg);
|
||||||
|
-ms-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun {
|
||||||
|
-webkit-animation-name: am-weather-sun;
|
||||||
|
-moz-animation-name: am-weather-sun;
|
||||||
|
-ms-animation-name: am-weather-sun;
|
||||||
|
animation-name: am-weather-sun;
|
||||||
|
-webkit-animation-duration: 9s;
|
||||||
|
-moz-animation-duration: 9s;
|
||||||
|
-ms-animation-duration: 9s;
|
||||||
|
animation-duration: 9s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-sun-shiny {
|
||||||
|
0% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
stroke-dasharray: 0.1px 10px;
|
||||||
|
stroke-dashoffset: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
stroke-dasharray: 3px 10px;
|
||||||
|
stroke-dashoffset: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-sun-shiny line {
|
||||||
|
-webkit-animation-name: am-weather-sun-shiny;
|
||||||
|
-moz-animation-name: am-weather-sun-shiny;
|
||||||
|
-ms-animation-name: am-weather-sun-shiny;
|
||||||
|
animation-name: am-weather-sun-shiny;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** SNOW
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-snow {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0) translateY(0);
|
||||||
|
-moz-transform: translateX(0) translateY(0);
|
||||||
|
-ms-transform: translateX(0) translateY(0);
|
||||||
|
transform: translateX(0) translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
33.33% {
|
||||||
|
-webkit-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-moz-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-ms-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
transform: translateX(-1.2px) translateY(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
66.66% {
|
||||||
|
-webkit-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-moz-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-ms-transform: translateX(1.4px) translateY(4px);
|
||||||
|
transform: translateX(1.4px) translateY(4px);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-moz-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-ms-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
transform: translateX(-1.6px) translateY(6px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-snow-reverse {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0) translateY(0);
|
||||||
|
-moz-transform: translateX(0) translateY(0);
|
||||||
|
-ms-transform: translateX(0) translateY(0);
|
||||||
|
transform: translateX(0) translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
33.33% {
|
||||||
|
-webkit-transform: translateX(1.2px) translateY(2px);
|
||||||
|
-moz-transform: translateX(1.2px) translateY(2px);
|
||||||
|
-ms-transform: translateX(1.2px) translateY(2px);
|
||||||
|
transform: translateX(1.2px) translateY(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
66.66% {
|
||||||
|
-webkit-transform: translateX(-1.4px) translateY(4px);
|
||||||
|
-moz-transform: translateX(-1.4px) translateY(4px);
|
||||||
|
-ms-transform: translateX(-1.4px) translateY(4px);
|
||||||
|
transform: translateX(-1.4px) translateY(4px);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(1.6px) translateY(6px);
|
||||||
|
-moz-transform: translateX(1.6px) translateY(6px);
|
||||||
|
-ms-transform: translateX(1.6px) translateY(6px);
|
||||||
|
transform: translateX(1.6px) translateY(6px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-1 {
|
||||||
|
-webkit-animation-name: am-weather-snow;
|
||||||
|
-moz-animation-name: am-weather-snow;
|
||||||
|
-ms-animation-name: am-weather-snow;
|
||||||
|
animation-name: am-weather-snow;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-2 {
|
||||||
|
-webkit-animation-name: am-weather-snow;
|
||||||
|
-moz-animation-name: am-weather-snow;
|
||||||
|
-ms-animation-name: am-weather-snow;
|
||||||
|
animation-name: am-weather-snow;
|
||||||
|
-webkit-animation-delay: 1.2s;
|
||||||
|
-moz-animation-delay: 1.2s;
|
||||||
|
-ms-animation-delay: 1.2s;
|
||||||
|
animation-delay: 1.2s;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-3 {
|
||||||
|
-webkit-animation-name: am-weather-snow-reverse;
|
||||||
|
-moz-animation-name: am-weather-snow-reverse;
|
||||||
|
-ms-animation-name: am-weather-snow-reverse;
|
||||||
|
animation-name: am-weather-snow-reverse;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="translate(0,16)">
|
||||||
|
<g class="am-weather-sun"
|
||||||
|
style="-moz-animation-duration:9s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-sun;-moz-animation-timing-function:linear;-ms-animation-duration:9s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-sun;-ms-animation-timing-function:linear;-webkit-animation-duration:9s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-sun;-webkit-animation-timing-function:linear">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
<g transform="rotate(45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(135)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="scale(-1)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(225)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-90)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g transform="rotate(-45)">
|
||||||
|
<line transform="translate(0,9)" y2="3" fill="none" stroke="#ffa500" stroke-linecap="round"
|
||||||
|
stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<circle r="5" fill="#ffa500" stroke="#ffa500" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-2"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-1"
|
||||||
|
style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(3,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-2"
|
||||||
|
style="-moz-animation-delay:1.2s;-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-delay:1.2s;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-delay:1.2s;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(11,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-3"
|
||||||
|
style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow-reverse;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow-reverse;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow-reverse;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(20,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 15 KiB |
361
public/weather-ico/snowy-3-night.svg
Normal file
@@ -0,0 +1,361 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- (c) ammap.com | SVG weather icons -->
|
||||||
|
<svg width="56" height="48" version="1.1" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<filter id="blur" x="-.24684" y="-.26897" width="1.4937" height="1.6759">
|
||||||
|
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
|
||||||
|
<feOffset dx="0" dy="4" result="offsetblur" />
|
||||||
|
<feComponentTransfer>
|
||||||
|
<feFuncA slope="0.05" type="linear" />
|
||||||
|
</feComponentTransfer>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode />
|
||||||
|
<feMergeNode in="SourceGraphic" />
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
|
<style type="text/css">
|
||||||
|
<![CDATA[
|
||||||
|
/*
|
||||||
|
** CLOUDS
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-cloud-2 {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: translate(2px, 0px);
|
||||||
|
-moz-transform: translate(2px, 0px);
|
||||||
|
-ms-transform: translate(2px, 0px);
|
||||||
|
transform: translate(2px, 0px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translate(0px, 0px);
|
||||||
|
-moz-transform: translate(0px, 0px);
|
||||||
|
-ms-transform: translate(0px, 0px);
|
||||||
|
transform: translate(0px, 0px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-cloud-2 {
|
||||||
|
-webkit-animation-name: am-weather-cloud-2;
|
||||||
|
-moz-animation-name: am-weather-cloud-2;
|
||||||
|
animation-name: am-weather-cloud-2;
|
||||||
|
-webkit-animation-duration: 3s;
|
||||||
|
-moz-animation-duration: 3s;
|
||||||
|
animation-duration: 3s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** MOON
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-moon {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
|
-webkit-transform: rotate(15deg);
|
||||||
|
-moz-transform: rotate(15deg);
|
||||||
|
-ms-transform: rotate(15deg);
|
||||||
|
transform: rotate(15deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
-ms-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon {
|
||||||
|
-webkit-animation-name: am-weather-moon;
|
||||||
|
-moz-animation-name: am-weather-moon;
|
||||||
|
-ms-animation-name: am-weather-moon;
|
||||||
|
animation-name: am-weather-moon;
|
||||||
|
-webkit-animation-duration: 6s;
|
||||||
|
-moz-animation-duration: 6s;
|
||||||
|
-ms-animation-duration: 6s;
|
||||||
|
animation-duration: 6s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
-webkit-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-moz-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
-ms-transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
transform-origin: 12.5px 15.15px 0;
|
||||||
|
/* TODO FF CENTER ISSUE */
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-1 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-1 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-1;
|
||||||
|
-moz-animation-name: am-weather-moon-star-1;
|
||||||
|
-ms-animation-name: am-weather-moon-star-1;
|
||||||
|
animation-name: am-weather-moon-star-1;
|
||||||
|
-webkit-animation-delay: 3s;
|
||||||
|
-moz-animation-delay: 3s;
|
||||||
|
-ms-animation-delay: 3s;
|
||||||
|
animation-delay: 3s;
|
||||||
|
-webkit-animation-duration: 5s;
|
||||||
|
-moz-animation-duration: 5s;
|
||||||
|
-ms-animation-duration: 5s;
|
||||||
|
animation-duration: 5s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-moon-star-2 {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-moon-star-2 {
|
||||||
|
-webkit-animation-name: am-weather-moon-star-2;
|
||||||
|
-moz-animation-name: am-weather-moon-star-2;
|
||||||
|
-ms-animation-name: am-weather-moon-star-2;
|
||||||
|
animation-name: am-weather-moon-star-2;
|
||||||
|
-webkit-animation-delay: 5s;
|
||||||
|
-moz-animation-delay: 5s;
|
||||||
|
-ms-animation-delay: 5s;
|
||||||
|
animation-delay: 5s;
|
||||||
|
-webkit-animation-duration: 4s;
|
||||||
|
-moz-animation-duration: 4s;
|
||||||
|
-ms-animation-duration: 4s;
|
||||||
|
animation-duration: 4s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: 1;
|
||||||
|
-moz-animation-iteration-count: 1;
|
||||||
|
-ms-animation-iteration-count: 1;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** SNOW
|
||||||
|
*/
|
||||||
|
@keyframes am-weather-snow {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0) translateY(0);
|
||||||
|
-moz-transform: translateX(0) translateY(0);
|
||||||
|
-ms-transform: translateX(0) translateY(0);
|
||||||
|
transform: translateX(0) translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
33.33% {
|
||||||
|
-webkit-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-moz-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
-ms-transform: translateX(-1.2px) translateY(2px);
|
||||||
|
transform: translateX(-1.2px) translateY(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
66.66% {
|
||||||
|
-webkit-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-moz-transform: translateX(1.4px) translateY(4px);
|
||||||
|
-ms-transform: translateX(1.4px) translateY(4px);
|
||||||
|
transform: translateX(1.4px) translateY(4px);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-moz-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
-ms-transform: translateX(-1.6px) translateY(6px);
|
||||||
|
transform: translateX(-1.6px) translateY(6px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes am-weather-snow-reverse {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: translateX(0) translateY(0);
|
||||||
|
-moz-transform: translateX(0) translateY(0);
|
||||||
|
-ms-transform: translateX(0) translateY(0);
|
||||||
|
transform: translateX(0) translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
33.33% {
|
||||||
|
-webkit-transform: translateX(1.2px) translateY(2px);
|
||||||
|
-moz-transform: translateX(1.2px) translateY(2px);
|
||||||
|
-ms-transform: translateX(1.2px) translateY(2px);
|
||||||
|
transform: translateX(1.2px) translateY(2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
66.66% {
|
||||||
|
-webkit-transform: translateX(-1.4px) translateY(4px);
|
||||||
|
-moz-transform: translateX(-1.4px) translateY(4px);
|
||||||
|
-ms-transform: translateX(-1.4px) translateY(4px);
|
||||||
|
transform: translateX(-1.4px) translateY(4px);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
-webkit-transform: translateX(1.6px) translateY(6px);
|
||||||
|
-moz-transform: translateX(1.6px) translateY(6px);
|
||||||
|
-ms-transform: translateX(1.6px) translateY(6px);
|
||||||
|
transform: translateX(1.6px) translateY(6px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-1 {
|
||||||
|
-webkit-animation-name: am-weather-snow;
|
||||||
|
-moz-animation-name: am-weather-snow;
|
||||||
|
-ms-animation-name: am-weather-snow;
|
||||||
|
animation-name: am-weather-snow;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-2 {
|
||||||
|
-webkit-animation-name: am-weather-snow;
|
||||||
|
-moz-animation-name: am-weather-snow;
|
||||||
|
-ms-animation-name: am-weather-snow;
|
||||||
|
animation-name: am-weather-snow;
|
||||||
|
-webkit-animation-delay: 1.2s;
|
||||||
|
-moz-animation-delay: 1.2s;
|
||||||
|
-ms-animation-delay: 1.2s;
|
||||||
|
animation-delay: 1.2s;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.am-weather-snow-3 {
|
||||||
|
-webkit-animation-name: am-weather-snow-reverse;
|
||||||
|
-moz-animation-name: am-weather-snow-reverse;
|
||||||
|
-ms-animation-name: am-weather-snow-reverse;
|
||||||
|
animation-name: am-weather-snow-reverse;
|
||||||
|
-webkit-animation-duration: 2s;
|
||||||
|
-moz-animation-duration: 2s;
|
||||||
|
-ms-animation-duration: 2s;
|
||||||
|
animation-duration: 2s;
|
||||||
|
-webkit-animation-timing-function: linear;
|
||||||
|
-moz-animation-timing-function: linear;
|
||||||
|
-ms-animation-timing-function: linear;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
-webkit-animation-iteration-count: infinite;
|
||||||
|
-moz-animation-iteration-count: infinite;
|
||||||
|
-ms-animation-iteration-count: infinite;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(16,-2)" filter="url(#blur)">
|
||||||
|
<g transform="matrix(.8 0 0 .8 16 4)">
|
||||||
|
<g class="am-weather-moon-star-1"
|
||||||
|
style="-moz-animation-delay:3s;-moz-animation-duration:5s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-1;-moz-animation-timing-function:linear;-ms-animation-delay:3s;-ms-animation-duration:5s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-1;-ms-animation-timing-function:linear;-webkit-animation-delay:3s;-webkit-animation-duration:5s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-1;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3" fill="#ffa500"
|
||||||
|
stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon-star-2"
|
||||||
|
style="-moz-animation-delay:5s;-moz-animation-duration:4s;-moz-animation-iteration-count:1;-moz-animation-name:am-weather-moon-star-2;-moz-animation-timing-function:linear;-ms-animation-delay:5s;-ms-animation-duration:4s;-ms-animation-iteration-count:1;-ms-animation-name:am-weather-moon-star-2;-ms-animation-timing-function:linear;-webkit-animation-delay:5s;-webkit-animation-duration:4s;-webkit-animation-iteration-count:1;-webkit-animation-name:am-weather-moon-star-2;-webkit-animation-timing-function:linear">
|
||||||
|
<polygon transform="translate(20,10)" points="4 4 3.3 5.2 2.7 4 1.5 3.3 2.7 2.7 3.3 1.5 4 2.7 5.2 3.3"
|
||||||
|
fill="#ffa500" stroke-miterlimit="10" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-moon"
|
||||||
|
style="-moz-animation-duration:6s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-moon;-moz-animation-timing-function:linear;-moz-transform-origin:12.5px 15.15px 0;-ms-animation-duration:6s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-moon;-ms-animation-timing-function:linear;-ms-transform-origin:12.5px 15.15px 0;-webkit-animation-duration:6s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-moon;-webkit-animation-timing-function:linear;-webkit-transform-origin:12.5px 15.15px 0">
|
||||||
|
<path
|
||||||
|
d="m14.5 13.2c0-3.7 2-6.9 5-8.7-1.5-0.9-3.2-1.3-5-1.3-5.5 0-10 4.5-10 10s4.5 10 10 10c1.8 0 3.5-0.5 5-1.3-3-1.7-5-5-5-8.7z"
|
||||||
|
fill="#ffa500" stroke="#ffa500" stroke-linejoin="round" stroke-width="2" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-cloud-2"
|
||||||
|
style="-moz-animation-duration:3s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-cloud-2;-moz-animation-timing-function:linear;-webkit-animation-duration:3s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-cloud-2;-webkit-animation-timing-function:linear">
|
||||||
|
<path transform="translate(-20,-11)"
|
||||||
|
d="m47.7 35.4c0-4.6-3.7-8.2-8.2-8.2-1 0-1.9 0.2-2.8 0.5-0.3-3.4-3.1-6.2-6.6-6.2-3.7 0-6.7 3-6.7 6.7 0 0.8 0.2 1.6 0.4 2.3-0.3-0.1-0.7-0.1-1-0.1-3.7 0-6.7 3-6.7 6.7 0 3.6 2.9 6.6 6.5 6.7h17.2c4.4-0.5 7.9-4 7.9-8.4z"
|
||||||
|
fill="#57a0ee" stroke="#fff" stroke-linejoin="round" stroke-width="1.2" />
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-1"
|
||||||
|
style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(3,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-2"
|
||||||
|
style="-moz-animation-delay:1.2s;-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow;-moz-animation-timing-function:linear;-ms-animation-delay:1.2s;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow;-ms-animation-timing-function:linear;-webkit-animation-delay:1.2s;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(11,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g class="am-weather-snow-3"
|
||||||
|
style="-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-name:am-weather-snow-reverse;-moz-animation-timing-function:linear;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-name:am-weather-snow-reverse;-ms-animation-timing-function:linear;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-name:am-weather-snow-reverse;-webkit-animation-timing-function:linear">
|
||||||
|
<g transform="translate(20,28)" fill="none" stroke="#57a0ee" stroke-linecap="round">
|
||||||
|
<line transform="translate(0,9)" y1="-2.5" y2="2.5" stroke-width="1.2" />
|
||||||
|
<line transform="rotate(45,-10.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(90,-4.5,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
<line transform="rotate(135,-1.864,4.5)" y1="-2.5" y2="2.5" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 17 KiB |
@@ -25,6 +25,9 @@ API_URL = "" # Ollama API URL - http://host.docker.internal:11434
|
|||||||
[MODELS.DEEPSEEK]
|
[MODELS.DEEPSEEK]
|
||||||
API_KEY = ""
|
API_KEY = ""
|
||||||
|
|
||||||
|
[MODELS.AIMLAPI]
|
||||||
|
API_KEY = "" # Required to use AI/ML API chat and embedding models
|
||||||
|
|
||||||
[MODELS.LM_STUDIO]
|
[MODELS.LM_STUDIO]
|
||||||
API_URL = "" # LM Studio API URL - http://host.docker.internal:1234
|
API_URL = "" # LM Studio API URL - http://host.docker.internal:1234
|
||||||
|
|
||||||
|
@@ -223,7 +223,7 @@ export const POST = async (req: Request) => {
|
|||||||
|
|
||||||
if (body.chatModel?.provider === 'custom_openai') {
|
if (body.chatModel?.provider === 'custom_openai') {
|
||||||
llm = new ChatOpenAI({
|
llm = new ChatOpenAI({
|
||||||
openAIApiKey: getCustomOpenaiApiKey(),
|
apiKey: getCustomOpenaiApiKey(),
|
||||||
modelName: getCustomOpenaiModelName(),
|
modelName: getCustomOpenaiModelName(),
|
||||||
temperature: 0.7,
|
temperature: 0.7,
|
||||||
configuration: {
|
configuration: {
|
||||||
|
@@ -8,6 +8,7 @@ import {
|
|||||||
getOllamaApiEndpoint,
|
getOllamaApiEndpoint,
|
||||||
getOpenaiApiKey,
|
getOpenaiApiKey,
|
||||||
getDeepseekApiKey,
|
getDeepseekApiKey,
|
||||||
|
getAimlApiKey,
|
||||||
getLMStudioApiEndpoint,
|
getLMStudioApiEndpoint,
|
||||||
updateConfig,
|
updateConfig,
|
||||||
} from '@/lib/config';
|
} from '@/lib/config';
|
||||||
@@ -57,6 +58,7 @@ export const GET = async (req: Request) => {
|
|||||||
config['groqApiKey'] = getGroqApiKey();
|
config['groqApiKey'] = getGroqApiKey();
|
||||||
config['geminiApiKey'] = getGeminiApiKey();
|
config['geminiApiKey'] = getGeminiApiKey();
|
||||||
config['deepseekApiKey'] = getDeepseekApiKey();
|
config['deepseekApiKey'] = getDeepseekApiKey();
|
||||||
|
config['aimlApiKey'] = getAimlApiKey();
|
||||||
config['customOpenaiApiUrl'] = getCustomOpenaiApiUrl();
|
config['customOpenaiApiUrl'] = getCustomOpenaiApiUrl();
|
||||||
config['customOpenaiApiKey'] = getCustomOpenaiApiKey();
|
config['customOpenaiApiKey'] = getCustomOpenaiApiKey();
|
||||||
config['customOpenaiModelName'] = getCustomOpenaiModelName();
|
config['customOpenaiModelName'] = getCustomOpenaiModelName();
|
||||||
@@ -95,6 +97,9 @@ export const POST = async (req: Request) => {
|
|||||||
DEEPSEEK: {
|
DEEPSEEK: {
|
||||||
API_KEY: config.deepseekApiKey,
|
API_KEY: config.deepseekApiKey,
|
||||||
},
|
},
|
||||||
|
AIMLAPI: {
|
||||||
|
API_KEY: config.aimlApiKey,
|
||||||
|
},
|
||||||
LM_STUDIO: {
|
LM_STUDIO: {
|
||||||
API_URL: config.lmStudioApiUrl,
|
API_URL: config.lmStudioApiUrl,
|
||||||
},
|
},
|
||||||
|
@@ -16,28 +16,48 @@ const topics = ['AI', 'tech']; /* TODO: Add UI to customize this */
|
|||||||
|
|
||||||
export const GET = async (req: Request) => {
|
export const GET = async (req: Request) => {
|
||||||
try {
|
try {
|
||||||
const data = (
|
const params = new URL(req.url).searchParams;
|
||||||
await Promise.all([
|
const mode: 'normal' | 'preview' =
|
||||||
...new Array(articleWebsites.length * topics.length)
|
(params.get('mode') as 'normal' | 'preview') || 'normal';
|
||||||
.fill(0)
|
|
||||||
.map(async (_, i) => {
|
let data = [];
|
||||||
return (
|
|
||||||
await searchSearxng(
|
if (mode === 'normal') {
|
||||||
`site:${articleWebsites[i % articleWebsites.length]} ${
|
data = (
|
||||||
topics[i % topics.length]
|
await Promise.all([
|
||||||
}`,
|
...new Array(articleWebsites.length * topics.length)
|
||||||
{
|
.fill(0)
|
||||||
engines: ['bing news'],
|
.map(async (_, i) => {
|
||||||
pageno: 1,
|
return (
|
||||||
},
|
await searchSearxng(
|
||||||
)
|
`site:${articleWebsites[i % articleWebsites.length]} ${
|
||||||
).results;
|
topics[i % topics.length]
|
||||||
}),
|
}`,
|
||||||
])
|
{
|
||||||
)
|
engines: ['bing news'],
|
||||||
.map((result) => result)
|
pageno: 1,
|
||||||
.flat()
|
language: 'en',
|
||||||
.sort(() => Math.random() - 0.5);
|
},
|
||||||
|
)
|
||||||
|
).results;
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
)
|
||||||
|
.map((result) => result)
|
||||||
|
.flat()
|
||||||
|
.sort(() => Math.random() - 0.5);
|
||||||
|
} else {
|
||||||
|
data = (
|
||||||
|
await searchSearxng(
|
||||||
|
`site:${articleWebsites[Math.floor(Math.random() * articleWebsites.length)]} ${topics[Math.floor(Math.random() * topics.length)]}`,
|
||||||
|
{
|
||||||
|
engines: ['bing news'],
|
||||||
|
pageno: 1,
|
||||||
|
language: 'en',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
).results;
|
||||||
|
}
|
||||||
|
|
||||||
return Response.json(
|
return Response.json(
|
||||||
{
|
{
|
||||||
|
@@ -49,7 +49,7 @@ export const POST = async (req: Request) => {
|
|||||||
|
|
||||||
if (body.chatModel?.provider === 'custom_openai') {
|
if (body.chatModel?.provider === 'custom_openai') {
|
||||||
llm = new ChatOpenAI({
|
llm = new ChatOpenAI({
|
||||||
openAIApiKey: getCustomOpenaiApiKey(),
|
apiKey: getCustomOpenaiApiKey(),
|
||||||
modelName: getCustomOpenaiModelName(),
|
modelName: getCustomOpenaiModelName(),
|
||||||
temperature: 0.7,
|
temperature: 0.7,
|
||||||
configuration: {
|
configuration: {
|
||||||
|
@@ -81,7 +81,7 @@ export const POST = async (req: Request) => {
|
|||||||
if (body.chatModel?.provider === 'custom_openai') {
|
if (body.chatModel?.provider === 'custom_openai') {
|
||||||
llm = new ChatOpenAI({
|
llm = new ChatOpenAI({
|
||||||
modelName: body.chatModel?.name || getCustomOpenaiModelName(),
|
modelName: body.chatModel?.name || getCustomOpenaiModelName(),
|
||||||
openAIApiKey:
|
apiKey:
|
||||||
body.chatModel?.customOpenAIKey || getCustomOpenaiApiKey(),
|
body.chatModel?.customOpenAIKey || getCustomOpenaiApiKey(),
|
||||||
temperature: 0.7,
|
temperature: 0.7,
|
||||||
configuration: {
|
configuration: {
|
||||||
|
@@ -48,7 +48,7 @@ export const POST = async (req: Request) => {
|
|||||||
|
|
||||||
if (body.chatModel?.provider === 'custom_openai') {
|
if (body.chatModel?.provider === 'custom_openai') {
|
||||||
llm = new ChatOpenAI({
|
llm = new ChatOpenAI({
|
||||||
openAIApiKey: getCustomOpenaiApiKey(),
|
apiKey: getCustomOpenaiApiKey(),
|
||||||
modelName: getCustomOpenaiModelName(),
|
modelName: getCustomOpenaiModelName(),
|
||||||
temperature: 0.7,
|
temperature: 0.7,
|
||||||
configuration: {
|
configuration: {
|
||||||
|
@@ -49,7 +49,7 @@ export const POST = async (req: Request) => {
|
|||||||
|
|
||||||
if (body.chatModel?.provider === 'custom_openai') {
|
if (body.chatModel?.provider === 'custom_openai') {
|
||||||
llm = new ChatOpenAI({
|
llm = new ChatOpenAI({
|
||||||
openAIApiKey: getCustomOpenaiApiKey(),
|
apiKey: getCustomOpenaiApiKey(),
|
||||||
modelName: getCustomOpenaiModelName(),
|
modelName: getCustomOpenaiModelName(),
|
||||||
temperature: 0.7,
|
temperature: 0.7,
|
||||||
configuration: {
|
configuration: {
|
||||||
|
167
src/app/api/weather/route.ts
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
export const POST = async (req: Request) => {
|
||||||
|
try {
|
||||||
|
const body: { lat: number; lng: number; temperatureUnit: 'C' | 'F' } =
|
||||||
|
await req.json();
|
||||||
|
|
||||||
|
if (!body.lat || !body.lng) {
|
||||||
|
return Response.json(
|
||||||
|
{
|
||||||
|
message: 'Invalid request.',
|
||||||
|
},
|
||||||
|
{ status: 400 },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const res = await fetch(
|
||||||
|
`https://api.open-meteo.com/v1/forecast?latitude=${body.lat}&longitude=${body.lng}¤t=weather_code,temperature_2m,is_day,relative_humidity_2m,wind_speed_10m&timezone=auto${body.temperatureUnit === 'C' ? '' : '&temperature_unit=fahrenheit'}`,
|
||||||
|
);
|
||||||
|
|
||||||
|
const data = await res.json();
|
||||||
|
|
||||||
|
if (data.error) {
|
||||||
|
console.error(`Error fetching weather data: ${data.reason}`);
|
||||||
|
return Response.json(
|
||||||
|
{
|
||||||
|
message: 'An error has occurred.',
|
||||||
|
},
|
||||||
|
{ status: 500 },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const weather: {
|
||||||
|
temperature: number;
|
||||||
|
condition: string;
|
||||||
|
humidity: number;
|
||||||
|
windSpeed: number;
|
||||||
|
icon: string;
|
||||||
|
temperatureUnit: 'C' | 'F';
|
||||||
|
} = {
|
||||||
|
temperature: data.current.temperature_2m,
|
||||||
|
condition: '',
|
||||||
|
humidity: data.current.relative_humidity_2m,
|
||||||
|
windSpeed: data.current.wind_speed_10m,
|
||||||
|
icon: '',
|
||||||
|
temperatureUnit: body.temperatureUnit,
|
||||||
|
};
|
||||||
|
|
||||||
|
const code = data.current.weather_code;
|
||||||
|
const isDay = data.current.is_day === 1;
|
||||||
|
const dayOrNight = isDay ? 'day' : 'night';
|
||||||
|
|
||||||
|
switch (code) {
|
||||||
|
case 0:
|
||||||
|
weather.icon = `clear-${dayOrNight}`;
|
||||||
|
weather.condition = 'Clear';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
weather.condition = 'Mainly Clear';
|
||||||
|
case 2:
|
||||||
|
weather.condition = 'Partly Cloudy';
|
||||||
|
case 3:
|
||||||
|
weather.icon = `cloudy-1-${dayOrNight}`;
|
||||||
|
weather.condition = 'Cloudy';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 45:
|
||||||
|
weather.condition = 'Fog';
|
||||||
|
case 48:
|
||||||
|
weather.icon = `fog-${dayOrNight}`;
|
||||||
|
weather.condition = 'Fog';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 51:
|
||||||
|
weather.condition = 'Light Drizzle';
|
||||||
|
case 53:
|
||||||
|
weather.condition = 'Moderate Drizzle';
|
||||||
|
case 55:
|
||||||
|
weather.icon = `rainy-1-${dayOrNight}`;
|
||||||
|
weather.condition = 'Dense Drizzle';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 56:
|
||||||
|
weather.condition = 'Light Freezing Drizzle';
|
||||||
|
case 57:
|
||||||
|
weather.icon = `frost-${dayOrNight}`;
|
||||||
|
weather.condition = 'Dense Freezing Drizzle';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 61:
|
||||||
|
weather.condition = 'Slight Rain';
|
||||||
|
case 63:
|
||||||
|
weather.condition = 'Moderate Rain';
|
||||||
|
case 65:
|
||||||
|
weather.condition = 'Heavy Rain';
|
||||||
|
weather.icon = `rainy-2-${dayOrNight}`;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 66:
|
||||||
|
weather.condition = 'Light Freezing Rain';
|
||||||
|
case 67:
|
||||||
|
weather.condition = 'Heavy Freezing Rain';
|
||||||
|
weather.icon = 'rain-and-sleet-mix';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 71:
|
||||||
|
weather.condition = 'Slight Snow Fall';
|
||||||
|
case 73:
|
||||||
|
weather.condition = 'Moderate Snow Fall';
|
||||||
|
case 75:
|
||||||
|
weather.condition = 'Heavy Snow Fall';
|
||||||
|
weather.icon = `snowy-2-${dayOrNight}`;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 77:
|
||||||
|
weather.condition = 'Snow';
|
||||||
|
weather.icon = `snowy-1-${dayOrNight}`;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 80:
|
||||||
|
weather.condition = 'Slight Rain Showers';
|
||||||
|
case 81:
|
||||||
|
weather.condition = 'Moderate Rain Showers';
|
||||||
|
case 82:
|
||||||
|
weather.condition = 'Heavy Rain Showers';
|
||||||
|
weather.icon = `rainy-3-${dayOrNight}`;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 85:
|
||||||
|
weather.condition = 'Slight Snow Showers';
|
||||||
|
case 86:
|
||||||
|
weather.condition = 'Moderate Snow Showers';
|
||||||
|
case 87:
|
||||||
|
weather.condition = 'Heavy Snow Showers';
|
||||||
|
weather.icon = `snowy-3-${dayOrNight}`;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 95:
|
||||||
|
weather.condition = 'Thunderstorm';
|
||||||
|
weather.icon = `scattered-thunderstorms-${dayOrNight}`;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 96:
|
||||||
|
weather.condition = 'Thunderstorm with Slight Hail';
|
||||||
|
case 99:
|
||||||
|
weather.condition = 'Thunderstorm with Heavy Hail';
|
||||||
|
weather.icon = 'severe-thunderstorm';
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
weather.icon = `clear-${dayOrNight}`;
|
||||||
|
weather.condition = 'Clear';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Response.json(weather);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('An error occurred while getting home widgets', err);
|
||||||
|
return Response.json(
|
||||||
|
{
|
||||||
|
message: 'An error has occurred.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
status: 500,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
@@ -11,3 +11,11 @@
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media screen and (-webkit-min-device-pixel-ratio: 0) {
|
||||||
|
select,
|
||||||
|
textarea,
|
||||||
|
input {
|
||||||
|
font-size: 16px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
54
src/app/manifest.ts
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
import type { MetadataRoute } from 'next';
|
||||||
|
|
||||||
|
export default function manifest(): MetadataRoute.Manifest {
|
||||||
|
return {
|
||||||
|
name: 'Perplexica - Chat with the internet',
|
||||||
|
short_name: 'Perplexica',
|
||||||
|
description:
|
||||||
|
'Perplexica is an AI powered chatbot that is connected to the internet.',
|
||||||
|
start_url: '/',
|
||||||
|
display: 'standalone',
|
||||||
|
background_color: '#0a0a0a',
|
||||||
|
theme_color: '#0a0a0a',
|
||||||
|
screenshots: [
|
||||||
|
{
|
||||||
|
src: '/screenshots/p1.png',
|
||||||
|
form_factor: 'wide',
|
||||||
|
sizes: '2560x1600',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: '/screenshots/p2.png',
|
||||||
|
form_factor: 'wide',
|
||||||
|
sizes: '2560x1600',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: '/screenshots/p1_small.png',
|
||||||
|
form_factor: 'narrow',
|
||||||
|
sizes: '828x1792',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: '/screenshots/p2_small.png',
|
||||||
|
form_factor: 'narrow',
|
||||||
|
sizes: '828x1792',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
icons: [
|
||||||
|
{
|
||||||
|
src: '/icon-50.png',
|
||||||
|
sizes: '50x50',
|
||||||
|
type: 'image/png' as const,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: '/icon-100.png',
|
||||||
|
sizes: '100x100',
|
||||||
|
type: 'image/png',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: '/icon.png',
|
||||||
|
sizes: '440x440',
|
||||||
|
type: 'image/png',
|
||||||
|
purpose: 'any',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
}
|
@@ -23,6 +23,7 @@ interface SettingsType {
|
|||||||
ollamaApiUrl: string;
|
ollamaApiUrl: string;
|
||||||
lmStudioApiUrl: string;
|
lmStudioApiUrl: string;
|
||||||
deepseekApiKey: string;
|
deepseekApiKey: string;
|
||||||
|
aimlApiKey: string;
|
||||||
customOpenaiApiKey: string;
|
customOpenaiApiKey: string;
|
||||||
customOpenaiApiUrl: string;
|
customOpenaiApiUrl: string;
|
||||||
customOpenaiModelName: string;
|
customOpenaiModelName: string;
|
||||||
@@ -147,6 +148,7 @@ const Page = () => {
|
|||||||
const [automaticImageSearch, setAutomaticImageSearch] = useState(false);
|
const [automaticImageSearch, setAutomaticImageSearch] = useState(false);
|
||||||
const [automaticVideoSearch, setAutomaticVideoSearch] = useState(false);
|
const [automaticVideoSearch, setAutomaticVideoSearch] = useState(false);
|
||||||
const [systemInstructions, setSystemInstructions] = useState<string>('');
|
const [systemInstructions, setSystemInstructions] = useState<string>('');
|
||||||
|
const [temperatureUnit, setTemperatureUnit] = useState<'C' | 'F'>('C');
|
||||||
const [savingStates, setSavingStates] = useState<Record<string, boolean>>({});
|
const [savingStates, setSavingStates] = useState<Record<string, boolean>>({});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -209,6 +211,8 @@ const Page = () => {
|
|||||||
|
|
||||||
setSystemInstructions(localStorage.getItem('systemInstructions')!);
|
setSystemInstructions(localStorage.getItem('systemInstructions')!);
|
||||||
|
|
||||||
|
setTemperatureUnit(localStorage.getItem('temperatureUnit')! as 'C' | 'F');
|
||||||
|
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -367,6 +371,8 @@ const Page = () => {
|
|||||||
localStorage.setItem('embeddingModel', value);
|
localStorage.setItem('embeddingModel', value);
|
||||||
} else if (key === 'systemInstructions') {
|
} else if (key === 'systemInstructions') {
|
||||||
localStorage.setItem('systemInstructions', value);
|
localStorage.setItem('systemInstructions', value);
|
||||||
|
} else if (key === 'temperatureUnit') {
|
||||||
|
localStorage.setItem('temperatureUnit', value.toString());
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('Failed to save:', err);
|
console.error('Failed to save:', err);
|
||||||
@@ -415,13 +421,35 @@ const Page = () => {
|
|||||||
) : (
|
) : (
|
||||||
config && (
|
config && (
|
||||||
<div className="flex flex-col space-y-6 pb-28 lg:pb-8">
|
<div className="flex flex-col space-y-6 pb-28 lg:pb-8">
|
||||||
<SettingsSection title="Appearance">
|
<SettingsSection title="Preferences">
|
||||||
<div className="flex flex-col space-y-1">
|
<div className="flex flex-col space-y-1">
|
||||||
<p className="text-black/70 dark:text-white/70 text-sm">
|
<p className="text-black/70 dark:text-white/70 text-sm">
|
||||||
Theme
|
Theme
|
||||||
</p>
|
</p>
|
||||||
<ThemeSwitcher />
|
<ThemeSwitcher />
|
||||||
</div>
|
</div>
|
||||||
|
<div className="flex flex-col space-y-1">
|
||||||
|
<p className="text-black/70 dark:text-white/70 text-sm">
|
||||||
|
Temperature Unit
|
||||||
|
</p>
|
||||||
|
<Select
|
||||||
|
value={temperatureUnit ?? undefined}
|
||||||
|
onChange={(e) => {
|
||||||
|
setTemperatureUnit(e.target.value as 'C' | 'F');
|
||||||
|
saveConfig('temperatureUnit', e.target.value);
|
||||||
|
}}
|
||||||
|
options={[
|
||||||
|
{
|
||||||
|
label: 'Celsius',
|
||||||
|
value: 'C',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Fahrenheit',
|
||||||
|
value: 'F',
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
</SettingsSection>
|
</SettingsSection>
|
||||||
|
|
||||||
<SettingsSection title="Automatic Search">
|
<SettingsSection title="Automatic Search">
|
||||||
@@ -515,7 +543,7 @@ const Page = () => {
|
|||||||
<SettingsSection title="System Instructions">
|
<SettingsSection title="System Instructions">
|
||||||
<div className="flex flex-col space-y-4">
|
<div className="flex flex-col space-y-4">
|
||||||
<Textarea
|
<Textarea
|
||||||
value={systemInstructions}
|
value={systemInstructions ?? undefined}
|
||||||
isSaving={savingStates['systemInstructions']}
|
isSaving={savingStates['systemInstructions']}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
setSystemInstructions(e.target.value);
|
setSystemInstructions(e.target.value);
|
||||||
@@ -862,6 +890,25 @@ const Page = () => {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div className="flex flex-col space-y-1">
|
||||||
|
<p className="text-black/70 dark:text-white/70 text-sm">
|
||||||
|
AI/ML API Key
|
||||||
|
</p>
|
||||||
|
<Input
|
||||||
|
type="text"
|
||||||
|
placeholder="AI/ML API Key"
|
||||||
|
value={config.aimlApiKey}
|
||||||
|
isSaving={savingStates['aimlApiKey']}
|
||||||
|
onChange={(e) => {
|
||||||
|
setConfig((prev) => ({
|
||||||
|
...prev!,
|
||||||
|
aimlApiKey: e.target.value,
|
||||||
|
}));
|
||||||
|
}}
|
||||||
|
onSave={(value) => saveConfig('aimlApiKey', value)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className="flex flex-col space-y-1">
|
<div className="flex flex-col space-y-1">
|
||||||
<p className="text-black/70 dark:text-white/70 text-sm">
|
<p className="text-black/70 dark:text-white/70 text-sm">
|
||||||
LM Studio API URL
|
LM Studio API URL
|
||||||
|
@@ -82,14 +82,29 @@ const checkConfig = async (
|
|||||||
) {
|
) {
|
||||||
if (!chatModel || !chatModelProvider) {
|
if (!chatModel || !chatModelProvider) {
|
||||||
const chatModelProviders = providers.chatModelProviders;
|
const chatModelProviders = providers.chatModelProviders;
|
||||||
|
const chatModelProvidersKeys = Object.keys(chatModelProviders);
|
||||||
|
|
||||||
chatModelProvider =
|
if (!chatModelProviders || chatModelProvidersKeys.length === 0) {
|
||||||
chatModelProvider || Object.keys(chatModelProviders)[0];
|
return toast.error('No chat models available');
|
||||||
|
} else {
|
||||||
|
chatModelProvider =
|
||||||
|
chatModelProvidersKeys.find(
|
||||||
|
(provider) =>
|
||||||
|
Object.keys(chatModelProviders[provider]).length > 0,
|
||||||
|
) || chatModelProvidersKeys[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
chatModelProvider === 'custom_openai' &&
|
||||||
|
Object.keys(chatModelProviders[chatModelProvider]).length === 0
|
||||||
|
) {
|
||||||
|
toast.error(
|
||||||
|
"Looks like you haven't configured any chat model providers. Please configure them from the settings page or the config file.",
|
||||||
|
);
|
||||||
|
return setHasError(true);
|
||||||
|
}
|
||||||
|
|
||||||
chatModel = Object.keys(chatModelProviders[chatModelProvider])[0];
|
chatModel = Object.keys(chatModelProviders[chatModelProvider])[0];
|
||||||
|
|
||||||
if (!chatModelProviders || Object.keys(chatModelProviders).length === 0)
|
|
||||||
return toast.error('No chat models available');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!embeddingModel || !embeddingModelProvider) {
|
if (!embeddingModel || !embeddingModelProvider) {
|
||||||
@@ -117,7 +132,8 @@ const checkConfig = async (
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
Object.keys(chatModelProviders).length > 0 &&
|
Object.keys(chatModelProviders).length > 0 &&
|
||||||
!chatModelProviders[chatModelProvider]
|
(!chatModelProviders[chatModelProvider] ||
|
||||||
|
Object.keys(chatModelProviders[chatModelProvider]).length === 0)
|
||||||
) {
|
) {
|
||||||
const chatModelProvidersKeys = Object.keys(chatModelProviders);
|
const chatModelProvidersKeys = Object.keys(chatModelProviders);
|
||||||
chatModelProvider =
|
chatModelProvider =
|
||||||
@@ -132,6 +148,16 @@ const checkConfig = async (
|
|||||||
chatModelProvider &&
|
chatModelProvider &&
|
||||||
!chatModelProviders[chatModelProvider][chatModel]
|
!chatModelProviders[chatModelProvider][chatModel]
|
||||||
) {
|
) {
|
||||||
|
if (
|
||||||
|
chatModelProvider === 'custom_openai' &&
|
||||||
|
Object.keys(chatModelProviders[chatModelProvider]).length === 0
|
||||||
|
) {
|
||||||
|
toast.error(
|
||||||
|
"Looks like you haven't configured any chat model providers. Please configure them from the settings page or the config file.",
|
||||||
|
);
|
||||||
|
return setHasError(true);
|
||||||
|
}
|
||||||
|
|
||||||
chatModel = Object.keys(
|
chatModel = Object.keys(
|
||||||
chatModelProviders[
|
chatModelProviders[
|
||||||
Object.keys(chatModelProviders[chatModelProvider]).length > 0
|
Object.keys(chatModelProviders[chatModelProvider]).length > 0
|
||||||
@@ -139,6 +165,7 @@ const checkConfig = async (
|
|||||||
: Object.keys(chatModelProviders)[0]
|
: Object.keys(chatModelProviders)[0]
|
||||||
],
|
],
|
||||||
)[0];
|
)[0];
|
||||||
|
|
||||||
localStorage.setItem('chatModel', chatModel);
|
localStorage.setItem('chatModel', chatModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
import { Settings } from 'lucide-react';
|
import { Settings } from 'lucide-react';
|
||||||
import EmptyChatMessageInput from './EmptyChatMessageInput';
|
import EmptyChatMessageInput from './EmptyChatMessageInput';
|
||||||
import { useState } from 'react';
|
|
||||||
import { File } from './ChatWindow';
|
import { File } from './ChatWindow';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
import WeatherWidget from './WeatherWidget';
|
||||||
|
import NewsArticleWidget from './NewsArticleWidget';
|
||||||
|
|
||||||
const EmptyChat = ({
|
const EmptyChat = ({
|
||||||
sendMessage,
|
sendMessage,
|
||||||
@@ -25,8 +26,6 @@ const EmptyChat = ({
|
|||||||
files: File[];
|
files: File[];
|
||||||
setFiles: (files: File[]) => void;
|
setFiles: (files: File[]) => void;
|
||||||
}) => {
|
}) => {
|
||||||
const [isSettingsOpen, setIsSettingsOpen] = useState(false);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<div className="absolute w-full flex flex-row items-center justify-end mr-5 mt-5">
|
<div className="absolute w-full flex flex-row items-center justify-end mr-5 mt-5">
|
||||||
@@ -34,21 +33,31 @@ const EmptyChat = ({
|
|||||||
<Settings className="cursor-pointer lg:hidden" />
|
<Settings className="cursor-pointer lg:hidden" />
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-col items-center justify-center min-h-screen max-w-screen-sm mx-auto p-2 space-y-8">
|
<div className="flex flex-col items-center justify-center min-h-screen max-w-screen-sm mx-auto p-2 space-y-4">
|
||||||
<h2 className="text-black/70 dark:text-white/70 text-3xl font-medium -mt-8">
|
<div className="flex flex-col items-center justify-center w-full space-y-8">
|
||||||
Research begins here.
|
<h2 className="text-black/70 dark:text-white/70 text-3xl font-medium -mt-8">
|
||||||
</h2>
|
Research begins here.
|
||||||
<EmptyChatMessageInput
|
</h2>
|
||||||
sendMessage={sendMessage}
|
<EmptyChatMessageInput
|
||||||
focusMode={focusMode}
|
sendMessage={sendMessage}
|
||||||
setFocusMode={setFocusMode}
|
focusMode={focusMode}
|
||||||
optimizationMode={optimizationMode}
|
setFocusMode={setFocusMode}
|
||||||
setOptimizationMode={setOptimizationMode}
|
optimizationMode={optimizationMode}
|
||||||
fileIds={fileIds}
|
setOptimizationMode={setOptimizationMode}
|
||||||
setFileIds={setFileIds}
|
fileIds={fileIds}
|
||||||
files={files}
|
setFileIds={setFileIds}
|
||||||
setFiles={setFiles}
|
files={files}
|
||||||
/>
|
setFiles={setFiles}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-col w-full gap-4 mt-2 sm:flex-row sm:justify-center">
|
||||||
|
<div className="flex-1 w-full">
|
||||||
|
<WeatherWidget />
|
||||||
|
</div>
|
||||||
|
<div className="flex-1 w-full">
|
||||||
|
<NewsArticleWidget />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
71
src/components/NewsArticleWidget.tsx
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
|
interface Article {
|
||||||
|
title: string;
|
||||||
|
content: string;
|
||||||
|
url: string;
|
||||||
|
thumbnail: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const NewsArticleWidget = () => {
|
||||||
|
const [article, setArticle] = useState<Article | null>(null);
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
const [error, setError] = useState(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
fetch('/api/discover?mode=preview')
|
||||||
|
.then((res) => res.json())
|
||||||
|
.then((data) => {
|
||||||
|
const articles = (data.blogs || []).filter((a: Article) => a.thumbnail);
|
||||||
|
setArticle(articles[Math.floor(Math.random() * articles.length)]);
|
||||||
|
setLoading(false);
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
setError(true);
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="bg-light-secondary dark:bg-dark-secondary rounded-xl border border-light-200 dark:border-dark-200 shadow-sm flex flex-row items-center w-full h-24 min-h-[96px] max-h-[96px] px-3 py-2 gap-3 overflow-hidden">
|
||||||
|
{loading ? (
|
||||||
|
<>
|
||||||
|
<div className="animate-pulse flex flex-row items-center w-full h-full">
|
||||||
|
<div className="rounded-lg w-16 min-w-16 max-w-16 h-16 min-h-16 max-h-16 bg-light-200 dark:bg-dark-200 mr-3" />
|
||||||
|
<div className="flex flex-col justify-center flex-1 h-full w-0 gap-2">
|
||||||
|
<div className="h-4 w-3/4 rounded bg-light-200 dark:bg-dark-200" />
|
||||||
|
<div className="h-3 w-1/2 rounded bg-light-200 dark:bg-dark-200" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
) : error ? (
|
||||||
|
<div className="w-full text-xs text-red-400">Could not load news.</div>
|
||||||
|
) : article ? (
|
||||||
|
<a
|
||||||
|
href={`/?q=Summary: ${article.url}`}
|
||||||
|
className="flex flex-row items-center w-full h-full group"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
className="object-cover rounded-lg w-16 min-w-16 max-w-16 h-16 min-h-16 max-h-16 border border-light-200 dark:border-dark-200 bg-light-200 dark:bg-dark-200 group-hover:opacity-90 transition"
|
||||||
|
src={
|
||||||
|
new URL(article.thumbnail).origin +
|
||||||
|
new URL(article.thumbnail).pathname +
|
||||||
|
`?id=${new URL(article.thumbnail).searchParams.get('id')}`
|
||||||
|
}
|
||||||
|
alt={article.title}
|
||||||
|
/>
|
||||||
|
<div className="flex flex-col justify-center flex-1 h-full pl-3 w-0">
|
||||||
|
<div className="font-bold text-xs text-black dark:text-white leading-tight truncate overflow-hidden whitespace-nowrap">
|
||||||
|
{article.title}
|
||||||
|
</div>
|
||||||
|
<p className="text-black/70 dark:text-white/70 text-xs leading-snug truncate overflow-hidden whitespace-nowrap">
|
||||||
|
{article.content}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default NewsArticleWidget;
|
159
src/components/WeatherWidget.tsx
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
import { Cloud, Sun, CloudRain, CloudSnow, Wind } from 'lucide-react';
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
|
const WeatherWidget = () => {
|
||||||
|
const [data, setData] = useState({
|
||||||
|
temperature: 0,
|
||||||
|
condition: '',
|
||||||
|
location: '',
|
||||||
|
humidity: 0,
|
||||||
|
windSpeed: 0,
|
||||||
|
icon: '',
|
||||||
|
temperatureUnit: 'C',
|
||||||
|
});
|
||||||
|
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const getApproxLocation = async () => {
|
||||||
|
const res = await fetch('https://ipwhois.app/json/');
|
||||||
|
const data = await res.json();
|
||||||
|
|
||||||
|
return {
|
||||||
|
latitude: data.latitude,
|
||||||
|
longitude: data.longitude,
|
||||||
|
city: data.city,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const getLocation = async (
|
||||||
|
callback: (location: {
|
||||||
|
latitude: number;
|
||||||
|
longitude: number;
|
||||||
|
city: string;
|
||||||
|
}) => void,
|
||||||
|
) => {
|
||||||
|
if (navigator.geolocation) {
|
||||||
|
const result = await navigator.permissions.query({
|
||||||
|
name: 'geolocation',
|
||||||
|
});
|
||||||
|
|
||||||
|
if (result.state === 'granted') {
|
||||||
|
navigator.geolocation.getCurrentPosition(async (position) => {
|
||||||
|
const res = await fetch(
|
||||||
|
`https://api-bdc.io/data/reverse-geocode-client?latitude=${position.coords.latitude}&longitude=${position.coords.longitude}&localityLanguage=en`,
|
||||||
|
{
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
const data = await res.json();
|
||||||
|
|
||||||
|
callback({
|
||||||
|
latitude: position.coords.latitude,
|
||||||
|
longitude: position.coords.longitude,
|
||||||
|
city: data.locality,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else if (result.state === 'prompt') {
|
||||||
|
callback(await getApproxLocation());
|
||||||
|
navigator.geolocation.getCurrentPosition((position) => {});
|
||||||
|
} else if (result.state === 'denied') {
|
||||||
|
callback(await getApproxLocation());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
callback(await getApproxLocation());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
getLocation(async (location) => {
|
||||||
|
const res = await fetch(`/api/weather`, {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify({
|
||||||
|
lat: location.latitude,
|
||||||
|
lng: location.longitude,
|
||||||
|
temperatureUnit: localStorage.getItem('temperatureUnit') ?? 'C',
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
const data = await res.json();
|
||||||
|
|
||||||
|
if (res.status !== 200) {
|
||||||
|
console.error('Error fetching weather data');
|
||||||
|
setLoading(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setData({
|
||||||
|
temperature: data.temperature,
|
||||||
|
condition: data.condition,
|
||||||
|
location: location.city,
|
||||||
|
humidity: data.humidity,
|
||||||
|
windSpeed: data.windSpeed,
|
||||||
|
icon: data.icon,
|
||||||
|
temperatureUnit: data.temperatureUnit,
|
||||||
|
});
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="bg-light-secondary dark:bg-dark-secondary rounded-xl border border-light-200 dark:border-dark-200 shadow-sm flex flex-row items-center w-full h-24 min-h-[96px] max-h-[96px] px-3 py-2 gap-3">
|
||||||
|
{loading ? (
|
||||||
|
<>
|
||||||
|
<div className="flex flex-col items-center justify-center w-16 min-w-16 max-w-16 h-full animate-pulse">
|
||||||
|
<div className="h-10 w-10 rounded-full bg-light-200 dark:bg-dark-200 mb-2" />
|
||||||
|
<div className="h-4 w-10 rounded bg-light-200 dark:bg-dark-200" />
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-col justify-between flex-1 h-full py-1 animate-pulse">
|
||||||
|
<div className="flex flex-row items-center justify-between">
|
||||||
|
<div className="h-3 w-20 rounded bg-light-200 dark:bg-dark-200" />
|
||||||
|
<div className="h-3 w-12 rounded bg-light-200 dark:bg-dark-200" />
|
||||||
|
</div>
|
||||||
|
<div className="h-3 w-16 rounded bg-light-200 dark:bg-dark-200 mt-1" />
|
||||||
|
<div className="flex flex-row justify-between w-full mt-auto pt-1 border-t border-light-200 dark:border-dark-200">
|
||||||
|
<div className="h-3 w-16 rounded bg-light-200 dark:bg-dark-200" />
|
||||||
|
<div className="h-3 w-8 rounded bg-light-200 dark:bg-dark-200" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
|
<div className="flex flex-col items-center justify-center w-16 min-w-16 max-w-16 h-full">
|
||||||
|
<img
|
||||||
|
src={`/weather-ico/${data.icon}.svg`}
|
||||||
|
alt={data.condition}
|
||||||
|
className="h-10 w-auto"
|
||||||
|
/>
|
||||||
|
<span className="text-base font-semibold text-black dark:text-white">
|
||||||
|
{data.temperature}°{data.temperatureUnit}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-col justify-between flex-1 h-full py-1">
|
||||||
|
<div className="flex flex-row items-center justify-between">
|
||||||
|
<span className="text-xs font-medium text-black dark:text-white">
|
||||||
|
{data.location}
|
||||||
|
</span>
|
||||||
|
<span className="flex items-center text-xs text-black/60 dark:text-white/60">
|
||||||
|
<Wind className="w-3 h-3 mr-1" />
|
||||||
|
{data.windSpeed} km/h
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<span className="text-xs text-black/60 dark:text-white/60 mt-1">
|
||||||
|
{data.condition}
|
||||||
|
</span>
|
||||||
|
<div className="flex flex-row justify-between w-full mt-auto pt-1 border-t border-light-200 dark:border-dark-200 text-xs text-black/60 dark:text-white/60">
|
||||||
|
<span>Humidity: {data.humidity}%</span>
|
||||||
|
<span>Now</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default WeatherWidget;
|
@@ -35,6 +35,9 @@ interface Config {
|
|||||||
DEEPSEEK: {
|
DEEPSEEK: {
|
||||||
API_KEY: string;
|
API_KEY: string;
|
||||||
};
|
};
|
||||||
|
AIMLAPI: {
|
||||||
|
API_KEY: string;
|
||||||
|
};
|
||||||
LM_STUDIO: {
|
LM_STUDIO: {
|
||||||
API_URL: string;
|
API_URL: string;
|
||||||
};
|
};
|
||||||
@@ -85,6 +88,8 @@ export const getOllamaApiEndpoint = () => loadConfig().MODELS.OLLAMA.API_URL;
|
|||||||
|
|
||||||
export const getDeepseekApiKey = () => loadConfig().MODELS.DEEPSEEK.API_KEY;
|
export const getDeepseekApiKey = () => loadConfig().MODELS.DEEPSEEK.API_KEY;
|
||||||
|
|
||||||
|
export const getAimlApiKey = () => loadConfig().MODELS.AIMLAPI.API_KEY;
|
||||||
|
|
||||||
export const getCustomOpenaiApiKey = () =>
|
export const getCustomOpenaiApiKey = () =>
|
||||||
loadConfig().MODELS.CUSTOM_OPENAI.API_KEY;
|
loadConfig().MODELS.CUSTOM_OPENAI.API_KEY;
|
||||||
|
|
||||||
|
@@ -1,63 +1,41 @@
|
|||||||
export const webSearchRetrieverPrompt = `
|
export const webSearchRetrieverPrompt = `
|
||||||
You are an AI question rephraser. You will be given a conversation and a follow-up question, you will have to rephrase the follow up question so it is a standalone question and can be used by another LLM to search the web for information to answer it.
|
You are an AI question rephraser. You will be given a conversation and a follow-up question; rephrase it into a standalone question that another LLM can use to search the web.
|
||||||
If it is a simple writing task or a greeting (unless the greeting contains a question after it) like Hi, Hello, How are you, etc. than a question then you need to return \`not_needed\` as the response (This is because the LLM won't need to search the web for finding information on this topic).
|
|
||||||
If the user asks some question from some URL or wants you to summarize a PDF or a webpage (via URL) you need to return the links inside the \`links\` XML block and the question inside the \`question\` XML block. If the user wants to you to summarize the webpage or the PDF you need to return \`summarize\` inside the \`question\` XML block in place of a question and the link to summarize in the \`links\` XML block.
|
|
||||||
You must always return the rephrased question inside the \`question\` XML block, if there are no links in the follow-up question then don't insert a \`links\` XML block in your response.
|
|
||||||
|
|
||||||
There are several examples attached for your reference inside the below \`examples\` XML block
|
Return ONLY a JSON object that matches this schema:
|
||||||
|
query: string // the standalone question (or "summarize")
|
||||||
|
links: string[] // URLs extracted from the user query (empty if none)
|
||||||
|
searchRequired: boolean // true if web search is needed, false for greetings/simple writing tasks
|
||||||
|
searchMode: "" | "normal" | "news" // "" when searchRequired is false; "news" if the user asks for news/articles, otherwise "normal"
|
||||||
|
|
||||||
<examples>
|
Rules
|
||||||
1. Follow up question: What is the capital of France
|
- Greetings / simple writing tasks → query:"", links:[], searchRequired:false, searchMode:""
|
||||||
Rephrased question:\`
|
- Summarizing a URL → query:"summarize", links:[url...], searchRequired:true, searchMode:"normal"
|
||||||
<question>
|
- Asking for news/articles → searchMode:"news"
|
||||||
Capital of france
|
|
||||||
</question>
|
Examples
|
||||||
\`
|
1. Follow-up: What is the capital of France?
|
||||||
|
"query":"capital of France","links":[],"searchRequired":true,"searchMode":"normal"
|
||||||
|
|
||||||
2. Hi, how are you?
|
2. Hi, how are you?
|
||||||
Rephrased question\`
|
"query":"","links":[],"searchRequired":false,"searchMode":""
|
||||||
<question>
|
|
||||||
not_needed
|
|
||||||
</question>
|
|
||||||
\`
|
|
||||||
|
|
||||||
3. Follow up question: What is Docker?
|
3. Follow-up: What is Docker?
|
||||||
Rephrased question: \`
|
"query":"what is Docker","links":[],"searchRequired":true,"searchMode":"normal"
|
||||||
<question>
|
|
||||||
What is Docker
|
|
||||||
</question>
|
|
||||||
\`
|
|
||||||
|
|
||||||
4. Follow up question: Can you tell me what is X from https://example.com
|
4. Follow-up: Can you tell me what is X from https://example.com?
|
||||||
Rephrased question: \`
|
"query":"what is X","links":["https://example.com"],"searchRequired":true,"searchMode":"normal"
|
||||||
<question>
|
|
||||||
Can you tell me what is X?
|
|
||||||
</question>
|
|
||||||
|
|
||||||
<links>
|
5. Follow-up: Summarize the content from https://example.com
|
||||||
https://example.com
|
"query":"summarize","links":["https://example.com"],"searchRequired":true,"searchMode":"normal"
|
||||||
</links>
|
|
||||||
\`
|
|
||||||
|
|
||||||
5. Follow up question: Summarize the content from https://example.com
|
6. Follow-up: Latest news about AI
|
||||||
Rephrased question: \`
|
"query":"latest news about AI","links":[],"searchRequired":true,"searchMode":"news"
|
||||||
<question>
|
|
||||||
summarize
|
|
||||||
</question>
|
|
||||||
|
|
||||||
<links>
|
|
||||||
https://example.com
|
|
||||||
</links>
|
|
||||||
\`
|
|
||||||
</examples>
|
|
||||||
|
|
||||||
Anything below is the part of the actual conversation and you need to use conversation and the follow-up question to rephrase the follow-up question as a standalone question based on the guidelines shared above.
|
|
||||||
|
|
||||||
<conversation>
|
<conversation>
|
||||||
{chat_history}
|
{chat_history}
|
||||||
</conversation>
|
</conversation>
|
||||||
|
|
||||||
Follow up question: {query}
|
Follow-up question: {query}
|
||||||
Rephrased question:
|
Rephrased question:
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
94
src/lib/providers/aimlapi.ts
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
import { ChatOpenAI, OpenAIEmbeddings } from '@langchain/openai';
|
||||||
|
import { getAimlApiKey } from '../config';
|
||||||
|
import { ChatModel, EmbeddingModel } from '.';
|
||||||
|
import { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
||||||
|
import { Embeddings } from '@langchain/core/embeddings';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
|
export const PROVIDER_INFO = {
|
||||||
|
key: 'aimlapi',
|
||||||
|
displayName: 'AI/ML API',
|
||||||
|
};
|
||||||
|
|
||||||
|
interface AimlApiModel {
|
||||||
|
id: string;
|
||||||
|
name?: string;
|
||||||
|
type?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const API_URL = 'https://api.aimlapi.com';
|
||||||
|
|
||||||
|
export const loadAimlApiChatModels = async () => {
|
||||||
|
const apiKey = getAimlApiKey();
|
||||||
|
|
||||||
|
if (!apiKey) return {};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await axios.get(`${API_URL}/models`, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Authorization: `Bearer ${apiKey}`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const chatModels: Record<string, ChatModel> = {};
|
||||||
|
|
||||||
|
response.data.data.forEach((model: AimlApiModel) => {
|
||||||
|
if (model.type === 'chat-completion') {
|
||||||
|
chatModels[model.id] = {
|
||||||
|
displayName: model.name || model.id,
|
||||||
|
model: new ChatOpenAI({
|
||||||
|
apiKey: apiKey,
|
||||||
|
modelName: model.id,
|
||||||
|
temperature: 0.7,
|
||||||
|
configuration: {
|
||||||
|
baseURL: API_URL,
|
||||||
|
},
|
||||||
|
}) as unknown as BaseChatModel,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return chatModels;
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`Error loading AI/ML API models: ${err}`);
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const loadAimlApiEmbeddingModels = async () => {
|
||||||
|
const apiKey = getAimlApiKey();
|
||||||
|
|
||||||
|
if (!apiKey) return {};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await axios.get(`${API_URL}/models`, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Authorization: `Bearer ${apiKey}`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const embeddingModels: Record<string, EmbeddingModel> = {};
|
||||||
|
|
||||||
|
response.data.data.forEach((model: AimlApiModel) => {
|
||||||
|
if (model.type === 'embedding') {
|
||||||
|
embeddingModels[model.id] = {
|
||||||
|
displayName: model.name || model.id,
|
||||||
|
model: new OpenAIEmbeddings({
|
||||||
|
apiKey: apiKey,
|
||||||
|
modelName: model.id,
|
||||||
|
configuration: {
|
||||||
|
baseURL: API_URL,
|
||||||
|
},
|
||||||
|
}) as unknown as Embeddings,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return embeddingModels;
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`Error loading AI/ML API embeddings models: ${err}`);
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
};
|
@@ -31,7 +31,7 @@ export const loadDeepseekChatModels = async () => {
|
|||||||
chatModels[model.key] = {
|
chatModels[model.key] = {
|
||||||
displayName: model.displayName,
|
displayName: model.displayName,
|
||||||
model: new ChatOpenAI({
|
model: new ChatOpenAI({
|
||||||
openAIApiKey: deepseekApiKey,
|
apiKey: deepseekApiKey,
|
||||||
modelName: model.key,
|
modelName: model.key,
|
||||||
temperature: 0.7,
|
temperature: 0.7,
|
||||||
configuration: {
|
configuration: {
|
||||||
|
@@ -13,9 +13,17 @@ import { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
|||||||
import { Embeddings } from '@langchain/core/embeddings';
|
import { Embeddings } from '@langchain/core/embeddings';
|
||||||
|
|
||||||
const geminiChatModels: Record<string, string>[] = [
|
const geminiChatModels: Record<string, string>[] = [
|
||||||
|
{
|
||||||
|
displayName: 'Gemini 2.5 Flash Preview 05-20',
|
||||||
|
key: 'gemini-2.5-flash-preview-05-20',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
displayName: 'Gemini 2.5 Pro Preview',
|
||||||
|
key: 'gemini-2.5-pro-preview-05-06',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
displayName: 'Gemini 2.5 Pro Experimental',
|
displayName: 'Gemini 2.5 Pro Experimental',
|
||||||
key: 'gemini-2.5-pro-exp-03-25',
|
key: 'gemini-2.5-pro-preview-05-06',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
displayName: 'Gemini 2.0 Flash',
|
displayName: 'Gemini 2.0 Flash',
|
||||||
|
@@ -29,12 +29,15 @@ export const loadGroqChatModels = async () => {
|
|||||||
chatModels[model.id] = {
|
chatModels[model.id] = {
|
||||||
displayName: model.id,
|
displayName: model.id,
|
||||||
model: new ChatOpenAI({
|
model: new ChatOpenAI({
|
||||||
openAIApiKey: groqApiKey,
|
apiKey: groqApiKey,
|
||||||
modelName: model.id,
|
modelName: model.id,
|
||||||
temperature: 0.7,
|
temperature: 0.7,
|
||||||
configuration: {
|
configuration: {
|
||||||
baseURL: 'https://api.groq.com/openai/v1',
|
baseURL: 'https://api.groq.com/openai/v1',
|
||||||
},
|
},
|
||||||
|
metadata: {
|
||||||
|
'model-type': 'groq',
|
||||||
|
},
|
||||||
}) as unknown as BaseChatModel,
|
}) as unknown as BaseChatModel,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@@ -35,6 +35,11 @@ import {
|
|||||||
loadDeepseekChatModels,
|
loadDeepseekChatModels,
|
||||||
PROVIDER_INFO as DeepseekInfo,
|
PROVIDER_INFO as DeepseekInfo,
|
||||||
} from './deepseek';
|
} from './deepseek';
|
||||||
|
import {
|
||||||
|
loadAimlApiChatModels,
|
||||||
|
loadAimlApiEmbeddingModels,
|
||||||
|
PROVIDER_INFO as AimlApiInfo,
|
||||||
|
} from './aimlapi';
|
||||||
import {
|
import {
|
||||||
loadLMStudioChatModels,
|
loadLMStudioChatModels,
|
||||||
loadLMStudioEmbeddingsModels,
|
loadLMStudioEmbeddingsModels,
|
||||||
@@ -49,6 +54,7 @@ export const PROVIDER_METADATA = {
|
|||||||
gemini: GeminiInfo,
|
gemini: GeminiInfo,
|
||||||
transformers: TransformersInfo,
|
transformers: TransformersInfo,
|
||||||
deepseek: DeepseekInfo,
|
deepseek: DeepseekInfo,
|
||||||
|
aimlapi: AimlApiInfo,
|
||||||
lmstudio: LMStudioInfo,
|
lmstudio: LMStudioInfo,
|
||||||
custom_openai: {
|
custom_openai: {
|
||||||
key: 'custom_openai',
|
key: 'custom_openai',
|
||||||
@@ -76,6 +82,7 @@ export const chatModelProviders: Record<
|
|||||||
anthropic: loadAnthropicChatModels,
|
anthropic: loadAnthropicChatModels,
|
||||||
gemini: loadGeminiChatModels,
|
gemini: loadGeminiChatModels,
|
||||||
deepseek: loadDeepseekChatModels,
|
deepseek: loadDeepseekChatModels,
|
||||||
|
aimlapi: loadAimlApiChatModels,
|
||||||
lmstudio: loadLMStudioChatModels,
|
lmstudio: loadLMStudioChatModels,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -87,6 +94,7 @@ export const embeddingModelProviders: Record<
|
|||||||
ollama: loadOllamaEmbeddingModels,
|
ollama: loadOllamaEmbeddingModels,
|
||||||
gemini: loadGeminiEmbeddingModels,
|
gemini: loadGeminiEmbeddingModels,
|
||||||
transformers: loadTransformersEmbeddingsModels,
|
transformers: loadTransformersEmbeddingsModels,
|
||||||
|
aimlapi: loadAimlApiEmbeddingModels,
|
||||||
lmstudio: loadLMStudioEmbeddingsModels,
|
lmstudio: loadLMStudioEmbeddingsModels,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -110,7 +118,7 @@ export const getAvailableChatModelProviders = async () => {
|
|||||||
[customOpenAiModelName]: {
|
[customOpenAiModelName]: {
|
||||||
displayName: customOpenAiModelName,
|
displayName: customOpenAiModelName,
|
||||||
model: new ChatOpenAI({
|
model: new ChatOpenAI({
|
||||||
openAIApiKey: customOpenAiApiKey,
|
apiKey: customOpenAiApiKey,
|
||||||
modelName: customOpenAiModelName,
|
modelName: customOpenAiModelName,
|
||||||
temperature: 0.7,
|
temperature: 0.7,
|
||||||
configuration: {
|
configuration: {
|
||||||
|
@@ -47,7 +47,7 @@ export const loadLMStudioChatModels = async () => {
|
|||||||
chatModels[model.id] = {
|
chatModels[model.id] = {
|
||||||
displayName: model.name || model.id,
|
displayName: model.name || model.id,
|
||||||
model: new ChatOpenAI({
|
model: new ChatOpenAI({
|
||||||
openAIApiKey: 'lm-studio',
|
apiKey: 'lm-studio',
|
||||||
configuration: {
|
configuration: {
|
||||||
baseURL: ensureV1Endpoint(endpoint),
|
baseURL: ensureV1Endpoint(endpoint),
|
||||||
},
|
},
|
||||||
@@ -83,7 +83,7 @@ export const loadLMStudioEmbeddingsModels = async () => {
|
|||||||
embeddingsModels[model.id] = {
|
embeddingsModels[model.id] = {
|
||||||
displayName: model.name || model.id,
|
displayName: model.name || model.id,
|
||||||
model: new OpenAIEmbeddings({
|
model: new OpenAIEmbeddings({
|
||||||
openAIApiKey: 'lm-studio',
|
apiKey: 'lm-studio',
|
||||||
configuration: {
|
configuration: {
|
||||||
baseURL: ensureV1Endpoint(endpoint),
|
baseURL: ensureV1Endpoint(endpoint),
|
||||||
},
|
},
|
||||||
|
@@ -6,8 +6,8 @@ export const PROVIDER_INFO = {
|
|||||||
key: 'ollama',
|
key: 'ollama',
|
||||||
displayName: 'Ollama',
|
displayName: 'Ollama',
|
||||||
};
|
};
|
||||||
import { ChatOllama } from '@langchain/community/chat_models/ollama';
|
import { ChatOllama } from '@langchain/ollama';
|
||||||
import { OllamaEmbeddings } from '@langchain/community/embeddings/ollama';
|
import { OllamaEmbeddings } from '@langchain/ollama';
|
||||||
|
|
||||||
export const loadOllamaChatModels = async () => {
|
export const loadOllamaChatModels = async () => {
|
||||||
const ollamaApiEndpoint = getOllamaApiEndpoint();
|
const ollamaApiEndpoint = getOllamaApiEndpoint();
|
||||||
|
@@ -67,7 +67,7 @@ export const loadOpenAIChatModels = async () => {
|
|||||||
chatModels[model.key] = {
|
chatModels[model.key] = {
|
||||||
displayName: model.displayName,
|
displayName: model.displayName,
|
||||||
model: new ChatOpenAI({
|
model: new ChatOpenAI({
|
||||||
openAIApiKey: openaiApiKey,
|
apiKey: openaiApiKey,
|
||||||
modelName: model.key,
|
modelName: model.key,
|
||||||
temperature: 0.7,
|
temperature: 0.7,
|
||||||
}) as unknown as BaseChatModel,
|
}) as unknown as BaseChatModel,
|
||||||
@@ -93,7 +93,7 @@ export const loadOpenAIEmbeddingModels = async () => {
|
|||||||
embeddingModels[model.key] = {
|
embeddingModels[model.key] = {
|
||||||
displayName: model.displayName,
|
displayName: model.displayName,
|
||||||
model: new OpenAIEmbeddings({
|
model: new OpenAIEmbeddings({
|
||||||
openAIApiKey: openaiApiKey,
|
apiKey: openaiApiKey,
|
||||||
modelName: model.key,
|
modelName: model.key,
|
||||||
}) as unknown as Embeddings,
|
}) as unknown as Embeddings,
|
||||||
};
|
};
|
||||||
|
@@ -24,6 +24,7 @@ import computeSimilarity from '../utils/computeSimilarity';
|
|||||||
import formatChatHistoryAsString from '../utils/formatHistory';
|
import formatChatHistoryAsString from '../utils/formatHistory';
|
||||||
import eventEmitter from 'events';
|
import eventEmitter from 'events';
|
||||||
import { StreamEvent } from '@langchain/core/tracers/log_stream';
|
import { StreamEvent } from '@langchain/core/tracers/log_stream';
|
||||||
|
import { z } from 'zod';
|
||||||
|
|
||||||
export interface MetaSearchAgentType {
|
export interface MetaSearchAgentType {
|
||||||
searchAndAnswer: (
|
searchAndAnswer: (
|
||||||
@@ -52,6 +53,17 @@ type BasicChainInput = {
|
|||||||
query: string;
|
query: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const retrieverLLMOutputSchema = z.object({
|
||||||
|
query: z.string().describe('The query to search the web for.'),
|
||||||
|
links: z
|
||||||
|
.array(z.string())
|
||||||
|
.describe('The links to search/summarize if present'),
|
||||||
|
searchRequired: z
|
||||||
|
.boolean()
|
||||||
|
.describe('Wether there is a need to search the web'),
|
||||||
|
searchMode: z.enum(['', 'normal', 'news']).describe('The search mode.'),
|
||||||
|
});
|
||||||
|
|
||||||
class MetaSearchAgent implements MetaSearchAgentType {
|
class MetaSearchAgent implements MetaSearchAgentType {
|
||||||
private config: Config;
|
private config: Config;
|
||||||
private strParser = new StringOutputParser();
|
private strParser = new StringOutputParser();
|
||||||
@@ -62,73 +74,71 @@ class MetaSearchAgent implements MetaSearchAgentType {
|
|||||||
|
|
||||||
private async createSearchRetrieverChain(llm: BaseChatModel) {
|
private async createSearchRetrieverChain(llm: BaseChatModel) {
|
||||||
(llm as unknown as ChatOpenAI).temperature = 0;
|
(llm as unknown as ChatOpenAI).temperature = 0;
|
||||||
|
|
||||||
return RunnableSequence.from([
|
return RunnableSequence.from([
|
||||||
PromptTemplate.fromTemplate(this.config.queryGeneratorPrompt),
|
PromptTemplate.fromTemplate(this.config.queryGeneratorPrompt),
|
||||||
llm,
|
Object.assign(
|
||||||
this.strParser,
|
Object.create(Object.getPrototypeOf(llm)),
|
||||||
RunnableLambda.from(async (input: string) => {
|
llm,
|
||||||
const linksOutputParser = new LineListOutputParser({
|
).withStructuredOutput(retrieverLLMOutputSchema, {
|
||||||
key: 'links',
|
...(llm.metadata?.['model-type'] === 'groq'
|
||||||
});
|
? {
|
||||||
|
method: 'json-object',
|
||||||
|
}
|
||||||
|
: {}),
|
||||||
|
}),
|
||||||
|
RunnableLambda.from(
|
||||||
|
async (input: z.infer<typeof retrieverLLMOutputSchema>) => {
|
||||||
|
let question = input.query;
|
||||||
|
const links = input.links;
|
||||||
|
|
||||||
const questionOutputParser = new LineOutputParser({
|
if (!input.searchRequired) {
|
||||||
key: 'question',
|
return { query: '', docs: [] };
|
||||||
});
|
|
||||||
|
|
||||||
const links = await linksOutputParser.parse(input);
|
|
||||||
let question = this.config.summarizer
|
|
||||||
? await questionOutputParser.parse(input)
|
|
||||||
: input;
|
|
||||||
|
|
||||||
if (question === 'not_needed') {
|
|
||||||
return { query: '', docs: [] };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (links.length > 0) {
|
|
||||||
if (question.length === 0) {
|
|
||||||
question = 'summarize';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let docs: Document[] = [];
|
if (links.length > 0) {
|
||||||
|
if (question.length === 0) {
|
||||||
const linkDocs = await getDocumentsFromLinks({ links });
|
question = 'summarize';
|
||||||
|
|
||||||
const docGroups: Document[] = [];
|
|
||||||
|
|
||||||
linkDocs.map((doc) => {
|
|
||||||
const URLDocExists = docGroups.find(
|
|
||||||
(d) =>
|
|
||||||
d.metadata.url === doc.metadata.url &&
|
|
||||||
d.metadata.totalDocs < 10,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!URLDocExists) {
|
|
||||||
docGroups.push({
|
|
||||||
...doc,
|
|
||||||
metadata: {
|
|
||||||
...doc.metadata,
|
|
||||||
totalDocs: 1,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const docIndex = docGroups.findIndex(
|
let docs: Document[] = [];
|
||||||
(d) =>
|
|
||||||
d.metadata.url === doc.metadata.url &&
|
|
||||||
d.metadata.totalDocs < 10,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (docIndex !== -1) {
|
const linkDocs = await getDocumentsFromLinks({ links });
|
||||||
docGroups[docIndex].pageContent =
|
|
||||||
docGroups[docIndex].pageContent + `\n\n` + doc.pageContent;
|
|
||||||
docGroups[docIndex].metadata.totalDocs += 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
await Promise.all(
|
const docGroups: Document[] = [];
|
||||||
docGroups.map(async (doc) => {
|
|
||||||
const res = await llm.invoke(`
|
linkDocs.map((doc) => {
|
||||||
|
const URLDocExists = docGroups.find(
|
||||||
|
(d) =>
|
||||||
|
d.metadata.url === doc.metadata.url &&
|
||||||
|
d.metadata.totalDocs < 10,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!URLDocExists) {
|
||||||
|
docGroups.push({
|
||||||
|
...doc,
|
||||||
|
metadata: {
|
||||||
|
...doc.metadata,
|
||||||
|
totalDocs: 1,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const docIndex = docGroups.findIndex(
|
||||||
|
(d) =>
|
||||||
|
d.metadata.url === doc.metadata.url &&
|
||||||
|
d.metadata.totalDocs < 10,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (docIndex !== -1) {
|
||||||
|
docGroups[docIndex].pageContent =
|
||||||
|
docGroups[docIndex].pageContent + `\n\n` + doc.pageContent;
|
||||||
|
docGroups[docIndex].metadata.totalDocs += 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await Promise.all(
|
||||||
|
docGroups.map(async (doc) => {
|
||||||
|
const res = await llm.invoke(`
|
||||||
You are a web search summarizer, tasked with summarizing a piece of text retrieved from a web search. Your job is to summarize the
|
You are a web search summarizer, tasked with summarizing a piece of text retrieved from a web search. Your job is to summarize the
|
||||||
text into a detailed, 2-4 paragraph explanation that captures the main ideas and provides a comprehensive answer to the query.
|
text into a detailed, 2-4 paragraph explanation that captures the main ideas and provides a comprehensive answer to the query.
|
||||||
If the query is \"summarize\", you should provide a detailed summary of the text. If the query is a specific question, you should answer it in the summary.
|
If the query is \"summarize\", you should provide a detailed summary of the text. If the query is a specific question, you should answer it in the summary.
|
||||||
@@ -189,46 +199,50 @@ class MetaSearchAgent implements MetaSearchAgentType {
|
|||||||
Make sure to answer the query in the summary.
|
Make sure to answer the query in the summary.
|
||||||
`);
|
`);
|
||||||
|
|
||||||
const document = new Document({
|
const document = new Document({
|
||||||
pageContent: res.content as string,
|
pageContent: res.content as string,
|
||||||
metadata: {
|
metadata: {
|
||||||
title: doc.metadata.title,
|
title: doc.metadata.title,
|
||||||
url: doc.metadata.url,
|
url: doc.metadata.url,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
docs.push(document);
|
docs.push(document);
|
||||||
}),
|
|
||||||
);
|
|
||||||
|
|
||||||
return { query: question, docs: docs };
|
|
||||||
} else {
|
|
||||||
question = question.replace(/<think>.*?<\/think>/g, '');
|
|
||||||
|
|
||||||
const res = await searchSearxng(question, {
|
|
||||||
language: 'en',
|
|
||||||
engines: this.config.activeEngines,
|
|
||||||
});
|
|
||||||
|
|
||||||
const documents = res.results.map(
|
|
||||||
(result) =>
|
|
||||||
new Document({
|
|
||||||
pageContent:
|
|
||||||
result.content ||
|
|
||||||
(this.config.activeEngines.includes('youtube')
|
|
||||||
? result.title
|
|
||||||
: '') /* Todo: Implement transcript grabbing using Youtubei (source: https://www.npmjs.com/package/youtubei) */,
|
|
||||||
metadata: {
|
|
||||||
title: result.title,
|
|
||||||
url: result.url,
|
|
||||||
...(result.img_src && { img_src: result.img_src }),
|
|
||||||
},
|
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
return { query: question, docs: documents };
|
return { query: question, docs: docs };
|
||||||
}
|
} else {
|
||||||
}),
|
question = question.replace(/<think>.*?<\/think>/g, '');
|
||||||
|
|
||||||
|
const res = await searchSearxng(question, {
|
||||||
|
language: 'en',
|
||||||
|
engines:
|
||||||
|
input.searchMode === 'normal'
|
||||||
|
? this.config.activeEngines
|
||||||
|
: ['bing news'],
|
||||||
|
});
|
||||||
|
|
||||||
|
const documents = res.results.map(
|
||||||
|
(result) =>
|
||||||
|
new Document({
|
||||||
|
pageContent:
|
||||||
|
result.content ||
|
||||||
|
(this.config.activeEngines.includes('youtube')
|
||||||
|
? result.title
|
||||||
|
: '') /* Todo: Implement transcript grabbing using Youtubei (source: https://www.npmjs.com/package/youtubei) */,
|
||||||
|
metadata: {
|
||||||
|
title: result.title,
|
||||||
|
url: result.url,
|
||||||
|
...(result.img_src && { img_src: result.img_src }),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
return { query: question, docs: documents };
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|